static void Main(string[] args)
        {
            string inputText = "Of course I’m also interested in a K4W2 hackathon and I think we would all love to see your demo. In the area of UI and Kinect gestures I think that we could brainstorm some affordances that can be built into future UIs. Through experimentation (some of which I’m sure the Kinect team has done already) we can build UIs that are simple, intuitive, responsive, and robust. I like what our design team has done in terms of making our modern interfaces distinctive and recognizable, but they are made at the cost of usability and discoverability. Interaction should be a two way conversation between the user and the machine/interface. Donald Norman outlines these principles in his books and papers. Things like affordances mapping current state, actions available to the user, robustness against errors, speed and performance, simplicity. It would be neat to first break down the k4wv2 data into primitive components (x, y, distance of hands, hand gesture, etc. then build a second layer on top of of these primitives to add things like linear velocity, inertia, maybe rotational ballistics with two hands, distance between hands, build discrete and continuous gestures on top of these.  Then build the UI affordances that help and teach users to navigate the UI.Also it would be powerful to see K4W2 products from scenarios like 3D object capture, texture mapping /scanning, and some of the more advanced Kinect projects shown at tech fest. CF Sent from Windows Mail ";
            string key1      = "bicloqi283.com";
            string key2      = "flksajldsiikgiyguyfutcutcxytxcyxcyrdtrezrezresa65rf87hoiuhe.com";
            string key3      = "llblii39390.com";
            string key4      = "ll;q;qpopowei.com";

            Stopwatch watch = new Stopwatch();

            watch.Start();
            watch.Stop();
            watch.Restart();

            RollingHash rh = new RollingHash(inputText);

            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            watch.Stop();

            Console.WriteLine("Milliseconds for rolling hash = " + watch.ElapsedTicks);

            watch.Restart();
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            watch.Stop();

            Console.WriteLine("Milliseconds for IndexOf = " + watch.ElapsedTicks);

            watch.Restart();
            Regex reg = new Regex(key1 + "|" + key2 + "|" + key3 + "|" + key4);

            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            watch.Stop();

            Console.WriteLine("Milliseconds for Regex = " + watch.ElapsedTicks);
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            string inputText = "Of course I’m also interested in a K4W2 hackathon and I think we would all love to see your demo. In the area of UI and Kinect gestures I think that we could brainstorm some affordances that can be built into future UIs. Through experimentation (some of which I’m sure the Kinect team has done already) we can build UIs that are simple, intuitive, responsive, and robust. I like what our design team has done in terms of making our modern interfaces distinctive and recognizable, but they are made at the cost of usability and discoverability. Interaction should be a two way conversation between the user and the machine/interface. Donald Norman outlines these principles in his books and papers. Things like affordances mapping current state, actions available to the user, robustness against errors, speed and performance, simplicity. It would be neat to first break down the k4wv2 data into primitive components (x, y, distance of hands, hand gesture, etc. then build a second layer on top of of these primitives to add things like linear velocity, inertia, maybe rotational ballistics with two hands, distance between hands, build discrete and continuous gestures on top of these.  Then build the UI affordances that help and teach users to navigate the UI.Also it would be powerful to see K4W2 products from scenarios like 3D object capture, texture mapping /scanning, and some of the more advanced Kinect projects shown at tech fest. CF Sent from Windows Mail ";
            string key1 = "bicloqi283.com";
            string key2 = "flksajldsiikgiyguyfutcutcxytxcyxcyrdtrezrezresa65rf87hoiuhe.com";
            string key3 = "llblii39390.com";
            string key4 = "ll;q;qpopowei.com";

            Stopwatch watch = new Stopwatch();

            watch.Start();
            watch.Stop();
            watch.Restart();

            RollingHash rh = new RollingHash(inputText);
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            rh.ContainsKeys(new string[] { key1, key2, key3, key4 });
            watch.Stop();

            Console.WriteLine("Milliseconds for rolling hash = " + watch.ElapsedTicks);

            watch.Restart();
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            inputText.IndexOf(key1); inputText.IndexOf(key2); inputText.IndexOf(key3); inputText.IndexOf(key4);
            watch.Stop();

            Console.WriteLine("Milliseconds for IndexOf = " + watch.ElapsedTicks);

            watch.Restart();
            Regex reg = new Regex(key1 + "|" + key2 + "|" + key3 + "|" + key4);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            reg.Match(inputText);
            watch.Stop();

            Console.WriteLine("Milliseconds for Regex = " + watch.ElapsedTicks);
            Console.ReadLine();
        }