Introduction to Theory of Computing Lecture Notes (Cornell CS4810)