From 81bdc8fdf6516b05bc3a26f82eacb1889f5e46d5 Mon Sep 17 00:00:00 2001
From: Yen Chi Hsuan <yan12125@gmail.com>
Date: Wed, 24 Feb 2016 22:08:40 +0800
Subject: [PATCH] [utils] Move base62 to utils

---
 youtube_dl/extractor/iqiyi.py | 15 ++-------------
 youtube_dl/utils.py           | 14 ++++++++++++++
 2 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/youtube_dl/extractor/iqiyi.py b/youtube_dl/extractor/iqiyi.py
index c3e33009a..4f02b9f87 100644
--- a/youtube_dl/extractor/iqiyi.py
+++ b/youtube_dl/extractor/iqiyi.py
@@ -18,6 +18,7 @@ from ..compat import (
     compat_urllib_parse_urlparse,
 )
 from ..utils import (
+    base62,
     ExtractorError,
     ohdave_rsa_encrypt,
     remove_start,
@@ -126,21 +127,9 @@ class IqiyiSDK(object):
 
 
 class IqiyiSDKInterpreter(object):
-    BASE62_TABLE = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
-
     def __init__(self, sdk_code):
         self.sdk_code = sdk_code
 
-    @classmethod
-    def base62(cls, num):
-        if num == 0:
-            return '0'
-        ret = ''
-        while num:
-            ret = cls.BASE62_TABLE[num % 62] + ret
-            num = num // 62
-        return ret
-
     def decode_eval_codes(self):
         self.sdk_code = self.sdk_code[5:-3]
 
@@ -154,7 +143,7 @@ class IqiyiSDKInterpreter(object):
 
         while count:
             count -= 1
-            b62count = self.base62(count)
+            b62count = base62(count)
             symbol_table[b62count] = symbols[count] or b62count
 
         self.sdk_code = re.sub(
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index a3df90fad..d7a1586c0 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -2619,3 +2619,17 @@ def ohdave_rsa_encrypt(data, exponent, modulus):
     payload = int(binascii.hexlify(data[::-1]), 16)
     encrypted = pow(payload, exponent, modulus)
     return '%x' % encrypted
+
+
+def base_n(num, n, table):
+    if num == 0:
+        return '0'
+    ret = ''
+    while num:
+        ret = table[num % n] + ret
+        num = num // n
+    return ret
+
+
+def base62(num):
+    return base_n(num, 62, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')