Theory of Code Division Multiple Access