├── requirements.txt ├── .gitignore ├── README.md ├── main.py ├── LICENSE └── crypto.txt /requirements.txt: -------------------------------------------------------------------------------- 1 | about-time==3.1.1 2 | alive-progress==2.1.0 3 | beautifulsoup4==4.11.1 4 | certifi==2021.10.8 5 | charset-normalizer==2.0.12 6 | commonmark==0.9.1 7 | dataclasses==0.8 8 | grapheme==0.6.0 9 | html5lib==1.1 10 | idna==3.3 11 | Pygments==2.12.0 12 | requests==2.27.1 13 | rich==12.4.1 14 | six==1.16.0 15 | soupsieve==2.3.2.post1 16 | typing-extensions==4.1.1 17 | urllib3==1.26.9 18 | webencodings==0.5.1 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Github Stars 4 | 5 | 6 | Github Forks 7 | 8 | 9 | Code-size 10 | 11 | 12 | version 13 | 14 |

15 | 16 | 17 | ## :cl: 最近更新 18 | 19 | - 2022.5.17 暴力跳过视频类型任务点的验证码检测 20 | - 2022.5.26 修复无法登录失败问题(密码登录加密模式更新了) 21 | - 使用教程: 22 | 1. [点我查看源码](https://github.com/Hyrmm/chaoxingSpider/blob/main/crypto.txt),也可在当前脚本目录下用记事本打开复制 23 | 2. 复制`cypoto.txt`文件内的JavaScript源码 24 | 3. 打开浏览器,按`F12`打开控制台(`CONSOLE`),粘贴源码,回车 25 | 4. 在控制台输入`des("你的密码")`,注:双引号不要丢 26 | 5. 举例:`des("123456")` 27 | 6. 控制台会输出你的des密码,拿着这个密码去登录,可以保存下来,密码不更改,des密码也不会变动。 28 | 7. 复制控制台的密码时,注意复制双引号内的内容 29 | - 2022.5.28 一系列修复 30 | - 修复密码登录后,提交刷课问题 31 | - 添加自定义倍速 32 | 33 | 34 | 35 | ## :wrench: 功能介绍 36 | 37 | ### :one:智能自动化 38 | 39 | - 自动跳过非任务点视频,ppt,word 40 | - 自动根据历史进度完成视频播放(自己之前手动看过的进度) 41 | - 自动完成当前任务继续完成下个任务,直至本课程全部完成 42 | 43 | ### :two:支持多类型任务点 44 | 45 | - Document(ppt、word等) 46 | - Video(视频类型) 47 | - Work(没有题库,暂且不整) 48 | 49 | ### :three:可自定义视频类型任务点观看速率 50 | 51 | - 倍速有风险,谨慎而为之 52 | 53 | ## :orange_book:使用教程 54 | 55 | ### :one:可执行文件运行(小白推荐,不稳定) 56 | 57 | - 教程:待跟新 58 | 59 | ### :two:源码运行(更稳定) 60 | 61 | 1. 准备Python =3.6 62 | 2. git clone 项目至本地 63 | 3. pip install -r requirements.txt 64 | 4. python main.py 运行程序 65 | 66 | ## :warning: 免责声明 67 | - 本代码遵循 [GPL-3.0 License](https://github.com/Samueli924/chaoxing/blob/main/LICENSE)协议,允许**开源/免费使用和引用/修改/衍生代码的开源/免费使用**,不允许**修改和衍生的代码作为闭源的商业软件发布和销售**,禁止**使用本代码盈利**,以此代码为基础的程序**必须**同样遵守[GPL-3.0 License](https://github.com/Samueli924/chaoxing/blob/main/LICENSE)协议 68 | - 本代码仅用于**学习讨论**,禁止**用于盈利** 69 | - 他人或组织使用本代码进行的任何**违法行为**与本人无关 70 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import json, time, hashlib, base64, requests, re 2 | from urllib import parse 3 | from bs4 import BeautifulSoup 4 | from rich import print as rprint 5 | from rich.panel import Panel 6 | from rich.console import Console 7 | from rich.table import Table 8 | from alive_progress import alive_bar 9 | 10 | console = Console() 11 | 12 | # 所有课程列表 13 | courses_list = [] 14 | post_time = 1 15 | 16 | 17 | def print_course(): 18 | course_table = Table() 19 | course_table.add_column("序号", justify="center", style="cyan") 20 | course_table.add_column("名称", justify="center", no_wrap=True) 21 | course_table.add_column("状态", justify="center") 22 | for index, course in enumerate(courses_list): 23 | if (index < 10): 24 | index_str = "0" + str(index) 25 | else: 26 | index_str = str(index) 27 | course_table.add_row(index_str, course['course_name'], "未结课") 28 | return course_table 29 | 30 | 31 | # 获取所有课程名称 32 | def get_course_unit(): 33 | console.rule("正在获取所有课程") 34 | course_heades = { 35 | "Content-Type": "application/x-www-form-urlencoded", 36 | 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE' 37 | } 38 | course_data = { 39 | "courseType": "1", 40 | "courseFolderId": "0", 41 | "baseEducation": "0", 42 | "courseFolderSize": "0" 43 | } 44 | course_url = "https://mooc1-1.chaoxing.com/visit/courselistdata" 45 | 46 | course_response = requests.post(url=course_url, headers=course_heades, cookies=cookies, data=parse.urlencode(course_data)) 47 | soup = BeautifulSoup(course_response.content.decode("utf8"), 'html5lib') 48 | list = soup.find_all(attrs={"class", "color1"}) 49 | for i in list: 50 | query = parse.parse_qs(parse.urlparse(i.get("href"))[4]) 51 | courseid = query["courseid"][0] 52 | clazzid = query["clazzid"][0] 53 | cpi = query["cpi"][0] 54 | courses_list.append({"course_name": i.span.string, "courseId": courseid, "clazzid": clazzid, "cpi": cpi}) 55 | # 准备打印课程 56 | course_table = print_course() 57 | console.print(course_table) 58 | console.rule("所有课程获取完成") 59 | 60 | 61 | # 获取当前课程所有章节信息,以及当前章节总体完成状态 62 | def get_chapterUnit(courseid, clazzid, cpi): 63 | # 所有任务章节情况 64 | classUrl = f"https://mooc2-ans.chaoxing.com/mycourse/studentcourse?courseid={courseid}&clazzid={clazzid}&cpi={cpi}&ut=s" 65 | missonResponse = requests.get(url=classUrl, headers=headers, cookies=cookies) 66 | soupMisson = BeautifulSoup(missonResponse.content.decode('utf8'), 'html5lib') 67 | # 所有章节 68 | chapter_unit = soupMisson.find_all("div", class_="chapter_unit") 69 | for chapter_index, chapter in enumerate(chapter_unit): 70 | chapter_title = chapter.find(attrs={"class", "chapter_item"}).find(attrs={"class", "catalog_name"}).span["title"] 71 | rprint(Panel(chapter_title, style="bright_blue")) 72 | try: 73 | chapter_child_unit = chapter.find(attrs={"class", "catalog_level"}).find_all("li") 74 | for chapter_child_index, chapter_child in enumerate(chapter_child_unit): 75 | chapter_child_title = chapter_child.find(attrs={"class", "chapter_item"})["title"] 76 | chapter_child_id = chapter_child.find(attrs={"class", "chapter_item"})["onclick"] 77 | str = chapter_child_id[7:] 78 | str = str[:-2] 79 | # 是否完成 80 | if (chapter_child.find(attrs={"class", "chapter_item"}).find(attrs={"class": "bntHoverTips"}).contents[0] == "已完成"): 81 | print("{}.{}:{}:[章节ID:{}]".format(chapter_index + 1, chapter_child_index + 1, chapter_child_title, str.rsplit("', '")[1])) 82 | console.print("[该章节已全部已完成]\n", style="green", ) 83 | else: 84 | print("{}.{}:{}:[章节ID:{}]".format(chapter_index + 1, chapter_child_index + 1, chapter_child_title, str.rsplit("', '")[1])) 85 | get_missionData(courseid, clazzid, str.rsplit("', '")[1], cpi) 86 | except Exception as e: 87 | print("没有子章节") 88 | 89 | 90 | # 获取当前章节当前任务块所有任务点信息 91 | def get_missionData(courseid, clazzid, knowledgeid, cpi): 92 | # 块节点,不知道这个章节有多少个快,+1去请求,直到拿不到mArg,就返回 93 | # 当Num=0,mArg都取不到,说明该章节不存在任何任务点 94 | 95 | for missionParts_index in range(5): 96 | url = "https://mooc1-1.chaoxing.com/knowledge/cards?clazzid={}&courseid={}&knowledgeid={}&num={}&ut=s&cpi={}&v=20160407-1".format(clazzid, courseid, knowledgeid, missionParts_index, cpi) 97 | response = requests.get(url=url, headers=headers, cookies=cookies) 98 | soup = BeautifulSoup(response.content.decode("utf8"), "html5lib") 99 | # 节点任务的重要信息dict 100 | if (missionParts_index == 0): 101 | # setlog 需要的encode 102 | try: 103 | enc = re.search(r"var _from = '(.*?)';", response.content.decode("utf8"), flags=re.M).group(1).split("_")[3] 104 | url = f"https://mooc1.chaoxing.com/mycourse/studentstudy?chapterId={knowledgeid}&courseId={courseid}&clazzid={clazzid}&enc={enc}&mooc2=1&cpi={cpi}" 105 | res = BeautifulSoup(requests.get(url=url, headers=headers, cookies=cookies).content.decode('utf8'), 'html5lib') 106 | try: 107 | headers1 = { 108 | 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE', 109 | "Referer": url + "&openc=11628298bef5833a1b9464ec954f691d", 110 | "Sec-Fetch-Dest": "script", 111 | "Host": "fystat-ans.chaoxing.com", 112 | "sec-ch-ua-mobile": "?0" 113 | } 114 | for src in res.find_all("script"): 115 | if ("https://fystat-ans.chaoxing.com/log/setlog?" in src["src"]): 116 | temp = src["src"] + f"&_={int(round(time.time() * 1000))}" 117 | res = requests.get(temp, headers=headers1, cookies=cookies) 118 | print("[该章节完成学习打卡]") 119 | except: 120 | pass 121 | except: 122 | console.log("setLog错误") 123 | pass 124 | try: 125 | missonData = json.loads(re.search(r'mArg =(.*?);(\s\S)catch', soup.body.find_all("script")[0].string, flags=re.M).group(1)) 126 | 127 | # print("当前章节子节点{}有{}个任务点".format(missionParts_index, len(missonData["attachments"]))) 128 | for missonDataItem_index, missonDataItem in enumerate(missonData["attachments"]): 129 | # 捕捉异常 有的没有类型,插入可能是图片 很恶心 130 | try: 131 | if (missonDataItem["type"] == "video"): 132 | def is_job(): 133 | try: 134 | temp = missonDataItem["jobid"] 135 | console.print("检测到任务:[yellow]Viedo[not b not uu red]\t[未完成]") 136 | get_videoMission_data(missonDataItem, missonData["defaults"], missionParts_index, missonDataItem_index) 137 | except: 138 | console.print("检测到任务:[yellow]Viedo[not b not uu blue]\t[非任务]") 139 | 140 | # 判断完成了没 141 | try: 142 | if (missonDataItem["isPassed"]): 143 | console.print("检测到任务:[yellow]Viedo[not b not uu green]\t[已完成]") 144 | else: 145 | # 未完成 146 | is_job() 147 | except: 148 | # 报错就是未完成 149 | is_job() 150 | elif ((missonDataItem["type"] == "document")): 151 | # 加层判断 pdf不做处理 虽然有任务id 但是不作为任务点 152 | if (missonDataItem["property"]['type'] != ".pdf"): 153 | def is_job(): 154 | try: 155 | temp = missonDataItem["jobid"] 156 | console.print("检测到任务:[yellow]Document[not b not uu red]\t[未完成]") 157 | post_document(missonDataItem, missonData["defaults"], missionParts_index, missonDataItem_index) 158 | except: 159 | console.print("检测到任务:[yellow]Document[not b not uu blue]\t[非任务]") 160 | 161 | # 判断完成了没 162 | try: 163 | if (missonDataItem["isPassed"]): 164 | console.print("检测到任务:[yellow]Document[not b not uu green]\t[已完成]") 165 | else: 166 | # 未完成 167 | is_job() 168 | except: 169 | # 报错就是未完成 170 | is_job() 171 | else: 172 | # 题目类型workid 173 | console.print("检测到任务:[yellow]Work[red]\t[已跳过]") 174 | except: 175 | console.print("检测到任务:[yellow]混淆任务[red]\t[已过滤]") 176 | 177 | except Exception as e: 178 | # if (missionParts_index == 0): 179 | # print("-当前章节所有任务点遍历完成-") 180 | # else: 181 | # print("-当前章节所有任务点遍历完成-") 182 | continue 183 | console.print("[cyan][当前章节所有任务点遍历完成]\n") 184 | 185 | 186 | # 获取video类型任务点信息 187 | def get_videoMission_data(missonDataItem, missonData_defaults, missionParts_index, missonDataItem_index): 188 | # missionParts_index:当前章节任务块索引 189 | # missonDataItem_index:当前任务块视频任务索引 190 | headers = { 191 | "Referer": "https://mooc1.chaoxing.com/ananas/modules/video/index.html?v=2022-0406-1945", 192 | 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE' 193 | } 194 | url = "https://mooc1.chaoxing.com/ananas/status/{}".format(missonDataItem["objectId"]) 195 | response = requests.get(url=url, cookies=cookies, headers=headers) 196 | video_data = json.loads(response.content.decode('utf8')) 197 | start_videoMission(missonDataItem, missonData_defaults, video_data, missionParts_index, missonDataItem_index) 198 | 199 | 200 | # 开始刷课 201 | def start_videoMission(missonDataItem, missonData_defaults, video_data, missionParts_index, missonDataItem_index): 202 | # missionParts_index:当前章节任务块索引 203 | # missonDataItem_index:当前任务块视频任务索引 204 | response_json = {"isPassed": "false"} 205 | 206 | def get_test(courseid, clazzid, knowledgeid, cpi): 207 | url = "https://mooc1-1.chaoxing.com/knowledge/cards?clazzid={}&courseid={}&knowledgeid={}&num={}&ut=s&cpi={}&v=20160407-1".format(clazzid, courseid, knowledgeid, missionParts_index, cpi) 208 | response = requests.get(url=url, headers=headers, cookies=cookies) 209 | soup = BeautifulSoup(response.content.decode("utf8"), "html5lib") 210 | missonData = json.loads(re.search(r'mArg =(.*?);(\s\S)catch', soup.body.find_all("script")[0].string, flags=re.M).group(1)) 211 | current_missonDataItem = missonData["attachments"][missonDataItem_index] 212 | # 加个判断,第一次看视频,检测服务器保存的进度为空 213 | # try: 214 | # console.print(f'[完成提交进度]{current_missonDataItem["playTime"]}ms', justify="center") 215 | # except: 216 | # console.print(f'[完成提交进度]{0}ms', justify="center") 217 | 218 | def post(isdrag): 219 | # [clazzId][userid][jobid][objectid][playingTime*1000][d_yHJ!$pdA~5][duration*1000][0_duration] md5 220 | encStr = '[{}][{}][{}][{}][{}][{}][{}][{}]' 221 | encStr = encStr.format(missonData_defaults["clazzId"], missonData_defaults["userid"], missonDataItem['jobid'], missonDataItem["objectId"], playTime, "d_yHJ!$pdA~5", 222 | int(video_data['duration']) * 1000, "0_" + str(video_data['duration'])) 223 | md5 = hashlib.md5(encStr.encode("utf8")) 224 | enc = md5.hexdigest() 225 | try: 226 | rt = missonDataItem["property"]['rt'] 227 | except: 228 | rt = "0.9" 229 | data = { 230 | "clazzId": missonData_defaults["clazzId"], # 获取到 231 | "playingTime": int(int(playTime) / 1000), # 当前播放到的时间 秒 232 | "duration": video_data['duration'], # 视频总时长 秒 233 | "clipTime": "0_" + str(video_data['duration']), # 视频总时长 秒 234 | "objectId": missonDataItem["objectId"], # 获取到 235 | "otherInfo": missonDataItem["otherInfo"], # 获取到 236 | "jobid": missonDataItem['jobid'], # 获取到 237 | "userid": missonData_defaults["userid"], # 获取到 238 | "isdrag": isdrag, # 固定 3首次开始播放 2暂停 0播放自己提交 239 | "view": "pc", # 固定 240 | "enc": enc, # md5加密 241 | "rt": rt, # 固定 242 | "dtype": "Video", # 固定 243 | "_t": int(round(time.time() * 1000)) # 时间戳 固定 244 | } 245 | lt = [] 246 | for k, v in data.items(): 247 | lt.append(k + '=' + str(v)) 248 | query_string = '&'.join(lt) 249 | url = "https://mooc1.chaoxing.com/multimedia/log/a/{}/{}?{}".format(missonData_defaults['cpi'], video_data["dtoken"], query_string) 250 | response = requests.get(url=url, cookies=cookies, headers=headers) 251 | try: 252 | # 加个判断 防止提交进度出问题,好定位bug 253 | rjson = json.loads(response.content.decode('utf8')) 254 | if (rjson["isPassed"]): 255 | # 已经通过了 256 | return True 257 | else: 258 | return False 259 | except: 260 | # t =math.floor(2147483647*random.random()) 261 | # verify_soup = BeautifulSoup(response.content.decode('utf8'), "html5lib") 262 | # print(verify_soup.find("img")) 263 | # img_headers = { 264 | # "Accept": "image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", 265 | # "Accept-Encoding": "gzip, deflate, br", 266 | # "Cache-Control": "no-cache", 267 | # "Connection": "keep-alive", 268 | # "Host": "mooc1-2.chaoxing.com", 269 | # "Pragma": "no-cache", 270 | # "sec-ch-ua-mobile": "?0", 271 | # "sec-ch-ua-platform": "\"Windows\"", 272 | # "Sec-Fetch-Dest": "image", 273 | # "Sec-Fetch-Mode": "no-cors", 274 | # "Sec-Fetch-Site": "same-origin", 275 | # "Referer": "https://mooc1-2.chaoxing.com/antispiderShowVerify.ac", 276 | # "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.47" 277 | # } 278 | # imgUrl = f"https://mooc1-2.chaoxing.com/processVerifyPng.ac?t={math.floor(random.random() * 2147483647)}" 279 | # res = requests.get(imgUrl, cookies=cookies, headers=img_headers) 280 | # print(res.content) 281 | # with open("./code.png", "wb") as f: 282 | # r = requests.get(imgUrl) 283 | # f.write(r.content) 284 | # f.close() 285 | 286 | # 暴力破解过验证码 287 | console.print("[red][系统拦截]:拦截到验证码检测,已经跳过验证码检测...") 288 | # get_url = f"https://mooc1-2.chaoxing.com/html/processVerify.ac?app=0&ucode={verify_code}" 289 | # print(requests.get(get_url, cookies=cookies, headers=headers).content.decode("utf8")) 290 | return False 291 | 292 | headers = { 293 | "Referer": "https://mooc1.chaoxing.com/ananas/modules/video/index.html?v=2022-0406-1945", 294 | 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE' 295 | } 296 | try: 297 | playTime = int(missonDataItem["playTime"]) 298 | except: 299 | playTime = 0 300 | 301 | try: 302 | isPassed = missonDataItem["isPassed"] 303 | except: 304 | isPassed = False 305 | 306 | if (not isPassed): 307 | global post_time 308 | 309 | console.rule("[bold green]开 始 刷 课") 310 | console.print(f"{playTime}ms/{int(video_data['duration']) * 1000}ms", style="green", justify="center") 311 | console.print(f"{video_data['filename']}", style="green", justify="center") 312 | isPassed_count = 0 313 | with alive_bar(int(video_data['duration']) * 1000, manual=True) as bar: 314 | while True: 315 | # 60秒提交一次 模拟自动提交 isdrag=0 316 | # 睡之前判断下还剩多少时长,小于60之内直接睡剩下的时间 317 | if (int(video_data["duration"] * 1000) - int(playTime) < 1000 * post_time): 318 | time.sleep(1) 319 | playTime += int(video_data["duration"] * 1000) - int(playTime) 320 | else: 321 | time.sleep(1) 322 | playTime += 1000 * post_time 323 | isPassed_bool = post("0") 324 | # console.print("[已提交进度]{}ms/{}ms".format(playTime, int(video_data["duration"] * 1000)), justify="center") 325 | if (isPassed_bool): 326 | # 说明已经返回isPassed为True了,为了防止数据不准,当5次返回都true时,说明完成了,记录一下测试,只有有一次false就清理 327 | isPassed_count += 1 328 | if (isPassed_count == 10): 329 | break 330 | else: 331 | console.print(f"当前视频已经完成,正在进行{isPassed_count}次检测[red](需要完成10测检测即完成当前任务点)", style="blue") 332 | else: 333 | isPassed_count = 0 334 | bar(playTime / int(video_data["duration"] * 1000)) 335 | console.rule("[bold red]学 习 完 成") 336 | 337 | 338 | def post_document(missonDataItem, missonData_defaults, missionParts_index, missonDataItem_index): 339 | console.rule("开始文档类型提交") 340 | console.print(f'文档名称:{missonDataItem["property"]["name"]}', justify="center") 341 | # document类型提交 342 | headers = { 343 | "Referer": "https://mooc1.chaoxing.com/ananas/modules/pdf/index.html?v=2022-0218-1135", 344 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54" 345 | } 346 | data = { 347 | "jobid": missonDataItem["jobid"], 348 | "knowledgeid": missonData_defaults["knowledgeid"], 349 | "courseid": missonData_defaults["courseid"], 350 | "clazzid": missonData_defaults["clazzId"], 351 | "jtoken": missonDataItem["jtoken"], 352 | "_dc": int(round(time.time() * 1000)) 353 | } 354 | url = f"https://mooc1.chaoxing.com/ananas/job/document?jobid={data['jobid']}&knowledgeid={data['knowledgeid']}&courseid={data['courseid']}&clazzid={data['clazzid']}&jtoken={data['jtoken']}&_dc={data['_dc']}" 355 | 356 | # 检查文档类型学习提交是否通过 357 | while True: 358 | 359 | try: 360 | res = requests.get(url=url, cookies=cookies, headers=headers) 361 | if (json.loads(res.content.decode("utf8"))["status"]): 362 | console.print(f'[blue][{time.strftime("%H:%M", time.localtime())}][green]任务点提交成功!') 363 | console.rule("完成文档类型提交") 364 | break 365 | except: 366 | print("提交异常,即将重新尝试提交") 367 | 368 | 369 | def login(uname, passward): 370 | headers = { 371 | 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE', 372 | } 373 | login = requests.get("http://passport2.chaoxing.com/login?fid=&newversion=true&refer=http://i.chaoxing.com", headers=headers) 374 | global cookies 375 | cookies = login.cookies 376 | login_heades = { 377 | "Content-Type": "application/x-www-form-urlencoded", 378 | 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE', 379 | # 'Referer': 'http://passport2.chaoxing.com/login?fid=&newversion=true&refer=http://i.chaoxing.com', 380 | # "Origin": "http://passport2.chaoxing.com" 381 | } 382 | login_url = "http://passport2.chaoxing.com/fanyalogin" 383 | login_data = { 384 | "fid": "-1", 385 | "uname": uname, 386 | # "password": base64.b64encode(passward.encode("utf8")), 387 | "password": passward, 388 | "refer": "http://i.chaoxing.com", 389 | "t": "true", 390 | } 391 | login_response = requests.post(url=login_url, headers=login_heades, cookies=cookies, data=parse.urlencode(login_data)) 392 | cookies.update(login_response.cookies) 393 | get_course_unit() 394 | try: 395 | return login_response.json()["status"] 396 | except: 397 | return False 398 | 399 | 400 | # 登录 401 | headers = { 402 | 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE', 403 | } 404 | cookies = "" 405 | 406 | while True: 407 | uname = input("请输入账号(手机号):") 408 | passward = input("请输入密码(des加密):") 409 | if (login(uname, passward)): 410 | break 411 | else: 412 | console.print("[red][登录失败,请尝试重新登录]") 413 | console.print("[red][登录失败已修复,请查看github使用说明]") 414 | while True: 415 | command = input("输入需要刷课的课程序号:") 416 | try: 417 | try: 418 | speed = int(input("请输入当前学习视频倍速:")) 419 | post_time = speed 420 | print(f"当前倍速为:{speed}x") 421 | except: 422 | print("输入有问题,启用默认倍速:1x") 423 | post_time = 1 424 | get_chapterUnit(courses_list[int(command)]["courseId"], courses_list[int(command)]["clazzid"], courses_list[int(command)]["cpi"]) 425 | console.print(print_course()) 426 | 427 | except: 428 | print("指令出错") 429 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /crypto.txt: -------------------------------------------------------------------------------- 1 | function crypto() { 2 | var t = t || function (t, r) { 3 | var e = Object.create || function () { 4 | function t() { } 5 | return function (r) { 6 | var e; 7 | return t.prototype = r, 8 | e = new t, 9 | t.prototype = null, 10 | e 11 | } 12 | }() 13 | , i = {} 14 | , n = i.lib = {} 15 | , o = n.Base = function () { 16 | return { 17 | extend: function (t) { 18 | var r = e(this); 19 | return t && r.mixIn(t), 20 | r.hasOwnProperty("init") && this.init !== r.init || (r.init = function () { 21 | r.$super.init.apply(this, arguments) 22 | } 23 | ), 24 | r.init.prototype = r, 25 | r.$super = this, 26 | r 27 | }, 28 | create: function () { 29 | var t = this.extend(); 30 | return t.init.apply(t, arguments), 31 | t 32 | }, 33 | init: function () { }, 34 | mixIn: function (t) { 35 | for (var r in t) 36 | t.hasOwnProperty(r) && (this[r] = t[r]); 37 | t.hasOwnProperty("toString") && (this.toString = t.toString) 38 | }, 39 | clone: function () { 40 | return this.init.prototype.extend(this) 41 | } 42 | } 43 | }() 44 | , s = n.WordArray = o.extend({ 45 | init: function (t, e) { 46 | t = this.words = t || [], 47 | e != r ? this.sigBytes = e : this.sigBytes = 4 * t.length 48 | }, 49 | toString: function (t) { 50 | return (t || c).stringify(this) 51 | }, 52 | concat: function (t) { 53 | var r = this.words 54 | , e = t.words 55 | , i = this.sigBytes 56 | , n = t.sigBytes; 57 | if (this.clamp(), 58 | i % 4) 59 | for (var o = 0; o < n; o++) { 60 | var s = e[o >>> 2] >>> 24 - o % 4 * 8 & 255; 61 | r[i + o >>> 2] |= s << 24 - (i + o) % 4 * 8 62 | } 63 | else 64 | for (var o = 0; o < n; o += 4) 65 | r[i + o >>> 2] = e[o >>> 2]; 66 | return this.sigBytes += n, 67 | this 68 | }, 69 | clamp: function () { 70 | var r = this.words 71 | , e = this.sigBytes; 72 | r[e >>> 2] &= 4294967295 << 32 - e % 4 * 8, 73 | r.length = t.ceil(e / 4) 74 | }, 75 | clone: function () { 76 | var t = o.clone.call(this); 77 | return t.words = this.words.slice(0), 78 | t 79 | }, 80 | random: function (r) { 81 | for (var e, i = [], n = function (r) { 82 | var r = r 83 | , e = 987654321 84 | , i = 4294967295; 85 | return function () { 86 | e = 36969 * (65535 & e) + (e >> 16) & i, 87 | r = 18e3 * (65535 & r) + (r >> 16) & i; 88 | var n = (e << 16) + r & i; 89 | return n /= 4294967296, 90 | n += .5, 91 | n * (t.random() > .5 ? 1 : -1) 92 | } 93 | }, o = 0; o < r; o += 4) { 94 | var a = n(4294967296 * (e || t.random())); 95 | e = 987654071 * a(), 96 | i.push(4294967296 * a() | 0) 97 | } 98 | return new s.init(i, r) 99 | } 100 | }) 101 | , a = i.enc = {} 102 | , c = a.Hex = { 103 | stringify: function (t) { 104 | for (var r = t.words, e = t.sigBytes, i = [], n = 0; n < e; n++) { 105 | var o = r[n >>> 2] >>> 24 - n % 4 * 8 & 255; 106 | i.push((o >>> 4).toString(16)), 107 | i.push((15 & o).toString(16)) 108 | } 109 | return i.join("") 110 | }, 111 | parse: function (t) { 112 | for (var r = t.length, e = [], i = 0; i < r; i += 2) 113 | e[i >>> 3] |= parseInt(t.substr(i, 2), 16) << 24 - i % 8 * 4; 114 | return new s.init(e, r / 2) 115 | } 116 | } 117 | , h = a.Latin1 = { 118 | stringify: function (t) { 119 | for (var r = t.words, e = t.sigBytes, i = [], n = 0; n < e; n++) { 120 | var o = r[n >>> 2] >>> 24 - n % 4 * 8 & 255; 121 | i.push(String.fromCharCode(o)) 122 | } 123 | return i.join("") 124 | }, 125 | parse: function (t) { 126 | for (var r = t.length, e = [], i = 0; i < r; i++) 127 | e[i >>> 2] |= (255 & t.charCodeAt(i)) << 24 - i % 4 * 8; 128 | return new s.init(e, r) 129 | } 130 | } 131 | , l = a.Utf8 = { 132 | stringify: function (t) { 133 | try { 134 | return decodeURIComponent(escape(h.stringify(t))) 135 | } catch (t) { 136 | throw new Error("Malformed UTF-8 data") 137 | } 138 | }, 139 | parse: function (t) { 140 | return h.parse(unescape(encodeURIComponent(t))) 141 | } 142 | } 143 | , f = n.BufferedBlockAlgorithm = o.extend({ 144 | reset: function () { 145 | this._data = new s.init, 146 | this._nDataBytes = 0 147 | }, 148 | _append: function (t) { 149 | "string" == typeof t && (t = l.parse(t)), 150 | this._data.concat(t), 151 | this._nDataBytes += t.sigBytes 152 | }, 153 | _process: function (r) { 154 | var e = this._data 155 | , i = e.words 156 | , n = e.sigBytes 157 | , o = this.blockSize 158 | , a = 4 * o 159 | , c = n / a; 160 | c = r ? t.ceil(c) : t.max((0 | c) - this._minBufferSize, 0); 161 | var h = c * o 162 | , l = t.min(4 * h, n); 163 | if (h) { 164 | for (var f = 0; f < h; f += o) 165 | this._doProcessBlock(i, f); 166 | var u = i.splice(0, h); 167 | e.sigBytes -= l 168 | } 169 | return new s.init(u, l) 170 | }, 171 | clone: function () { 172 | var t = o.clone.call(this); 173 | return t._data = this._data.clone(), 174 | t 175 | }, 176 | _minBufferSize: 0 177 | }) 178 | , u = (n.Hasher = f.extend({ 179 | cfg: o.extend(), 180 | init: function (t) { 181 | this.cfg = this.cfg.extend(t), 182 | this.reset() 183 | }, 184 | reset: function () { 185 | f.reset.call(this), 186 | this._doReset() 187 | }, 188 | update: function (t) { 189 | return this._append(t), 190 | this._process(), 191 | this 192 | }, 193 | finalize: function (t) { 194 | t && this._append(t); 195 | var r = this._doFinalize(); 196 | return r 197 | }, 198 | blockSize: 16, 199 | _createHelper: function (t) { 200 | return function (r, e) { 201 | return new t.init(e).finalize(r) 202 | } 203 | }, 204 | _createHmacHelper: function (t) { 205 | return function (r, e) { 206 | return new u.HMAC.init(t, e).finalize(r) 207 | } 208 | } 209 | }), 210 | i.algo = {}); 211 | return i 212 | }(Math); 213 | return function () { 214 | function r(t, r, e) { 215 | for (var i = [], o = 0, s = 0; s < r; s++) 216 | if (s % 4) { 217 | var a = e[t.charCodeAt(s - 1)] << s % 4 * 2 218 | , c = e[t.charCodeAt(s)] >>> 6 - s % 4 * 2; 219 | i[o >>> 2] |= (a | c) << 24 - o % 4 * 8, 220 | o++ 221 | } 222 | return n.create(i, o) 223 | } 224 | var e = t 225 | , i = e.lib 226 | , n = i.WordArray 227 | , o = e.enc; 228 | o.Base64 = { 229 | stringify: function (t) { 230 | var r = t.words 231 | , e = t.sigBytes 232 | , i = this._map; 233 | t.clamp(); 234 | for (var n = [], o = 0; o < e; o += 3) 235 | for (var s = r[o >>> 2] >>> 24 - o % 4 * 8 & 255, a = r[o + 1 >>> 2] >>> 24 - (o + 1) % 4 * 8 & 255, c = r[o + 2 >>> 2] >>> 24 - (o + 2) % 4 * 8 & 255, h = s << 16 | a << 8 | c, l = 0; l < 4 && o + .75 * l < e; l++) 236 | n.push(i.charAt(h >>> 6 * (3 - l) & 63)); 237 | var f = i.charAt(64); 238 | if (f) 239 | for (; n.length % 4;) 240 | n.push(f); 241 | return n.join("") 242 | }, 243 | parse: function (t) { 244 | var e = t.length 245 | , i = this._map 246 | , n = this._reverseMap; 247 | if (!n) { 248 | n = this._reverseMap = []; 249 | for (var o = 0; o < i.length; o++) 250 | n[i.charCodeAt(o)] = o 251 | } 252 | var s = i.charAt(64); 253 | if (s) { 254 | var a = t.indexOf(s); 255 | a !== -1 && (e = a) 256 | } 257 | return r(t, e, n) 258 | }, 259 | _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" 260 | } 261 | }(), 262 | function (r) { 263 | function e(t, r, e, i, n, o, s) { 264 | var a = t + (r & e | ~r & i) + n + s; 265 | return (a << o | a >>> 32 - o) + r 266 | } 267 | function i(t, r, e, i, n, o, s) { 268 | var a = t + (r & i | e & ~i) + n + s; 269 | return (a << o | a >>> 32 - o) + r 270 | } 271 | function n(t, r, e, i, n, o, s) { 272 | var a = t + (r ^ e ^ i) + n + s; 273 | return (a << o | a >>> 32 - o) + r 274 | } 275 | function o(t, r, e, i, n, o, s) { 276 | var a = t + (e ^ (r | ~i)) + n + s; 277 | return (a << o | a >>> 32 - o) + r 278 | } 279 | var s = t 280 | , a = s.lib 281 | , c = a.WordArray 282 | , h = a.Hasher 283 | , l = s.algo 284 | , f = []; 285 | !function () { 286 | for (var t = 0; t < 64; t++) 287 | f[t] = 4294967296 * r.abs(r.sin(t + 1)) | 0 288 | }(); 289 | var u = l.MD5 = h.extend({ 290 | _doReset: function () { 291 | this._hash = new c.init([1732584193, 4023233417, 2562383102, 271733878]) 292 | }, 293 | _doProcessBlock: function (t, r) { 294 | for (var s = 0; s < 16; s++) { 295 | var a = r + s 296 | , c = t[a]; 297 | t[a] = 16711935 & (c << 8 | c >>> 24) | 4278255360 & (c << 24 | c >>> 8) 298 | } 299 | var h = this._hash.words 300 | , l = t[r + 0] 301 | , u = t[r + 1] 302 | , d = t[r + 2] 303 | , v = t[r + 3] 304 | , p = t[r + 4] 305 | , _ = t[r + 5] 306 | , y = t[r + 6] 307 | , g = t[r + 7] 308 | , B = t[r + 8] 309 | , w = t[r + 9] 310 | , k = t[r + 10] 311 | , S = t[r + 11] 312 | , m = t[r + 12] 313 | , x = t[r + 13] 314 | , b = t[r + 14] 315 | , H = t[r + 15] 316 | , z = h[0] 317 | , A = h[1] 318 | , C = h[2] 319 | , D = h[3]; 320 | z = e(z, A, C, D, l, 7, f[0]), 321 | D = e(D, z, A, C, u, 12, f[1]), 322 | C = e(C, D, z, A, d, 17, f[2]), 323 | A = e(A, C, D, z, v, 22, f[3]), 324 | z = e(z, A, C, D, p, 7, f[4]), 325 | D = e(D, z, A, C, _, 12, f[5]), 326 | C = e(C, D, z, A, y, 17, f[6]), 327 | A = e(A, C, D, z, g, 22, f[7]), 328 | z = e(z, A, C, D, B, 7, f[8]), 329 | D = e(D, z, A, C, w, 12, f[9]), 330 | C = e(C, D, z, A, k, 17, f[10]), 331 | A = e(A, C, D, z, S, 22, f[11]), 332 | z = e(z, A, C, D, m, 7, f[12]), 333 | D = e(D, z, A, C, x, 12, f[13]), 334 | C = e(C, D, z, A, b, 17, f[14]), 335 | A = e(A, C, D, z, H, 22, f[15]), 336 | z = i(z, A, C, D, u, 5, f[16]), 337 | D = i(D, z, A, C, y, 9, f[17]), 338 | C = i(C, D, z, A, S, 14, f[18]), 339 | A = i(A, C, D, z, l, 20, f[19]), 340 | z = i(z, A, C, D, _, 5, f[20]), 341 | D = i(D, z, A, C, k, 9, f[21]), 342 | C = i(C, D, z, A, H, 14, f[22]), 343 | A = i(A, C, D, z, p, 20, f[23]), 344 | z = i(z, A, C, D, w, 5, f[24]), 345 | D = i(D, z, A, C, b, 9, f[25]), 346 | C = i(C, D, z, A, v, 14, f[26]), 347 | A = i(A, C, D, z, B, 20, f[27]), 348 | z = i(z, A, C, D, x, 5, f[28]), 349 | D = i(D, z, A, C, d, 9, f[29]), 350 | C = i(C, D, z, A, g, 14, f[30]), 351 | A = i(A, C, D, z, m, 20, f[31]), 352 | z = n(z, A, C, D, _, 4, f[32]), 353 | D = n(D, z, A, C, B, 11, f[33]), 354 | C = n(C, D, z, A, S, 16, f[34]), 355 | A = n(A, C, D, z, b, 23, f[35]), 356 | z = n(z, A, C, D, u, 4, f[36]), 357 | D = n(D, z, A, C, p, 11, f[37]), 358 | C = n(C, D, z, A, g, 16, f[38]), 359 | A = n(A, C, D, z, k, 23, f[39]), 360 | z = n(z, A, C, D, x, 4, f[40]), 361 | D = n(D, z, A, C, l, 11, f[41]), 362 | C = n(C, D, z, A, v, 16, f[42]), 363 | A = n(A, C, D, z, y, 23, f[43]), 364 | z = n(z, A, C, D, w, 4, f[44]), 365 | D = n(D, z, A, C, m, 11, f[45]), 366 | C = n(C, D, z, A, H, 16, f[46]), 367 | A = n(A, C, D, z, d, 23, f[47]), 368 | z = o(z, A, C, D, l, 6, f[48]), 369 | D = o(D, z, A, C, g, 10, f[49]), 370 | C = o(C, D, z, A, b, 15, f[50]), 371 | A = o(A, C, D, z, _, 21, f[51]), 372 | z = o(z, A, C, D, m, 6, f[52]), 373 | D = o(D, z, A, C, v, 10, f[53]), 374 | C = o(C, D, z, A, k, 15, f[54]), 375 | A = o(A, C, D, z, u, 21, f[55]), 376 | z = o(z, A, C, D, B, 6, f[56]), 377 | D = o(D, z, A, C, H, 10, f[57]), 378 | C = o(C, D, z, A, y, 15, f[58]), 379 | A = o(A, C, D, z, x, 21, f[59]), 380 | z = o(z, A, C, D, p, 6, f[60]), 381 | D = o(D, z, A, C, S, 10, f[61]), 382 | C = o(C, D, z, A, d, 15, f[62]), 383 | A = o(A, C, D, z, w, 21, f[63]), 384 | h[0] = h[0] + z | 0, 385 | h[1] = h[1] + A | 0, 386 | h[2] = h[2] + C | 0, 387 | h[3] = h[3] + D | 0 388 | }, 389 | _doFinalize: function () { 390 | var t = this._data 391 | , e = t.words 392 | , i = 8 * this._nDataBytes 393 | , n = 8 * t.sigBytes; 394 | e[n >>> 5] |= 128 << 24 - n % 32; 395 | var o = r.floor(i / 4294967296) 396 | , s = i; 397 | e[(n + 64 >>> 9 << 4) + 15] = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8), 398 | e[(n + 64 >>> 9 << 4) + 14] = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), 399 | t.sigBytes = 4 * (e.length + 1), 400 | this._process(); 401 | for (var a = this._hash, c = a.words, h = 0; h < 4; h++) { 402 | var l = c[h]; 403 | c[h] = 16711935 & (l << 8 | l >>> 24) | 4278255360 & (l << 24 | l >>> 8) 404 | } 405 | return a 406 | }, 407 | clone: function () { 408 | var t = h.clone.call(this); 409 | return t._hash = this._hash.clone(), 410 | t 411 | } 412 | }); 413 | s.MD5 = h._createHelper(u), 414 | s.HmacMD5 = h._createHmacHelper(u) 415 | }(Math), 416 | function () { 417 | var r = t 418 | , e = r.lib 419 | , i = e.WordArray 420 | , n = e.Hasher 421 | , o = r.algo 422 | , s = [] 423 | , a = o.SHA1 = n.extend({ 424 | _doReset: function () { 425 | this._hash = new i.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) 426 | }, 427 | _doProcessBlock: function (t, r) { 428 | for (var e = this._hash.words, i = e[0], n = e[1], o = e[2], a = e[3], c = e[4], h = 0; h < 80; h++) { 429 | if (h < 16) 430 | s[h] = 0 | t[r + h]; 431 | else { 432 | var l = s[h - 3] ^ s[h - 8] ^ s[h - 14] ^ s[h - 16]; 433 | s[h] = l << 1 | l >>> 31 434 | } 435 | var f = (i << 5 | i >>> 27) + c + s[h]; 436 | f += h < 20 ? (n & o | ~n & a) + 1518500249 : h < 40 ? (n ^ o ^ a) + 1859775393 : h < 60 ? (n & o | n & a | o & a) - 1894007588 : (n ^ o ^ a) - 899497514, 437 | c = a, 438 | a = o, 439 | o = n << 30 | n >>> 2, 440 | n = i, 441 | i = f 442 | } 443 | e[0] = e[0] + i | 0, 444 | e[1] = e[1] + n | 0, 445 | e[2] = e[2] + o | 0, 446 | e[3] = e[3] + a | 0, 447 | e[4] = e[4] + c | 0 448 | }, 449 | _doFinalize: function () { 450 | var t = this._data 451 | , r = t.words 452 | , e = 8 * this._nDataBytes 453 | , i = 8 * t.sigBytes; 454 | return r[i >>> 5] |= 128 << 24 - i % 32, 455 | r[(i + 64 >>> 9 << 4) + 14] = Math.floor(e / 4294967296), 456 | r[(i + 64 >>> 9 << 4) + 15] = e, 457 | t.sigBytes = 4 * r.length, 458 | this._process(), 459 | this._hash 460 | }, 461 | clone: function () { 462 | var t = n.clone.call(this); 463 | return t._hash = this._hash.clone(), 464 | t 465 | } 466 | }); 467 | r.SHA1 = n._createHelper(a), 468 | r.HmacSHA1 = n._createHmacHelper(a) 469 | }(), 470 | function (r) { 471 | var e = t 472 | , i = e.lib 473 | , n = i.WordArray 474 | , o = i.Hasher 475 | , s = e.algo 476 | , a = [] 477 | , c = []; 478 | !function () { 479 | function t(t) { 480 | for (var e = r.sqrt(t), i = 2; i <= e; i++) 481 | if (!(t % i)) 482 | return !1; 483 | return !0 484 | } 485 | function e(t) { 486 | return 4294967296 * (t - (0 | t)) | 0 487 | } 488 | for (var i = 2, n = 0; n < 64;) 489 | t(i) && (n < 8 && (a[n] = e(r.pow(i, .5))), 490 | c[n] = e(r.pow(i, 1 / 3)), 491 | n++), 492 | i++ 493 | }(); 494 | var h = [] 495 | , l = s.SHA256 = o.extend({ 496 | _doReset: function () { 497 | this._hash = new n.init(a.slice(0)) 498 | }, 499 | _doProcessBlock: function (t, r) { 500 | for (var e = this._hash.words, i = e[0], n = e[1], o = e[2], s = e[3], a = e[4], l = e[5], f = e[6], u = e[7], d = 0; d < 64; d++) { 501 | if (d < 16) 502 | h[d] = 0 | t[r + d]; 503 | else { 504 | var v = h[d - 15] 505 | , p = (v << 25 | v >>> 7) ^ (v << 14 | v >>> 18) ^ v >>> 3 506 | , _ = h[d - 2] 507 | , y = (_ << 15 | _ >>> 17) ^ (_ << 13 | _ >>> 19) ^ _ >>> 10; 508 | h[d] = p + h[d - 7] + y + h[d - 16] 509 | } 510 | var g = a & l ^ ~a & f 511 | , B = i & n ^ i & o ^ n & o 512 | , w = (i << 30 | i >>> 2) ^ (i << 19 | i >>> 13) ^ (i << 10 | i >>> 22) 513 | , k = (a << 26 | a >>> 6) ^ (a << 21 | a >>> 11) ^ (a << 7 | a >>> 25) 514 | , S = u + k + g + c[d] + h[d] 515 | , m = w + B; 516 | u = f, 517 | f = l, 518 | l = a, 519 | a = s + S | 0, 520 | s = o, 521 | o = n, 522 | n = i, 523 | i = S + m | 0 524 | } 525 | e[0] = e[0] + i | 0, 526 | e[1] = e[1] + n | 0, 527 | e[2] = e[2] + o | 0, 528 | e[3] = e[3] + s | 0, 529 | e[4] = e[4] + a | 0, 530 | e[5] = e[5] + l | 0, 531 | e[6] = e[6] + f | 0, 532 | e[7] = e[7] + u | 0 533 | }, 534 | _doFinalize: function () { 535 | var t = this._data 536 | , e = t.words 537 | , i = 8 * this._nDataBytes 538 | , n = 8 * t.sigBytes; 539 | return e[n >>> 5] |= 128 << 24 - n % 32, 540 | e[(n + 64 >>> 9 << 4) + 14] = r.floor(i / 4294967296), 541 | e[(n + 64 >>> 9 << 4) + 15] = i, 542 | t.sigBytes = 4 * e.length, 543 | this._process(), 544 | this._hash 545 | }, 546 | clone: function () { 547 | var t = o.clone.call(this); 548 | return t._hash = this._hash.clone(), 549 | t 550 | } 551 | }); 552 | e.SHA256 = o._createHelper(l), 553 | e.HmacSHA256 = o._createHmacHelper(l) 554 | }(Math), 555 | function () { 556 | function r(t) { 557 | return t << 8 & 4278255360 | t >>> 8 & 16711935 558 | } 559 | var e = t 560 | , i = e.lib 561 | , n = i.WordArray 562 | , o = e.enc; 563 | o.Utf16 = o.Utf16BE = { 564 | stringify: function (t) { 565 | for (var r = t.words, e = t.sigBytes, i = [], n = 0; n < e; n += 2) { 566 | var o = r[n >>> 2] >>> 16 - n % 4 * 8 & 65535; 567 | i.push(String.fromCharCode(o)) 568 | } 569 | return i.join("") 570 | }, 571 | parse: function (t) { 572 | for (var r = t.length, e = [], i = 0; i < r; i++) 573 | e[i >>> 1] |= t.charCodeAt(i) << 16 - i % 2 * 16; 574 | return n.create(e, 2 * r) 575 | } 576 | }; 577 | o.Utf16LE = { 578 | stringify: function (t) { 579 | for (var e = t.words, i = t.sigBytes, n = [], o = 0; o < i; o += 2) { 580 | var s = r(e[o >>> 2] >>> 16 - o % 4 * 8 & 65535); 581 | n.push(String.fromCharCode(s)) 582 | } 583 | return n.join("") 584 | }, 585 | parse: function (t) { 586 | for (var e = t.length, i = [], o = 0; o < e; o++) 587 | i[o >>> 1] |= r(t.charCodeAt(o) << 16 - o % 2 * 16); 588 | return n.create(i, 2 * e) 589 | } 590 | } 591 | }(), 592 | function () { 593 | if ("function" == typeof ArrayBuffer) { 594 | var r = t 595 | , e = r.lib 596 | , i = e.WordArray 597 | , n = i.init 598 | , o = i.init = function (t) { 599 | if (t instanceof ArrayBuffer && (t = new Uint8Array(t)), 600 | (t instanceof Int8Array || "undefined" != typeof Uint8ClampedArray && t instanceof Uint8ClampedArray || t instanceof Int16Array || t instanceof Uint16Array || t instanceof Int32Array || t instanceof Uint32Array || t instanceof Float32Array || t instanceof Float64Array) && (t = new Uint8Array(t.buffer, t.byteOffset, t.byteLength)), 601 | t instanceof Uint8Array) { 602 | for (var r = t.byteLength, e = [], i = 0; i < r; i++) 603 | e[i >>> 2] |= t[i] << 24 - i % 4 * 8; 604 | n.call(this, e, r) 605 | } else 606 | n.apply(this, arguments) 607 | } 608 | ; 609 | o.prototype = i 610 | } 611 | }(), 612 | function (r) { 613 | function e(t, r, e) { 614 | return t ^ r ^ e 615 | } 616 | function i(t, r, e) { 617 | return t & r | ~t & e 618 | } 619 | function n(t, r, e) { 620 | return (t | ~r) ^ e 621 | } 622 | function o(t, r, e) { 623 | return t & e | r & ~e 624 | } 625 | function s(t, r, e) { 626 | return t ^ (r | ~e) 627 | } 628 | function a(t, r) { 629 | return t << r | t >>> 32 - r 630 | } 631 | var c = t 632 | , h = c.lib 633 | , l = h.WordArray 634 | , f = h.Hasher 635 | , u = c.algo 636 | , d = l.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]) 637 | , v = l.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]) 638 | , p = l.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]) 639 | , _ = l.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]) 640 | , y = l.create([0, 1518500249, 1859775393, 2400959708, 2840853838]) 641 | , g = l.create([1352829926, 1548603684, 1836072691, 2053994217, 0]) 642 | , B = u.RIPEMD160 = f.extend({ 643 | _doReset: function () { 644 | this._hash = l.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) 645 | }, 646 | _doProcessBlock: function (t, r) { 647 | for (var c = 0; c < 16; c++) { 648 | var h = r + c 649 | , l = t[h]; 650 | t[h] = 16711935 & (l << 8 | l >>> 24) | 4278255360 & (l << 24 | l >>> 8) 651 | } 652 | var f, u, B, w, k, S, m, x, b, H, z = this._hash.words, A = y.words, C = g.words, D = d.words, R = v.words, E = p.words, M = _.words; 653 | S = f = z[0], 654 | m = u = z[1], 655 | x = B = z[2], 656 | b = w = z[3], 657 | H = k = z[4]; 658 | for (var F, c = 0; c < 80; c += 1) 659 | F = f + t[r + D[c]] | 0, 660 | F += c < 16 ? e(u, B, w) + A[0] : c < 32 ? i(u, B, w) + A[1] : c < 48 ? n(u, B, w) + A[2] : c < 64 ? o(u, B, w) + A[3] : s(u, B, w) + A[4], 661 | F |= 0, 662 | F = a(F, E[c]), 663 | F = F + k | 0, 664 | f = k, 665 | k = w, 666 | w = a(B, 10), 667 | B = u, 668 | u = F, 669 | F = S + t[r + R[c]] | 0, 670 | F += c < 16 ? s(m, x, b) + C[0] : c < 32 ? o(m, x, b) + C[1] : c < 48 ? n(m, x, b) + C[2] : c < 64 ? i(m, x, b) + C[3] : e(m, x, b) + C[4], 671 | F |= 0, 672 | F = a(F, M[c]), 673 | F = F + H | 0, 674 | S = H, 675 | H = b, 676 | b = a(x, 10), 677 | x = m, 678 | m = F; 679 | F = z[1] + B + b | 0, 680 | z[1] = z[2] + w + H | 0, 681 | z[2] = z[3] + k + S | 0, 682 | z[3] = z[4] + f + m | 0, 683 | z[4] = z[0] + u + x | 0, 684 | z[0] = F 685 | }, 686 | _doFinalize: function () { 687 | var t = this._data 688 | , r = t.words 689 | , e = 8 * this._nDataBytes 690 | , i = 8 * t.sigBytes; 691 | r[i >>> 5] |= 128 << 24 - i % 32, 692 | r[(i + 64 >>> 9 << 4) + 14] = 16711935 & (e << 8 | e >>> 24) | 4278255360 & (e << 24 | e >>> 8), 693 | t.sigBytes = 4 * (r.length + 1), 694 | this._process(); 695 | for (var n = this._hash, o = n.words, s = 0; s < 5; s++) { 696 | var a = o[s]; 697 | o[s] = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8) 698 | } 699 | return n 700 | }, 701 | clone: function () { 702 | var t = f.clone.call(this); 703 | return t._hash = this._hash.clone(), 704 | t 705 | } 706 | }); 707 | c.RIPEMD160 = f._createHelper(B), 708 | c.HmacRIPEMD160 = f._createHmacHelper(B) 709 | }(Math), 710 | function () { 711 | var r = t 712 | , e = r.lib 713 | , i = e.Base 714 | , n = r.enc 715 | , o = n.Utf8 716 | , s = r.algo; 717 | s.HMAC = i.extend({ 718 | init: function (t, r) { 719 | t = this._hasher = new t.init, 720 | "string" == typeof r && (r = o.parse(r)); 721 | var e = t.blockSize 722 | , i = 4 * e; 723 | r.sigBytes > i && (r = t.finalize(r)), 724 | r.clamp(); 725 | for (var n = this._oKey = r.clone(), s = this._iKey = r.clone(), a = n.words, c = s.words, h = 0; h < e; h++) 726 | a[h] ^= 1549556828, 727 | c[h] ^= 909522486; 728 | n.sigBytes = s.sigBytes = i, 729 | this.reset() 730 | }, 731 | reset: function () { 732 | var t = this._hasher; 733 | t.reset(), 734 | t.update(this._iKey) 735 | }, 736 | update: function (t) { 737 | return this._hasher.update(t), 738 | this 739 | }, 740 | finalize: function (t) { 741 | var r = this._hasher 742 | , e = r.finalize(t); 743 | r.reset(); 744 | var i = r.finalize(this._oKey.clone().concat(e)); 745 | return i 746 | } 747 | }) 748 | }(), 749 | function () { 750 | var r = t 751 | , e = r.lib 752 | , i = e.Base 753 | , n = e.WordArray 754 | , o = r.algo 755 | , s = o.SHA1 756 | , a = o.HMAC 757 | , c = o.PBKDF2 = i.extend({ 758 | cfg: i.extend({ 759 | keySize: 4, 760 | hasher: s, 761 | iterations: 1 762 | }), 763 | init: function (t) { 764 | this.cfg = this.cfg.extend(t) 765 | }, 766 | compute: function (t, r) { 767 | for (var e = this.cfg, i = a.create(e.hasher, t), o = n.create(), s = n.create([1]), c = o.words, h = s.words, l = e.keySize, f = e.iterations; c.length < l;) { 768 | var u = i.update(r).finalize(s); 769 | i.reset(); 770 | for (var d = u.words, v = d.length, p = u, _ = 1; _ < f; _++) { 771 | p = i.finalize(p), 772 | i.reset(); 773 | for (var y = p.words, g = 0; g < v; g++) 774 | d[g] ^= y[g] 775 | } 776 | o.concat(u), 777 | h[0]++ 778 | } 779 | return o.sigBytes = 4 * l, 780 | o 781 | } 782 | }); 783 | r.PBKDF2 = function (t, r, e) { 784 | return c.create(e).compute(t, r) 785 | } 786 | }(), 787 | function () { 788 | var r = t 789 | , e = r.lib 790 | , i = e.Base 791 | , n = e.WordArray 792 | , o = r.algo 793 | , s = o.MD5 794 | , a = o.EvpKDF = i.extend({ 795 | cfg: i.extend({ 796 | keySize: 4, 797 | hasher: s, 798 | iterations: 1 799 | }), 800 | init: function (t) { 801 | this.cfg = this.cfg.extend(t) 802 | }, 803 | compute: function (t, r) { 804 | for (var e = this.cfg, i = e.hasher.create(), o = n.create(), s = o.words, a = e.keySize, c = e.iterations; s.length < a;) { 805 | h && i.update(h); 806 | var h = i.update(t).finalize(r); 807 | i.reset(); 808 | for (var l = 1; l < c; l++) 809 | h = i.finalize(h), 810 | i.reset(); 811 | o.concat(h) 812 | } 813 | return o.sigBytes = 4 * a, 814 | o 815 | } 816 | }); 817 | r.EvpKDF = function (t, r, e) { 818 | return a.create(e).compute(t, r) 819 | } 820 | }(), 821 | function () { 822 | var r = t 823 | , e = r.lib 824 | , i = e.WordArray 825 | , n = r.algo 826 | , o = n.SHA256 827 | , s = n.SHA224 = o.extend({ 828 | _doReset: function () { 829 | this._hash = new i.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428]) 830 | }, 831 | _doFinalize: function () { 832 | var t = o._doFinalize.call(this); 833 | return t.sigBytes -= 4, 834 | t 835 | } 836 | }); 837 | r.SHA224 = o._createHelper(s), 838 | r.HmacSHA224 = o._createHmacHelper(s) 839 | }(), 840 | function (r) { 841 | var e = t 842 | , i = e.lib 843 | , n = i.Base 844 | , o = i.WordArray 845 | , s = e.x64 = {}; 846 | s.Word = n.extend({ 847 | init: function (t, r) { 848 | this.high = t, 849 | this.low = r 850 | } 851 | }), 852 | s.WordArray = n.extend({ 853 | init: function (t, e) { 854 | t = this.words = t || [], 855 | e != r ? this.sigBytes = e : this.sigBytes = 8 * t.length 856 | }, 857 | toX32: function () { 858 | for (var t = this.words, r = t.length, e = [], i = 0; i < r; i++) { 859 | var n = t[i]; 860 | e.push(n.high), 861 | e.push(n.low) 862 | } 863 | return o.create(e, this.sigBytes) 864 | }, 865 | clone: function () { 866 | for (var t = n.clone.call(this), r = t.words = this.words.slice(0), e = r.length, i = 0; i < e; i++) 867 | r[i] = r[i].clone(); 868 | return t 869 | } 870 | }) 871 | }(), 872 | function (r) { 873 | var e = t 874 | , i = e.lib 875 | , n = i.WordArray 876 | , o = i.Hasher 877 | , s = e.x64 878 | , a = s.Word 879 | , c = e.algo 880 | , h = [] 881 | , l = [] 882 | , f = []; 883 | !function () { 884 | for (var t = 1, r = 0, e = 0; e < 24; e++) { 885 | h[t + 5 * r] = (e + 1) * (e + 2) / 2 % 64; 886 | var i = r % 5 887 | , n = (2 * t + 3 * r) % 5; 888 | t = i, 889 | r = n 890 | } 891 | for (var t = 0; t < 5; t++) 892 | for (var r = 0; r < 5; r++) 893 | l[t + 5 * r] = r + (2 * t + 3 * r) % 5 * 5; 894 | for (var o = 1, s = 0; s < 24; s++) { 895 | for (var c = 0, u = 0, d = 0; d < 7; d++) { 896 | if (1 & o) { 897 | var v = (1 << d) - 1; 898 | v < 32 ? u ^= 1 << v : c ^= 1 << v - 32 899 | } 900 | 128 & o ? o = o << 1 ^ 113 : o <<= 1 901 | } 902 | f[s] = a.create(c, u) 903 | } 904 | }(); 905 | var u = []; 906 | !function () { 907 | for (var t = 0; t < 25; t++) 908 | u[t] = a.create() 909 | }(); 910 | var d = c.SHA3 = o.extend({ 911 | cfg: o.cfg.extend({ 912 | outputLength: 512 913 | }), 914 | _doReset: function () { 915 | for (var t = this._state = [], r = 0; r < 25; r++) 916 | t[r] = new a.init; 917 | this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32 918 | }, 919 | _doProcessBlock: function (t, r) { 920 | for (var e = this._state, i = this.blockSize / 2, n = 0; n < i; n++) { 921 | var o = t[r + 2 * n] 922 | , s = t[r + 2 * n + 1]; 923 | o = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8), 924 | s = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8); 925 | var a = e[n]; 926 | a.high ^= s, 927 | a.low ^= o 928 | } 929 | for (var c = 0; c < 24; c++) { 930 | for (var d = 0; d < 5; d++) { 931 | for (var v = 0, p = 0, _ = 0; _ < 5; _++) { 932 | var a = e[d + 5 * _]; 933 | v ^= a.high, 934 | p ^= a.low 935 | } 936 | var y = u[d]; 937 | y.high = v, 938 | y.low = p 939 | } 940 | for (var d = 0; d < 5; d++) 941 | for (var g = u[(d + 4) % 5], B = u[(d + 1) % 5], w = B.high, k = B.low, v = g.high ^ (w << 1 | k >>> 31), p = g.low ^ (k << 1 | w >>> 31), _ = 0; _ < 5; _++) { 942 | var a = e[d + 5 * _]; 943 | a.high ^= v, 944 | a.low ^= p 945 | } 946 | for (var S = 1; S < 25; S++) { 947 | var a = e[S] 948 | , m = a.high 949 | , x = a.low 950 | , b = h[S]; 951 | if (b < 32) 952 | var v = m << b | x >>> 32 - b 953 | , p = x << b | m >>> 32 - b; 954 | else 955 | var v = x << b - 32 | m >>> 64 - b 956 | , p = m << b - 32 | x >>> 64 - b; 957 | var H = u[l[S]]; 958 | H.high = v, 959 | H.low = p 960 | } 961 | var z = u[0] 962 | , A = e[0]; 963 | z.high = A.high, 964 | z.low = A.low; 965 | for (var d = 0; d < 5; d++) 966 | for (var _ = 0; _ < 5; _++) { 967 | var S = d + 5 * _ 968 | , a = e[S] 969 | , C = u[S] 970 | , D = u[(d + 1) % 5 + 5 * _] 971 | , R = u[(d + 2) % 5 + 5 * _]; 972 | a.high = C.high ^ ~D.high & R.high, 973 | a.low = C.low ^ ~D.low & R.low 974 | } 975 | var a = e[0] 976 | , E = f[c]; 977 | a.high ^= E.high, 978 | a.low ^= E.low 979 | } 980 | }, 981 | _doFinalize: function () { 982 | var t = this._data 983 | , e = t.words 984 | , i = (8 * this._nDataBytes, 985 | 8 * t.sigBytes) 986 | , o = 32 * this.blockSize; 987 | e[i >>> 5] |= 1 << 24 - i % 32, 988 | e[(r.ceil((i + 1) / o) * o >>> 5) - 1] |= 128, 989 | t.sigBytes = 4 * e.length, 990 | this._process(); 991 | for (var s = this._state, a = this.cfg.outputLength / 8, c = a / 8, h = [], l = 0; l < c; l++) { 992 | var f = s[l] 993 | , u = f.high 994 | , d = f.low; 995 | u = 16711935 & (u << 8 | u >>> 24) | 4278255360 & (u << 24 | u >>> 8), 996 | d = 16711935 & (d << 8 | d >>> 24) | 4278255360 & (d << 24 | d >>> 8), 997 | h.push(d), 998 | h.push(u) 999 | } 1000 | return new n.init(h, a) 1001 | }, 1002 | clone: function () { 1003 | for (var t = o.clone.call(this), r = t._state = this._state.slice(0), e = 0; e < 25; e++) 1004 | r[e] = r[e].clone(); 1005 | return t 1006 | } 1007 | }); 1008 | e.SHA3 = o._createHelper(d), 1009 | e.HmacSHA3 = o._createHmacHelper(d) 1010 | }(Math), 1011 | function () { 1012 | function r() { 1013 | return s.create.apply(s, arguments) 1014 | } 1015 | var e = t 1016 | , i = e.lib 1017 | , n = i.Hasher 1018 | , o = e.x64 1019 | , s = o.Word 1020 | , a = o.WordArray 1021 | , c = e.algo 1022 | , h = [r(1116352408, 3609767458), r(1899447441, 602891725), r(3049323471, 3964484399), r(3921009573, 2173295548), r(961987163, 4081628472), r(1508970993, 3053834265), r(2453635748, 2937671579), r(2870763221, 3664609560), r(3624381080, 2734883394), r(310598401, 1164996542), r(607225278, 1323610764), r(1426881987, 3590304994), r(1925078388, 4068182383), r(2162078206, 991336113), r(2614888103, 633803317), r(3248222580, 3479774868), r(3835390401, 2666613458), r(4022224774, 944711139), r(264347078, 2341262773), r(604807628, 2007800933), r(770255983, 1495990901), r(1249150122, 1856431235), r(1555081692, 3175218132), r(1996064986, 2198950837), r(2554220882, 3999719339), r(2821834349, 766784016), r(2952996808, 2566594879), r(3210313671, 3203337956), r(3336571891, 1034457026), r(3584528711, 2466948901), r(113926993, 3758326383), r(338241895, 168717936), r(666307205, 1188179964), r(773529912, 1546045734), r(1294757372, 1522805485), r(1396182291, 2643833823), r(1695183700, 2343527390), r(1986661051, 1014477480), r(2177026350, 1206759142), r(2456956037, 344077627), r(2730485921, 1290863460), r(2820302411, 3158454273), r(3259730800, 3505952657), r(3345764771, 106217008), r(3516065817, 3606008344), r(3600352804, 1432725776), r(4094571909, 1467031594), r(275423344, 851169720), r(430227734, 3100823752), r(506948616, 1363258195), r(659060556, 3750685593), r(883997877, 3785050280), r(958139571, 3318307427), r(1322822218, 3812723403), r(1537002063, 2003034995), r(1747873779, 3602036899), r(1955562222, 1575990012), r(2024104815, 1125592928), r(2227730452, 2716904306), r(2361852424, 442776044), r(2428436474, 593698344), r(2756734187, 3733110249), r(3204031479, 2999351573), r(3329325298, 3815920427), r(3391569614, 3928383900), r(3515267271, 566280711), r(3940187606, 3454069534), r(4118630271, 4000239992), r(116418474, 1914138554), r(174292421, 2731055270), r(289380356, 3203993006), r(460393269, 320620315), r(685471733, 587496836), r(852142971, 1086792851), r(1017036298, 365543100), r(1126000580, 2618297676), r(1288033470, 3409855158), r(1501505948, 4234509866), r(1607167915, 987167468), r(1816402316, 1246189591)] 1023 | , l = []; 1024 | !function () { 1025 | for (var t = 0; t < 80; t++) 1026 | l[t] = r() 1027 | }(); 1028 | var f = c.SHA512 = n.extend({ 1029 | _doReset: function () { 1030 | this._hash = new a.init([new s.init(1779033703, 4089235720), new s.init(3144134277, 2227873595), new s.init(1013904242, 4271175723), new s.init(2773480762, 1595750129), new s.init(1359893119, 2917565137), new s.init(2600822924, 725511199), new s.init(528734635, 4215389547), new s.init(1541459225, 327033209)]) 1031 | }, 1032 | _doProcessBlock: function (t, r) { 1033 | for (var e = this._hash.words, i = e[0], n = e[1], o = e[2], s = e[3], a = e[4], c = e[5], f = e[6], u = e[7], d = i.high, v = i.low, p = n.high, _ = n.low, y = o.high, g = o.low, B = s.high, w = s.low, k = a.high, S = a.low, m = c.high, x = c.low, b = f.high, H = f.low, z = u.high, A = u.low, C = d, D = v, R = p, E = _, M = y, F = g, P = B, W = w, O = k, U = S, I = m, K = x, X = b, L = H, j = z, N = A, T = 0; T < 80; T++) { 1034 | var Z = l[T]; 1035 | if (T < 16) 1036 | var q = Z.high = 0 | t[r + 2 * T] 1037 | , G = Z.low = 0 | t[r + 2 * T + 1]; 1038 | else { 1039 | var J = l[T - 15] 1040 | , $ = J.high 1041 | , Q = J.low 1042 | , V = ($ >>> 1 | Q << 31) ^ ($ >>> 8 | Q << 24) ^ $ >>> 7 1043 | , Y = (Q >>> 1 | $ << 31) ^ (Q >>> 8 | $ << 24) ^ (Q >>> 7 | $ << 25) 1044 | , tt = l[T - 2] 1045 | , rt = tt.high 1046 | , et = tt.low 1047 | , it = (rt >>> 19 | et << 13) ^ (rt << 3 | et >>> 29) ^ rt >>> 6 1048 | , nt = (et >>> 19 | rt << 13) ^ (et << 3 | rt >>> 29) ^ (et >>> 6 | rt << 26) 1049 | , ot = l[T - 7] 1050 | , st = ot.high 1051 | , at = ot.low 1052 | , ct = l[T - 16] 1053 | , ht = ct.high 1054 | , lt = ct.low 1055 | , G = Y + at 1056 | , q = V + st + (G >>> 0 < Y >>> 0 ? 1 : 0) 1057 | , G = G + nt 1058 | , q = q + it + (G >>> 0 < nt >>> 0 ? 1 : 0) 1059 | , G = G + lt 1060 | , q = q + ht + (G >>> 0 < lt >>> 0 ? 1 : 0); 1061 | Z.high = q, 1062 | Z.low = G 1063 | } 1064 | var ft = O & I ^ ~O & X 1065 | , ut = U & K ^ ~U & L 1066 | , dt = C & R ^ C & M ^ R & M 1067 | , vt = D & E ^ D & F ^ E & F 1068 | , pt = (C >>> 28 | D << 4) ^ (C << 30 | D >>> 2) ^ (C << 25 | D >>> 7) 1069 | , _t = (D >>> 28 | C << 4) ^ (D << 30 | C >>> 2) ^ (D << 25 | C >>> 7) 1070 | , yt = (O >>> 14 | U << 18) ^ (O >>> 18 | U << 14) ^ (O << 23 | U >>> 9) 1071 | , gt = (U >>> 14 | O << 18) ^ (U >>> 18 | O << 14) ^ (U << 23 | O >>> 9) 1072 | , Bt = h[T] 1073 | , wt = Bt.high 1074 | , kt = Bt.low 1075 | , St = N + gt 1076 | , mt = j + yt + (St >>> 0 < N >>> 0 ? 1 : 0) 1077 | , St = St + ut 1078 | , mt = mt + ft + (St >>> 0 < ut >>> 0 ? 1 : 0) 1079 | , St = St + kt 1080 | , mt = mt + wt + (St >>> 0 < kt >>> 0 ? 1 : 0) 1081 | , St = St + G 1082 | , mt = mt + q + (St >>> 0 < G >>> 0 ? 1 : 0) 1083 | , xt = _t + vt 1084 | , bt = pt + dt + (xt >>> 0 < _t >>> 0 ? 1 : 0); 1085 | j = X, 1086 | N = L, 1087 | X = I, 1088 | L = K, 1089 | I = O, 1090 | K = U, 1091 | U = W + St | 0, 1092 | O = P + mt + (U >>> 0 < W >>> 0 ? 1 : 0) | 0, 1093 | P = M, 1094 | W = F, 1095 | M = R, 1096 | F = E, 1097 | R = C, 1098 | E = D, 1099 | D = St + xt | 0, 1100 | C = mt + bt + (D >>> 0 < St >>> 0 ? 1 : 0) | 0 1101 | } 1102 | v = i.low = v + D, 1103 | i.high = d + C + (v >>> 0 < D >>> 0 ? 1 : 0), 1104 | _ = n.low = _ + E, 1105 | n.high = p + R + (_ >>> 0 < E >>> 0 ? 1 : 0), 1106 | g = o.low = g + F, 1107 | o.high = y + M + (g >>> 0 < F >>> 0 ? 1 : 0), 1108 | w = s.low = w + W, 1109 | s.high = B + P + (w >>> 0 < W >>> 0 ? 1 : 0), 1110 | S = a.low = S + U, 1111 | a.high = k + O + (S >>> 0 < U >>> 0 ? 1 : 0), 1112 | x = c.low = x + K, 1113 | c.high = m + I + (x >>> 0 < K >>> 0 ? 1 : 0), 1114 | H = f.low = H + L, 1115 | f.high = b + X + (H >>> 0 < L >>> 0 ? 1 : 0), 1116 | A = u.low = A + N, 1117 | u.high = z + j + (A >>> 0 < N >>> 0 ? 1 : 0) 1118 | }, 1119 | _doFinalize: function () { 1120 | var t = this._data 1121 | , r = t.words 1122 | , e = 8 * this._nDataBytes 1123 | , i = 8 * t.sigBytes; 1124 | r[i >>> 5] |= 128 << 24 - i % 32, 1125 | r[(i + 128 >>> 10 << 5) + 30] = Math.floor(e / 4294967296), 1126 | r[(i + 128 >>> 10 << 5) + 31] = e, 1127 | t.sigBytes = 4 * r.length, 1128 | this._process(); 1129 | var n = this._hash.toX32(); 1130 | return n 1131 | }, 1132 | clone: function () { 1133 | var t = n.clone.call(this); 1134 | return t._hash = this._hash.clone(), 1135 | t 1136 | }, 1137 | blockSize: 32 1138 | }); 1139 | e.SHA512 = n._createHelper(f), 1140 | e.HmacSHA512 = n._createHmacHelper(f) 1141 | }(), 1142 | function () { 1143 | var r = t 1144 | , e = r.x64 1145 | , i = e.Word 1146 | , n = e.WordArray 1147 | , o = r.algo 1148 | , s = o.SHA512 1149 | , a = o.SHA384 = s.extend({ 1150 | _doReset: function () { 1151 | this._hash = new n.init([new i.init(3418070365, 3238371032), new i.init(1654270250, 914150663), new i.init(2438529370, 812702999), new i.init(355462360, 4144912697), new i.init(1731405415, 4290775857), new i.init(2394180231, 1750603025), new i.init(3675008525, 1694076839), new i.init(1203062813, 3204075428)]) 1152 | }, 1153 | _doFinalize: function () { 1154 | var t = s._doFinalize.call(this); 1155 | return t.sigBytes -= 16, 1156 | t 1157 | } 1158 | }); 1159 | r.SHA384 = s._createHelper(a), 1160 | r.HmacSHA384 = s._createHmacHelper(a) 1161 | }(), 1162 | t.lib.Cipher || function (r) { 1163 | var e = t 1164 | , i = e.lib 1165 | , n = i.Base 1166 | , o = i.WordArray 1167 | , s = i.BufferedBlockAlgorithm 1168 | , a = e.enc 1169 | , c = (a.Utf8, 1170 | a.Base64) 1171 | , h = e.algo 1172 | , l = h.EvpKDF 1173 | , f = i.Cipher = s.extend({ 1174 | cfg: n.extend(), 1175 | createEncryptor: function (t, r) { 1176 | return this.create(this._ENC_XFORM_MODE, t, r) 1177 | }, 1178 | createDecryptor: function (t, r) { 1179 | return this.create(this._DEC_XFORM_MODE, t, r) 1180 | }, 1181 | init: function (t, r, e) { 1182 | this.cfg = this.cfg.extend(e), 1183 | this._xformMode = t, 1184 | this._key = r, 1185 | this.reset() 1186 | }, 1187 | reset: function () { 1188 | s.reset.call(this), 1189 | this._doReset() 1190 | }, 1191 | process: function (t) { 1192 | return this._append(t), 1193 | this._process() 1194 | }, 1195 | finalize: function (t) { 1196 | t && this._append(t); 1197 | var r = this._doFinalize(); 1198 | return r 1199 | }, 1200 | keySize: 4, 1201 | ivSize: 4, 1202 | _ENC_XFORM_MODE: 1, 1203 | _DEC_XFORM_MODE: 2, 1204 | _createHelper: function () { 1205 | function t(t) { 1206 | return "string" == typeof t ? m : w 1207 | } 1208 | return function (r) { 1209 | return { 1210 | encrypt: function (e, i, n) { 1211 | return t(i).encrypt(r, e, i, n) 1212 | }, 1213 | decrypt: function (e, i, n) { 1214 | return t(i).decrypt(r, e, i, n) 1215 | } 1216 | } 1217 | } 1218 | }() 1219 | }) 1220 | , u = (i.StreamCipher = f.extend({ 1221 | _doFinalize: function () { 1222 | var t = this._process(!0); 1223 | return t 1224 | }, 1225 | blockSize: 1 1226 | }), 1227 | e.mode = {}) 1228 | , d = i.BlockCipherMode = n.extend({ 1229 | createEncryptor: function (t, r) { 1230 | return this.Encryptor.create(t, r) 1231 | }, 1232 | createDecryptor: function (t, r) { 1233 | return this.Decryptor.create(t, r) 1234 | }, 1235 | init: function (t, r) { 1236 | this._cipher = t, 1237 | this._iv = r 1238 | } 1239 | }) 1240 | , v = u.CBC = function () { 1241 | function t(t, e, i) { 1242 | var n = this._iv; 1243 | if (n) { 1244 | var o = n; 1245 | this._iv = r 1246 | } else 1247 | var o = this._prevBlock; 1248 | for (var s = 0; s < i; s++) 1249 | t[e + s] ^= o[s] 1250 | } 1251 | var e = d.extend(); 1252 | return e.Encryptor = e.extend({ 1253 | processBlock: function (r, e) { 1254 | var i = this._cipher 1255 | , n = i.blockSize; 1256 | t.call(this, r, e, n), 1257 | i.encryptBlock(r, e), 1258 | this._prevBlock = r.slice(e, e + n) 1259 | } 1260 | }), 1261 | e.Decryptor = e.extend({ 1262 | processBlock: function (r, e) { 1263 | var i = this._cipher 1264 | , n = i.blockSize 1265 | , o = r.slice(e, e + n); 1266 | i.decryptBlock(r, e), 1267 | t.call(this, r, e, n), 1268 | this._prevBlock = o 1269 | } 1270 | }), 1271 | e 1272 | }() 1273 | , p = e.pad = {} 1274 | , _ = p.Pkcs7 = { 1275 | pad: function (t, r) { 1276 | for (var e = 4 * r, i = e - t.sigBytes % e, n = i << 24 | i << 16 | i << 8 | i, s = [], a = 0; a < i; a += 4) 1277 | s.push(n); 1278 | var c = o.create(s, i); 1279 | t.concat(c) 1280 | }, 1281 | unpad: function (t) { 1282 | var r = 255 & t.words[t.sigBytes - 1 >>> 2]; 1283 | t.sigBytes -= r 1284 | } 1285 | } 1286 | , y = (i.BlockCipher = f.extend({ 1287 | cfg: f.cfg.extend({ 1288 | mode: v, 1289 | padding: _ 1290 | }), 1291 | reset: function () { 1292 | f.reset.call(this); 1293 | var t = this.cfg 1294 | , r = t.iv 1295 | , e = t.mode; 1296 | if (this._xformMode == this._ENC_XFORM_MODE) 1297 | var i = e.createEncryptor; 1298 | else { 1299 | var i = e.createDecryptor; 1300 | this._minBufferSize = 1 1301 | } 1302 | this._mode && this._mode.__creator == i ? this._mode.init(this, r && r.words) : (this._mode = i.call(e, this, r && r.words), 1303 | this._mode.__creator = i) 1304 | }, 1305 | _doProcessBlock: function (t, r) { 1306 | this._mode.processBlock(t, r) 1307 | }, 1308 | _doFinalize: function () { 1309 | var t = this.cfg.padding; 1310 | if (this._xformMode == this._ENC_XFORM_MODE) { 1311 | t.pad(this._data, this.blockSize); 1312 | var r = this._process(!0) 1313 | } else { 1314 | var r = this._process(!0); 1315 | t.unpad(r) 1316 | } 1317 | return r 1318 | }, 1319 | blockSize: 4 1320 | }), 1321 | i.CipherParams = n.extend({ 1322 | init: function (t) { 1323 | this.mixIn(t) 1324 | }, 1325 | toString: function (t) { 1326 | return (t || this.formatter).stringify(this) 1327 | } 1328 | })) 1329 | , g = e.format = {} 1330 | , B = g.OpenSSL = { 1331 | stringify: function (t) { 1332 | var r = t.ciphertext 1333 | , e = t.salt; 1334 | if (e) 1335 | var i = o.create([1398893684, 1701076831]).concat(e).concat(r); 1336 | else 1337 | var i = r; 1338 | return i.toString(c) 1339 | }, 1340 | parse: function (t) { 1341 | var r = c.parse(t) 1342 | , e = r.words; 1343 | if (1398893684 == e[0] && 1701076831 == e[1]) { 1344 | var i = o.create(e.slice(2, 4)); 1345 | e.splice(0, 4), 1346 | r.sigBytes -= 16 1347 | } 1348 | return y.create({ 1349 | ciphertext: r, 1350 | salt: i 1351 | }) 1352 | } 1353 | } 1354 | , w = i.SerializableCipher = n.extend({ 1355 | cfg: n.extend({ 1356 | format: B 1357 | }), 1358 | encrypt: function (t, r, e, i) { 1359 | i = this.cfg.extend(i); 1360 | var n = t.createEncryptor(e, i) 1361 | , o = n.finalize(r) 1362 | , s = n.cfg; 1363 | return y.create({ 1364 | ciphertext: o, 1365 | key: e, 1366 | iv: s.iv, 1367 | algorithm: t, 1368 | mode: s.mode, 1369 | padding: s.padding, 1370 | blockSize: t.blockSize, 1371 | formatter: i.format 1372 | }) 1373 | }, 1374 | decrypt: function (t, r, e, i) { 1375 | i = this.cfg.extend(i), 1376 | r = this._parse(r, i.format); 1377 | var n = t.createDecryptor(e, i).finalize(r.ciphertext); 1378 | return n 1379 | }, 1380 | _parse: function (t, r) { 1381 | return "string" == typeof t ? r.parse(t, this) : t 1382 | } 1383 | }) 1384 | , k = e.kdf = {} 1385 | , S = k.OpenSSL = { 1386 | execute: function (t, r, e, i) { 1387 | i || (i = o.random(8)); 1388 | var n = l.create({ 1389 | keySize: r + e 1390 | }).compute(t, i) 1391 | , s = o.create(n.words.slice(r), 4 * e); 1392 | return n.sigBytes = 4 * r, 1393 | y.create({ 1394 | key: n, 1395 | iv: s, 1396 | salt: i 1397 | }) 1398 | } 1399 | } 1400 | , m = i.PasswordBasedCipher = w.extend({ 1401 | cfg: w.cfg.extend({ 1402 | kdf: S 1403 | }), 1404 | encrypt: function (t, r, e, i) { 1405 | i = this.cfg.extend(i); 1406 | var n = i.kdf.execute(e, t.keySize, t.ivSize); 1407 | i.iv = n.iv; 1408 | var o = w.encrypt.call(this, t, r, n.key, i); 1409 | return o.mixIn(n), 1410 | o 1411 | }, 1412 | decrypt: function (t, r, e, i) { 1413 | i = this.cfg.extend(i), 1414 | r = this._parse(r, i.format); 1415 | var n = i.kdf.execute(e, t.keySize, t.ivSize, r.salt); 1416 | i.iv = n.iv; 1417 | var o = w.decrypt.call(this, t, r, n.key, i); 1418 | return o 1419 | } 1420 | }) 1421 | }(), 1422 | t.mode.CFB = function () { 1423 | function r(t, r, e, i) { 1424 | var n = this._iv; 1425 | if (n) { 1426 | var o = n.slice(0); 1427 | this._iv = void 0 1428 | } else 1429 | var o = this._prevBlock; 1430 | i.encryptBlock(o, 0); 1431 | for (var s = 0; s < e; s++) 1432 | t[r + s] ^= o[s] 1433 | } 1434 | var e = t.lib.BlockCipherMode.extend(); 1435 | return e.Encryptor = e.extend({ 1436 | processBlock: function (t, e) { 1437 | var i = this._cipher 1438 | , n = i.blockSize; 1439 | r.call(this, t, e, n, i), 1440 | this._prevBlock = t.slice(e, e + n) 1441 | } 1442 | }), 1443 | e.Decryptor = e.extend({ 1444 | processBlock: function (t, e) { 1445 | var i = this._cipher 1446 | , n = i.blockSize 1447 | , o = t.slice(e, e + n); 1448 | r.call(this, t, e, n, i), 1449 | this._prevBlock = o 1450 | } 1451 | }), 1452 | e 1453 | }(), 1454 | t.mode.ECB = function () { 1455 | var r = t.lib.BlockCipherMode.extend(); 1456 | return r.Encryptor = r.extend({ 1457 | processBlock: function (t, r) { 1458 | this._cipher.encryptBlock(t, r) 1459 | } 1460 | }), 1461 | r.Decryptor = r.extend({ 1462 | processBlock: function (t, r) { 1463 | this._cipher.decryptBlock(t, r) 1464 | } 1465 | }), 1466 | r 1467 | }(), 1468 | t.pad.AnsiX923 = { 1469 | pad: function (t, r) { 1470 | var e = t.sigBytes 1471 | , i = 4 * r 1472 | , n = i - e % i 1473 | , o = e + n - 1; 1474 | t.clamp(), 1475 | t.words[o >>> 2] |= n << 24 - o % 4 * 8, 1476 | t.sigBytes += n 1477 | }, 1478 | unpad: function (t) { 1479 | var r = 255 & t.words[t.sigBytes - 1 >>> 2]; 1480 | t.sigBytes -= r 1481 | } 1482 | }, 1483 | t.pad.Iso10126 = { 1484 | pad: function (r, e) { 1485 | var i = 4 * e 1486 | , n = i - r.sigBytes % i; 1487 | r.concat(t.lib.WordArray.random(n - 1)).concat(t.lib.WordArray.create([n << 24], 1)) 1488 | }, 1489 | unpad: function (t) { 1490 | var r = 255 & t.words[t.sigBytes - 1 >>> 2]; 1491 | t.sigBytes -= r 1492 | } 1493 | }, 1494 | t.pad.Iso97971 = { 1495 | pad: function (r, e) { 1496 | r.concat(t.lib.WordArray.create([2147483648], 1)), 1497 | t.pad.ZeroPadding.pad(r, e) 1498 | }, 1499 | unpad: function (r) { 1500 | t.pad.ZeroPadding.unpad(r), 1501 | r.sigBytes-- 1502 | } 1503 | }, 1504 | t.mode.OFB = function () { 1505 | var r = t.lib.BlockCipherMode.extend() 1506 | , e = r.Encryptor = r.extend({ 1507 | processBlock: function (t, r) { 1508 | var e = this._cipher 1509 | , i = e.blockSize 1510 | , n = this._iv 1511 | , o = this._keystream; 1512 | n && (o = this._keystream = n.slice(0), 1513 | this._iv = void 0), 1514 | e.encryptBlock(o, 0); 1515 | for (var s = 0; s < i; s++) 1516 | t[r + s] ^= o[s] 1517 | } 1518 | }); 1519 | return r.Decryptor = e, 1520 | r 1521 | }(), 1522 | t.pad.NoPadding = { 1523 | pad: function () { }, 1524 | unpad: function () { } 1525 | }, 1526 | function (r) { 1527 | var e = t 1528 | , i = e.lib 1529 | , n = i.CipherParams 1530 | , o = e.enc 1531 | , s = o.Hex 1532 | , a = e.format; 1533 | a.Hex = { 1534 | stringify: function (t) { 1535 | return t.ciphertext.toString(s) 1536 | }, 1537 | parse: function (t) { 1538 | var r = s.parse(t); 1539 | return n.create({ 1540 | ciphertext: r 1541 | }) 1542 | } 1543 | } 1544 | }(), 1545 | function () { 1546 | var r = t 1547 | , e = r.lib 1548 | , i = e.BlockCipher 1549 | , n = r.algo 1550 | , o = [] 1551 | , s = [] 1552 | , a = [] 1553 | , c = [] 1554 | , h = [] 1555 | , l = [] 1556 | , f = [] 1557 | , u = [] 1558 | , d = [] 1559 | , v = []; 1560 | !function () { 1561 | for (var t = [], r = 0; r < 256; r++) 1562 | r < 128 ? t[r] = r << 1 : t[r] = r << 1 ^ 283; 1563 | for (var e = 0, i = 0, r = 0; r < 256; r++) { 1564 | var n = i ^ i << 1 ^ i << 2 ^ i << 3 ^ i << 4; 1565 | n = n >>> 8 ^ 255 & n ^ 99, 1566 | o[e] = n, 1567 | s[n] = e; 1568 | var p = t[e] 1569 | , _ = t[p] 1570 | , y = t[_] 1571 | , g = 257 * t[n] ^ 16843008 * n; 1572 | a[e] = g << 24 | g >>> 8, 1573 | c[e] = g << 16 | g >>> 16, 1574 | h[e] = g << 8 | g >>> 24, 1575 | l[e] = g; 1576 | var g = 16843009 * y ^ 65537 * _ ^ 257 * p ^ 16843008 * e; 1577 | f[n] = g << 24 | g >>> 8, 1578 | u[n] = g << 16 | g >>> 16, 1579 | d[n] = g << 8 | g >>> 24, 1580 | v[n] = g, 1581 | e ? (e = p ^ t[t[t[y ^ p]]], 1582 | i ^= t[t[i]]) : e = i = 1 1583 | } 1584 | }(); 1585 | var p = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54] 1586 | , _ = n.AES = i.extend({ 1587 | _doReset: function () { 1588 | if (!this._nRounds || this._keyPriorReset !== this._key) { 1589 | for (var t = this._keyPriorReset = this._key, r = t.words, e = t.sigBytes / 4, i = this._nRounds = e + 6, n = 4 * (i + 1), s = this._keySchedule = [], a = 0; a < n; a++) 1590 | if (a < e) 1591 | s[a] = r[a]; 1592 | else { 1593 | var c = s[a - 1]; 1594 | a % e ? e > 6 && a % e == 4 && (c = o[c >>> 24] << 24 | o[c >>> 16 & 255] << 16 | o[c >>> 8 & 255] << 8 | o[255 & c]) : (c = c << 8 | c >>> 24, 1595 | c = o[c >>> 24] << 24 | o[c >>> 16 & 255] << 16 | o[c >>> 8 & 255] << 8 | o[255 & c], 1596 | c ^= p[a / e | 0] << 24), 1597 | s[a] = s[a - e] ^ c 1598 | } 1599 | for (var h = this._invKeySchedule = [], l = 0; l < n; l++) { 1600 | var a = n - l; 1601 | if (l % 4) 1602 | var c = s[a]; 1603 | else 1604 | var c = s[a - 4]; 1605 | l < 4 || a <= 4 ? h[l] = c : h[l] = f[o[c >>> 24]] ^ u[o[c >>> 16 & 255]] ^ d[o[c >>> 8 & 255]] ^ v[o[255 & c]] 1606 | } 1607 | } 1608 | }, 1609 | encryptBlock: function (t, r) { 1610 | this._doCryptBlock(t, r, this._keySchedule, a, c, h, l, o) 1611 | }, 1612 | decryptBlock: function (t, r) { 1613 | var e = t[r + 1]; 1614 | t[r + 1] = t[r + 3], 1615 | t[r + 3] = e, 1616 | this._doCryptBlock(t, r, this._invKeySchedule, f, u, d, v, s); 1617 | var e = t[r + 1]; 1618 | t[r + 1] = t[r + 3], 1619 | t[r + 3] = e 1620 | }, 1621 | _doCryptBlock: function (t, r, e, i, n, o, s, a) { 1622 | for (var c = this._nRounds, h = t[r] ^ e[0], l = t[r + 1] ^ e[1], f = t[r + 2] ^ e[2], u = t[r + 3] ^ e[3], d = 4, v = 1; v < c; v++) { 1623 | var p = i[h >>> 24] ^ n[l >>> 16 & 255] ^ o[f >>> 8 & 255] ^ s[255 & u] ^ e[d++] 1624 | , _ = i[l >>> 24] ^ n[f >>> 16 & 255] ^ o[u >>> 8 & 255] ^ s[255 & h] ^ e[d++] 1625 | , y = i[f >>> 24] ^ n[u >>> 16 & 255] ^ o[h >>> 8 & 255] ^ s[255 & l] ^ e[d++] 1626 | , g = i[u >>> 24] ^ n[h >>> 16 & 255] ^ o[l >>> 8 & 255] ^ s[255 & f] ^ e[d++]; 1627 | h = p, 1628 | l = _, 1629 | f = y, 1630 | u = g 1631 | } 1632 | var p = (a[h >>> 24] << 24 | a[l >>> 16 & 255] << 16 | a[f >>> 8 & 255] << 8 | a[255 & u]) ^ e[d++] 1633 | , _ = (a[l >>> 24] << 24 | a[f >>> 16 & 255] << 16 | a[u >>> 8 & 255] << 8 | a[255 & h]) ^ e[d++] 1634 | , y = (a[f >>> 24] << 24 | a[u >>> 16 & 255] << 16 | a[h >>> 8 & 255] << 8 | a[255 & l]) ^ e[d++] 1635 | , g = (a[u >>> 24] << 24 | a[h >>> 16 & 255] << 16 | a[l >>> 8 & 255] << 8 | a[255 & f]) ^ e[d++]; 1636 | t[r] = p, 1637 | t[r + 1] = _, 1638 | t[r + 2] = y, 1639 | t[r + 3] = g 1640 | }, 1641 | keySize: 8 1642 | }); 1643 | r.AES = i._createHelper(_) 1644 | }(), 1645 | function () { 1646 | function r(t, r) { 1647 | var e = (this._lBlock >>> t ^ this._rBlock) & r; 1648 | this._rBlock ^= e, 1649 | this._lBlock ^= e << t 1650 | } 1651 | function e(t, r) { 1652 | var e = (this._rBlock >>> t ^ this._lBlock) & r; 1653 | this._lBlock ^= e, 1654 | this._rBlock ^= e << t; 1655 | } 1656 | var i = t 1657 | , n = i.lib 1658 | , o = n.WordArray 1659 | , s = n.BlockCipher 1660 | , a = i.algo 1661 | , c = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4] 1662 | , h = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32] 1663 | , l = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28] 1664 | , f = [{ 1665 | 0: 8421888, 1666 | 268435456: 32768, 1667 | 536870912: 8421378, 1668 | 805306368: 2, 1669 | 1073741824: 512, 1670 | 1342177280: 8421890, 1671 | 1610612736: 8389122, 1672 | 1879048192: 8388608, 1673 | 2147483648: 514, 1674 | 2415919104: 8389120, 1675 | 2684354560: 33280, 1676 | 2952790016: 8421376, 1677 | 3221225472: 32770, 1678 | 3489660928: 8388610, 1679 | 3758096384: 0, 1680 | 4026531840: 33282, 1681 | 134217728: 0, 1682 | 402653184: 8421890, 1683 | 671088640: 33282, 1684 | 939524096: 32768, 1685 | 1207959552: 8421888, 1686 | 1476395008: 512, 1687 | 1744830464: 8421378, 1688 | 2013265920: 2, 1689 | 2281701376: 8389120, 1690 | 2550136832: 33280, 1691 | 2818572288: 8421376, 1692 | 3087007744: 8389122, 1693 | 3355443200: 8388610, 1694 | 3623878656: 32770, 1695 | 3892314112: 514, 1696 | 4160749568: 8388608, 1697 | 1: 32768, 1698 | 268435457: 2, 1699 | 536870913: 8421888, 1700 | 805306369: 8388608, 1701 | 1073741825: 8421378, 1702 | 1342177281: 33280, 1703 | 1610612737: 512, 1704 | 1879048193: 8389122, 1705 | 2147483649: 8421890, 1706 | 2415919105: 8421376, 1707 | 2684354561: 8388610, 1708 | 2952790017: 33282, 1709 | 3221225473: 514, 1710 | 3489660929: 8389120, 1711 | 3758096385: 32770, 1712 | 4026531841: 0, 1713 | 134217729: 8421890, 1714 | 402653185: 8421376, 1715 | 671088641: 8388608, 1716 | 939524097: 512, 1717 | 1207959553: 32768, 1718 | 1476395009: 8388610, 1719 | 1744830465: 2, 1720 | 2013265921: 33282, 1721 | 2281701377: 32770, 1722 | 2550136833: 8389122, 1723 | 2818572289: 514, 1724 | 3087007745: 8421888, 1725 | 3355443201: 8389120, 1726 | 3623878657: 0, 1727 | 3892314113: 33280, 1728 | 4160749569: 8421378 1729 | }, { 1730 | 0: 1074282512, 1731 | 16777216: 16384, 1732 | 33554432: 524288, 1733 | 50331648: 1074266128, 1734 | 67108864: 1073741840, 1735 | 83886080: 1074282496, 1736 | 100663296: 1073758208, 1737 | 117440512: 16, 1738 | 134217728: 540672, 1739 | 150994944: 1073758224, 1740 | 167772160: 1073741824, 1741 | 184549376: 540688, 1742 | 201326592: 524304, 1743 | 218103808: 0, 1744 | 234881024: 16400, 1745 | 251658240: 1074266112, 1746 | 8388608: 1073758208, 1747 | 25165824: 540688, 1748 | 41943040: 16, 1749 | 58720256: 1073758224, 1750 | 75497472: 1074282512, 1751 | 92274688: 1073741824, 1752 | 109051904: 524288, 1753 | 125829120: 1074266128, 1754 | 142606336: 524304, 1755 | 159383552: 0, 1756 | 176160768: 16384, 1757 | 192937984: 1074266112, 1758 | 209715200: 1073741840, 1759 | 226492416: 540672, 1760 | 243269632: 1074282496, 1761 | 260046848: 16400, 1762 | 268435456: 0, 1763 | 285212672: 1074266128, 1764 | 301989888: 1073758224, 1765 | 318767104: 1074282496, 1766 | 335544320: 1074266112, 1767 | 352321536: 16, 1768 | 369098752: 540688, 1769 | 385875968: 16384, 1770 | 402653184: 16400, 1771 | 419430400: 524288, 1772 | 436207616: 524304, 1773 | 452984832: 1073741840, 1774 | 469762048: 540672, 1775 | 486539264: 1073758208, 1776 | 503316480: 1073741824, 1777 | 520093696: 1074282512, 1778 | 276824064: 540688, 1779 | 293601280: 524288, 1780 | 310378496: 1074266112, 1781 | 327155712: 16384, 1782 | 343932928: 1073758208, 1783 | 360710144: 1074282512, 1784 | 377487360: 16, 1785 | 394264576: 1073741824, 1786 | 411041792: 1074282496, 1787 | 427819008: 1073741840, 1788 | 444596224: 1073758224, 1789 | 461373440: 524304, 1790 | 478150656: 0, 1791 | 494927872: 16400, 1792 | 511705088: 1074266128, 1793 | 528482304: 540672 1794 | }, { 1795 | 0: 260, 1796 | 1048576: 0, 1797 | 2097152: 67109120, 1798 | 3145728: 65796, 1799 | 4194304: 65540, 1800 | 5242880: 67108868, 1801 | 6291456: 67174660, 1802 | 7340032: 67174400, 1803 | 8388608: 67108864, 1804 | 9437184: 67174656, 1805 | 10485760: 65792, 1806 | 11534336: 67174404, 1807 | 12582912: 67109124, 1808 | 13631488: 65536, 1809 | 14680064: 4, 1810 | 15728640: 256, 1811 | 524288: 67174656, 1812 | 1572864: 67174404, 1813 | 2621440: 0, 1814 | 3670016: 67109120, 1815 | 4718592: 67108868, 1816 | 5767168: 65536, 1817 | 6815744: 65540, 1818 | 7864320: 260, 1819 | 8912896: 4, 1820 | 9961472: 256, 1821 | 11010048: 67174400, 1822 | 12058624: 65796, 1823 | 13107200: 65792, 1824 | 14155776: 67109124, 1825 | 15204352: 67174660, 1826 | 16252928: 67108864, 1827 | 16777216: 67174656, 1828 | 17825792: 65540, 1829 | 18874368: 65536, 1830 | 19922944: 67109120, 1831 | 20971520: 256, 1832 | 22020096: 67174660, 1833 | 23068672: 67108868, 1834 | 24117248: 0, 1835 | 25165824: 67109124, 1836 | 26214400: 67108864, 1837 | 27262976: 4, 1838 | 28311552: 65792, 1839 | 29360128: 67174400, 1840 | 30408704: 260, 1841 | 31457280: 65796, 1842 | 32505856: 67174404, 1843 | 17301504: 67108864, 1844 | 18350080: 260, 1845 | 19398656: 67174656, 1846 | 20447232: 0, 1847 | 21495808: 65540, 1848 | 22544384: 67109120, 1849 | 23592960: 256, 1850 | 24641536: 67174404, 1851 | 25690112: 65536, 1852 | 26738688: 67174660, 1853 | 27787264: 65796, 1854 | 28835840: 67108868, 1855 | 29884416: 67109124, 1856 | 30932992: 67174400, 1857 | 31981568: 4, 1858 | 33030144: 65792 1859 | }, { 1860 | 0: 2151682048, 1861 | 65536: 2147487808, 1862 | 131072: 4198464, 1863 | 196608: 2151677952, 1864 | 262144: 0, 1865 | 327680: 4198400, 1866 | 393216: 2147483712, 1867 | 458752: 4194368, 1868 | 524288: 2147483648, 1869 | 589824: 4194304, 1870 | 655360: 64, 1871 | 720896: 2147487744, 1872 | 786432: 2151678016, 1873 | 851968: 4160, 1874 | 917504: 4096, 1875 | 983040: 2151682112, 1876 | 32768: 2147487808, 1877 | 98304: 64, 1878 | 163840: 2151678016, 1879 | 229376: 2147487744, 1880 | 294912: 4198400, 1881 | 360448: 2151682112, 1882 | 425984: 0, 1883 | 491520: 2151677952, 1884 | 557056: 4096, 1885 | 622592: 2151682048, 1886 | 688128: 4194304, 1887 | 753664: 4160, 1888 | 819200: 2147483648, 1889 | 884736: 4194368, 1890 | 950272: 4198464, 1891 | 1015808: 2147483712, 1892 | 1048576: 4194368, 1893 | 1114112: 4198400, 1894 | 1179648: 2147483712, 1895 | 1245184: 0, 1896 | 1310720: 4160, 1897 | 1376256: 2151678016, 1898 | 1441792: 2151682048, 1899 | 1507328: 2147487808, 1900 | 1572864: 2151682112, 1901 | 1638400: 2147483648, 1902 | 1703936: 2151677952, 1903 | 1769472: 4198464, 1904 | 1835008: 2147487744, 1905 | 1900544: 4194304, 1906 | 1966080: 64, 1907 | 2031616: 4096, 1908 | 1081344: 2151677952, 1909 | 1146880: 2151682112, 1910 | 1212416: 0, 1911 | 1277952: 4198400, 1912 | 1343488: 4194368, 1913 | 1409024: 2147483648, 1914 | 1474560: 2147487808, 1915 | 1540096: 64, 1916 | 1605632: 2147483712, 1917 | 1671168: 4096, 1918 | 1736704: 2147487744, 1919 | 1802240: 2151678016, 1920 | 1867776: 4160, 1921 | 1933312: 2151682048, 1922 | 1998848: 4194304, 1923 | 2064384: 4198464 1924 | }, { 1925 | 0: 128, 1926 | 4096: 17039360, 1927 | 8192: 262144, 1928 | 12288: 536870912, 1929 | 16384: 537133184, 1930 | 20480: 16777344, 1931 | 24576: 553648256, 1932 | 28672: 262272, 1933 | 32768: 16777216, 1934 | 36864: 537133056, 1935 | 40960: 536871040, 1936 | 45056: 553910400, 1937 | 49152: 553910272, 1938 | 53248: 0, 1939 | 57344: 17039488, 1940 | 61440: 553648128, 1941 | 2048: 17039488, 1942 | 6144: 553648256, 1943 | 10240: 128, 1944 | 14336: 17039360, 1945 | 18432: 262144, 1946 | 22528: 537133184, 1947 | 26624: 553910272, 1948 | 30720: 536870912, 1949 | 34816: 537133056, 1950 | 38912: 0, 1951 | 43008: 553910400, 1952 | 47104: 16777344, 1953 | 51200: 536871040, 1954 | 55296: 553648128, 1955 | 59392: 16777216, 1956 | 63488: 262272, 1957 | 65536: 262144, 1958 | 69632: 128, 1959 | 73728: 536870912, 1960 | 77824: 553648256, 1961 | 81920: 16777344, 1962 | 86016: 553910272, 1963 | 90112: 537133184, 1964 | 94208: 16777216, 1965 | 98304: 553910400, 1966 | 102400: 553648128, 1967 | 106496: 17039360, 1968 | 110592: 537133056, 1969 | 114688: 262272, 1970 | 118784: 536871040, 1971 | 122880: 0, 1972 | 126976: 17039488, 1973 | 67584: 553648256, 1974 | 71680: 16777216, 1975 | 75776: 17039360, 1976 | 79872: 537133184, 1977 | 83968: 536870912, 1978 | 88064: 17039488, 1979 | 92160: 128, 1980 | 96256: 553910272, 1981 | 100352: 262272, 1982 | 104448: 553910400, 1983 | 108544: 0, 1984 | 112640: 553648128, 1985 | 116736: 16777344, 1986 | 120832: 262144, 1987 | 124928: 537133056, 1988 | 129024: 536871040 1989 | }, { 1990 | 0: 268435464, 1991 | 256: 8192, 1992 | 512: 270532608, 1993 | 768: 270540808, 1994 | 1024: 268443648, 1995 | 1280: 2097152, 1996 | 1536: 2097160, 1997 | 1792: 268435456, 1998 | 2048: 0, 1999 | 2304: 268443656, 2000 | 2560: 2105344, 2001 | 2816: 8, 2002 | 3072: 270532616, 2003 | 3328: 2105352, 2004 | 3584: 8200, 2005 | 3840: 270540800, 2006 | 128: 270532608, 2007 | 384: 270540808, 2008 | 640: 8, 2009 | 896: 2097152, 2010 | 1152: 2105352, 2011 | 1408: 268435464, 2012 | 1664: 268443648, 2013 | 1920: 8200, 2014 | 2176: 2097160, 2015 | 2432: 8192, 2016 | 2688: 268443656, 2017 | 2944: 270532616, 2018 | 3200: 0, 2019 | 3456: 270540800, 2020 | 3712: 2105344, 2021 | 3968: 268435456, 2022 | 4096: 268443648, 2023 | 4352: 270532616, 2024 | 4608: 270540808, 2025 | 4864: 8200, 2026 | 5120: 2097152, 2027 | 5376: 268435456, 2028 | 5632: 268435464, 2029 | 5888: 2105344, 2030 | 6144: 2105352, 2031 | 6400: 0, 2032 | 6656: 8, 2033 | 6912: 270532608, 2034 | 7168: 8192, 2035 | 7424: 268443656, 2036 | 7680: 270540800, 2037 | 7936: 2097160, 2038 | 4224: 8, 2039 | 4480: 2105344, 2040 | 4736: 2097152, 2041 | 4992: 268435464, 2042 | 5248: 268443648, 2043 | 5504: 8200, 2044 | 5760: 270540808, 2045 | 6016: 270532608, 2046 | 6272: 270540800, 2047 | 6528: 270532616, 2048 | 6784: 8192, 2049 | 7040: 2105352, 2050 | 7296: 2097160, 2051 | 7552: 0, 2052 | 7808: 268435456, 2053 | 8064: 268443656 2054 | }, { 2055 | 0: 1048576, 2056 | 16: 33555457, 2057 | 32: 1024, 2058 | 48: 1049601, 2059 | 64: 34604033, 2060 | 80: 0, 2061 | 96: 1, 2062 | 112: 34603009, 2063 | 128: 33555456, 2064 | 144: 1048577, 2065 | 160: 33554433, 2066 | 176: 34604032, 2067 | 192: 34603008, 2068 | 208: 1025, 2069 | 224: 1049600, 2070 | 240: 33554432, 2071 | 8: 34603009, 2072 | 24: 0, 2073 | 40: 33555457, 2074 | 56: 34604032, 2075 | 72: 1048576, 2076 | 88: 33554433, 2077 | 104: 33554432, 2078 | 120: 1025, 2079 | 136: 1049601, 2080 | 152: 33555456, 2081 | 168: 34603008, 2082 | 184: 1048577, 2083 | 200: 1024, 2084 | 216: 34604033, 2085 | 232: 1, 2086 | 248: 1049600, 2087 | 256: 33554432, 2088 | 272: 1048576, 2089 | 288: 33555457, 2090 | 304: 34603009, 2091 | 320: 1048577, 2092 | 336: 33555456, 2093 | 352: 34604032, 2094 | 368: 1049601, 2095 | 384: 1025, 2096 | 400: 34604033, 2097 | 416: 1049600, 2098 | 432: 1, 2099 | 448: 0, 2100 | 464: 34603008, 2101 | 480: 33554433, 2102 | 496: 1024, 2103 | 264: 1049600, 2104 | 280: 33555457, 2105 | 296: 34603009, 2106 | 312: 1, 2107 | 328: 33554432, 2108 | 344: 1048576, 2109 | 360: 1025, 2110 | 376: 34604032, 2111 | 392: 33554433, 2112 | 408: 34603008, 2113 | 424: 0, 2114 | 440: 34604033, 2115 | 456: 1049601, 2116 | 472: 1024, 2117 | 488: 33555456, 2118 | 504: 1048577 2119 | }, { 2120 | 0: 134219808, 2121 | 1: 131072, 2122 | 2: 134217728, 2123 | 3: 32, 2124 | 4: 131104, 2125 | 5: 134350880, 2126 | 6: 134350848, 2127 | 7: 2048, 2128 | 8: 134348800, 2129 | 9: 134219776, 2130 | 10: 133120, 2131 | 11: 134348832, 2132 | 12: 2080, 2133 | 13: 0, 2134 | 14: 134217760, 2135 | 15: 133152, 2136 | 2147483648: 2048, 2137 | 2147483649: 134350880, 2138 | 2147483650: 134219808, 2139 | 2147483651: 134217728, 2140 | 2147483652: 134348800, 2141 | 2147483653: 133120, 2142 | 2147483654: 133152, 2143 | 2147483655: 32, 2144 | 2147483656: 134217760, 2145 | 2147483657: 2080, 2146 | 2147483658: 131104, 2147 | 2147483659: 134350848, 2148 | 2147483660: 0, 2149 | 2147483661: 134348832, 2150 | 2147483662: 134219776, 2151 | 2147483663: 131072, 2152 | 16: 133152, 2153 | 17: 134350848, 2154 | 18: 32, 2155 | 19: 2048, 2156 | 20: 134219776, 2157 | 21: 134217760, 2158 | 22: 134348832, 2159 | 23: 131072, 2160 | 24: 0, 2161 | 25: 131104, 2162 | 26: 134348800, 2163 | 27: 134219808, 2164 | 28: 134350880, 2165 | 29: 133120, 2166 | 30: 2080, 2167 | 31: 134217728, 2168 | 2147483664: 131072, 2169 | 2147483665: 2048, 2170 | 2147483666: 134348832, 2171 | 2147483667: 133152, 2172 | 2147483668: 32, 2173 | 2147483669: 134348800, 2174 | 2147483670: 134217728, 2175 | 2147483671: 134219808, 2176 | 2147483672: 134350880, 2177 | 2147483673: 134217760, 2178 | 2147483674: 134219776, 2179 | 2147483675: 0, 2180 | 2147483676: 133120, 2181 | 2147483677: 2080, 2182 | 2147483678: 131104, 2183 | 2147483679: 134350848 2184 | }] 2185 | , u = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679] 2186 | , d = a.DES = s.extend({ 2187 | _doReset: function () { 2188 | for (var t = this._key, r = t.words, e = [], i = 0; i < 56; i++) { 2189 | var n = c[i] - 1; 2190 | e[i] = r[n >>> 5] >>> 31 - n % 32 & 1 2191 | } 2192 | for (var o = this._subKeys = [], s = 0; s < 16; s++) { 2193 | for (var a = o[s] = [], f = l[s], i = 0; i < 24; i++) 2194 | a[i / 6 | 0] |= e[(h[i] - 1 + f) % 28] << 31 - i % 6, 2195 | a[4 + (i / 6 | 0)] |= e[28 + (h[i + 24] - 1 + f) % 28] << 31 - i % 6; 2196 | a[0] = a[0] << 1 | a[0] >>> 31; 2197 | for (var i = 1; i < 7; i++) 2198 | a[i] = a[i] >>> 4 * (i - 1) + 3; 2199 | a[7] = a[7] << 5 | a[7] >>> 27 2200 | } 2201 | for (var u = this._invSubKeys = [], i = 0; i < 16; i++) 2202 | u[i] = o[15 - i] 2203 | }, 2204 | encryptBlock: function (t, r) { 2205 | this._doCryptBlock(t, r, this._subKeys) 2206 | }, 2207 | decryptBlock: function (t, r) { 2208 | this._doCryptBlock(t, r, this._invSubKeys) 2209 | }, 2210 | _doCryptBlock: function (t, i, n) { 2211 | this._lBlock = t[i], 2212 | this._rBlock = t[i + 1], 2213 | r.call(this, 4, 252645135), 2214 | r.call(this, 16, 65535), 2215 | e.call(this, 2, 858993459), 2216 | e.call(this, 8, 16711935), 2217 | r.call(this, 1, 1431655765); 2218 | for (var o = 0; o < 16; o++) { 2219 | for (var s = n[o], a = this._lBlock, c = this._rBlock, h = 0, l = 0; l < 8; l++) 2220 | h |= f[l][((c ^ s[l]) & u[l]) >>> 0]; 2221 | this._lBlock = c, 2222 | this._rBlock = a ^ h 2223 | } 2224 | var d = this._lBlock; 2225 | this._lBlock = this._rBlock, 2226 | this._rBlock = d, 2227 | r.call(this, 1, 1431655765), 2228 | e.call(this, 8, 16711935), 2229 | e.call(this, 2, 858993459), 2230 | r.call(this, 16, 65535), 2231 | r.call(this, 4, 252645135), 2232 | t[i] = this._lBlock, 2233 | t[i + 1] = this._rBlock 2234 | }, 2235 | keySize: 2, 2236 | ivSize: 2, 2237 | blockSize: 2 2238 | }); 2239 | i.DES = s._createHelper(d); 2240 | var v = a.TripleDES = s.extend({ 2241 | _doReset: function () { 2242 | var t = this._key 2243 | , r = t.words; 2244 | this._des1 = d.createEncryptor(o.create(r.slice(0, 2))), 2245 | this._des2 = d.createEncryptor(o.create(r.slice(2, 4))), 2246 | this._des3 = d.createEncryptor(o.create(r.slice(4, 6))) 2247 | }, 2248 | encryptBlock: function (t, r) { 2249 | this._des1.encryptBlock(t, r), 2250 | this._des2.decryptBlock(t, r), 2251 | this._des3.encryptBlock(t, r) 2252 | }, 2253 | decryptBlock: function (t, r) { 2254 | this._des3.decryptBlock(t, r), 2255 | this._des2.encryptBlock(t, r), 2256 | this._des1.decryptBlock(t, r) 2257 | }, 2258 | keySize: 6, 2259 | ivSize: 2, 2260 | blockSize: 2 2261 | }); 2262 | i.TripleDES = s._createHelper(v) 2263 | }(), 2264 | function () { 2265 | function r() { 2266 | for (var t = this._S, r = this._i, e = this._j, i = 0, n = 0; n < 4; n++) { 2267 | r = (r + 1) % 256, 2268 | e = (e + t[r]) % 256; 2269 | var o = t[r]; 2270 | t[r] = t[e], 2271 | t[e] = o, 2272 | i |= t[(t[r] + t[e]) % 256] << 24 - 8 * n 2273 | } 2274 | return this._i = r, 2275 | this._j = e, 2276 | i 2277 | } 2278 | var e = t 2279 | , i = e.lib 2280 | , n = i.StreamCipher 2281 | , o = e.algo 2282 | , s = o.RC4 = n.extend({ 2283 | _doReset: function () { 2284 | for (var t = this._key, r = t.words, e = t.sigBytes, i = this._S = [], n = 0; n < 256; n++) 2285 | i[n] = n; 2286 | for (var n = 0, o = 0; n < 256; n++) { 2287 | var s = n % e 2288 | , a = r[s >>> 2] >>> 24 - s % 4 * 8 & 255; 2289 | o = (o + i[n] + a) % 256; 2290 | var c = i[n]; 2291 | i[n] = i[o], 2292 | i[o] = c 2293 | } 2294 | this._i = this._j = 0 2295 | }, 2296 | _doProcessBlock: function (t, e) { 2297 | t[e] ^= r.call(this) 2298 | }, 2299 | keySize: 8, 2300 | ivSize: 0 2301 | }); 2302 | e.RC4 = n._createHelper(s); 2303 | var a = o.RC4Drop = s.extend({ 2304 | cfg: s.cfg.extend({ 2305 | drop: 192 2306 | }), 2307 | _doReset: function () { 2308 | s._doReset.call(this); 2309 | for (var t = this.cfg.drop; t > 0; t--) 2310 | r.call(this) 2311 | } 2312 | }); 2313 | e.RC4Drop = n._createHelper(a) 2314 | }(), 2315 | t.mode.CTRGladman = function () { 2316 | function r(t) { 2317 | if (255 === (t >> 24 & 255)) { 2318 | var r = t >> 16 & 255 2319 | , e = t >> 8 & 255 2320 | , i = 255 & t; 2321 | 255 === r ? (r = 0, 2322 | 255 === e ? (e = 0, 2323 | 255 === i ? i = 0 : ++i) : ++e) : ++r, 2324 | t = 0, 2325 | t += r << 16, 2326 | t += e << 8, 2327 | t += i 2328 | } else 2329 | t += 1 << 24; 2330 | return t 2331 | } 2332 | function e(t) { 2333 | return 0 === (t[0] = r(t[0])) && (t[1] = r(t[1])), 2334 | t 2335 | } 2336 | var i = t.lib.BlockCipherMode.extend() 2337 | , n = i.Encryptor = i.extend({ 2338 | processBlock: function (t, r) { 2339 | var i = this._cipher 2340 | , n = i.blockSize 2341 | , o = this._iv 2342 | , s = this._counter; 2343 | o && (s = this._counter = o.slice(0), 2344 | this._iv = void 0), 2345 | e(s); 2346 | var a = s.slice(0); 2347 | i.encryptBlock(a, 0); 2348 | for (var c = 0; c < n; c++) 2349 | t[r + c] ^= a[c] 2350 | } 2351 | }); 2352 | return i.Decryptor = n, 2353 | i 2354 | }(), 2355 | function () { 2356 | function r() { 2357 | for (var t = this._X, r = this._C, e = 0; e < 8; e++) 2358 | a[e] = r[e]; 2359 | r[0] = r[0] + 1295307597 + this._b | 0, 2360 | r[1] = r[1] + 3545052371 + (r[0] >>> 0 < a[0] >>> 0 ? 1 : 0) | 0, 2361 | r[2] = r[2] + 886263092 + (r[1] >>> 0 < a[1] >>> 0 ? 1 : 0) | 0, 2362 | r[3] = r[3] + 1295307597 + (r[2] >>> 0 < a[2] >>> 0 ? 1 : 0) | 0, 2363 | r[4] = r[4] + 3545052371 + (r[3] >>> 0 < a[3] >>> 0 ? 1 : 0) | 0, 2364 | r[5] = r[5] + 886263092 + (r[4] >>> 0 < a[4] >>> 0 ? 1 : 0) | 0, 2365 | r[6] = r[6] + 1295307597 + (r[5] >>> 0 < a[5] >>> 0 ? 1 : 0) | 0, 2366 | r[7] = r[7] + 3545052371 + (r[6] >>> 0 < a[6] >>> 0 ? 1 : 0) | 0, 2367 | this._b = r[7] >>> 0 < a[7] >>> 0 ? 1 : 0; 2368 | for (var e = 0; e < 8; e++) { 2369 | var i = t[e] + r[e] 2370 | , n = 65535 & i 2371 | , o = i >>> 16 2372 | , s = ((n * n >>> 17) + n * o >>> 15) + o * o 2373 | , h = ((4294901760 & i) * i | 0) + ((65535 & i) * i | 0); 2374 | c[e] = s ^ h 2375 | } 2376 | t[0] = c[0] + (c[7] << 16 | c[7] >>> 16) + (c[6] << 16 | c[6] >>> 16) | 0, 2377 | t[1] = c[1] + (c[0] << 8 | c[0] >>> 24) + c[7] | 0, 2378 | t[2] = c[2] + (c[1] << 16 | c[1] >>> 16) + (c[0] << 16 | c[0] >>> 16) | 0, 2379 | t[3] = c[3] + (c[2] << 8 | c[2] >>> 24) + c[1] | 0, 2380 | t[4] = c[4] + (c[3] << 16 | c[3] >>> 16) + (c[2] << 16 | c[2] >>> 16) | 0, 2381 | t[5] = c[5] + (c[4] << 8 | c[4] >>> 24) + c[3] | 0, 2382 | t[6] = c[6] + (c[5] << 16 | c[5] >>> 16) + (c[4] << 16 | c[4] >>> 16) | 0, 2383 | t[7] = c[7] + (c[6] << 8 | c[6] >>> 24) + c[5] | 0 2384 | } 2385 | var e = t 2386 | , i = e.lib 2387 | , n = i.StreamCipher 2388 | , o = e.algo 2389 | , s = [] 2390 | , a = [] 2391 | , c = [] 2392 | , h = o.Rabbit = n.extend({ 2393 | _doReset: function () { 2394 | for (var t = this._key.words, e = this.cfg.iv, i = 0; i < 4; i++) 2395 | t[i] = 16711935 & (t[i] << 8 | t[i] >>> 24) | 4278255360 & (t[i] << 24 | t[i] >>> 8); 2396 | var n = this._X = [t[0], t[3] << 16 | t[2] >>> 16, t[1], t[0] << 16 | t[3] >>> 16, t[2], t[1] << 16 | t[0] >>> 16, t[3], t[2] << 16 | t[1] >>> 16] 2397 | , o = this._C = [t[2] << 16 | t[2] >>> 16, 4294901760 & t[0] | 65535 & t[1], t[3] << 16 | t[3] >>> 16, 4294901760 & t[1] | 65535 & t[2], t[0] << 16 | t[0] >>> 16, 4294901760 & t[2] | 65535 & t[3], t[1] << 16 | t[1] >>> 16, 4294901760 & t[3] | 65535 & t[0]]; 2398 | this._b = 0; 2399 | for (var i = 0; i < 4; i++) 2400 | r.call(this); 2401 | for (var i = 0; i < 8; i++) 2402 | o[i] ^= n[i + 4 & 7]; 2403 | if (e) { 2404 | var s = e.words 2405 | , a = s[0] 2406 | , c = s[1] 2407 | , h = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8) 2408 | , l = 16711935 & (c << 8 | c >>> 24) | 4278255360 & (c << 24 | c >>> 8) 2409 | , f = h >>> 16 | 4294901760 & l 2410 | , u = l << 16 | 65535 & h; 2411 | o[0] ^= h, 2412 | o[1] ^= f, 2413 | o[2] ^= l, 2414 | o[3] ^= u, 2415 | o[4] ^= h, 2416 | o[5] ^= f, 2417 | o[6] ^= l, 2418 | o[7] ^= u; 2419 | for (var i = 0; i < 4; i++) 2420 | r.call(this) 2421 | } 2422 | }, 2423 | _doProcessBlock: function (t, e) { 2424 | var i = this._X; 2425 | r.call(this), 2426 | s[0] = i[0] ^ i[5] >>> 16 ^ i[3] << 16, 2427 | s[1] = i[2] ^ i[7] >>> 16 ^ i[5] << 16, 2428 | s[2] = i[4] ^ i[1] >>> 16 ^ i[7] << 16, 2429 | s[3] = i[6] ^ i[3] >>> 16 ^ i[1] << 16; 2430 | for (var n = 0; n < 4; n++) 2431 | s[n] = 16711935 & (s[n] << 8 | s[n] >>> 24) | 4278255360 & (s[n] << 24 | s[n] >>> 8), 2432 | t[e + n] ^= s[n] 2433 | }, 2434 | blockSize: 4, 2435 | ivSize: 2 2436 | }); 2437 | e.Rabbit = n._createHelper(h) 2438 | }(), 2439 | t.mode.CTR = function () { 2440 | var r = t.lib.BlockCipherMode.extend() 2441 | , e = r.Encryptor = r.extend({ 2442 | processBlock: function (t, r) { 2443 | var e = this._cipher 2444 | , i = e.blockSize 2445 | , n = this._iv 2446 | , o = this._counter; 2447 | n && (o = this._counter = n.slice(0), 2448 | this._iv = void 0); 2449 | var s = o.slice(0); 2450 | e.encryptBlock(s, 0), 2451 | o[i - 1] = o[i - 1] + 1 | 0; 2452 | for (var a = 0; a < i; a++) 2453 | t[r + a] ^= s[a] 2454 | } 2455 | }); 2456 | return r.Decryptor = e, 2457 | r 2458 | }(), 2459 | function () { 2460 | function r() { 2461 | for (var t = this._X, r = this._C, e = 0; e < 8; e++) 2462 | a[e] = r[e]; 2463 | r[0] = r[0] + 1295307597 + this._b | 0, 2464 | r[1] = r[1] + 3545052371 + (r[0] >>> 0 < a[0] >>> 0 ? 1 : 0) | 0, 2465 | r[2] = r[2] + 886263092 + (r[1] >>> 0 < a[1] >>> 0 ? 1 : 0) | 0, 2466 | r[3] = r[3] + 1295307597 + (r[2] >>> 0 < a[2] >>> 0 ? 1 : 0) | 0, 2467 | r[4] = r[4] + 3545052371 + (r[3] >>> 0 < a[3] >>> 0 ? 1 : 0) | 0, 2468 | r[5] = r[5] + 886263092 + (r[4] >>> 0 < a[4] >>> 0 ? 1 : 0) | 0, 2469 | r[6] = r[6] + 1295307597 + (r[5] >>> 0 < a[5] >>> 0 ? 1 : 0) | 0, 2470 | r[7] = r[7] + 3545052371 + (r[6] >>> 0 < a[6] >>> 0 ? 1 : 0) | 0, 2471 | this._b = r[7] >>> 0 < a[7] >>> 0 ? 1 : 0; 2472 | for (var e = 0; e < 8; e++) { 2473 | var i = t[e] + r[e] 2474 | , n = 65535 & i 2475 | , o = i >>> 16 2476 | , s = ((n * n >>> 17) + n * o >>> 15) + o * o 2477 | , h = ((4294901760 & i) * i | 0) + ((65535 & i) * i | 0); 2478 | c[e] = s ^ h 2479 | } 2480 | t[0] = c[0] + (c[7] << 16 | c[7] >>> 16) + (c[6] << 16 | c[6] >>> 16) | 0, 2481 | t[1] = c[1] + (c[0] << 8 | c[0] >>> 24) + c[7] | 0, 2482 | t[2] = c[2] + (c[1] << 16 | c[1] >>> 16) + (c[0] << 16 | c[0] >>> 16) | 0, 2483 | t[3] = c[3] + (c[2] << 8 | c[2] >>> 24) + c[1] | 0, 2484 | t[4] = c[4] + (c[3] << 16 | c[3] >>> 16) + (c[2] << 16 | c[2] >>> 16) | 0, 2485 | t[5] = c[5] + (c[4] << 8 | c[4] >>> 24) + c[3] | 0, 2486 | t[6] = c[6] + (c[5] << 16 | c[5] >>> 16) + (c[4] << 16 | c[4] >>> 16) | 0, 2487 | t[7] = c[7] + (c[6] << 8 | c[6] >>> 24) + c[5] | 0 2488 | } 2489 | var e = t 2490 | , i = e.lib 2491 | , n = i.StreamCipher 2492 | , o = e.algo 2493 | , s = [] 2494 | , a = [] 2495 | , c = [] 2496 | , h = o.RabbitLegacy = n.extend({ 2497 | _doReset: function () { 2498 | var t = this._key.words 2499 | , e = this.cfg.iv 2500 | , i = this._X = [t[0], t[3] << 16 | t[2] >>> 16, t[1], t[0] << 16 | t[3] >>> 16, t[2], t[1] << 16 | t[0] >>> 16, t[3], t[2] << 16 | t[1] >>> 16] 2501 | , n = this._C = [t[2] << 16 | t[2] >>> 16, 4294901760 & t[0] | 65535 & t[1], t[3] << 16 | t[3] >>> 16, 4294901760 & t[1] | 65535 & t[2], t[0] << 16 | t[0] >>> 16, 4294901760 & t[2] | 65535 & t[3], t[1] << 16 | t[1] >>> 16, 4294901760 & t[3] | 65535 & t[0]]; 2502 | this._b = 0; 2503 | for (var o = 0; o < 4; o++) 2504 | r.call(this); 2505 | for (var o = 0; o < 8; o++) 2506 | n[o] ^= i[o + 4 & 7]; 2507 | if (e) { 2508 | var s = e.words 2509 | , a = s[0] 2510 | , c = s[1] 2511 | , h = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8) 2512 | , l = 16711935 & (c << 8 | c >>> 24) | 4278255360 & (c << 24 | c >>> 8) 2513 | , f = h >>> 16 | 4294901760 & l 2514 | , u = l << 16 | 65535 & h; 2515 | n[0] ^= h, 2516 | n[1] ^= f, 2517 | n[2] ^= l, 2518 | n[3] ^= u, 2519 | n[4] ^= h, 2520 | n[5] ^= f, 2521 | n[6] ^= l, 2522 | n[7] ^= u; 2523 | for (var o = 0; o < 4; o++) 2524 | r.call(this) 2525 | } 2526 | }, 2527 | _doProcessBlock: function (t, e) { 2528 | var i = this._X; 2529 | r.call(this), 2530 | s[0] = i[0] ^ i[5] >>> 16 ^ i[3] << 16, 2531 | s[1] = i[2] ^ i[7] >>> 16 ^ i[5] << 16, 2532 | s[2] = i[4] ^ i[1] >>> 16 ^ i[7] << 16, 2533 | s[3] = i[6] ^ i[3] >>> 16 ^ i[1] << 16; 2534 | for (var n = 0; n < 4; n++) 2535 | s[n] = 16711935 & (s[n] << 8 | s[n] >>> 24) | 4278255360 & (s[n] << 24 | s[n] >>> 8), 2536 | t[e + n] ^= s[n] 2537 | }, 2538 | blockSize: 4, 2539 | ivSize: 2 2540 | }); 2541 | e.RabbitLegacy = n._createHelper(h) 2542 | }(), 2543 | t.pad.ZeroPadding = { 2544 | pad: function (t, r) { 2545 | var e = 4 * r; 2546 | t.clamp(), 2547 | t.sigBytes += e - (t.sigBytes % e || e) 2548 | }, 2549 | unpad: function (t) { 2550 | for (var r = t.words, e = t.sigBytes - 1; !(r[e >>> 2] >>> 24 - e % 4 * 8 & 255);) 2551 | e--; 2552 | t.sigBytes = e + 1 2553 | } 2554 | }, 2555 | t 2556 | } 2557 | var a = crypto() 2558 | function des(message, key="u2oh6Vu^HWe40fj") { 2559 | var keyHex = a.enc.Utf8.parse(key); 2560 | var encrypted = a.DES.encrypt(message, keyHex, { 2561 | mode: a.mode.ECB, 2562 | padding: a.pad.Pkcs7 2563 | }); 2564 | return encrypted.ciphertext.toString(); 2565 | } 2566 | --------------------------------------------------------------------------------