diff --git a/Drama Script.pdf b/Drama Script.pdf
new file mode 100644
index 0000000..2cd0f03
Binary files /dev/null and b/Drama Script.pdf differ
diff --git a/Modern-white-inspired-home-office-design.jpg b/Modern-white-inspired-home-office-design.jpg
new file mode 100644
index 0000000..248dea3
Binary files /dev/null and b/Modern-white-inspired-home-office-design.jpg differ
diff --git a/README.md b/README.md
index 2d57090..5d4951e 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-sfxboard
-========
-sfxboard
+# The entire set used in our EL drama
+
+Undocumented yet. Sorry!
\ No newline at end of file
diff --git a/SFX.get.md b/SFX.get.md
new file mode 100644
index 0000000..9e76b29
--- /dev/null
+++ b/SFX.get.md
@@ -0,0 +1,17 @@
+• car impact
+• car driving
+• handcuffs
+• car driving off (car driving off)
+screams
+• car doors open and closing
+• ambulance
+door knocks
+phone ring
+clock ticking
+seaside
+(laptop screen + vlc)
+bomb beeping
+• explosion (Nice guy: http://www.freesound.org/people/DJ%20Chronos/packs/7725/)
+• gun fire (4 types, random)
+
+background bass
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E.aup b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E.aup
new file mode 100644
index 0000000..d0ae765
--- /dev/null
+++ b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E.aup
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e000005d.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e000005d.au
new file mode 100644
index 0000000..a6f396e
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e000005d.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000126.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000126.au
new file mode 100644
index 0000000..a48a511
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000126.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000152.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000152.au
new file mode 100644
index 0000000..94be757
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000152.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000183.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000183.au
new file mode 100644
index 0000000..d6c7954
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000183.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000190.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000190.au
new file mode 100644
index 0000000..c67db22
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000190.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00001c7.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00001c7.au
new file mode 100644
index 0000000..4757f28
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00001c7.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00001ed.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00001ed.au
new file mode 100644
index 0000000..100f0af
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00001ed.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00002d9.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00002d9.au
new file mode 100644
index 0000000..81d6fef
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00002d9.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000315.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000315.au
new file mode 100644
index 0000000..5cc1cfe
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000315.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000366.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000366.au
new file mode 100644
index 0000000..9d3a746
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000366.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00003b9.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00003b9.au
new file mode 100644
index 0000000..51f548b
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00003b9.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00004f9.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00004f9.au
new file mode 100644
index 0000000..aedac78
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00004f9.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000512.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000512.au
new file mode 100644
index 0000000..0e5bb97
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000512.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00005af.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00005af.au
new file mode 100644
index 0000000..aa16a79
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00005af.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000783.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000783.au
new file mode 100644
index 0000000..a06a66a
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000783.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000867.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000867.au
new file mode 100644
index 0000000..772bb9f
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000867.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00008b5.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00008b5.au
new file mode 100644
index 0000000..439d6ac
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00008b5.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00008f8.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00008f8.au
new file mode 100644
index 0000000..067185b
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e00008f8.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000a2e.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000a2e.au
new file mode 100644
index 0000000..dfda083
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000a2e.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000abc.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000abc.au
new file mode 100644
index 0000000..e184de6
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000abc.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000b72.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000b72.au
new file mode 100644
index 0000000..110f13c
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000b72.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000b82.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000b82.au
new file mode 100644
index 0000000..99ca6db
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000b82.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000b8f.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000b8f.au
new file mode 100644
index 0000000..404d497
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000b8f.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000bb8.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000bb8.au
new file mode 100644
index 0000000..221c414
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000bb8.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000bd6.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000bd6.au
new file mode 100644
index 0000000..fbcea69
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000bd6.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000bee.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000bee.au
new file mode 100644
index 0000000..83daf75
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000bee.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000c4a.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000c4a.au
new file mode 100644
index 0000000..e827257
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000c4a.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000c84.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000c84.au
new file mode 100644
index 0000000..662f9ca
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000c84.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000c9e.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000c9e.au
new file mode 100644
index 0000000..8572546
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000c9e.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000cd3.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000cd3.au
new file mode 100644
index 0000000..3fa664a
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000cd3.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000ddb.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000ddb.au
new file mode 100644
index 0000000..cb8f84f
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000ddb.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000de3.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000de3.au
new file mode 100644
index 0000000..61cc965
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000de3.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000e62.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000e62.au
new file mode 100644
index 0000000..ebe3c15
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000e62.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000eaf.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000eaf.au
new file mode 100644
index 0000000..2d32ad2
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000eaf.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000ece.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000ece.au
new file mode 100644
index 0000000..5b8b715
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000ece.au differ
diff --git a/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000f99.au b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000f99.au
new file mode 100644
index 0000000..c6cfff1
Binary files /dev/null and b/aup/Zack Hemsey - 'See What I've Become'-lWDYAJ2-Y1E_data/e00/d00/e0000f99.au differ
diff --git a/aup/beep1.aup b/aup/beep1.aup
new file mode 100644
index 0000000..df17bbd
--- /dev/null
+++ b/aup/beep1.aup
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/beep1_data/e00/d00/e0000296.au b/aup/beep1_data/e00/d00/e0000296.au
new file mode 100644
index 0000000..b2e1613
Binary files /dev/null and b/aup/beep1_data/e00/d00/e0000296.au differ
diff --git a/aup/beep1_data/e00/d00/e0000697.au b/aup/beep1_data/e00/d00/e0000697.au
new file mode 100644
index 0000000..f3573e5
Binary files /dev/null and b/aup/beep1_data/e00/d00/e0000697.au differ
diff --git a/aup/beep1_data/e00/d00/e0000e5b.au b/aup/beep1_data/e00/d00/e0000e5b.au
new file mode 100644
index 0000000..ad16689
Binary files /dev/null and b/aup/beep1_data/e00/d00/e0000e5b.au differ
diff --git a/aup/beep2.aup b/aup/beep2.aup
new file mode 100644
index 0000000..1b4029d
--- /dev/null
+++ b/aup/beep2.aup
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/beep2_data/e00/d00/e00003fd.au b/aup/beep2_data/e00/d00/e00003fd.au
new file mode 100644
index 0000000..a97bc13
Binary files /dev/null and b/aup/beep2_data/e00/d00/e00003fd.au differ
diff --git a/aup/beep2_data/e00/d00/e00004c5.au b/aup/beep2_data/e00/d00/e00004c5.au
new file mode 100644
index 0000000..09b62bc
Binary files /dev/null and b/aup/beep2_data/e00/d00/e00004c5.au differ
diff --git a/aup/beep2_data/e00/d00/e000054b.au b/aup/beep2_data/e00/d00/e000054b.au
new file mode 100644
index 0000000..c02f480
Binary files /dev/null and b/aup/beep2_data/e00/d00/e000054b.au differ
diff --git a/aup/car1.wav.aup b/aup/car1.wav.aup
new file mode 100644
index 0000000..e87df3e
--- /dev/null
+++ b/aup/car1.wav.aup
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/car1.wav_data/e00/d00/e00007e4.au b/aup/car1.wav_data/e00/d00/e00007e4.au
new file mode 100644
index 0000000..f554ac2
Binary files /dev/null and b/aup/car1.wav_data/e00/d00/e00007e4.au differ
diff --git a/aup/car1.wav_data/e00/d00/e0000ad6.au b/aup/car1.wav_data/e00/d00/e0000ad6.au
new file mode 100644
index 0000000..86f5ab5
Binary files /dev/null and b/aup/car1.wav_data/e00/d00/e0000ad6.au differ
diff --git a/aup/car1.wav_data/e00/d00/e0000b21.au b/aup/car1.wav_data/e00/d00/e0000b21.au
new file mode 100644
index 0000000..c2b46d1
Binary files /dev/null and b/aup/car1.wav_data/e00/d00/e0000b21.au differ
diff --git a/aup/car1.wav_data/e00/d00/e0000bbd.au b/aup/car1.wav_data/e00/d00/e0000bbd.au
new file mode 100644
index 0000000..1f7a1f1
Binary files /dev/null and b/aup/car1.wav_data/e00/d00/e0000bbd.au differ
diff --git a/aup/car2.wav.aup b/aup/car2.wav.aup
new file mode 100644
index 0000000..989602b
--- /dev/null
+++ b/aup/car2.wav.aup
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/car2.wav_data/e00/d00/e000010d.au b/aup/car2.wav_data/e00/d00/e000010d.au
new file mode 100644
index 0000000..3d73efd
Binary files /dev/null and b/aup/car2.wav_data/e00/d00/e000010d.au differ
diff --git a/aup/car2.wav_data/e00/d00/e0000451.au b/aup/car2.wav_data/e00/d00/e0000451.au
new file mode 100644
index 0000000..38f47a1
Binary files /dev/null and b/aup/car2.wav_data/e00/d00/e0000451.au differ
diff --git a/aup/car2.wav_data/e00/d00/e000061e.au b/aup/car2.wav_data/e00/d00/e000061e.au
new file mode 100644
index 0000000..de3f83b
Binary files /dev/null and b/aup/car2.wav_data/e00/d00/e000061e.au differ
diff --git a/aup/car2.wav_data/e00/d00/e0000694.au b/aup/car2.wav_data/e00/d00/e0000694.au
new file mode 100644
index 0000000..4b8ca39
Binary files /dev/null and b/aup/car2.wav_data/e00/d00/e0000694.au differ
diff --git a/aup/car2.wav_data/e00/d00/e0000af0.au b/aup/car2.wav_data/e00/d00/e0000af0.au
new file mode 100644
index 0000000..048f13b
Binary files /dev/null and b/aup/car2.wav_data/e00/d00/e0000af0.au differ
diff --git a/aup/car2.wav_data/e00/d00/e0000bad.au b/aup/car2.wav_data/e00/d00/e0000bad.au
new file mode 100644
index 0000000..3f0762c
Binary files /dev/null and b/aup/car2.wav_data/e00/d00/e0000bad.au differ
diff --git a/aup/car2.wav_data/e00/d00/e0000dfe.au b/aup/car2.wav_data/e00/d00/e0000dfe.au
new file mode 100644
index 0000000..5cb9fbb
Binary files /dev/null and b/aup/car2.wav_data/e00/d00/e0000dfe.au differ
diff --git a/aup/car2.wav_data/e00/d00/e0000ed4.au b/aup/car2.wav_data/e00/d00/e0000ed4.au
new file mode 100644
index 0000000..4c78edb
Binary files /dev/null and b/aup/car2.wav_data/e00/d00/e0000ed4.au differ
diff --git a/aup/cardoorclose.wav.aup b/aup/cardoorclose.wav.aup
new file mode 100644
index 0000000..e1cccd7
--- /dev/null
+++ b/aup/cardoorclose.wav.aup
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/cardoorclose.wav_data/e00/d00/e000066d.au b/aup/cardoorclose.wav_data/e00/d00/e000066d.au
new file mode 100644
index 0000000..237e563
Binary files /dev/null and b/aup/cardoorclose.wav_data/e00/d00/e000066d.au differ
diff --git a/aup/cardoorclose.wav_data/e00/d00/e0000e6f.au b/aup/cardoorclose.wav_data/e00/d00/e0000e6f.au
new file mode 100644
index 0000000..37abb9a
Binary files /dev/null and b/aup/cardoorclose.wav_data/e00/d00/e0000e6f.au differ
diff --git a/aup/cardooropen.wav.aup b/aup/cardooropen.wav.aup
new file mode 100644
index 0000000..d6798ca
--- /dev/null
+++ b/aup/cardooropen.wav.aup
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/cardooropen.wav_data/e00/d00/e00001c6.au b/aup/cardooropen.wav_data/e00/d00/e00001c6.au
new file mode 100644
index 0000000..736b37d
Binary files /dev/null and b/aup/cardooropen.wav_data/e00/d00/e00001c6.au differ
diff --git a/aup/cardooropen.wav_data/e00/d00/e0000d8f.au b/aup/cardooropen.wav_data/e00/d00/e0000d8f.au
new file mode 100644
index 0000000..d3a6b08
Binary files /dev/null and b/aup/cardooropen.wav_data/e00/d00/e0000d8f.au differ
diff --git a/aup/carstart.aiff b/aup/carstart.aiff
new file mode 100644
index 0000000..7f04581
Binary files /dev/null and b/aup/carstart.aiff differ
diff --git a/aup/carstart.aup b/aup/carstart.aup
new file mode 100644
index 0000000..07c62e4
--- /dev/null
+++ b/aup/carstart.aup
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/carstart.mp3 b/aup/carstart.mp3
new file mode 100644
index 0000000..3dad20c
Binary files /dev/null and b/aup/carstart.mp3 differ
diff --git a/aup/carstart_data/e00/d00/e0000136.au b/aup/carstart_data/e00/d00/e0000136.au
new file mode 100644
index 0000000..8f85fe9
Binary files /dev/null and b/aup/carstart_data/e00/d00/e0000136.au differ
diff --git a/aup/explosion.aup b/aup/explosion.aup
new file mode 100644
index 0000000..8282f93
--- /dev/null
+++ b/aup/explosion.aup
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/explosion_data/e00/d00/e00000ba.au b/aup/explosion_data/e00/d00/e00000ba.au
new file mode 100644
index 0000000..4254c79
Binary files /dev/null and b/aup/explosion_data/e00/d00/e00000ba.au differ
diff --git a/aup/explosion_data/e00/d00/e000029b.au b/aup/explosion_data/e00/d00/e000029b.au
new file mode 100644
index 0000000..2097b65
Binary files /dev/null and b/aup/explosion_data/e00/d00/e000029b.au differ
diff --git a/aup/explosion_data/e00/d00/e000057b.au b/aup/explosion_data/e00/d00/e000057b.au
new file mode 100644
index 0000000..b4bda61
Binary files /dev/null and b/aup/explosion_data/e00/d00/e000057b.au differ
diff --git a/aup/explosion_data/e00/d00/e000066a.au b/aup/explosion_data/e00/d00/e000066a.au
new file mode 100644
index 0000000..054a02d
Binary files /dev/null and b/aup/explosion_data/e00/d00/e000066a.au differ
diff --git a/aup/explosion_data/e00/d00/e0000803.au b/aup/explosion_data/e00/d00/e0000803.au
new file mode 100644
index 0000000..bc74fdb
Binary files /dev/null and b/aup/explosion_data/e00/d00/e0000803.au differ
diff --git a/aup/explosion_data/e00/d00/e0000a37.au b/aup/explosion_data/e00/d00/e0000a37.au
new file mode 100644
index 0000000..bc74fdb
Binary files /dev/null and b/aup/explosion_data/e00/d00/e0000a37.au differ
diff --git a/aup/firereload.wav.aup b/aup/firereload.wav.aup
new file mode 100644
index 0000000..ed98910
--- /dev/null
+++ b/aup/firereload.wav.aup
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/firereload.wav_data/e00/d00/e0000627.au b/aup/firereload.wav_data/e00/d00/e0000627.au
new file mode 100644
index 0000000..c428635
Binary files /dev/null and b/aup/firereload.wav_data/e00/d00/e0000627.au differ
diff --git a/aup/policesiren.wav.aup b/aup/policesiren.wav.aup
new file mode 100644
index 0000000..771be79
--- /dev/null
+++ b/aup/policesiren.wav.aup
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/policesiren.wav_data/e00/d00/e00000c1.au b/aup/policesiren.wav_data/e00/d00/e00000c1.au
new file mode 100644
index 0000000..a4e73d8
Binary files /dev/null and b/aup/policesiren.wav_data/e00/d00/e00000c1.au differ
diff --git a/aup/revolver1.wav.aup b/aup/revolver1.wav.aup
new file mode 100644
index 0000000..c31dd3e
--- /dev/null
+++ b/aup/revolver1.wav.aup
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/revolver1.wav_data/e00/d00/e0000957.au b/aup/revolver1.wav_data/e00/d00/e0000957.au
new file mode 100644
index 0000000..1a7ff3e
Binary files /dev/null and b/aup/revolver1.wav_data/e00/d00/e0000957.au differ
diff --git a/aup/revolver1.wav_data/e00/d00/e0000b60.au b/aup/revolver1.wav_data/e00/d00/e0000b60.au
new file mode 100644
index 0000000..e499b47
Binary files /dev/null and b/aup/revolver1.wav_data/e00/d00/e0000b60.au differ
diff --git a/aup/revolver2.wav.aup b/aup/revolver2.wav.aup
new file mode 100644
index 0000000..b5db2b1
--- /dev/null
+++ b/aup/revolver2.wav.aup
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/revolver2.wav_data/e00/d00/e00001a9.au b/aup/revolver2.wav_data/e00/d00/e00001a9.au
new file mode 100644
index 0000000..ffd7be7
Binary files /dev/null and b/aup/revolver2.wav_data/e00/d00/e00001a9.au differ
diff --git a/aup/revolver2.wav_data/e00/d00/e0000a6a.au b/aup/revolver2.wav_data/e00/d00/e0000a6a.au
new file mode 100644
index 0000000..91e3e53
Binary files /dev/null and b/aup/revolver2.wav_data/e00/d00/e0000a6a.au differ
diff --git a/aup/see.wav.aup b/aup/see.wav.aup
new file mode 100644
index 0000000..8a9262c
--- /dev/null
+++ b/aup/see.wav.aup
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/see.wav_data/e00/d00/e0000061.au b/aup/see.wav_data/e00/d00/e0000061.au
new file mode 100644
index 0000000..aa16a79
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e0000061.au differ
diff --git a/aup/see.wav_data/e00/d00/e00000ff.au b/aup/see.wav_data/e00/d00/e00000ff.au
new file mode 100644
index 0000000..8a4ce2a
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e00000ff.au differ
diff --git a/aup/see.wav_data/e00/d00/e0000141.au b/aup/see.wav_data/e00/d00/e0000141.au
new file mode 100644
index 0000000..58704a4
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e0000141.au differ
diff --git a/aup/see.wav_data/e00/d00/e00001f9.au b/aup/see.wav_data/e00/d00/e00001f9.au
new file mode 100644
index 0000000..a06a66a
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e00001f9.au differ
diff --git a/aup/see.wav_data/e00/d00/e0000262.au b/aup/see.wav_data/e00/d00/e0000262.au
new file mode 100644
index 0000000..221c414
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e0000262.au differ
diff --git a/aup/see.wav_data/e00/d00/e00002c1.au b/aup/see.wav_data/e00/d00/e00002c1.au
new file mode 100644
index 0000000..61cc965
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e00002c1.au differ
diff --git a/aup/see.wav_data/e00/d00/e00002e4.au b/aup/see.wav_data/e00/d00/e00002e4.au
new file mode 100644
index 0000000..5cc1cfe
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e00002e4.au differ
diff --git a/aup/see.wav_data/e00/d00/e0000503.au b/aup/see.wav_data/e00/d00/e0000503.au
new file mode 100644
index 0000000..067185b
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e0000503.au differ
diff --git a/aup/see.wav_data/e00/d00/e000069b.au b/aup/see.wav_data/e00/d00/e000069b.au
new file mode 100644
index 0000000..110f13c
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e000069b.au differ
diff --git a/aup/see.wav_data/e00/d00/e0000722.au b/aup/see.wav_data/e00/d00/e0000722.au
new file mode 100644
index 0000000..772bb9f
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e0000722.au differ
diff --git a/aup/see.wav_data/e00/d00/e00008bd.au b/aup/see.wav_data/e00/d00/e00008bd.au
new file mode 100644
index 0000000..cb8f84f
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e00008bd.au differ
diff --git a/aup/see.wav_data/e00/d00/e00008c6.au b/aup/see.wav_data/e00/d00/e00008c6.au
new file mode 100644
index 0000000..83daf75
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e00008c6.au differ
diff --git a/aup/see.wav_data/e00/d00/e00008d8.au b/aup/see.wav_data/e00/d00/e00008d8.au
new file mode 100644
index 0000000..94be757
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e00008d8.au differ
diff --git a/aup/see.wav_data/e00/d00/e0000996.au b/aup/see.wav_data/e00/d00/e0000996.au
new file mode 100644
index 0000000..c67db22
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e0000996.au differ
diff --git a/aup/see.wav_data/e00/d00/e0000a82.au b/aup/see.wav_data/e00/d00/e0000a82.au
new file mode 100644
index 0000000..a6f396e
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e0000a82.au differ
diff --git a/aup/see.wav_data/e00/d00/e0000cd3.au b/aup/see.wav_data/e00/d00/e0000cd3.au
new file mode 100644
index 0000000..e184de6
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e0000cd3.au differ
diff --git a/aup/see.wav_data/e00/d00/e0000d58.au b/aup/see.wav_data/e00/d00/e0000d58.au
new file mode 100644
index 0000000..2d32ad2
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e0000d58.au differ
diff --git a/aup/see.wav_data/e00/d00/e0000d62.au b/aup/see.wav_data/e00/d00/e0000d62.au
new file mode 100644
index 0000000..51f548b
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e0000d62.au differ
diff --git a/aup/see.wav_data/e00/d00/e0000ec3.au b/aup/see.wav_data/e00/d00/e0000ec3.au
new file mode 100644
index 0000000..aedac78
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e0000ec3.au differ
diff --git a/aup/see.wav_data/e00/d00/e0000f52.au b/aup/see.wav_data/e00/d00/e0000f52.au
new file mode 100644
index 0000000..662f9ca
Binary files /dev/null and b/aup/see.wav_data/e00/d00/e0000f52.au differ
diff --git a/aup/siren.wav.aup b/aup/siren.wav.aup
new file mode 100644
index 0000000..56f60f8
--- /dev/null
+++ b/aup/siren.wav.aup
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/siren.wav_data/e00/d00/e00003fb.au b/aup/siren.wav_data/e00/d00/e00003fb.au
new file mode 100644
index 0000000..986c062
Binary files /dev/null and b/aup/siren.wav_data/e00/d00/e00003fb.au differ
diff --git a/aup/siren.wav_data/e00/d00/e0000fd1.au b/aup/siren.wav_data/e00/d00/e0000fd1.au
new file mode 100644
index 0000000..1c6baa2
Binary files /dev/null and b/aup/siren.wav_data/e00/d00/e0000fd1.au differ
diff --git a/aup/threeknocks.wav.aup b/aup/threeknocks.wav.aup
new file mode 100644
index 0000000..1c9f5e7
--- /dev/null
+++ b/aup/threeknocks.wav.aup
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/threeknocks.wav_data/e00/d00/e0000315.au b/aup/threeknocks.wav_data/e00/d00/e0000315.au
new file mode 100644
index 0000000..f67fc7c
Binary files /dev/null and b/aup/threeknocks.wav_data/e00/d00/e0000315.au differ
diff --git a/aup/threeknocks.wav_data/e00/d00/e0000c80.au b/aup/threeknocks.wav_data/e00/d00/e0000c80.au
new file mode 100644
index 0000000..15a4bbd
Binary files /dev/null and b/aup/threeknocks.wav_data/e00/d00/e0000c80.au differ
diff --git a/aup/what.wav.aup b/aup/what.wav.aup
new file mode 100644
index 0000000..0d53b41
--- /dev/null
+++ b/aup/what.wav.aup
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aup/what.wav_data/e00/d00/e0000137.au b/aup/what.wav_data/e00/d00/e0000137.au
new file mode 100644
index 0000000..8572546
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000137.au differ
diff --git a/aup/what.wav_data/e00/d00/e0000163.au b/aup/what.wav_data/e00/d00/e0000163.au
new file mode 100644
index 0000000..81d6fef
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000163.au differ
diff --git a/aup/what.wav_data/e00/d00/e000025f.au b/aup/what.wav_data/e00/d00/e000025f.au
new file mode 100644
index 0000000..fbcea69
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e000025f.au differ
diff --git a/aup/what.wav_data/e00/d00/e0000304.au b/aup/what.wav_data/e00/d00/e0000304.au
new file mode 100644
index 0000000..c6cfff1
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000304.au differ
diff --git a/aup/what.wav_data/e00/d00/e000035e.au b/aup/what.wav_data/e00/d00/e000035e.au
new file mode 100644
index 0000000..ebe3c15
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e000035e.au differ
diff --git a/aup/what.wav_data/e00/d00/e00003b9.au b/aup/what.wav_data/e00/d00/e00003b9.au
new file mode 100644
index 0000000..9d3a746
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e00003b9.au differ
diff --git a/aup/what.wav_data/e00/d00/e0000789.au b/aup/what.wav_data/e00/d00/e0000789.au
new file mode 100644
index 0000000..439d6ac
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000789.au differ
diff --git a/aup/what.wav_data/e00/d00/e000089d.au b/aup/what.wav_data/e00/d00/e000089d.au
new file mode 100644
index 0000000..160dc21
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e000089d.au differ
diff --git a/aup/what.wav_data/e00/d00/e00009ec.au b/aup/what.wav_data/e00/d00/e00009ec.au
new file mode 100644
index 0000000..99ca6db
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e00009ec.au differ
diff --git a/aup/what.wav_data/e00/d00/e0000b54.au b/aup/what.wav_data/e00/d00/e0000b54.au
new file mode 100644
index 0000000..0e5bb97
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000b54.au differ
diff --git a/aup/what.wav_data/e00/d00/e0000c3e.au b/aup/what.wav_data/e00/d00/e0000c3e.au
new file mode 100644
index 0000000..a48a511
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000c3e.au differ
diff --git a/aup/what.wav_data/e00/d00/e0000ced.au b/aup/what.wav_data/e00/d00/e0000ced.au
new file mode 100644
index 0000000..404d497
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000ced.au differ
diff --git a/aup/what.wav_data/e00/d00/e0000cfe.au b/aup/what.wav_data/e00/d00/e0000cfe.au
new file mode 100644
index 0000000..94ba2a4
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000cfe.au differ
diff --git a/aup/what.wav_data/e00/d00/e0000d3f.au b/aup/what.wav_data/e00/d00/e0000d3f.au
new file mode 100644
index 0000000..3fa664a
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000d3f.au differ
diff --git a/aup/what.wav_data/e00/d00/e0000dcb.au b/aup/what.wav_data/e00/d00/e0000dcb.au
new file mode 100644
index 0000000..d6c7954
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000dcb.au differ
diff --git a/aup/what.wav_data/e00/d00/e0000e4c.au b/aup/what.wav_data/e00/d00/e0000e4c.au
new file mode 100644
index 0000000..e827257
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000e4c.au differ
diff --git a/aup/what.wav_data/e00/d00/e0000f12.au b/aup/what.wav_data/e00/d00/e0000f12.au
new file mode 100644
index 0000000..100f0af
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000f12.au differ
diff --git a/aup/what.wav_data/e00/d00/e0000f6a.au b/aup/what.wav_data/e00/d00/e0000f6a.au
new file mode 100644
index 0000000..4757f28
Binary files /dev/null and b/aup/what.wav_data/e00/d00/e0000f6a.au differ
diff --git a/b5a.wav b/b5a.wav
new file mode 100644
index 0000000..b4870db
Binary files /dev/null and b/b5a.wav differ
diff --git a/b5c.wav b/b5c.wav
new file mode 100644
index 0000000..701225e
Binary files /dev/null and b/b5c.wav differ
diff --git a/beach.jpg b/beach.jpg
new file mode 100644
index 0000000..be6decb
Binary files /dev/null and b/beach.jpg differ
diff --git a/beach.wav b/beach.wav
new file mode 100644
index 0000000..1467c86
Binary files /dev/null and b/beach.wav differ
diff --git a/beep1.wav b/beep1.wav
new file mode 100644
index 0000000..a9965f6
Binary files /dev/null and b/beep1.wav differ
diff --git a/beep2.wav b/beep2.wav
new file mode 100644
index 0000000..7ea7269
Binary files /dev/null and b/beep2.wav differ
diff --git a/bowlingalley.jpg b/bowlingalley.jpg
new file mode 100644
index 0000000..7a21830
Binary files /dev/null and b/bowlingalley.jpg differ
diff --git a/car1.wav b/car1.wav
new file mode 100644
index 0000000..6b2c183
Binary files /dev/null and b/car1.wav differ
diff --git a/car2.wav b/car2.wav
new file mode 100644
index 0000000..39c21d6
Binary files /dev/null and b/car2.wav differ
diff --git a/car21.aup b/car21.aup
new file mode 100644
index 0000000..df48350
--- /dev/null
+++ b/car21.aup
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/car21.wav b/car21.wav
new file mode 100644
index 0000000..60db299
Binary files /dev/null and b/car21.wav differ
diff --git a/car21_data/e00/d00/e0000658.au b/car21_data/e00/d00/e0000658.au
new file mode 100644
index 0000000..592154b
Binary files /dev/null and b/car21_data/e00/d00/e0000658.au differ
diff --git a/car21_data/e00/d00/e00006d1.au b/car21_data/e00/d00/e00006d1.au
new file mode 100644
index 0000000..a0cc1bb
Binary files /dev/null and b/car21_data/e00/d00/e00006d1.au differ
diff --git a/car21_data/e00/d00/e0000a1c.au b/car21_data/e00/d00/e0000a1c.au
new file mode 100644
index 0000000..4557020
Binary files /dev/null and b/car21_data/e00/d00/e0000a1c.au differ
diff --git a/car21_data/e00/d00/e0000a52.au b/car21_data/e00/d00/e0000a52.au
new file mode 100644
index 0000000..8a12a1e
Binary files /dev/null and b/car21_data/e00/d00/e0000a52.au differ
diff --git a/cardoorclose.wav b/cardoorclose.wav
new file mode 100644
index 0000000..e94d9b4
Binary files /dev/null and b/cardoorclose.wav differ
diff --git a/cardooropen.wav b/cardooropen.wav
new file mode 100644
index 0000000..72ea2cc
Binary files /dev/null and b/cardooropen.wav differ
diff --git a/carstart.wav b/carstart.wav
new file mode 100644
index 0000000..4b4d72b
Binary files /dev/null and b/carstart.wav differ
diff --git a/classroom.jpg b/classroom.jpg
new file mode 100644
index 0000000..d4f0219
Binary files /dev/null and b/classroom.jpg differ
diff --git a/clock.svg b/clock.svg
new file mode 100755
index 0000000..29958d5
--- /dev/null
+++ b/clock.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/crash.wav b/crash.wav
new file mode 100644
index 0000000..15b1ab3
Binary files /dev/null and b/crash.wav differ
diff --git a/cuff.wav b/cuff.wav
new file mode 100644
index 0000000..4068582
Binary files /dev/null and b/cuff.wav differ
diff --git a/erevolver1.wav b/erevolver1.wav
new file mode 100644
index 0000000..a4c768a
Binary files /dev/null and b/erevolver1.wav differ
diff --git a/explosion-mix.wav b/explosion-mix.wav
new file mode 100644
index 0000000..1f9ee6b
Binary files /dev/null and b/explosion-mix.wav differ
diff --git a/explosion.wav b/explosion.wav
new file mode 100644
index 0000000..c002ae6
Binary files /dev/null and b/explosion.wav differ
diff --git a/explosion1.wav b/explosion1.wav
new file mode 100644
index 0000000..bc16997
Binary files /dev/null and b/explosion1.wav differ
diff --git a/extschool.jpg b/extschool.jpg
new file mode 100644
index 0000000..d9e8004
Binary files /dev/null and b/extschool.jpg differ
diff --git a/extschool2.jpg b/extschool2.jpg
new file mode 100644
index 0000000..a457e3c
Binary files /dev/null and b/extschool2.jpg differ
diff --git a/firereload.wav b/firereload.wav
new file mode 100644
index 0000000..1009487
Binary files /dev/null and b/firereload.wav differ
diff --git a/kick.wav b/kick.wav
new file mode 100755
index 0000000..eb10f2e
Binary files /dev/null and b/kick.wav differ
diff --git a/kidnapped-null.jpg b/kidnapped-null.jpg
new file mode 100644
index 0000000..f83e8d5
Binary files /dev/null and b/kidnapped-null.jpg differ
diff --git a/kidnapped.2.jpg b/kidnapped.2.jpg
new file mode 100644
index 0000000..f2ed4f7
Binary files /dev/null and b/kidnapped.2.jpg differ
diff --git a/kidnapped.2.xcf b/kidnapped.2.xcf
new file mode 100644
index 0000000..2150514
Binary files /dev/null and b/kidnapped.2.xcf differ
diff --git a/kidnapped.jpg b/kidnapped.jpg
new file mode 100644
index 0000000..74a2860
Binary files /dev/null and b/kidnapped.jpg differ
diff --git a/main.css b/main.css
index 6f4d05a..b27f576 100644
--- a/main.css
+++ b/main.css
@@ -1,5 +1,5 @@
body {
- font-family: "Exo", "Comic Sans MS";
+ font-family: "Exo";
}
table td {
padding: 4px;
diff --git a/main.js b/main.js
index d831a90..38ff45f 100644
--- a/main.js
+++ b/main.js
@@ -2,6 +2,12 @@
var socket = io.connect();
var KEYCODES = {
+ /**
+ * The most common keycodes defined by :
+ * @type {Object.}
+ * @const
+ */
+ // KEYMAP : {
STRG: 17,
CTRL: 17,
CTRLRIGHT: 18,
@@ -36,6 +42,12 @@ var KEYCODES = {
F10: 121,
F11: 122,
F12: 123,
+ // },
+ /**
+ * @type {Object.}
+ * @const
+ */
+ // KEYCODES : {
'backspace' : '8',
'tab' : '9',
'enter' : '13',
@@ -134,6 +146,7 @@ var KEYCODES = {
'backslash' : '220',
'closebracket' : '221',
'single_quote' : '222'
+ // }
}
var sounds = {};
@@ -142,6 +155,7 @@ var sounds = {};
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();
+// var mastergain = context.createGainNode();
var mastergain = context.createGain();
mastergain.gain.value = 1;
@@ -210,6 +224,20 @@ window.addEventListener("keyup", function (e) {
}
});
}, false);
+// window.addEventListener("keyup", function (e) {
+// document.querySelectorAll("td").forEach(function (ele) {
+// ele.classList.remove("active");
+// });
+// }, false);
+
+var lengthInSamples = 4 * context.sampleRate;
+noiseBuffer = context.createBuffer( 1, lengthInSamples, context.sampleRate );
+var bufferData = noiseBuffer.getChannelData( 0 );
+for (var i = 0; i < lengthInSamples; ++i) {
+ bufferData[i] = (2*Math.random() - 1); // -1 to +1
+}
+
+// var shiftrate = 0.25;
var shiftrate = 0.1;
var movegaintoint = null;
@@ -220,6 +248,7 @@ function movegainto(val, changeslider) {
movegaintoint = null;
movegaintoint = setInterval(function () {
mastergain.gain.value += (val - mastergain.gain.value) * shiftrate;
+ // mastergain.gain.value = Math.round(mastergain.gain.value * 1000) / 1000;
document.querySelector("#gainval").innerHTML = mastergain.gain.value;
if (changeslider == true) {
document.querySelector("#gainctrl").value = mastergain.gain.value;
@@ -232,6 +261,9 @@ function movegainto(val, changeslider) {
}, 100);
}
+// document.querySelector("#gainctrl").addEventListener("mousemove", function (e) {
+// movegainto(e.target.value);
+// }, false);
document.querySelector("#gainctrl").addEventListener("change", function (e) {
movegainto(e.target.value, true);
}, false);
@@ -239,6 +271,23 @@ document.querySelector("#reset").addEventListener("click", function (e) {
movegainto(1, true);
}, true);
+// document.querySelector("#gainctrl").addEventListener("mousemove", function (e) {
+// mastergain.gain.value = e.target.value;
+// document.querySelector("#gainval").innerHTML = mastergain.gain.value;
+// }, false);
+// document.querySelector("#gainctrl").addEventListener("change", function (e) {
+// mastergain.gain.value = e.target.value;
+// document.querySelector("#gainval").innerHTML = mastergain.gain.value;
+// }, false);
+// document.querySelector("#reset").addEventListener("click", function (e) {
+// document.querySelector("#gainctrl").value = 1;
+// mastergain.gain.value = document.querySelector("#gainctrl").value;
+// document.querySelector("#gainval").innerHTML = mastergain.gain.value;
+// }, true);
+// setInterval(function () {
+// mastergain.gain.value = document.querySelector("#gainctrl").value;
+// document.querySelector("#gainval").innerHTML = document.querySelector("#gainctrl").value;
+// }, 200);
function loadsound(idname, url, gain) {
@@ -271,23 +320,25 @@ function loadsound(idname, url, gain) {
var nowplaying = [];
function playsound(buffer, gain) {
-
+ // var volume = context.createGainNode();
var volume = context.createGain();
volume.gain.value = gain;
var source = context.createBufferSource();
source.buffer = buffer;
-
+ // source.connect(context.destination);
source.connect(volume);
volume.connect(mastergain);
mastergain.connect(context.destination);
source.start(0);
setTimeout(function () {
nowplaying.push(source);
+ // }, 50);
}, 150);
source.onended = function () {
nowplaying.splice(tostop.indexOf(source), 1);
}
+ return source;
}
function stopall() {
@@ -307,14 +358,192 @@ function updatekeys() {
document.querySelector("#keys").innerHTML = ht;
}
+// var inputs = document.querySelectorAll("input");
+// for (var i = 0; i < inputs.length; ++i) {
+// inputs[i].addEventListener("keydown", function (e) {
+// e.stopPropagation();
+// }, false);
+// }
+
+// document.querySelector("#binder").addEventListener("submit", function (e) {
+// e.preventDefault();
+// var name = document.querySelector("#name").value;
+// var file = document.querySelector("#file").value;
+// var key = document.querySelector("#key").value;
+// loadsound(name, file);
+// bindkey(key, name);
+// updatekeys();
+// }, false);
+
var toload = [
{
- name: "b5a",
- verbal: "Darkness",
- file: "b5a.wav",
- key: "1",
+ name: "waves",
+ verbal: "back: Beach Waves",
+ file: "beach.wav",
+ key: "comma",
+ gain: 0.2
+},
+{
+ name: "z-see",
+ verbal: "back: See",
+ file: "z-see.wav",
+ key: "period",
+ gain: 0.6
+},
+{
+ name: "z-what",
+ verbal: "back: What",
+ file: "z-what.wav",
+ key: "forward_slash",
+ gain: 0.5
+},
+// {
+// name: "b5c",
+// verbal: "back: Darkness (Long)",
+// file: "b5c.wav",
+// key: "3",
+// gain: 0.5
+// },
+{
+ name: "car1",
+ verbal: "Car Nearer",
+ file: "car21.wav",
+ key: "q",
+ gain: 0.7
+},
+{
+ name: "crash1",
+ verbal: "Car Crash",
+ file: "crash.wav",
+ key: "p",
+ gain: 2
+},
+// {
+// name: "carstarting",
+// verbal: "Car Starting",
+// file: "carstart.wav",
+// key: "a",
+// gain: 2
+// },
+{
+ name: "car2",
+ verbal: "Car Leaving",
+ file: "car2.wav",
+ key: "l",
+ gain: 0.5
+},
+{
+ name: "emptyrevolver",
+ verbal: "Empty Revolver",
+ file: ["erevolver1.wav"],
+ key: "m",
+ gain: 1.8
+},
+{
+ name: "revolver",
+ verbal: "Revolver",
+ file: ["revolver1.wav", "revolver2.wav", "revolver3.wav", "revolver4.wav", "revolver5.wav", "revolver6.wav"],
+ key: "n",
+ gain: 1.25
+},
+// {
+// name: "fire",
+// verbal: "Fire",
+// file: ["fire1.wav", "fire2.wav", "fire3.wav", "fire4.wav"],
+// key: "n",
+// gain: 1
+// },
+// {
+// name: "reload",
+// verbal: "Reload",
+// file: "firereload.wav",
+// key: "b",
+// gain: 1
+// },
+{
+ name: "revolvercock",
+ verbal: "Revolver Cock",
+ file: "revolvercock.wav",
+ key: "b",
+ gain: 1.2
+},
+{
+ name: "cuff",
+ verbal: "Cuffs",
+ file: "cuff.wav",
+ key: "c",
gain: 1
},
+// {
+// name: "scream1",
+// verbal: "Scream 1",
+// file: "scream1.wav",
+// key: "h",
+// gain: 0.5
+// },
+// {
+// name: "scream2",
+// verbal: "Scream 2",
+// file: "scream2.wav",
+// key: "j",
+// gain: 1
+// },
+{
+ name: "asiren",
+ verbal: "Ambulance Siren",
+ file: "siren.wav",
+ key: "z",
+ gain: 1
+},
+{
+ name: "policesrien",
+ verbal: "Police Srien",
+ file: "policesiren.wav",
+ key: "x",
+ gain: 1
+},
+// {
+// name: "cardooropen",
+// verbal: "Car Door Open",
+// file: "cardooropen.wav",
+// key: "t",
+// gain: 1
+// },
+// {
+// name: "cardoorclose",
+// verbal: "Car Door Close",
+// file: "cardoorclose.wav",
+// key: "y",
+// gain: 1
+// },
+{
+ name: "doorknocks",
+ verbal: "Door Knocks (three)",
+ file: "threeknocks.wav",
+ key: "u",
+ gain: 1.5
+},
+{
+ name: "explosion",
+ verbal: "Explosion",
+ file: "explosion.wav",
+ key: "e",
+ gain: 2.5
+},
+{
+ name: "ringtone",
+ verbal: "Ringtone",
+ file: "ringtone.wav",
+ key: "i",
+ gain: 1
+},
+// {
+// name: "beep",
+// verbal: "Beep",
+// file: "beep2.wav",
+// key: "w",
+// gain: 2
+// },
];
toload.forEach(function (obj) {
@@ -325,6 +554,7 @@ toload.forEach(function (obj) {
bindkey(obj.key, obj.verbal, function () {
var i = Math.floor(Math.random() * obj.file.length);
sounds[obj.name + i].play();
+ // console.log(i);
});
}
else {
@@ -335,44 +565,263 @@ toload.forEach(function (obj) {
}
});
-
-var beep;
-bindkey("s", "Beep", function () {
- beep = setInterval(function () {
- playiso(2000, 50, 0, 0.5, "sine");
+var explosionbeepgain = 0.5, beepslow, beepmedium, beepfast, beepxfast;
+bindkey("s", "Beep Slow", function () {
+ playiso(2000, 50, 0, beepgain, "sine");
+ beepslow = setInterval(function () {
+ playiso(2000, 50, 0, beepgain, "sine");
}, 2000);
}, function () {
- clearInterval(beep);
+ clearInterval(beepslow);
+});
+bindkey("d", "Beep Medium", function () {
+ playiso(2000, 50, 0, beepgain, "sine");
+ beepmedium = setInterval(function () {
+ playiso(2000, 50, 0, beepgain, "sine");
+ }, 500);
+}, function () {
+ clearInterval(beepmedium);
+});
+bindkey("f", "Beep Fast", function () {
+ playiso(2000, 50, 0, beepgain, "sine");
+ beepfast = setInterval(function () {
+ playiso(2000, 50, 0, beepgain, "sine");
+ }, 200);
+}, function () {
+ clearInterval(beepfast);
+});
+bindkey("g", "Beep Extrafast", function () {
+ beepxfast = playiso(2000, "callback", 0, beepgain, "sine");
+}, function () {
+ beepxfast();
+});
+
+var noiseSource;
+bindkey("equal_sign", "Noise", function () {
+ noiseSource = playsound(noiseBuffer, 0.1);
+}, function () {
+ noiseSource.stop();
});
+var busytone1, busytone2;
+// American
+// bindkey("dash", "Busy", function () {
+// playiso(480, 500, 0, beepgain, "sine");
+// playiso(620, 500, 0, beepgain, "sine");
+// busytone = setInterval(function () {
+// playiso(480, 500, 0, beepgain, "sine");
+// playiso(620, 500, 0, beepgain, "sine");
+// }, 1000);
+// }, function () {
+// clearInterval(busytone);
+// });
+// British
+// bindkey("dash", "Busy", function () {
+// playiso(400, 375, 0, beepgain, "sine");
+// busytone = setInterval(function () {
+// playiso(400, 375, 0, beepgain, "sine");
+// }, 750);
+// }, function () {
+// clearInterval(busytone);
+// });
+// Singapore
+// bindkey("dash", "Busy", function () {
+// playiso(400, 125, 0, beepgain, "sine");
+// setTimeout(function () {
+// playiso(400, 125, 0, beepgain, "sine");
+// }, 250);
+// setTimeout(function () {
+// playiso(400, 125, 0, beepgain, "sine");
+// }, 500);
+// });
+// Manual
+bindkey("dash", "Busy", function () {
+ busytone1 = playiso(400, "callback", 0, 0.15, "sine");
+ // busytone2 = playiso(400, "callback", 0, 0.05, "square");
+}, function () {
+ busytone1();
+ // busytone2();
+});
+
+
+var tones = [];
+var beepgain = 0.15;
+bindkey("open_bracket", "Dial Stolen Stone Phone", function () {
+ playiso(1477, 150, 0, beepgain, "sine");
+ playiso(852, 150, 0, beepgain, "sine");
+ setTimeout(function () {
+ playiso(1209, 150, 0, beepgain, "sine");
+ playiso(697, 150, 0, beepgain, "sine");
+ }, 200);
+ setTimeout(function () {
+ playiso(1336, 150, 0, beepgain, "sine");
+ playiso(697, 150, 0, beepgain, "sine");
+ }, 402);
+ setTimeout(function () {
+ playiso(1209, 160, 0, beepgain, "sine");
+ playiso(697, 160, 0, beepgain, "sine");
+ }, 600);
+ setTimeout(function () {
+ playiso(1336, 150, 0, beepgain, "sine");
+ playiso(941, 150, 0, beepgain, "sine");
+ }, 800);
+ setTimeout(function () {
+ playiso(1336, 150, 0, beepgain, "sine");
+ playiso(941, 150, 0, beepgain, "sine");
+ }, 990);
+ setTimeout(function () {
+ playiso(1209, 150, 0, beepgain, "sine");
+ playiso(852, 150, 0, beepgain, "sine");
+ }, 1223);
+ setTimeout(function () {
+ playiso(1209, 150, 0, beepgain, "sine");
+ playiso(852, 150, 0, beepgain, "sine");
+ }, 1392);
+});
+// bindkey("dash", "Dial 1", function () {
+// tones[0] = [];
+// tones[0][0] = playiso(1209, "callback", 0, beepgain, "sine");
+// tones[0][1] = playiso(697, "callback", 0, beepgain, "sine");
+// }, function () {
+// tones[0][0]();
+// tones[0][1]();
+// });
+// bindkey("equal_sign", "Dial 2", function () {
+// tones[1] = [];
+// tones[1][0] = playiso(1336, "callback", 0, beepgain, "sine");
+// tones[1][1] = playiso(697, "callback", 0, beepgain, "sine");
+// }, function () {
+// tones[1][0]();
+// tones[1][1]();
+// });
+// bindkey("open_bracket", "Dial 3", function () {
+// tones[2] = [];
+// tones[2][0] = playiso(1477, "callback", 0, beepgain, "sine");
+// tones[2][1] = playiso(697, "callback", 0, beepgain, "sine");
+// }, function () {
+// tones[2][0]();
+// tones[2][1]();
+// });
+// bindkey("closebracket", "Dial 4", function () {
+// tones[3] = [];
+// tones[3][0] = playiso(1209, "callback", 0, beepgain, "sine");
+// tones[3][1] = playiso(770, "callback", 0, beepgain, "sine");
+// }, function () {
+// tones[3][0]();
+// tones[3][1]();
+// });
+// bindkey("backslash", "Dial 5", function () {
+// tones[4] = [];
+// tones[4][0] = playiso(1336, "callback", 0, beepgain, "sine");
+// tones[4][1] = playiso(770, "callback", 0, beepgain, "sine");
+// }, function () {
+// tones[4][0]();
+// tones[4][1]();
+// });
+// bindkey("semi_colon", "Dial 6", function () {
+// tones[5] = [];
+// tones[5][0] = playiso(1477, "callback", 0, beepgain, "sine");
+// tones[5][1] = playiso(770, "callback", 0, beepgain, "sine");
+// }, function () {
+// tones[5][0]();
+// tones[5][1]();
+// });
+// bindkey("single_quote", "Dial 7", function () {
+// tones[6] = [];
+// tones[6][0] = playiso(1209, "callback", 0, beepgain, "sine");
+// tones[6][1] = playiso(852, "callback", 0, beepgain, "sine");
+// }, function () {
+// tones[6][0]();
+// tones[6][1]();
+// });
+// bindkey("comma", "Dial 8", function () {
+// tones[7] = [];
+// tones[7][0] = playiso(1336, "callback", 0, beepgain, "sine");
+// tones[7][1] = playiso(852, "callback", 0, beepgain, "sine");
+// }, function () {
+// tones[7][0]();
+// tones[7][1]();
+// });
+// bindkey("period", "Dial 9", function () {
+// tones[8] = [];
+// tones[8][0] = playiso(1477, "callback", 0, beepgain, "sine");
+// tones[8][1] = playiso(852, "callback", 0, beepgain, "sine");
+// }, function () {
+// tones[8][0]();
+// tones[8][1]();
+// });
+// bindkey("forward_slash", "Dial 0", function () {
+// tones[9] = [];
+// tones[9][0] = playiso(1336, "callback", 0, beepgain, "sine");
+// tones[9][1] = playiso(941, "callback", 0, beepgain, "sine");
+// }, function () {
+// tones[9][0]();
+// tones[9][1]();
+// });
+
var sbinds = [
{
- name: "slidea",
- verbal: "A",
+ name: "kidnapped",
+ verbal: "Kidnapped",
+ key: "1"
+},
+{
+ name: "bowl",
+ verbal: "Bowling Alley",
+ key: "2"
+},
+{
+ name: "street",
+ verbal: "Street",
+ key: "3"
+},
+{
+ name: "beach",
+ verbal: "Beach",
key: "4"
},
{
- name: "slideb",
- verbal: "B",
+ name: "classroom",
+ verbal: "Classroom",
key: "5"
},
+{
+ name: "schcampus",
+ verbal: "School Campus",
+ key: "6"
+},
+{
+ name: "office",
+ verbal: "Office",
+ key: "7"
+},
+{
+ name: "flashback",
+ verbal: "3 years later",
+ key: "8"
+},
+{
+ name: "mur",
+ verbal: "4 Rounds",
+ key: "9"
+},
{
name: "blank",
- verbal: "blankscreen",
+ verbal: "Blank",
key: "0"
-}
+},
];
sbinds.forEach(function (obj) {
- bindkey(obj.key, obj.verbal, function () {
+ bindkey(obj.key, "slide: " + obj.verbal, function () {
socket.emit("data", {
name: obj.name
})
});
});
-
+// bindkey("BACKSPACE", "Stop All", function () {
bindkey("BACKSPACE", "Stop All", function () {
stopall();
});
@@ -384,6 +833,7 @@ updatekeys();
function playiso(freq, time, detune, gain, type) {
var osc = context.createOscillator();
+ // var volume = context.createGainNode();
var volume = context.createGain();
volume.gain.value = gain;
osc.type = type;
@@ -392,6 +842,8 @@ function playiso(freq, time, detune, gain, type) {
osc.connect(volume);
volume.connect(mastergain);
mastergain.connect(context.destination);
+ // osc.setWaveTable(waveTable);
+ // osc.connect(audio_context.destination);
osc.start(0);
if (time == "callback") {
return function () {
@@ -399,10 +851,15 @@ function playiso(freq, time, detune, gain, type) {
}
}
else if (time > 0) {
+ // setTimeout(function() {
osc.stop(context.currentTime + time / 1000);
+ // }, time);
}
}
+// playiso(40, 0, 0.4, "sine");
+// playiso(40, 0, 0.2, "triangle");
+
diff --git a/node_modules/socket.io/.npmignore b/node_modules/socket.io/.npmignore
new file mode 100644
index 0000000..39e9864
--- /dev/null
+++ b/node_modules/socket.io/.npmignore
@@ -0,0 +1,3 @@
+support
+test
+examples
diff --git a/node_modules/socket.io/.travis.yml b/node_modules/socket.io/.travis.yml
new file mode 100644
index 0000000..c32adcd
--- /dev/null
+++ b/node_modules/socket.io/.travis.yml
@@ -0,0 +1,13 @@
+language: node_js
+node_js:
+ - "0.8"
+ - "0.10"
+ - "0.11"
+
+matrix:
+ fast_finish: true
+ allow_failures:
+ - node_js: "0.11"
+
+notifications:
+ irc: "irc.freenode.org#socket.io"
diff --git a/node_modules/socket.io/History.md b/node_modules/socket.io/History.md
new file mode 100644
index 0000000..ef0de1f
--- /dev/null
+++ b/node_modules/socket.io/History.md
@@ -0,0 +1,399 @@
+
+1.0.6 / 2014-06-19
+==================
+
+ * package: bump `socket.io-client`
+
+1.0.5 / 2014-06-16
+==================
+
+ * package: bump `engine.io` to fix jsonp `\n` bug and CORS warnings
+ * index: fix typo [yanatan16]
+ * add `removeListener` to blacklisted events
+ * examples: clearer instructions to install chat example
+ * index: fix namespace `connectBuffer` issue
+
+1.0.4 / 2014-06-02
+==================
+
+ * package: bump socket.io-client
+
+1.0.3 / 2014-05-31
+==================
+
+ * package: bump `socket.io-client`
+ * package: bump `socket.io-parser` for binary ACK fix
+ * package: bump `engine.io` for binary UTF8 fix
+ * example: fix XSS in chat example
+
+1.0.2 / 2014-05-28
+==================
+
+ * package: bump `socket.io-parser` for windows fix
+
+1.0.1 / 2014-05-28
+==================
+
+ * bump due to bad npm tag
+
+1.0.0 / 2014-05-28
+==================
+
+ * stable release
+
+1.0.0-pre5 / 2014-05-22
+=======================
+
+ * package: bump `socket.io-client` for parser fixes
+ * package: bump `engine.io`
+
+1.0.0-pre4 / 2014-05-19
+=======================
+
+ * package: bump client
+
+1.0.0-pre3 / 2014-05-17
+=======================
+
+ * package: bump parser
+ * package: bump engine.io
+
+1.0.0-pre2 / 2014-04-27
+=======================
+
+ * package: bump `engine.io`
+ * added backwards compatible of engine.io maxHttpBufferSize
+ * added test that server and client using same protocol
+ * added support for setting allowed origins
+ * added information about logging
+ * the set function in server can be used to set some attributes for BC
+ * fix error in callback call 'done' instead of 'next' in docs
+ * package: bump `socket.io-parser`
+ * package: bump `expect.js`
+ * added some new tests, including binary with acks
+
+1.0.0-pre / 2014-03-14
+======================
+
+ * implemented `engine.io`
+ * implemented `socket.io-adapter`
+ * implemented `socket.io-protocol`
+ * implemented `debug` and improved instrumentation
+ * added binary support
+ * added new `require('io')(srv)` signature
+ * simplified `socket.io-client` serving
+
+0.9.14 / 2013-03-29
+===================
+
+ * manager: fix memory leak with SSL [jpallen]
+
+0.9.13 / 2012-12-13
+===================
+
+ * package: fixed `base64id` requirement
+
+0.9.12 / 2012-12-13
+===================
+
+ * manager: fix for latest node which is returning a clone with `listeners` [viirya]
+
+0.9.11 / 2012-11-02
+===================
+
+ * package: move redis to optionalDependenices [3rd-Eden]
+ * bumped client
+
+0.9.10 / 2012-08-10
+===================
+
+ * Don't lowercase log messages
+ * Always set the HTTP response in case an error should be returned to the client
+ * Create or destroy the flash policy server on configuration change
+ * Honour configuration to disable flash policy server
+ * Add express 3.0 instructions on Readme.md
+ * Bump client
+
+0.9.9 / 2012-08-01
+==================
+
+ * Fixed sync disconnect xhrs handling
+ * Put license text in its own file (#965)
+ * Add warning to .listen() to ease the migration to Express 3.x
+ * Restored compatibility with node 0.4.x
+
+0.9.8 / 2012-07-24
+==================
+
+ * Bumped client.
+
+0.9.7 / 2012-07-24
+==================
+
+ * Prevent crash when socket leaves a room twice.
+ * Corrects unsafe usage of for..in
+ * Fix for node 0.8 with `gzip compression` [vadimi]
+ * Update redis to support Node 0.8.x
+ * Made ID generation securely random
+ * Fix Redis Store race condition in manager onOpen unsubscribe callback
+ * Fix for EventEmitters always reusing the same Array instance for listeners
+
+0.9.6 / 2012-04-17
+==================
+
+ * Fixed XSS in jsonp-polling.
+
+0.9.5 / 2012-04-05
+==================
+
+ * Added test for polling and socket close.
+ * Ensure close upon request close.
+ * Fix disconnection reason being lost for polling transports.
+ * Ensure that polling transports work with Connection: close.
+ * Log disconnection reason.
+
+0.9.4 / 2012-04-01
+==================
+
+ * Disconnecting from namespace improvement (#795) [DanielBaulig]
+ * Bumped client with polling reconnection loop (#438)
+
+0.9.3 / 2012-03-28
+==================
+
+ * Fix "Syntax error" on FF Web Console with XHR Polling [mikito]
+
+0.9.2 / 2012-03-13
+==================
+
+ * More sensible close `timeout default` (fixes disconnect issue)
+
+0.9.1-1 / 2012-03-02
+====================
+
+ * Bumped client with NPM dependency fix.
+
+0.9.1 / 2012-03-02
+==================
+
+ * Changed heartbeat timeout and interval defaults (60 and 25 seconds)
+ * Make tests work both on 0.4 and 0.6
+ * Updated client (improvements + bug fixes).
+
+0.9.0 / 2012-02-26
+==================
+
+ * Make it possible to use a regexp to match the socket.io resource URL.
+ We need this because we have to prefix the socket.io URL with a variable ID.
+ * Supplemental fix to gavinuhma/authfix, it looks like the same Access-Control-Origin logic is needed in the http and xhr-polling transports
+ * Updated express dep for windows compatibility.
+ * Combine two substr calls into one in decodePayload to improve performance
+ * Minor documentation fix
+ * Minor. Conform to style of other files.
+ * Switching setting to 'match origin protocol'
+ * Revert "Fixes leaking Redis subscriptions for #663. The local flag was not getting passed through onClientDisconnect()."
+ * Revert "Handle leaked dispatch:[id] subscription."
+ * Merge pull request #667 from dshaw/patch/redis-disconnect
+ * Handle leaked dispatch:[id] subscription.
+ * Fixes leaking Redis subscriptions for #663. The local flag was not getting passed through onClientDisconnect().
+ * Prevent memory leaking on uncompleted requests & add max post size limitation
+ * Fix for testcase
+ * Set Access-Control-Allow-Credentials true, regardless of cookie
+ * Remove assertvarnish from package as it breaks on 0.6
+ * Correct irc channel
+ * Added proper return after reserved field error
+ * Fixes manager.js failure to close connection after transport error has happened
+ * Added implicit port 80 for origin checks. fixes #638
+ * Fixed bug #432 in 0.8.7
+ * Set Access-Control-Allow-Origin header to origin to enable withCredentials
+ * Adding configuration variable matchOriginProtocol
+ * Fixes location mismatch error in Safari.
+ * Use tty to detect if we should add colors or not by default.
+ * Updated the package location.
+
+0.8.7 / 2011-11-05
+==================
+
+ * Fixed memory leaks in closed clients.
+ * Fixed memory leaks in namespaces.
+ * Fixed websocket handling for malformed requests from proxies. [einaros]
+ * Node 0.6 compatibility. [einaros] [3rd-Eden]
+ * Adapted tests and examples.
+
+0.8.6 / 2011-10-27
+==================
+
+ * Added JSON decoding on jsonp-polling transport.
+ * Fixed README example.
+ * Major speed optimizations [3rd-Eden] [einaros] [visionmedia]
+ * Added decode/encode benchmarks [visionmedia]
+ * Added support for black-listing client sent events.
+ * Fixed logging options, closes #540 [3rd-Eden]
+ * Added vary header for gzip [3rd-Eden]
+ * Properly cleaned up async websocket / flashsocket tests, after patching node-websocket-client
+ * Patched to properly shut down when a finishClose call is made during connection establishment
+ * Added support for socket.io version on url and far-future Expires [3rd-Eden] [getify]
+ * Began IE10 compatibility [einaros] [tbranyen]
+ * Misc WebSocket fixes [einaros]
+ * Added UTF8 to respone headers for htmlfile [3rd-Eden]
+
+0.8.5 / 2011-10-07
+==================
+
+ * Added websocket draft HyBi-16 support. [einaros]
+ * Fixed websocket continuation bugs. [einaros]
+ * Fixed flashsocket transport name.
+ * Fixed websocket tests.
+ * Ensured `parser#decodePayload` doesn't choke.
+ * Added http referrer verification to manager verifyOrigin.
+ * Added access control for cross domain xhr handshakes [3rd-Eden]
+ * Added support for automatic generation of socket.io files [3rd-Eden]
+ * Added websocket binary support [einaros]
+ * Added gzip support for socket.io.js [3rd-Eden]
+ * Expose socket.transport [3rd-Eden]
+ * Updated client.
+
+0.8.4 / 2011-09-06
+==================
+
+ * Client build
+
+0.8.3 / 2011-09-03
+==================
+
+ * Fixed `\n` parsing for non-JSON packets (fixes #479).
+ * Fixed parsing of certain unicode characters (fixes #451).
+ * Fixed transport message packet logging.
+ * Fixed emission of `error` event resulting in an uncaught exception if unhandled (fixes #476).
+ * Fixed; allow for falsy values as the configuration value of `log level` (fixes #491).
+ * Fixed repository URI in `package.json`. Fixes #504.
+ * Added text/plain content-type to handshake responses [einaros]
+ * Improved single byte writes [einaros]
+ * Updated socket.io-flashsocket default port from 843 to 10843 [3rd-Eden]
+ * Updated client.
+
+0.8.2 / 2011-08-29
+==================
+
+ * Updated client.
+
+0.8.1 / 2011-08-29
+==================
+
+ * Fixed utf8 bug in send framing in websocket [einaros]
+ * Fixed typo in docs [Znarkus]
+ * Fixed bug in send framing for over 64kB of data in websocket [einaros]
+ * Corrected ping handling in websocket transport [einaros]
+
+0.8.0 / 2011-08-28
+==================
+
+ * Updated to work with two-level websocket versioning. [einaros]
+ * Added hybi07 support. [einaros]
+ * Added hybi10 support. [einaros]
+ * Added http referrer verification to manager.js verifyOrigin. [einaors]
+
+0.7.11 / 2011-08-27
+===================
+
+ * Updated socket.io-client.
+
+0.7.10 / 2011-08-27
+===================
+
+ * Updated socket.io-client.
+
+0.7.9 / 2011-08-12
+==================
+
+ * Updated socket.io-client.
+ * Make sure we only do garbage collection when the server we receive is actually run.
+
+0.7.8 / 2011-08-08
+==================
+
+ * Changed; make sure sio#listen passes options to both HTTP server and socket.io manager.
+ * Added docs for sio#listen.
+ * Added options parameter support for Manager constructor.
+ * Added memory leaks tests and test-leaks Makefile task.
+ * Removed auto npm-linking from make test.
+ * Make sure that you can disable heartbeats. [3rd-Eden]
+ * Fixed rooms memory leak [3rd-Eden]
+ * Send response once we got all POST data, not immediately [Pita]
+ * Fixed onLeave behavior with missing clientsk [3rd-Eden]
+ * Prevent duplicate references in rooms.
+ * Added alias for `to` to `in` and `in` to `to`.
+ * Fixed roomClients definition.
+ * Removed dependency on redis for installation without npm [3rd-Eden]
+ * Expose path and querystring in handshakeData [3rd-Eden]
+
+0.7.7 / 2011-07-12
+==================
+
+ * Fixed double dispatch handling with emit to closed clients.
+ * Added test for emitting to closed clients to prevent regression.
+ * Fixed race condition in redis test.
+ * Changed Transport#end instrumentation.
+ * Leveraged $emit instead of emit internally.
+ * Made tests faster.
+ * Fixed double disconnect events.
+ * Fixed disconnect logic
+ * Simplified remote events handling in Socket.
+ * Increased testcase timeout.
+ * Fixed unknown room emitting (GH-291). [3rd-Eden]
+ * Fixed `address` in handshakeData. [3rd-Eden]
+ * Removed transports definition in chat example.
+ * Fixed room cleanup
+ * Fixed; make sure the client is cleaned up after booting.
+ * Make sure to mark the client as non-open if the connection is closed.
+ * Removed unneeded `buffer` declarations.
+ * Fixed; make sure to clear socket handlers and subscriptions upon transport close.
+
+0.7.6 / 2011-06-30
+==================
+
+ * Fixed general dispatching when a client has closed.
+
+0.7.5 / 2011-06-30
+==================
+
+ * Fixed dispatching to clients that are disconnected.
+
+0.7.4 / 2011-06-30
+==================
+
+ * Fixed; only clear handlers if they were set. [level09]
+
+0.7.3 / 2011-06-30
+==================
+
+ * Exposed handshake data to clients.
+ * Refactored dispatcher interface.
+ * Changed; Moved id generation method into the manager.
+ * Added sub-namespace authorization. [3rd-Eden]
+ * Changed; normalized SocketNamespace local eventing [dvv]
+ * Changed; Use packet.reason or default to 'packet' [3rd-Eden]
+ * Changed console.error to console.log.
+ * Fixed; bind both servers at the same time do that the test never times out.
+ * Added 304 support.
+ * Removed `Transport#name` for abstract interface.
+ * Changed; lazily require http and https module only when needed. [3rd-Eden]
+
+0.7.2 / 2011-06-22
+==================
+
+ * Make sure to write a packet (of type `noop`) when closing a poll.
+ This solves a problem with cross-domain requests being flagged as aborted and
+ reconnection being triggered.
+ * Added `noop` message type.
+
+0.7.1 / 2011-06-21
+==================
+
+ * Fixed cross-domain XHR.
+ * Added CORS test to xhr-polling suite.
+
+0.7.0 / 2010-06-21
+==================
+
+ * http://socket.io/announcement.html
diff --git a/node_modules/socket.io/LICENSE b/node_modules/socket.io/LICENSE
new file mode 100644
index 0000000..81a9275
--- /dev/null
+++ b/node_modules/socket.io/LICENSE
@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2014 Automattic
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/socket.io/Makefile b/node_modules/socket.io/Makefile
new file mode 100644
index 0000000..4acf1e5
--- /dev/null
+++ b/node_modules/socket.io/Makefile
@@ -0,0 +1,15 @@
+
+REPORTER = dot
+
+test:
+ @./node_modules/.bin/mocha \
+ --reporter $(REPORTER) \
+ --slow 200ms \
+ --bail
+
+test-cov:
+ @./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- \
+ --reporter $(REPORTER) \
+ test/
+
+.PHONY: test
diff --git a/node_modules/socket.io/Readme.md b/node_modules/socket.io/Readme.md
new file mode 100644
index 0000000..674b263
--- /dev/null
+++ b/node_modules/socket.io/Readme.md
@@ -0,0 +1,346 @@
+
+# socket.io
+
+[![Build Status](https://secure.travis-ci.org/Automattic/socket.io.png)](http://travis-ci.org/Automattic/socket.io)
+[![NPM version](https://badge.fury.io/js/socket.io.png)](http://badge.fury.io/js/socket.io)
+
+## How to use
+
+The following example attaches socket.io to a plain Node.JS
+HTTP server listening on port `3000`.
+
+```js
+var server = require('http').Server();
+var io = require('socket.io')(server);
+io.on('connection', function(socket){
+ socket.on('event', function(data){});
+ socket.on('disconnect', function(){});
+});
+server.listen(3000);
+```
+
+### Standalone
+
+```js
+var io = require('socket.io')();
+io.on('connection', function(socket){});
+io.listen(3000);
+```
+
+### In conjunction with Express
+
+Starting with **3.0**, express applications have become request handler
+functions that you pass to `http` or `http` `Server` instances. You need
+to pass the `Server` to `socket.io`, and not the express application
+function.
+
+```js
+var app = require('express')();
+var server = require('http').Server(app);
+var io = require('socket.io')(server);
+io.on('connection', function(){ /* … */ });
+server.listen(3000);
+```
+
+### In conjunction with Koa
+
+Like Express.JS, Koa works by exposing an application as a request
+handler function, but only by calling the `callback` method.
+
+```js
+var app = require('koa')();
+var server = require('http').Server(app.callback());
+var io = require('socket.io')(server);
+io.on('connection', function(){ /* … */ });
+server.listen(3000);
+```
+
+## API
+
+### Server
+
+ Exposed by `require('socket.io')`.
+
+### Server()
+
+ Creates a new `Server`. Works with and without `new`:
+
+ ```js
+ var io = require('socket.io')();
+ // or
+ var Server = require('socket.io');
+ var io = new Server();
+ ```
+
+### Server(opts:Object)
+
+ Optionally, the first or second argument (see below) of the `Server`
+ constructor can be an options object.
+
+ The following options are supported:
+
+ - `serveClient` sets the value for Server#serveClient()
+ - `path` sets the value for Server#path()
+
+ The same options passed to socket.io are always passed to
+ the `engine.io` `Server` that gets created. See engine.io
+ [options](https://github.com/learnboost/engine.io#methods-1)
+ as reference.
+
+### Server(srv:http#Server, opts:Object)
+
+ Creates a new `Server` and attaches it to the given `srv`. Optionally
+ `opts` can be passed.
+
+### Server(port:Number, opts:Object)
+
+ Binds socket.io to a new `http.Server` that listens on `port`.
+
+### Server#serveClient(v:Boolean):Server
+
+ If `v` is `true` the attached server (see `Server#attach`) will serve
+ the client files. Defaults to `true`.
+
+ This method has no effect after `attach` is called.
+
+ ```js
+ // pass a server and the `serveClient` option
+ var io = require('socket.io')(http, { serveClient: false });
+
+ // or pass no server and then you can call the method
+ var io = require('socket.io')();
+ io.serveClient(false);
+ io.attach(http);
+ ```
+
+ If no arguments are supplied this method returns the current value.
+
+### Server#path(v:String):Server
+
+ Sets the path `v` under which `engine.io` and the static files will be
+ served. Defaults to `/socket.io`.
+
+ If no arguments are supplied this method returns the current value.
+
+### Server#adapter(v:Adapter):Server
+
+ Sets the adapter `v`. Defaults to an instance of the `Adapter` that
+ ships with socket.io which is memory based. See
+ [socket.io-adapter](https://github.com/Automattic/socket.io-adapter).
+
+ If no arguments are supplied this method returns the current value.
+
+### Server#origins(v:String):Server
+
+ Sets the allowed origins `v`. Defaults to any origins being allowed.
+
+ If no arguments are supplied this method returns the current value.
+
+
+### Server#sockets:Namespace
+
+ The default (`/`) namespace.
+
+### Server#attach(srv:http#Server, opts:Object):Server
+
+ Attaches the `Server` to an engine.io instance on `srv` with the
+ supplied `opts` (optionally).
+
+### Server#attach(port:Number, opts:Object):Server
+
+ Attaches the `Server` to an engine.io instance that is bound to `port`
+ with the given `opts` (optionally).
+
+### Server#listen
+
+ Synonym of `Server#attach`.
+
+### Server#bind(srv:engine#Server):Server
+
+ Advanced use only. Binds the server to a specific engine.io `Server`
+ (or compatible API) instance.
+
+### Server#onconnection(socket:engine#Socket):Server
+
+ Advanced use only. Creates a new `socket.io` client from the incoming
+ engine.io (or compatible API) `socket`.
+
+### Server#of(nsp:String):Namespace
+
+ Initializes and retrieves the given `Namespace` by its pathname
+ identifier `nsp`.
+
+ If the namespace was already initialized it returns it right away.
+
+### Server#emit
+
+ Emits an event to all connected clients. The following two are
+ equivalent:
+
+ ```js
+ var io = require('socket.io')();
+ io.sockets.emit('an event sent to all connected clients');
+ io.emit('an event sent to all connected clients');
+ ```
+
+ For other available methods, see `Namespace` below.
+
+### Server#use
+
+ See `Namespace#use` below.
+
+### Namespace
+
+ Represents a pool of sockets connected under a given scope identified
+ by a pathname (eg: `/chat`).
+
+ By default the client always connects to `/`.
+
+#### Events
+
+ - `connection` / `connect`. Fired upon a connection.
+
+ Parameters:
+ - `Socket` the incoming socket.
+
+### Namespace#name:String
+
+ The namespace identifier property.
+
+### Namespace#connected:Object
+
+ Hash of `Socket` objects that are connected to this namespace indexed
+ by `id`.
+
+### Namespace#use(fn:Function):Namespace
+
+ Registers a middleware, which is a function that gets executed for
+ every incoming `Socket` and receives as parameter the socket and a
+ function to optionally defer execution to the next registered
+ middleware.
+
+ ```js
+ var io = require('socket.io')();
+ io.use(function(socket, next){
+ if (socket.request.headers.cookie) return next();
+ next(new Error('Authentication error'));
+ });
+ ```
+
+ Errors passed to middleware callbacks are sent as special `error`
+ packets to clients.
+
+### Socket
+
+ A `Socket` is the fundamental class for interacting with browser
+ clients. A `Socket` belongs to a certain `Namespace` (by default `/`)
+ and uses an underlying `Client` to communicate.
+
+### Socket#rooms:Array
+
+ A list of strings identifying the rooms this socket is in.
+
+### Socket#client:Client
+
+ A reference to the underlying `Client` object.
+
+### Socket#conn:Socket
+
+ A reference to the underyling `Client` transport connection (engine.io
+ `Socket` object).
+
+### Socket#request:Request
+
+ A getter proxy that returns the reference to the `request` that
+ originated the underlying engine.io `Client`. Useful for accessing
+ request headers such as `Cookie` or `User-Agent`.
+
+### Socket#id:String
+
+ A unique identifier for the socket session, that comes from the
+ underlying `Client`.
+
+### Socket#emit(name:String[, …]):Socket
+
+ Emits an event to the socket identified by the string `name`. Any
+ other parameters can be included.
+
+ All datastructures are supported, including `Buffer`. JavaScript
+ functions can't be serialized/deserialized.
+
+ ```js
+ var io = require('socket.io')();
+ io.on('connection', function(socket){
+ socket.emit('an event', { some: 'data' });
+ });
+ ```
+
+### Socket#join(name:String[, fn:Function]):Socket
+
+ Adds the socket to the `room`, and fires optionally a callback `fn`
+ with `err` signature (if any).
+
+ The socket is automatically a member of a room identified with its
+ session id (see `Socket#id`).
+
+ The mechanics of joining rooms are handled by the `Adapter`
+ that has been configured (see `Server#adapter` above), defaulting to
+ [socket.io-adapter](https://github.com/Automattic/socket.io-adapter).
+
+### Socket#leave(name:String[, fn:Function]):Socket
+
+ Removes the socket from `room`, and fires optionally a callback `fn`
+ with `err` signature (if any).
+
+ **Rooms are left automatically upon disconnection**.
+
+ The mechanics of leaving rooms are handled by the `Adapter`
+ that has been configured (see `Server#adapter` above), defaulting to
+ [socket.io-adapter](https://github.com/Automattic/socket.io-adapter).
+
+### Socket#to(room:String):Socket
+### Socket#in(room:String):Socket
+
+ Sets a modifier for a subsequent event emission that the event will
+ only be _broadcasted_ to sockets that have joined the given `room`.
+
+ To emit to multiple rooms, you can call `to` several times.
+
+ ```js
+ var io = require('socket.io')();
+ io.on('connection', function(socket){
+ socket.to('others').emit('an event', { some: 'data' });
+ });
+ ```
+
+### Client
+
+ The `Client` class represents an incoming transport (engine.io)
+ connection. A `Client` can be associated with many multiplexed `Socket`
+ that belong to different `Namespace`s.
+
+### Client#conn
+
+ A reference to the underlying `engine.io` `Socket` connection.
+
+### Client#request
+
+ A getter proxy that returns the reference to the `request` that
+ originated the engine.io connection. Useful for accessing
+ request headers such as `Cookie` or `User-Agent`.
+
+## Debug / logging
+
+Socket.IO is powered by [debug](http://github.com/visionmedia/debug).
+In order to see all the debug output, run your app with the environment variable
+`DEBUG` including the desired scope.
+
+To see the output from all of Socket.IO's debugging scopes you can use:
+
+```
+DEBUG=socket.io* node myapp
+```
+
+## License
+
+MIT
diff --git a/node_modules/socket.io/index.js b/node_modules/socket.io/index.js
new file mode 100644
index 0000000..ce22d97
--- /dev/null
+++ b/node_modules/socket.io/index.js
@@ -0,0 +1,2 @@
+
+module.exports = require('./lib');
diff --git a/node_modules/socket.io/latest b/node_modules/socket.io/latest
new file mode 100755
index 0000000..a100193
--- /dev/null
+++ b/node_modules/socket.io/latest
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+npm tag socket.io@0.9.16 latest
diff --git a/node_modules/socket.io/lib/client.js b/node_modules/socket.io/lib/client.js
new file mode 100644
index 0000000..1836fce
--- /dev/null
+++ b/node_modules/socket.io/lib/client.js
@@ -0,0 +1,220 @@
+
+/**
+ * Module dependencies.
+ */
+
+var parser = require('socket.io-parser');
+var debug = require('debug')('socket.io:client');
+
+/**
+ * Module exports.
+ */
+
+module.exports = Client;
+
+/**
+ * Client constructor.
+ *
+ * @param {Server} server instance
+ * @param {Socket} connection
+ * @api private
+ */
+
+function Client(server, conn){
+ this.server = server;
+ this.conn = conn;
+ this.encoder = new parser.Encoder();
+ this.decoder = new parser.Decoder();
+ this.id = conn.id;
+ this.request = conn.request;
+ this.setup();
+ this.sockets = [];
+ this.nsps = {};
+ this.connectBuffer = [];
+}
+
+/**
+ * Sets up event listeners.
+ *
+ * @api private
+ */
+
+Client.prototype.setup = function(){
+ this.onclose = this.onclose.bind(this);
+ this.ondata = this.ondata.bind(this);
+ this.ondecoded = this.ondecoded.bind(this);
+ this.decoder.on('decoded', this.ondecoded);
+ this.conn.on('data', this.ondata);
+ this.conn.on('close', this.onclose);
+};
+
+/**
+ * Connects a client to a namespace.
+ *
+ * @param {String} namespace name
+ * @api private
+ */
+
+Client.prototype.connect = function(name){
+ debug('connecting to namespace %s', name);
+ var nsp = this.server.of(name);
+ if ('/' != name && !this.nsps['/']) {
+ this.connectBuffer.push(name);
+ return;
+ }
+
+ var self = this;
+ var socket = nsp.add(this, function(){
+ self.sockets.push(socket);
+ self.nsps[nsp.name] = socket;
+
+ if ('/' == nsp.name && self.connectBuffer) {
+ self.connectBuffer.forEach(self.connect, self);
+ delete self.connectBuffer;
+ }
+ });
+};
+
+/**
+ * Disconnects from all namespaces and closes transport.
+ *
+ * @api private
+ */
+
+Client.prototype.disconnect = function(){
+ var socket;
+ // we don't use a for loop because the length of
+ // `sockets` changes upon each iteration
+ while (socket = this.sockets.shift()) {
+ socket.disconnect();
+ }
+ this.close();
+};
+
+/**
+ * Removes a socket. Called by each `Socket`.
+ *
+ * @api private
+ */
+
+Client.prototype.remove = function(socket){
+ var i = this.sockets.indexOf(socket);
+ if (~i) {
+ var nsp = this.sockets[i].nsp.name;
+ this.sockets.splice(i, 1);
+ delete this.nsps[nsp];
+ } else {
+ debug('ignoring remove for %s', socket.id);
+ }
+};
+
+/**
+ * Closes the underlying connection.
+ *
+ * @api private
+ */
+
+Client.prototype.close = function(){
+ if ('open' == this.conn.readyState) {
+ debug('forcing transport close');
+ this.conn.close();
+ this.onclose('forced server close');
+ }
+};
+
+/**
+ * Writes a packet to the transport.
+ *
+ * @param {Object} packet object
+ * @param {Boolean} whether packet is already encoded
+ * @param {Boolean} whether packet is volatile
+ * @api private
+ */
+
+Client.prototype.packet = function(packet, preEncoded, volatile){
+ var self = this;
+
+ // this writes to the actual connection
+ function writeToEngine(encodedPackets) {
+ if (volatile && !self.conn.transport.writable) return;
+ for (var i = 0; i < encodedPackets.length; i++) {
+ self.conn.write(encodedPackets[i]);
+ }
+ }
+
+ if ('open' == this.conn.readyState) {
+ debug('writing packet %j', packet);
+ if(!preEncoded) { // not broadcasting, need to encode
+ this.encoder.encode(packet, function (encodedPackets) { // encode, then write results to engine
+ writeToEngine(encodedPackets);
+ });
+ } else { // a broadcast pre-encodes a packet
+ writeToEngine(packet);
+ }
+ } else {
+ debug('ignoring packet write %j', packet);
+ }
+};
+
+/**
+ * Called with incoming transport data.
+ *
+ * @api private
+ */
+
+Client.prototype.ondata = function(data){
+ this.decoder.add(data);
+};
+
+/**
+ * Called when parser fully decodes a packet.
+ *
+ * @api private
+ */
+
+Client.prototype.ondecoded = function(packet) {
+ if (parser.CONNECT == packet.type) {
+ this.connect(packet.nsp);
+ } else {
+ var socket = this.nsps[packet.nsp];
+ if (socket) {
+ socket.onpacket(packet);
+ } else {
+ debug('no socket for namespace %s', packet.nsp);
+ }
+ }
+};
+
+/**
+ * Called upon transport close.
+ *
+ * @param {String} reason
+ * @api private
+ */
+
+Client.prototype.onclose = function(reason){
+ debug('client close with reason %s', reason);
+
+ // ignore a potential subsequent `close` event
+ this.destroy();
+
+ // `nsps` and `sockets` are cleaned up seamlessly
+ var socket;
+ while (socket = this.sockets.shift()) {
+ socket.onclose(reason);
+ }
+
+ this.decoder.destroy(); // clean up decoder
+};
+
+/**
+ * Cleans up event listeners.
+ *
+ * @api private
+ */
+
+Client.prototype.destroy = function(){
+ this.conn.removeListener('data', this.ondata);
+ this.conn.removeListener('close', this.onclose);
+ this.decoder.removeListener('decoded', this.ondecoded);
+};
diff --git a/node_modules/socket.io/lib/index.js b/node_modules/socket.io/lib/index.js
new file mode 100644
index 0000000..6e6d049
--- /dev/null
+++ b/node_modules/socket.io/lib/index.js
@@ -0,0 +1,353 @@
+
+/**
+ * Module dependencies.
+ */
+
+var http = require('http');
+var read = require('fs').readFileSync;
+var parse = require('url').parse;
+var engine = require('engine.io');
+var client = require('socket.io-client');
+var clientVersion = require('socket.io-client/package').version;
+var Client = require('./client');
+var Namespace = require('./namespace');
+var Adapter = require('socket.io-adapter');
+var debug = require('debug')('socket.io:server');
+var url = require('url');
+
+/**
+ * Module exports.
+ */
+
+module.exports = Server;
+
+/**
+ * Socket.IO client source.
+ */
+
+var clientSource = read(require.resolve('socket.io-client/socket.io.js'), 'utf-8');
+
+/**
+ * Server constructor.
+ *
+ * @param {http.Server|Number|Object} http server, port or options
+ * @param {Object} options
+ * @api public
+ */
+
+function Server(srv, opts){
+ if (!(this instanceof Server)) return new Server(srv, opts);
+ if ('object' == typeof srv && !srv.listen) {
+ opts = srv;
+ srv = null;
+ }
+ opts = opts || {};
+ this.nsps = {};
+ this.path(opts.path || '/socket.io');
+ this.serveClient(false !== opts.serveClient);
+ this.adapter(opts.adapter || Adapter);
+ this.origins(opts.origins || '*:*');
+ this.sockets = this.of('/');
+ if (srv) this.attach(srv, opts);
+}
+
+/**
+ * Server request verification function, that checks for allowed origins
+ *
+ * @param {http.IncomingMessage} request
+ * @param {Function} callback to be called with the result: `fn(err, success)`
+ */
+
+Server.prototype.checkRequest = function(req, fn) {
+ var origin = req.headers.origin || req.headers.referer;
+
+ // file:// URLs produce a null Origin which can't be authorized via echo-back
+ if ('null' == origin) origin = '*';
+
+ if (this._origins.indexOf('*:*') !== -1) return fn(null, true);
+ if (origin) {
+ try {
+ var parts = url.parse(origin);
+ parts.port = parts.port || 80;
+ var ok =
+ ~this._origins.indexOf(parts.hostname + ':' + parts.port) ||
+ ~this._origins.indexOf(parts.hostname + ':*') ||
+ ~this._origins.indexOf('*:' + parts.port);
+ return fn(null, !!ok);
+ } catch (ex) {
+ }
+ }
+ fn(null, false);
+};
+
+/**
+ * Sets/gets whether client code is being served.
+ *
+ * @param {Boolean} whether to serve client code
+ * @return {Server|Boolean} self when setting or value when getting
+ * @api public
+ */
+
+Server.prototype.serveClient = function(v){
+ if (!arguments.length) return this._serveClient;
+ this._serveClient = v;
+ return this;
+};
+
+/**
+ * Old settings for backwards compatibility
+ */
+
+var oldSettings = {
+ "transports": "transports",
+ "heartbeat timeout": "pingTimeout",
+ "heartbeat interval": "pingInterval",
+ "destroy buffer size": "maxHttpBufferSize"
+};
+
+/**
+ * Backwards compatiblity.
+ *
+ * @api public
+ */
+
+Server.prototype.set = function(key, val){
+ if ('authorization' == key && val) {
+ this.use(function(socket, next) {
+ val(socket.request, function(err, authorized) {
+ if (err) return next(new Error(err));
+ if (!authorized) return next(new Error('Not authorized'));
+ next();
+ });
+ });
+ } else if ('origins' == key && val) {
+ this.origins(val);
+ } else if ('resource' == key) {
+ this.path(val);
+ } else if (oldSettings[key] && this.eio[oldSettings[key]]) {
+ this.eio[oldSettings[key]] = val;
+ } else {
+ console.error('Option %s is not valid. Please refer to the README.', key);
+ }
+
+ return this;
+};
+
+/**
+ * Sets the client serving path.
+ *
+ * @param {String} pathname
+ * @return {Server|String} self when setting or value when getting
+ * @api public
+ */
+
+Server.prototype.path = function(v){
+ if (!arguments.length) return this._path;
+ this._path = v.replace(/\/$/, '');
+ return this;
+};
+
+/**
+ * Sets the adapter for rooms.
+ *
+ * @param {Adapter} pathname
+ * @return {Server|Adapter} self when setting or value when getting
+ * @api public
+ */
+
+Server.prototype.adapter = function(v){
+ if (!arguments.length) return this._adapter;
+ this._adapter = v;
+ for (var i in this.nsps) {
+ if (this.nsps.hasOwnProperty(i)) {
+ this.nsps[i].initAdapter();
+ }
+ }
+ return this;
+};
+
+/**
+ * Sets the allowed origins for requests.
+ *
+ * @param {String} origins
+ * @return {Server|Adapter} self when setting or value when getting
+ * @api public
+ */
+
+Server.prototype.origins = function(v){
+ if (!arguments.length) return this._origins;
+
+ this._origins = v;
+ return this;
+};
+
+/**
+ * Attaches socket.io to a server or port.
+ *
+ * @param {http.Server|Number} server or port
+ * @param {Object} options passed to engine.io
+ * @return {Server} self
+ * @api public
+ */
+
+Server.prototype.listen =
+Server.prototype.attach = function(srv, opts){
+ if ('function' == typeof srv) {
+ var msg = 'You are trying to attach socket.io to an express' +
+ 'request handler function. Please pass a http.Server instance.';
+ throw new Error(msg);
+ }
+
+ // handle a port as a string
+ if (Number(srv) == srv) {
+ srv = Number(srv);
+ }
+
+ if ('number' == typeof srv) {
+ debug('creating http server and binding to %d', srv);
+ var port = srv;
+ srv = http.Server(function(req, res){
+ res.writeHead(404);
+ res.end();
+ });
+ srv.listen(port);
+ }
+
+ // set engine.io path to `/socket.io`
+ opts = opts || {};
+ opts.path = opts.path || '/socket.io';
+ // set origins verification
+ opts.allowRequest = this.checkRequest.bind(this);
+
+ // initialize engine
+ debug('creating engine.io instance with opts %j', opts);
+ this.eio = engine.attach(srv, opts);
+
+ // attach static file serving
+ if (this._serveClient) this.attachServe(srv);
+
+ // bind to engine events
+ this.bind(this.eio);
+
+ return this;
+};
+
+/**
+ * Attaches the static file serving.
+ *
+ * @param {Function|http.Server} http server
+ * @api private
+ */
+
+Server.prototype.attachServe = function(srv){
+ debug('attaching client serving req handler');
+ var url = this._path + '/socket.io.js';
+ var evs = srv.listeners('request').slice(0);
+ var self = this;
+ srv.removeAllListeners('request');
+ srv.on('request', function(req, res) {
+ if (0 == req.url.indexOf(url)) {
+ self.serve(req, res);
+ } else {
+ for (var i = 0; i < evs.length; i++) {
+ evs[i].call(srv, req, res);
+ }
+ }
+ });
+};
+
+/**
+ * Handles a request serving `/socket.io.js`
+ *
+ * @param {http.Request} req
+ * @param {http.Response} res
+ * @api private
+ */
+
+Server.prototype.serve = function(req, res){
+ if (req.headers.etag) {
+ if (clientVersion == req.headers.etag) {
+ debug('serve client 304');
+ res.writeHead(304);
+ res.end();
+ return;
+ }
+ }
+
+ debug('serve client source');
+ res.setHeader('Content-Type', 'application/javascript');
+ res.setHeader('ETag', clientVersion);
+ res.writeHead(200);
+ res.end(clientSource);
+};
+
+/**
+ * Binds socket.io to an engine.io instance.
+ *
+ * @param {engine.Server} engine.io (or compatible) server
+ * @return {Server} self
+ * @api public
+ */
+
+Server.prototype.bind = function(engine){
+ this.engine = engine;
+ this.engine.on('connection', this.onconnection.bind(this));
+ return this;
+};
+
+/**
+ * Called with each incoming transport connection.
+ *
+ * @param {engine.Socket} socket
+ * @return {Server} self
+ * @api public
+ */
+
+Server.prototype.onconnection = function(conn){
+ debug('incoming connection with id %s', conn.id);
+ var client = new Client(this, conn);
+ client.connect('/');
+ return this;
+};
+
+/**
+ * Looks up a namespace.
+ *
+ * @param {String} nsp name
+ * @param {Function} optional, nsp `connection` ev handler
+ * @api public
+ */
+
+Server.prototype.of = function(name, fn){
+ if (!this.nsps[name]) {
+ debug('initializing namespace %s', name);
+ var nsp = new Namespace(this, name);
+ this.nsps[name] = nsp;
+ }
+ if (fn) this.nsps[name].on('connect', fn);
+ return this.nsps[name];
+};
+
+/**
+ * Expose main namespace (/).
+ */
+
+['on', 'to', 'in', 'use', 'emit', 'send', 'write'].forEach(function(fn){
+ Server.prototype[fn] = function(){
+ var nsp = this.sockets[fn];
+ return nsp.apply(this.sockets, arguments);
+ };
+});
+
+Namespace.flags.forEach(function(flag){
+ Server.prototype.__defineGetter__(flag, function(name){
+ this.flags.push(name);
+ return this;
+ });
+});
+
+/**
+ * BC with `io.listen`
+ */
+
+Server.listen = Server;
diff --git a/node_modules/socket.io/lib/namespace.js b/node_modules/socket.io/lib/namespace.js
new file mode 100644
index 0000000..4ae0b15
--- /dev/null
+++ b/node_modules/socket.io/lib/namespace.js
@@ -0,0 +1,242 @@
+
+/**
+ * Module dependencies.
+ */
+
+var Socket = require('./socket');
+var Emitter = require('events').EventEmitter;
+var parser = require('socket.io-parser');
+var debug = require('debug')('socket.io:namespace');
+var hasBin = require('has-binary-data');
+
+/**
+ * Module exports.
+ */
+
+module.exports = exports = Namespace;
+
+/**
+ * Blacklisted events.
+ */
+
+exports.events = [
+ 'connect', // for symmetry with client
+ 'connection',
+ 'newListener'
+];
+
+/**
+ * Flags.
+ */
+
+exports.flags = ['json'];
+
+/**
+ * `EventEmitter#emit` reference.
+ */
+
+var emit = Emitter.prototype.emit;
+
+/**
+ * Namespace constructor.
+ *
+ * @param {Server} server instance
+ * @param {Socket} name
+ * @api private
+ */
+
+function Namespace(server, name){
+ this.name = name;
+ this.server = server;
+ this.sockets = [];
+ this.connected = {};
+ this.fns = [];
+ this.ids = 0;
+ this.acks = {};
+ this.initAdapter();
+}
+
+/**
+ * Inherits from `EventEmitter`.
+ */
+
+Namespace.prototype.__proto__ = Emitter.prototype;
+
+/**
+ * Apply flags from `Socket`.
+ */
+
+exports.flags.forEach(function(flag){
+ Namespace.prototype.__defineGetter__(flag, function(){
+ this.flags = this.flags || {};
+ this.flags[flag] = true;
+ return this;
+ });
+});
+
+/**
+ * Initializes the `Adapter` for this nsp.
+ * Run upon changing adapter by `Server#adapter`
+ * in addition to the constructor.
+ *
+ * @api private
+ */
+
+Namespace.prototype.initAdapter = function(){
+ this.adapter = new (this.server.adapter())(this);
+};
+
+/**
+ * Sets up namespace middleware.
+ *
+ * @return {Namespace} self
+ * @api public
+ */
+
+Namespace.prototype.use = function(fn){
+ this.fns.push(fn);
+ return this;
+};
+
+/**
+ * Executes the middleware for an incoming client.
+ *
+ * @param {Socket} socket that will get added
+ * @param {Function} last fn call in the middleware
+ * @api private
+ */
+
+Namespace.prototype.run = function(socket, fn){
+ var fns = this.fns.slice(0);
+ if (!fns.length) return fn(null);
+
+ function run(i){
+ fns[i](socket, function(err){
+ // upon error, short-circuit
+ if (err) return fn(err);
+
+ // if no middleware left, summon callback
+ if (!fns[i + 1]) return fn(null);
+
+ // go on to next
+ run(i + 1);
+ });
+ }
+
+ run(0);
+};
+
+/**
+ * Targets a room when emitting.
+ *
+ * @param {String} name
+ * @return {Namespace} self
+ * @api public
+ */
+
+Namespace.prototype.to =
+Namespace.prototype['in'] = function(name){
+ this.rooms = this.rooms || [];
+ if (!~this.rooms.indexOf(name)) this.rooms.push(name);
+ return this;
+};
+
+/**
+ * Adds a new client.
+ *
+ * @return {Socket}
+ * @api private
+ */
+
+Namespace.prototype.add = function(client, fn){
+ debug('adding socket to nsp %s', this.name);
+ var socket = new Socket(this, client);
+ var self = this;
+ this.run(socket, function(err){
+ process.nextTick(function(){
+ if ('open' == client.conn.readyState) {
+ if (err) return socket.error(err.data || err.message);
+
+ // track socket
+ self.sockets.push(socket);
+
+ // it's paramount that the internal `onconnect` logic
+ // fires before user-set events to prevent state order
+ // violations (such as a disconnection before the connection
+ // logic is complete)
+ socket.onconnect();
+ if (fn) fn();
+
+ // fire user-set events
+ self.emit('connect', socket);
+ self.emit('connection', socket);
+ } else {
+ debug('next called after client was closed - ignoring socket');
+ }
+ });
+ });
+ return socket;
+};
+
+/**
+ * Removes a client. Called by each `Socket`.
+ *
+ * @api private
+ */
+
+Namespace.prototype.remove = function(socket){
+ var i = this.sockets.indexOf(socket);
+ if (~i) {
+ this.sockets.splice(i, 1);
+ } else {
+ debug('ignoring remove for %s', socket.id);
+ }
+};
+
+/**
+ * Emits to all clients.
+ *
+ * @return {Namespace} self
+ * @api public
+ */
+
+Namespace.prototype.emit = function(ev){
+ if (~exports.events.indexOf(ev)) {
+ emit.apply(this, arguments);
+ } else {
+ // set up packet object
+ var args = Array.prototype.slice.call(arguments);
+ var parserType = parser.EVENT; // default
+ if (hasBin(args)) { parserType = parser.BINARY_EVENT; } // binary
+
+ var packet = { type: parserType, data: args };
+
+ if ('function' == typeof args[args.length - 1]) {
+ throw new Error('Callbacks are not supported when broadcasting');
+ }
+
+ this.adapter.broadcast(packet, {
+ rooms: this.rooms,
+ flags: this.flags
+ });
+
+ delete this.rooms;
+ delete this.flags;
+ }
+ return this;
+};
+
+/**
+ * Sends a `message` event to all clients.
+ *
+ * @return {Namespace} self
+ * @api public
+ */
+
+Namespace.prototype.send =
+Namespace.prototype.write = function(){
+ var args = Array.prototype.slice.call(arguments);
+ args.unshift('message');
+ this.emit.apply(this, args);
+ return this;
+};
diff --git a/node_modules/socket.io/lib/socket.js b/node_modules/socket.io/lib/socket.js
new file mode 100644
index 0000000..64cf544
--- /dev/null
+++ b/node_modules/socket.io/lib/socket.js
@@ -0,0 +1,429 @@
+
+/**
+ * Module dependencies.
+ */
+
+var Emitter = require('events').EventEmitter;
+var parser = require('socket.io-parser');
+var url = require('url');
+var debug = require('debug')('socket.io:socket');
+var hasBin = require('has-binary-data');
+
+/**
+ * Module exports.
+ */
+
+module.exports = exports = Socket;
+
+/**
+ * Blacklisted events.
+ *
+ * @api public
+ */
+
+exports.events = [
+ 'error',
+ 'connect',
+ 'disconnect',
+ 'newListener',
+ 'removeListener'
+];
+
+/**
+ * Flags.
+ *
+ * @api private
+ */
+
+var flags = [
+ 'json',
+ 'volatile',
+ 'broadcast'
+];
+
+/**
+ * `EventEmitter#emit` reference.
+ */
+
+var emit = Emitter.prototype.emit;
+
+/**
+ * Interface to a `Client` for a given `Namespace`.
+ *
+ * @param {Namespace} nsp
+ * @param {Client} client
+ * @api public
+ */
+
+function Socket(nsp, client){
+ this.nsp = nsp;
+ this.server = nsp.server;
+ this.adapter = this.nsp.adapter;
+ this.id = client.id;
+ this.request = client.request;
+ this.client = client;
+ this.conn = client.conn;
+ this.rooms = [];
+ this.acks = {};
+ this.connected = true;
+ this.disconnected = false;
+ this.handshake = this.buildHandshake();
+}
+
+/**
+ * Inherits from `EventEmitter`.
+ */
+
+Socket.prototype.__proto__ = Emitter.prototype;
+
+/**
+ * Apply flags from `Socket`.
+ */
+
+flags.forEach(function(flag){
+ Socket.prototype.__defineGetter__(flag, function(){
+ this.flags = this.flags || {};
+ this.flags[flag] = true;
+ return this;
+ });
+});
+
+/**
+ * `request` engine.io shorcut.
+ *
+ * @api public
+ */
+
+Socket.prototype.__defineGetter__('request', function(){
+ return this.conn.request;
+});
+
+/**
+ * Builds the `handshake` BC object
+ *
+ * @api private
+ */
+
+Socket.prototype.buildHandshake = function(){
+ return {
+ headers: this.request.headers,
+ time: (new Date) + '',
+ address: this.request.connection.address(),
+ xdomain: !!this.request.headers.origin,
+ secure: !!this.request.connection.encrypted,
+ issued: +(new Date),
+ url: this.request.url,
+ query: url.parse(this.request.url, true).query || {}
+ };
+};
+
+/**
+ * Emits to this client.
+ *
+ * @return {Socket} self
+ * @api public
+ */
+
+Socket.prototype.emit = function(ev){
+ if (~exports.events.indexOf(ev)) {
+ emit.apply(this, arguments);
+ } else {
+ var args = Array.prototype.slice.call(arguments);
+ var packet = {};
+ packet.type = hasBin(args) ? parser.BINARY_EVENT : parser.EVENT;
+ packet.data = args;
+
+ // access last argument to see if it's an ACK callback
+ if ('function' == typeof args[args.length - 1]) {
+ if (this._rooms || (this.flags && this.flags.broadcast)) {
+ throw new Error('Callbacks are not supported when broadcasting');
+ }
+
+ debug('emitting packet with ack id %d', this.nsp.ids);
+ this.acks[this.nsp.ids] = args.pop();
+ packet.id = this.nsp.ids++;
+ }
+
+ if (this._rooms || (this.flags && this.flags.broadcast)) {
+ this.adapter.broadcast(packet, {
+ except: [this.id],
+ rooms: this._rooms,
+ flags: this.flags
+ });
+ } else {
+ // dispatch packet
+ this.packet(packet);
+ }
+
+ // reset flags
+ delete this._rooms;
+ delete this.flags;
+ }
+ return this;
+};
+
+/**
+ * Targets a room when broadcasting.
+ *
+ * @param {String} name
+ * @return {Socket} self
+ * @api public
+ */
+
+Socket.prototype.to =
+Socket.prototype.in = function(name){
+ this._rooms = this._rooms || [];
+ if (!~this._rooms.indexOf(name)) this._rooms.push(name);
+ return this;
+};
+
+/**
+ * Sends a `message` event.
+ *
+ * @return {Socket} self
+ * @api public
+ */
+
+Socket.prototype.send =
+Socket.prototype.write = function(){
+ var args = Array.prototype.slice.call(arguments);
+ args.unshift('message');
+ this.emit.apply(this, args);
+ return this;
+};
+
+/**
+ * Writes a packet.
+ *
+ * @param {Object} packet object
+ * @api private
+ */
+
+Socket.prototype.packet = function(packet, preEncoded){
+ packet.nsp = this.nsp.name;
+ var volatile = this.flags && this.flags.volatile;
+ this.client.packet(packet, preEncoded, volatile);
+};
+
+/**
+ * Joins a room.
+ *
+ * @param {String} room
+ * @param {Function} optional, callback
+ * @return {Socket} self
+ * @api private
+ */
+
+Socket.prototype.join = function(room, fn){
+ debug('joining room %s', room);
+ var self = this;
+ if (~this.rooms.indexOf(room)) return this;
+ this.adapter.add(this.id, room, function(err){
+ if (err) return fn && fn(err);
+ debug('joined room %s', room);
+ self.rooms.push(room);
+ fn && fn(null);
+ });
+ return this;
+};
+
+/**
+ * Leaves a room.
+ *
+ * @param {String} room
+ * @param {Function} optional, callback
+ * @return {Socket} self
+ * @api private
+ */
+
+Socket.prototype.leave = function(room, fn){
+ debug('leave room %s', room);
+ var self = this;
+ this.adapter.del(this.id, room, function(err){
+ if (err) return fn && fn(err);
+ debug('left room %s', room);
+ self.rooms.splice(self.rooms.indexOf(room, 1));
+ fn && fn(null);
+ });
+ return this;
+};
+
+/**
+ * Leave all rooms.
+ *
+ * @api private
+ */
+
+Socket.prototype.leaveAll = function(){
+ this.adapter.delAll(this.id);
+};
+
+/**
+ * Called by `Namespace` upon succesful
+ * middleware execution (ie: authorization).
+ *
+ * @api private
+ */
+
+Socket.prototype.onconnect = function(){
+ debug('socket connected - writing packet');
+ this.join(this.id);
+ this.packet({ type: parser.CONNECT });
+ this.nsp.connected[this.id] = this;
+};
+
+/**
+ * Called with each packet. Called by `Client`.
+ *
+ * @param {Object} packet
+ * @api private
+ */
+
+Socket.prototype.onpacket = function(packet){
+ debug('got packet %j', packet);
+ switch (packet.type) {
+ case parser.EVENT:
+ this.onevent(packet);
+ break;
+
+ case parser.BINARY_EVENT:
+ this.onevent(packet);
+ break;
+
+ case parser.ACK:
+ this.onack(packet);
+ break;
+
+ case parser.BINARY_ACK:
+ this.onack(packet);
+ break;
+
+ case parser.DISCONNECT:
+ this.ondisconnect();
+ break;
+
+ case parser.ERROR:
+ this.emit('error', packet.data);
+ }
+};
+
+/**
+ * Called upon event packet.
+ *
+ * @param {Object} packet object
+ * @api private
+ */
+
+Socket.prototype.onevent = function(packet){
+ var args = packet.data || [];
+ debug('emitting event %j', args);
+
+ if (null != packet.id) {
+ debug('attaching ack callback to event');
+ args.push(this.ack(packet.id));
+ }
+
+ emit.apply(this, args);
+};
+
+/**
+ * Produces an ack callback to emit with an event.
+ *
+ * @param {Number} packet id
+ * @api private
+ */
+
+Socket.prototype.ack = function(id){
+ var self = this;
+ var sent = false;
+ return function(){
+ // prevent double callbacks
+ if (sent) return;
+ var args = Array.prototype.slice.call(arguments);
+ debug('sending ack %j', args);
+
+ var type = hasBin(args) ? parser.BINARY_ACK : parser.ACK;
+ self.packet({
+ id: id,
+ type: type,
+ data: args
+ });
+ };
+};
+
+/**
+ * Called upon ack packet.
+ *
+ * @api private
+ */
+
+Socket.prototype.onack = function(packet){
+ var ack = this.acks[packet.id];
+ if ('function' == typeof ack) {
+ debug('calling ack %s with %j', packet.id, packet.data);
+ ack.apply(this, packet.data);
+ delete this.acks[packet.id];
+ } else {
+ debug('bad ack %s', packet.id);
+ }
+};
+
+/**
+ * Called upon client disconnect packet.
+ *
+ * @api private
+ */
+
+Socket.prototype.ondisconnect = function(){
+ debug('got disconnect packet');
+ this.onclose('client namespace disconnect');
+};
+
+/**
+ * Called upon closing. Called by `Client`.
+ *
+ * @param {String} reason
+ * @api private
+ */
+
+Socket.prototype.onclose = function(reason){
+ if (!this.connected) return this;
+ debug('closing socket - reason %s', reason);
+ this.leaveAll();
+ this.nsp.remove(this);
+ this.client.remove(this);
+ this.connected = false;
+ this.disconnected = true;
+ delete this.nsp.connected[this.id];
+ this.emit('disconnect', reason);
+};
+
+/**
+ * Produces an `error` packet.
+ *
+ * @param {Object} error object
+ * @api private
+ */
+
+Socket.prototype.error = function(err){
+ this.packet({ type: parser.ERROR, data: err });
+};
+
+/**
+ * Disconnects this client.
+ *
+ * @param {Boolean} if `true`, closes the underlying connection
+ * @return {Socket} self
+ * @api public
+ */
+
+Socket.prototype.disconnect = function(close){
+ if (!this.connected) return this;
+ if (close) {
+ this.client.disconnect();
+ } else {
+ this.packet({ type: parser.DISCONNECT });
+ this.onclose('server namespace disconnect');
+ }
+ return this;
+};
diff --git a/node_modules/socket.io/node_modules/debug/Readme.md b/node_modules/socket.io/node_modules/debug/Readme.md
new file mode 100644
index 0000000..c5a34e8
--- /dev/null
+++ b/node_modules/socket.io/node_modules/debug/Readme.md
@@ -0,0 +1,115 @@
+# debug
+
+ tiny node.js debugging utility modelled after node core's debugging technique.
+
+## Installation
+
+```
+$ npm install debug
+```
+
+## Usage
+
+ With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility.
+
+Example _app.js_:
+
+```js
+var debug = require('debug')('http')
+ , http = require('http')
+ , name = 'My App';
+
+// fake app
+
+debug('booting %s', name);
+
+http.createServer(function(req, res){
+ debug(req.method + ' ' + req.url);
+ res.end('hello\n');
+}).listen(3000, function(){
+ debug('listening');
+});
+
+// fake worker of some kind
+
+require('./worker');
+```
+
+Example _worker.js_:
+
+```js
+var debug = require('debug')('worker');
+
+setInterval(function(){
+ debug('doing some work');
+}, 1000);
+```
+
+ The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:
+
+ ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png)
+
+ ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png)
+
+## Millisecond diff
+
+ When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls.
+
+ ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png)
+
+ When stderr is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:
+ _(NOTE: Debug now uses stderr instead of stdout, so the correct shell command for this example is actually `DEBUG=* node example/worker 2> out &`)_
+
+ ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png)
+
+## Conventions
+
+ If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser".
+
+## Wildcards
+
+ The "*" character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect.compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.
+
+ You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=* -connect:*` would include all debuggers except those starting with "connect:".
+
+## Browser support
+
+ Debug works in the browser as well, currently persisted by `localStorage`. For example if you have `worker:a` and `worker:b` as shown below, and wish to debug both type `debug.enable('worker:*')` in the console and refresh the page, this will remain until you disable with `debug.disable()`.
+
+```js
+a = debug('worker:a');
+b = debug('worker:b');
+
+setInterval(function(){
+ a('doing some work');
+}, 1000);
+
+setInterval(function(){
+ a('doing some work');
+}, 1200);
+```
+
+## License
+
+(The MIT License)
+
+Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/socket.io/node_modules/debug/debug.js b/node_modules/socket.io/node_modules/debug/debug.js
new file mode 100644
index 0000000..509dc0d
--- /dev/null
+++ b/node_modules/socket.io/node_modules/debug/debug.js
@@ -0,0 +1,137 @@
+
+/**
+ * Expose `debug()` as the module.
+ */
+
+module.exports = debug;
+
+/**
+ * Create a debugger with the given `name`.
+ *
+ * @param {String} name
+ * @return {Type}
+ * @api public
+ */
+
+function debug(name) {
+ if (!debug.enabled(name)) return function(){};
+
+ return function(fmt){
+ fmt = coerce(fmt);
+
+ var curr = new Date;
+ var ms = curr - (debug[name] || curr);
+ debug[name] = curr;
+
+ fmt = name
+ + ' '
+ + fmt
+ + ' +' + debug.humanize(ms);
+
+ // This hackery is required for IE8
+ // where `console.log` doesn't have 'apply'
+ window.console
+ && console.log
+ && Function.prototype.apply.call(console.log, console, arguments);
+ }
+}
+
+/**
+ * The currently active debug mode names.
+ */
+
+debug.names = [];
+debug.skips = [];
+
+/**
+ * Enables a debug mode by name. This can include modes
+ * separated by a colon and wildcards.
+ *
+ * @param {String} name
+ * @api public
+ */
+
+debug.enable = function(name) {
+ try {
+ localStorage.debug = name;
+ } catch(e){}
+
+ var split = (name || '').split(/[\s,]+/)
+ , len = split.length;
+
+ for (var i = 0; i < len; i++) {
+ name = split[i].replace('*', '.*?');
+ if (name[0] === '-') {
+ debug.skips.push(new RegExp('^' + name.substr(1) + '$'));
+ }
+ else {
+ debug.names.push(new RegExp('^' + name + '$'));
+ }
+ }
+};
+
+/**
+ * Disable debug output.
+ *
+ * @api public
+ */
+
+debug.disable = function(){
+ debug.enable('');
+};
+
+/**
+ * Humanize the given `ms`.
+ *
+ * @param {Number} m
+ * @return {String}
+ * @api private
+ */
+
+debug.humanize = function(ms) {
+ var sec = 1000
+ , min = 60 * 1000
+ , hour = 60 * min;
+
+ if (ms >= hour) return (ms / hour).toFixed(1) + 'h';
+ if (ms >= min) return (ms / min).toFixed(1) + 'm';
+ if (ms >= sec) return (ms / sec | 0) + 's';
+ return ms + 'ms';
+};
+
+/**
+ * Returns true if the given mode name is enabled, false otherwise.
+ *
+ * @param {String} name
+ * @return {Boolean}
+ * @api public
+ */
+
+debug.enabled = function(name) {
+ for (var i = 0, len = debug.skips.length; i < len; i++) {
+ if (debug.skips[i].test(name)) {
+ return false;
+ }
+ }
+ for (var i = 0, len = debug.names.length; i < len; i++) {
+ if (debug.names[i].test(name)) {
+ return true;
+ }
+ }
+ return false;
+};
+
+/**
+ * Coerce `val`.
+ */
+
+function coerce(val) {
+ if (val instanceof Error) return val.stack || val.message;
+ return val;
+}
+
+// persist
+
+try {
+ if (window.localStorage) debug.enable(localStorage.debug);
+} catch(e){}
diff --git a/node_modules/socket.io/node_modules/debug/index.js b/node_modules/socket.io/node_modules/debug/index.js
new file mode 100644
index 0000000..e02c13b
--- /dev/null
+++ b/node_modules/socket.io/node_modules/debug/index.js
@@ -0,0 +1,5 @@
+if ('undefined' == typeof window) {
+ module.exports = require('./lib/debug');
+} else {
+ module.exports = require('./debug');
+}
diff --git a/node_modules/socket.io/node_modules/debug/lib/debug.js b/node_modules/socket.io/node_modules/debug/lib/debug.js
new file mode 100644
index 0000000..3b0a918
--- /dev/null
+++ b/node_modules/socket.io/node_modules/debug/lib/debug.js
@@ -0,0 +1,147 @@
+/**
+ * Module dependencies.
+ */
+
+var tty = require('tty');
+
+/**
+ * Expose `debug()` as the module.
+ */
+
+module.exports = debug;
+
+/**
+ * Enabled debuggers.
+ */
+
+var names = []
+ , skips = [];
+
+(process.env.DEBUG || '')
+ .split(/[\s,]+/)
+ .forEach(function(name){
+ name = name.replace('*', '.*?');
+ if (name[0] === '-') {
+ skips.push(new RegExp('^' + name.substr(1) + '$'));
+ } else {
+ names.push(new RegExp('^' + name + '$'));
+ }
+ });
+
+/**
+ * Colors.
+ */
+
+var colors = [6, 2, 3, 4, 5, 1];
+
+/**
+ * Previous debug() call.
+ */
+
+var prev = {};
+
+/**
+ * Previously assigned color.
+ */
+
+var prevColor = 0;
+
+/**
+ * Is stdout a TTY? Colored output is disabled when `true`.
+ */
+
+var isatty = tty.isatty(2);
+
+/**
+ * Select a color.
+ *
+ * @return {Number}
+ * @api private
+ */
+
+function color() {
+ return colors[prevColor++ % colors.length];
+}
+
+/**
+ * Humanize the given `ms`.
+ *
+ * @param {Number} m
+ * @return {String}
+ * @api private
+ */
+
+function humanize(ms) {
+ var sec = 1000
+ , min = 60 * 1000
+ , hour = 60 * min;
+
+ if (ms >= hour) return (ms / hour).toFixed(1) + 'h';
+ if (ms >= min) return (ms / min).toFixed(1) + 'm';
+ if (ms >= sec) return (ms / sec | 0) + 's';
+ return ms + 'ms';
+}
+
+/**
+ * Create a debugger with the given `name`.
+ *
+ * @param {String} name
+ * @return {Type}
+ * @api public
+ */
+
+function debug(name) {
+ function disabled(){}
+ disabled.enabled = false;
+
+ var match = skips.some(function(re){
+ return re.test(name);
+ });
+
+ if (match) return disabled;
+
+ match = names.some(function(re){
+ return re.test(name);
+ });
+
+ if (!match) return disabled;
+ var c = color();
+
+ function colored(fmt) {
+ fmt = coerce(fmt);
+
+ var curr = new Date;
+ var ms = curr - (prev[name] || curr);
+ prev[name] = curr;
+
+ fmt = ' \u001b[9' + c + 'm' + name + ' '
+ + '\u001b[3' + c + 'm\u001b[90m'
+ + fmt + '\u001b[3' + c + 'm'
+ + ' +' + humanize(ms) + '\u001b[0m';
+
+ console.error.apply(this, arguments);
+ }
+
+ function plain(fmt) {
+ fmt = coerce(fmt);
+
+ fmt = new Date().toUTCString()
+ + ' ' + name + ' ' + fmt;
+ console.error.apply(this, arguments);
+ }
+
+ colored.enabled = plain.enabled = true;
+
+ return isatty || process.env.DEBUG_COLORS
+ ? colored
+ : plain;
+}
+
+/**
+ * Coerce `val`.
+ */
+
+function coerce(val) {
+ if (val instanceof Error) return val.stack || val.message;
+ return val;
+}
diff --git a/node_modules/socket.io/node_modules/debug/package.json b/node_modules/socket.io/node_modules/debug/package.json
new file mode 100644
index 0000000..8a959a5
--- /dev/null
+++ b/node_modules/socket.io/node_modules/debug/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "debug",
+ "version": "0.7.4",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/visionmedia/debug.git"
+ },
+ "description": "small debugging utility",
+ "keywords": [
+ "debug",
+ "log",
+ "debugger"
+ ],
+ "author": {
+ "name": "TJ Holowaychuk",
+ "email": "tj@vision-media.ca"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "mocha": "*"
+ },
+ "main": "lib/debug.js",
+ "browser": "./debug.js",
+ "engines": {
+ "node": "*"
+ },
+ "files": [
+ "lib/debug.js",
+ "debug.js",
+ "index.js"
+ ],
+ "component": {
+ "scripts": {
+ "debug/index.js": "index.js",
+ "debug/debug.js": "debug.js"
+ }
+ },
+ "bugs": {
+ "url": "https://github.com/visionmedia/debug/issues"
+ },
+ "homepage": "https://github.com/visionmedia/debug",
+ "_id": "debug@0.7.4",
+ "dist": {
+ "shasum": "06e1ea8082c2cb14e39806e22e2f6f757f92af39",
+ "tarball": "http://registry.npmjs.org/debug/-/debug-0.7.4.tgz"
+ },
+ "_from": "debug@0.7.4",
+ "_npmVersion": "1.3.13",
+ "_npmUser": {
+ "name": "tjholowaychuk",
+ "email": "tj@vision-media.ca"
+ },
+ "maintainers": [
+ {
+ "name": "tjholowaychuk",
+ "email": "tj@vision-media.ca"
+ }
+ ],
+ "directories": {},
+ "_shasum": "06e1ea8082c2cb14e39806e22e2f6f757f92af39",
+ "_resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz"
+}
diff --git a/node_modules/socket.io/node_modules/engine.io/.npmignore b/node_modules/socket.io/node_modules/engine.io/.npmignore
new file mode 100644
index 0000000..ce0640b
--- /dev/null
+++ b/node_modules/socket.io/node_modules/engine.io/.npmignore
@@ -0,0 +1,5 @@
+examples
+node_modules
+test
+npm-debug.log
+coverage.html
diff --git a/node_modules/socket.io/node_modules/engine.io/.travis.yml b/node_modules/socket.io/node_modules/engine.io/.travis.yml
new file mode 100644
index 0000000..04a6969
--- /dev/null
+++ b/node_modules/socket.io/node_modules/engine.io/.travis.yml
@@ -0,0 +1,7 @@
+language: node_js
+node_js:
+ - "0.10"
+ - "0.8"
+
+notifications:
+ irc: "irc.freenode.org#socket.io"
diff --git a/node_modules/socket.io/node_modules/engine.io/History.md b/node_modules/socket.io/node_modules/engine.io/History.md
new file mode 100644
index 0000000..784861b
--- /dev/null
+++ b/node_modules/socket.io/node_modules/engine.io/History.md
@@ -0,0 +1,363 @@
+
+1.3.1 / 2014-06-19
+==================
+
+ * package: bump `engine.io-client`
+
+1.3.0 / 2014-06-13
+==================
+
+ * update example to use v1.2.2
+ * fixed newline parsing in jsonp
+ * make require('engine.io')() return a new Server instance [defunctzombie]
+ * add Server.attach method [defunctzombie]
+ * fix GH-211, set CORS headers when sending error message [mokesmokes]
+
+1.2.2 / 2014-05-30
+==================
+
+ * package: bump `engine.io-parser` for binary utf8 fix
+
+1.2.1 / 2014-05-22
+==================
+
+ * package: bump engine.io-client
+
+1.2.0 / 2014-05-18
+==================
+
+ * removed flashsocket, moving to userland
+
+1.1.1 / 2014-05-14
+==================
+
+ * test: reduce packet size
+ * package: bump parser
+
+1.1.0 / 2014-04-27
+==================
+
+ * socket: removed unneeded `clearTimeout` (fixes #250)
+ * made the request verification process async
+ * package: bump `engine.io-parser`
+ * use _query instead of query, fixes compat with restify
+ * added a maximum buffer size to received data from polling
+ * fixing looping array via for in to normal loop
+
+1.0.5 / 2014-03-18
+==================
+
+ * package: bump `engine.io-parser` and `engine.io-client`
+
+1.0.4 / 2014-03-14
+==================
+
+ * package: bump `engine.io-client`
+
+1.0.3 / 2014-03-12
+==================
+
+ * package: bump `engine.io-client`
+
+1.0.2 / 2014-03-12
+==================
+
+ * bump engine.io-client
+
+1.0.1 / 2014-03-06
+==================
+
+ * package: bump `engine.io-parser`
+ * transports: fix jshint warnings and style
+
+1.0.0 / 2014-03-06
+==================
+
+ * polling-xhr: added `OPTIONS` support, fixes CORS
+ * close() properly when triggered in connection handler
+ * fix DDOS vector by setting up too many intervals
+ * binary support
+
+0.9.0 / 2014-02-09
+==================
+
+ * Prevent errors with connections behind proxies without WS support
+ like Squid [nicklagrow, samaanghani, davidhcummings]
+ * Socket#request a simple property [mokesmokes]
+ * Changed `Socket`'s `upgrade` event to happen after upgrade [mokesmokes]
+ * Document `Socket#id` [mokesmokes]
+
+0.8.2 / 2014-01-18
+==================
+
+ * package: bump `engine.io-client`
+
+0.8.1 / 2014-01-17
+==================
+
+ * package: bump `engine.io-client`
+ * package: pin dev deps
+ * examples: fix port output
+ * fix latency example
+
+0.8.0 / 2014-01-05
+==================
+
+ * package: bump `engine.io-client` to `0.8.0`
+ * test: fix syntax, remove globals
+
+0.7.14 / 2014-01-01
+===================
+
+ * package: bump `engine.io-client` to `0.7.14`
+
+0.7.13 / 2013-12-20
+===================
+
+ * package: bump `engine.io-client`
+ * transports: added support for XSS filters on IE [guille, 3rd-eden]
+
+0.7.12 / 2013-11-11
+===================
+
+ * package: bump `engine.io-client`
+
+0.7.11 / 2013-11-06
+===================
+
+ * package: bump engine.io-client
+ * fix GH-198
+
+0.7.10 / 2013-10-28
+===================
+
+ * package: bump `engine.io-client`
+ * package: update "ws" to v0.4.31
+
+0.7.9 / 2013-08-30
+==================
+
+ * package: bump `engine.io-client`
+
+0.7.8 / 2013-08-30
+==================
+
+ * package: bump `engine.io-client`
+ * package: bump ws
+
+0.7.7 / 2013-08-30
+==================
+
+ * package: bump `engine.io-client`
+
+0.7.6 / 2013-08-30
+==================
+
+ * package: bump engine.io-client
+
+0.7.5 / 2013-08-30
+==================
+
+ * package: bump engine.io-client
+
+0.7.4 / 2013-08-25
+==================
+
+ * package: bump `engine.io-client`
+
+0.7.3 / 2013-08-23
+==================
+
+ * package: bump engine.io-client (noop)
+ * package: fix regresison in upgrade cause by ws update
+
+0.7.2 / 2013-08-23
+==================
+
+ * package: bump `engine.io-client` for `WebSocket` browser fix
+
+0.7.1 / 2013-08-23
+==================
+
+ * package: bump engine.io-client for ws fix
+
+0.7.0 / 2013-08-23
+==================
+
+ * package: bump engine.io-client
+ * updated example
+ * inline merge
+ * added support node version 0.10 to .travis.yml
+ * fixed respond to flash policy request test. Closes #184
+ * fixed upgrade with timeout test. Closes #185
+ * engine.io: don't use __proto__, closes #170
+
+0.6.3 / 2013-06-21
+==================
+
+ * package: bumped `engine.io-client` to `0.6.3`
+
+0.6.2 / 2013-06-15
+==================
+
+ * fix upgrade stalling edge case introduced with #174 fix
+ * remove unneeded client code related to iOS
+ * added test for `engine.io-client` `0.6.1`
+
+0.6.1 / 2013-06-06
+==================
+
+ * package: bumped `engine.io-client` to `0.6.1`
+
+0.6.0 / 2013-05-31
+==================
+
+ * socket: clear timer after sending one noop packet (fixes #174)
+ * clear all timers on socket close
+ * sending error on transport creation upon a bad request
+ * added test for client-side buffer cleanup
+ * changed flushComplete to flush
+ * ended support for node 0.6
+
+0.5.0 / 2013-03-16
+==================
+
+ * polling: implemented new parser
+ * test writeBuffer isn't cleared onError, removed 'closing' check in .flush()
+ * fixed bug89 and added tests: writeBuffer not flushed until nextTick
+
+0.4.3 / 2013-02-08
+==================
+
+ * package: bumped `engine.io-client` to `0.4.3`
+
+0.4.2 / 2013-02-08
+==================
+
+ * Only end upgrade socket connections if unhandled
+ * Fix websocket dependency
+ * Close socket if upgrade is received and socket.readyState != open
+
+0.4.1 / 2013-01-18
+==================
+
+ * package: bumped versions
+ * Fixed bugs in previous send callback fix and updated test cases
+ * Added a test case which makes the code before the send callback fix fail
+ * socket: emit `data` event (synonym with `message`)
+ * socket: added `Socket#write`
+ * engine.io: cleanup
+ * engine.io: deprecated `resource`
+ * `npm docs engine.io` works now
+
+0.3.10 / 2012-12-03
+===================
+
+ * package: bumped `engine.io-client` with `close` fixes
+ * add packetCreate event [jxck]
+ * add packet event to socket [jxck]
+ * transport: remove `Connection` headers and let node handle it
+ * server: send validation failure reason to clients
+ * engine: invoking as a function causes attach
+ * socket: reset `writeBuffer` before send
+
+0.3.9 / 2012-10-23
+==================
+
+ * package: bumped `engine.io-client`
+
+0.3.8 / 2012-10-23
+==================
+
+ * package: bumped engine.io-client
+ * examples: added first example
+
+0.3.7 / 2012-10-21
+==================
+
+ * package: bumped `engine.io-client`
+
+0.3.6 / 2012-10-21
+==================
+
+ [skipped]
+
+0.3.5 / 2012-10-14
+==================
+
+ * package: reverted last commit - we use the parser from the client
+
+0.3.4 / 2012-10-14
+==================
+
+ * package: `engine.io-client` moved to `devDependencies`
+ * socket: added missing jsdoc
+
+0.3.3 / 2012-10-10
+==================
+
+ * socket: fixed check interval clearing [joewalnes]
+ * transports: improved instrumentation
+
+0.3.2 / 2012-10-08
+==================
+
+ * socket: improve check interval for upgrade
+
+0.3.1 / 2012-10-08
+==================
+
+ * socket: faster upgrades (we perform a check immediately)
+ * server: don't assume sid is numeric
+
+0.3.0 / 2012-10-04
+==================
+
+ * socket: `writeBuffer` now gets sliced, and is recoverable after `close` [afshinm]
+ * server: expect ping from client and send interval with handshake [cadorn]
+ * polling-jsonp: prevent client breakage with utf8 whitespace
+ * socket: fix `flush` and `drain` events
+ * socket: add `send` callback [afshinm]
+ * transport: avoid unhandled error events for stale transports
+ * README: documentation improvements [EugenDueck]
+
+0.2.2 / 2012-08-26
+==================
+
+ * server: remove buffering for flash policy requests
+ * transport: avoid unhandled error events for stale transports (fixes #69)
+ * readme: documented `toString` behavior on `send` [EugenDueck]
+
+0.2.1 / 2012-08-13
+==================
+
+ * polling-xhr: skip Keep-Alive when it's implied [EugenDueck]
+ * polling-jsonp: skip Keep-Alive when it's implied [EugenDueck]
+ * README: added plugins list with engine.io-conflation
+ * socket: added flush/drain events (fixes #56)
+ * server: avoid passing websocket to non-websocket transports (fixes #24)
+
+0.2.0 / 2012-08-06
+==================
+
+ * Bumped client
+ * test: added closing connection test
+ * server: implemented stronger id generator with collision detection
+
+0.1.2 / 2012-08-02
+==================
+
+ * Fixed a jsonp bug in Nokia mobile phones and potentially other UAs.
+
+0.1.1 / 2012-08-01
+==================
+
+ * Fixed errors when a socket is closed while upgrade probe is happening.
+ * Improved WS error handling
+ * Replaced websocket.io with ws, now that it supports older drafts
+ * README fixes
+
+0.1.0 / 2012-07-03
+==================
+
+ * Initial release.
diff --git a/node_modules/socket.io/node_modules/engine.io/Makefile b/node_modules/socket.io/node_modules/engine.io/Makefile
new file mode 100644
index 0000000..5046ced
--- /dev/null
+++ b/node_modules/socket.io/node_modules/engine.io/Makefile
@@ -0,0 +1,23 @@
+
+TESTS = test/*.js
+BENCHMARKS = $(shell find bench -type f ! -name 'runner.js')
+REPORTER = dot
+
+test:
+ @./node_modules/.bin/mocha \
+ --reporter $(REPORTER) \
+ --slow 500ms \
+ --bail \
+ --globals ___eio,document \
+ $(TESTS)
+
+test-cov: lib-cov
+ EIO_COV=1 $(MAKE) test REPORTER=html-cov > coverage.html
+
+lib-cov:
+ jscoverage --no-highlight lib lib-cov
+
+bench:
+ @node $(PROFILEFLAGS) bench/runner.js $(BENCHMARKS)
+
+.PHONY: test test-cov bench
diff --git a/node_modules/socket.io/node_modules/engine.io/README.md b/node_modules/socket.io/node_modules/engine.io/README.md
new file mode 100644
index 0000000..bf57ac0
--- /dev/null
+++ b/node_modules/socket.io/node_modules/engine.io/README.md
@@ -0,0 +1,518 @@
+
+# Engine.IO: the realtime engine
+
+[![Build Status](https://secure.travis-ci.org/Automattic/engine.io.png)](http://travis-ci.org/Automattic/engine.io)
+[![NPM version](https://badge.fury.io/js/engine.io.png)](http://badge.fury.io/js/engine.io)
+
+`Engine.IO` is the implementation of transport-based
+cross-browser/cross-device bi-directional communication layer for
+[Socket.IO](http://github.com/learnboost/socket.io).
+
+## How to use
+
+### Server
+
+#### (A) Listening on a port
+
+```js
+var engine = require('engine.io');
+var server = engine.listen(80);
+
+server.on('connection', function(socket){
+ socket.send('utf 8 string');
+ socket.send(new Buffer([0, 1, 2, 3, 4, 5])); // binary data
+});
+```
+
+#### (B) Intercepting requests for a http.Server
+
+```js
+var engine = require('engine.io');
+var http = require('http').createServer().listen(3000);
+var server = engine.attach(http);
+
+server.on('connection', function (socket) {
+ socket.on('message', function(data){ });
+ socket.on('close', function(){ });
+});
+```
+
+#### (C) Passing in requests
+
+```js
+var engine = require('engine.io');
+var server = new engine.Server();
+
+server.on('connection', function(socket){
+ socket.send('hi');
+});
+
+// …
+httpServer.on('upgrade', function(req, socket, head){
+ server.handleUpgrade(req, socket, head);
+});
+httpServer.on('request', function(req, res){
+ server.handleRequest(req, res);
+});
+```
+
+### Client
+
+```html
+
+
+```
+
+For more information on the client refer to the
+[engine-client](http://github.com/learnboost/engine.io-client) repository.
+
+## What features does it have?
+
+- **Maximum reliability**. Connections are established even in the presence of:
+ - proxies and load balancers.
+ - personal firewall and antivirus software.
+ - for more information refer to **Goals** and **Architecture** sections
+- **Minimal client size** aided by:
+ - lazy loading of flash transports.
+ - lack of redundant transports.
+- **Scalable**
+ - load balancer friendly
+- **Future proof**
+- **100% Node.JS core style**
+ - No API sugar (left for higher level projects)
+ - Written in readable vanilla JavaScript
+
+## API
+
+### Server
+
+
+
+#### Top-level
+
+These are exposed by `require('engine.io')`:
+
+##### Events
+
+- `flush`
+ - Called when a socket buffer is being flushed.
+ - **Arguments**
+ - `Socket`: socket being flushed
+ - `Array`: write buffer
+- `drain`
+ - Called when a socket buffer is drained
+ - **Arguments**
+ - `Socket`: socket being flushed
+
+##### Properties
+
+- `protocol` _(Number)_: protocol revision number
+- `Server`: Server class constructor
+- `Socket`: Socket class constructor
+- `Transport` _(Function)_: transport constructor
+- `transports` _(Object)_: map of available transports
+
+##### Methods
+
+- `()`
+ - Returns a new `Server` instance. If the first argument is an `http.Server` then the
+ new `Server` instance will be attached to it. Otherwise, the arguments are passed
+ directly to the `Server` constructor.
+ - **Parameters**
+ - `http.Server`: optional, server to attach to.
+ - `Object`: optional, options object (see `Server#constructor` api docs below)
+
+ The following are identical ways to instantiate a server and then attach it.
+ ```js
+ var httpServer; // previously created with `http.createServer();` from node.js api.
+
+ // create a server first, and then attach
+ var eioServer = require('engine.io').Server();
+ eioServer.attach(httpServer);
+
+ // or call the module as a function to get `Server`
+ var eioServer = require('engine.io')();
+ eioServer.attach(httpServer);
+
+ // immediately attach
+ var eioServer = require('engine.io')(http_server);
+ ```
+
+- `listen`
+ - Creates an `http.Server` which listens on the given port and attaches WS
+ to it. It returns `501 Not Implemented` for regular http requests.
+ - **Parameters**
+ - `Number`: port to listen on.
+ - `Object`: optional, options object
+ - `Function`: callback for `listen`.
+ - **Options**
+ - All options from `Server.attach` method, documented below.
+ - **Additionally** See Server `constructor` below for options you can pass for creating the new Server
+ - **Returns** `Server`
+- `attach`
+ - Captures `upgrade` requests for a `http.Server`. In other words, makes
+ a regular http.Server WebSocket-compatible.
+ - **Parameters**
+ - `http.Server`: server to attach to.
+ - `Object`: optional, options object
+ - **Options**
+ - All options from `Server.attach` method, documented below.
+ - **Additionally** See Server `constructor` below for options you can pass for creating the new Server
+ - **Returns** `Server` a new Server instance.
+
+
+
+#### Server
+
+The main server/manager. _Inherits from EventEmitter_.
+
+##### Events
+
+- `connection`
+ - Fired when a new connection is established.
+ - **Arguments**
+ - `Socket`: a Socket object
+
+##### Properties
+
+**Important**: if you plan to use Engine.IO in a scalable way, please
+keep in mind the properties below will only reflect the clients connected
+to a single process.
+
+- `clients` _(Object)_: hash of connected clients by id.
+- `clientsCount` _(Number)_: number of connected clients.
+
+##### Methods
+
+- **constructor**
+ - Initializes the server
+ - **Parameters**
+ - `Object`: optional, options object
+ - **Options**
+ - `pingTimeout` (`Number`): how many ms without a pong packet to
+ consider the connection closed (`60000`)
+ - `pingInterval` (`Number`): how many ms before sending a new ping
+ packet (`25000`)
+ - `maxHttpBufferSize` (`Number`): how many bytes or characters a message
+ can be when polling, before closing the session (to avoid DoS). Default
+ value is `10E7`.
+ - `allowRequest` (`Function`): A function that receives a given handshake
+ or upgrade request as its first parameter, and can decide whether to
+ continue or not. The second argument is a function that needs to be
+ called with the decided information: `fn(err, success)`, where
+ `success` is a boolean value where false means that the request is
+ rejected, and err is an error code.
+ - `transports` (` String`): transports to allow connections
+ to (`['polling', 'websocket']`)
+ - `allowUpgrades` (`Boolean`): whether to allow transport upgrades
+ (`true`)
+ - `cookie` (`String|Boolean`): name of the HTTP cookie that
+ contains the client sid to send as part of handshake response
+ headers. Set to `false` to not send one. (`io`)
+- `close`
+ - Closes all clients
+ - **Returns** `Server` for chaining
+- `handleRequest`
+ - Called internally when a `Engine` request is intercepted.
+ - **Parameters**
+ - `http.ServerRequest`: a node request object
+ - `http.ServerResponse`: a node response object
+ - **Returns** `Server` for chaining
+- `handleUpgrade`
+ - Called internally when a `Engine` ws upgrade is intercepted.
+ - **Parameters** (same as `upgrade` event)
+ - `http.ServerRequest`: a node request object
+ - `net.Stream`: TCP socket for the request
+ - `Buffer`: legacy tail bytes
+ - **Returns** `Server` for chaining
+- `attach`
+ - Attach this Server instance to an `http.Server`
+ - Captures `upgrade` requests for a `http.Server`. In other words, makes
+ a regular http.Server WebSocket-compatible.
+ - **Parameters**
+ - `http.Server`: server to attach to.
+ - `Object`: optional, options object
+ - **Options**
+ - `path` (`String`): name of the path to capture (`/engine.io`).
+ - `destroyUpgrade` (`Boolean`): destroy unhandled upgrade requests (`true`)
+ - `destroyUpgradeTimeout` (`Number`): milliseconds after which unhandled requests are ended (`1000`)
+
+
+
+#### Socket
+
+A representation of a client. _Inherits from EventEmitter_.
+
+##### Events
+
+- `close`
+ - Fired when the client is disconnected.
+ - **Arguments**
+ - `String`: reason for closing
+ - `Object`: description object (optional)
+- `message`
+ - Fired when the client sends a message.
+ - **Arguments**
+ - `String` or `Buffer`: Unicode string or Buffer with binary contents
+- `error`
+ - Fired when an error occurs.
+ - **Arguments**
+ - `Error`: error object
+- `flush`
+ - Called when the write buffer is being flushed.
+ - **Arguments**
+ - `Array`: write buffer
+- `drain`
+ - Called when the write buffer is drained
+- `packet`
+ - Called when a socket received a packet (`message`, `ping`)
+ - **Arguments**
+ - `type`: packet type
+ - `data`: packet data (if type is message)
+- `packetCreate`
+ - Called before a socket sends a packet (`message`, `pong`)
+ - **Arguments**
+ - `type`: packet type
+ - `data`: packet data (if type is message)
+
+##### Properties
+
+- `id` _(String)_: unique identifier
+- `server` _(Server)_: engine parent reference
+- `request` _(http.ServerRequest)_: request that originated the Socket
+- `upgraded` _(Boolean)_: whether the transport has been upgraded
+- `readyState` _(String)_: opening|open|closing|closed
+- `transport` _(Transport)_: transport reference
+
+##### Methods
+
+- `send`:
+ - Sends a message, performing `message = toString(arguments[0])` unless
+ sending binary data, which is sent as is.
+ - **Parameters**
+ - `String` | `Buffer` | `ArrayBuffer` | `ArrayBufferView`: a string or any object implementing `toString()`, with outgoing data, or a Buffer or ArrayBuffer with binary data. Also any ArrayBufferView can be sent as is.
+ - `Function`: optional, a callback executed when the message gets flushed out by the transport
+ - **Returns** `Socket` for chaining
+- `close`
+ - Disconnects the client
+ - **Returns** `Socket` for chaining
+
+### Client
+
+
+
+Exposed in the `eio` global namespace (in the browser), or by
+`require('engine.io-client')` (in Node.JS).
+
+For the client API refer to the
+[engine-client](http://github.com/learnboost/engine.io-client) repository.
+
+## Debug / logging
+
+Engine.IO is powered by [debug](http://github.com/visionmedia/debug).
+In order to see all the debug output, run your app with the environment variable
+`DEBUG` including the desired scope.
+
+To see the output from all of Engine.IO's debugging scopes you can use:
+
+```
+DEBUG=engine* node myapp
+```
+
+## Transports
+
+- `polling`: XHR / JSONP polling transport.
+- `websocket`: WebSocket transport.
+
+## Plugins
+
+- [engine.io-conflation](https://github.com/EugenDueck/engine.io-conflation): Makes **conflation and aggregation** of messages straightforward.
+
+## Support
+
+The support channels for `engine.io` are the same as `socket.io`:
+ - irc.freenode.net **#socket.io**
+ - [Google Groups](http://groups.google.com/group/socket_io)
+ - [Website](http://socket.io)
+
+## Development
+
+To contribute patches, run tests or benchmarks, make sure to clone the
+repository:
+
+```
+git clone git://github.com/LearnBoost/engine.io.git
+```
+
+Then:
+
+```
+cd engine.io
+npm install
+```
+
+## Tests
+
+Tests run with `make test`. It runs the server tests that are aided by
+the usage of `engine.io-client`.
+
+Make sure `npm install` is run first.
+
+## Goals
+
+The main goal of `Engine` is ensuring the most reliable realtime communication.
+Unlike the previous Socket.IO core, it always establishes a long-polling
+connection first, then tries to upgrade to better transports that are "tested" on
+the side.
+
+During the lifetime of the Socket.IO projects, we've found countless drawbacks
+to relying on `HTML5 WebSocket` or `Flash Socket` as the first connection
+mechanisms.
+
+Both are clearly the _right way_ of establishing a bidirectional communication,
+with HTML5 WebSocket being the way of the future. However, to answer most business
+needs, alternative traditional HTTP 1.1 mechanisms are just as good as delivering
+the same solution.
+
+WebSocket based connections have two fundamental benefits:
+
+1. **Better server performance**
+
+ - _A: Load balancers_
+ Load balancing a long polling connection poses a serious architectural nightmare
+ since requests can come from any number of open sockets by the user agent, but
+ they all need to be routed to the process and computer that owns the `Engine`
+ connection. This negatively impacts RAM and CPU usage.
+ - _B: Network traffic_
+ WebSocket is designed around the premise that each message frame has to be
+ surrounded by the least amount of data. In HTTP 1.1 transports, each message
+ frame is surrounded by HTTP headers and chunked encoding frames. If you try to
+ send the message _"Hello world"_ with xhr-polling, the message ultimately
+ becomes larger than if you were to send it with WebSocket.
+ - _C: Lightweight parser_
+ As an effect of **B**, the server has to do a lot more work to parse the network
+ data and figure out the message when traditional HTTP requests are used
+ (as in long polling). This means that another advantage of WebSocket is
+ less server CPU usage.
+
+2. **Better user experience**
+
+ Due to the reasons stated in point **1**, the most important effect of being able
+ to establish a WebSocket connection is raw data transfer speed, which translates
+ in _some_ cases in better user experience.
+
+ Applications with heavy realtime interaction (such as games) will benefit greatly,
+ whereas applications like realtime chat (Gmail/Facebook), newsfeeds (Facebook) or
+ timelines (Twitter) will have negligible user experience improvements.
+
+Having said this, attempting to establish a WebSocket connection directly so far has
+proven problematic:
+
+1. **Proxies**
+ Many corporate proxies block WebSocket traffic.
+
+2. **Personal firewall and antivirus software**
+ As a result of our research, we've found that at least 3 personal security
+ applications block WebSocket traffic.
+
+3. **Cloud application platforms**
+ Platforms like Heroku or No.de have had trouble keeping up with the fast-paced
+ nature of the evolution of the WebSocket protocol. Applications therefore end up
+ inevitably using long polling, but the seamless installation experience of
+ Socket.IO we strive for (_"require() it and it just works"_) disappears.
+
+Some of these problems have solutions. In the case of proxies and personal programs,
+however, the solutions many times involve upgrading software. Experience has shown
+that relying on client software upgrades to deliver a business solution is
+fruitless: the very existence of this project has to do with a fragmented panorama
+of user agent distribution, with clients connecting with latest versions of the most
+modern user agents (Chrome, Firefox and Safari), but others with versions as low as
+IE 5.5.
+
+From the user perspective, an unsuccessful WebSocket connection can translate in
+up to at least 10 seconds of waiting for the realtime application to begin
+exchanging data. This **perceptively** hurts user experience.
+
+To summarize, **Engine** focuses on reliability and user experience first, marginal
+potential UX improvements and increased server performance second. `Engine` is the
+result of all the lessons learned with WebSocket in the wild.
+
+## Architecture
+
+The main premise of `Engine`, and the core of its existence, is the ability to
+swap transports on the fly. A connection starts as xhr-polling, but it can
+switch to WebSocket.
+
+The central problem this poses is: how do we switch transports without losing
+messages?
+
+`Engine` only switches from polling to another transport in between polling
+cycles. Since the server closes the connection after a certain timeout when
+there's no activity, and the polling transport implementation buffers messages
+in between connections, this ensures no message loss and optimal performance.
+
+Another benefit of this design is that we workaround almost all the limitations
+of **Flash Socket**, such as slow connection times, increased file size (we can
+safely lazy load it without hurting user experience), etc.
+
+## FAQ
+
+### Can I use engine without Socket.IO ?
+
+Absolutely. Although the recommended framework for building realtime applications
+is Socket.IO, since it provides fundamental features for real-world applications
+such as multiplexing, reconnection support, etc.
+
+`Engine` is to Socket.IO what Connect is to Express. An essential piece for building
+realtime frameworks, but something you _probably_ won't be using for building
+actual applications.
+
+### Does the server serve the client?
+
+No. The main reason is that `Engine` is meant to be bundled with frameworks.
+Socket.IO includes `Engine`, therefore serving two clients is not necessary. If
+you use Socket.IO, including
+
+```html
+
+
+
+
+
+
+