+(defun base64-internal-decode-string (string)
+ (let* ((len (length string))
+ (i 0)
+ (dest (make-string len 0))
+ (j 0))
+ (catch 'tag
+ (while (< i len)
+ (let ((c (aref string i)))
+ (setq i (1+ i))
+ (unless (memq c '(?\x0d ?\x0a))
+ (let ((v1 (base64-char-to-num c))
+ (v2 (base64-char-to-num (aref string (prog1 i
+ (setq i (1+ i))))))
+ (v3 (base64-char-to-num (aref string (prog1 i
+ (setq i (1+ i)))))))
+ (aset dest j (logior (lsh v1 2)(lsh v2 -4)))
+ (setq j (1+ j))
+ (if v3
+ (let ((v4 (base64-char-to-num (aref string i))))
+ (setq i (1+ i))
+ (aset dest j (logior (lsh (logand v2 15) 4)(lsh v3 -2)))
+ (setq j (1+ j))
+ (if v4
+ (aset dest (prog1 j (setq j (1+ j)))
+ (logior (logand (lsh (logand v3 15) 6) 255)
+ v4))
+ (throw 'tag nil)
+ ))
+ (throw 'tag nil)
+ ))))))
+ (substring dest 0 j)
+ ))