From 8cc4b4a48fee4241357ce45bf94aa519b79956a0 Mon Sep 17 00:00:00 2001 From: luzhisheng Date: Fri, 30 Jul 2021 17:14:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0js=E9=80=86=E5=90=91=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 10 + 12-服务端返回的神秘字符串/1.js | 3 + 12-服务端返回的神秘字符串/hook_cookie_test.js | 34 + 13-解密AES 并不是每次都奏效/aes.js | 11 + 14-纵然 CSS 加身,也难逃命运的安排/spider.js | 76 + 14-纵然 CSS 加身,也难逃命运的安排/spider2.js | 80 + 15-Base64竟有如此威力/base64_orgin.py | 86 ++ 15-Base64竟有如此威力/demo.py | 10 + 15-Base64竟有如此威力/my_base64.py | 88 ++ .../MD5JS/md5.js | 208 +++ .../NodeServer/client.py | 14 + .../NodeServer/client2.py | 15 + .../NodeServer/crypto.js | 766 ++++++++++ .../NodeServer/last.js | 15 + .../NodeServer/server.js | 22 + .../NodeServer/server2.js | 22 + .../NodeServer/sum.js | 8 + .../PyExecjsDemo/aes_demo.js | 739 ++++++++++ .../PyExecjsDemo/run_aes.py | 42 + .../PyppeteerDemo/__init__.py | 5 + .../PyppeteerDemo/demo.py | 43 + .../PyppeteerDemo/my_base64.py | 87 ++ .../PyppeteerDemo/server.py | 56 + .../PyppeteerDemo/static/js/base64.js | 162 +++ .../PyppeteerDemo/static/js/browser_check.js | 143 ++ .../PyppeteerDemo/templates/404.html | 10 + .../PyppeteerDemo/templates/500.html | 10 + .../PyppeteerDemo/templates/index.html | 14 + .../SeleniumDemo/__init__.py | 5 + .../SeleniumDemo/demo.py | 49 + .../SeleniumDemo/my_base64.py | 87 ++ .../SeleniumDemo/server.py | 56 + .../SeleniumDemo/static/js/base64.js | 293 ++++ .../SeleniumDemo/static/js/browser_check.js | 143 ++ .../SeleniumDemo/templates/404.html | 10 + .../SeleniumDemo/templates/500.html | 10 + .../SeleniumDemo/templates/index.html | 14 + .../练习/get_data执行结果的前16位字符是.js | 471 ++++++ .../练习/readme.md | 23 + 6-阻挠爬虫工程师的无限debugger/myjs.js | 311 ++++ 6-阻挠爬虫工程师的无限debugger/test | 15 + 7-定位加密参数对应代码位置的方法/Fuction eval | 20 + 7-定位加密参数对应代码位置的方法/cookie | 27 + 7-定位加密参数对应代码位置的方法/json | 11 + 7-定位加密参数对应代码位置的方法/websocket | 5 + 7-定位加密参数对应代码位置的方法/window attr | 36 + 8-代码混淆的原理/README.md | 19 + 8-代码混淆的原理/__MACOSX/._README.md | Bin 0 -> 176 bytes 8-代码混淆的原理/__MACOSX/._demo_compact.js | Bin 0 -> 176 bytes .../__MACOSX/._demo_control_flow_flattening.js | Bin 0 -> 176 bytes .../__MACOSX/._demo_dead_code_injection.js | Bin 0 -> 176 bytes .../__MACOSX/._demo_debug_protection.js | Bin 0 -> 176 bytes .../__MACOSX/._demo_disable_console_output.js | Bin 0 -> 176 bytes .../__MACOSX/._demo_domain_lock.js | Bin 0 -> 176 bytes .../__MACOSX/._demo_identifier_names_generator.js | Bin 0 -> 176 bytes .../__MACOSX/._demo_identifiers_prefix.js | Bin 0 -> 176 bytes .../__MACOSX/._demo_rename_globals.js | Bin 0 -> 176 bytes .../__MACOSX/._demo_self_defending.js | Bin 0 -> 176 bytes .../__MACOSX/._demo_string_array.js | Bin 0 -> 176 bytes 8-代码混淆的原理/__MACOSX/._demo_target.js | Bin 0 -> 176 bytes .../__MACOSX/._demo_transform_object_keys.js | Bin 0 -> 176 bytes .../__MACOSX/._demo_unicode_escape_sequence.js | Bin 0 -> 176 bytes 8-代码混淆的原理/__MACOSX/._main.js | Bin 0 -> 176 bytes 8-代码混淆的原理/__MACOSX/._package-lock.json | Bin 0 -> 176 bytes 8-代码混淆的原理/__MACOSX/._package.json | Bin 0 -> 176 bytes 8-代码混淆的原理/demo_compact.js | 17 + .../demo_control_flow_flattening.js | 30 + 8-代码混淆的原理/demo_dead_code_injection.js | 20 + 8-代码混淆的原理/demo_debug_protection.js | 17 + .../demo_disable_console_output.js | 14 + 8-代码混淆的原理/demo_domain_lock.js | 15 + .../demo_identifier_names_generator.js | 17 + 8-代码混淆的原理/demo_identifiers_prefix.js | 16 + 8-代码混淆的原理/demo_rename_globals.js | 17 + 8-代码混淆的原理/demo_self_defending.js | 15 + 8-代码混淆的原理/demo_string_array.js | 17 + 8-代码混淆的原理/demo_target.js | 15 + .../demo_transform_object_keys.js | 22 + .../demo_unicode_escape_sequence.js | 15 + 8-代码混淆的原理/main.js | 22 + 8-代码混淆的原理/package-lock.json | 865 +++++++++++ 8-代码混淆的原理/package.json | 14 + 9-处理常见代码混淆操作的方法/9-1.js | 1 + 9-处理常见代码混淆操作的方法/9-2.js | 1 + 9-处理常见代码混淆操作的方法/9-3.js | 113 ++ 9-处理常见代码混淆操作的方法/9-4.js | 1 + 9-处理常见代码混淆操作的方法/9-5.js | 244 ++++ test_pc_小红书破解/client/client-x-s.py | 87 ++ test_pc_小红书破解/client/client.py | 53 + test_pc_小红书破解/client/client_test.py | 17 + test_pc_小红书破解/encryption.js | 75 + test_pc_小红书破解/server/server-x-s.js | 18 + test_pc_小红书破解/server/server.js | 18 + test_pc_小红书破解/xhs-x-s.js | 1287 +++++++++++++++++ test_pc_抖音破解/sign.js | 269 ++++ 95 files changed, 7716 insertions(+) create mode 100644 .gitignore create mode 100644 12-服务端返回的神秘字符串/1.js create mode 100644 12-服务端返回的神秘字符串/hook_cookie_test.js create mode 100644 13-解密AES 并不是每次都奏效/aes.js create mode 100644 14-纵然 CSS 加身,也难逃命运的安排/spider.js create mode 100644 14-纵然 CSS 加身,也难逃命运的安排/spider2.js create mode 100644 15-Base64竟有如此威力/base64_orgin.py create mode 100644 15-Base64竟有如此威力/demo.py create mode 100644 15-Base64竟有如此威力/my_base64.py create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/MD5JS/md5.js create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/client.py create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/client2.py create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/crypto.js create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/last.js create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/server.js create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/server2.js create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/sum.js create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/PyExecjsDemo/aes_demo.js create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/PyExecjsDemo/run_aes.py create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/__init__.py create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/demo.py create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/my_base64.py create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/server.py create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/static/js/base64.js create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/static/js/browser_check.js create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/templates/404.html create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/templates/500.html create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/templates/index.html create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/__init__.py create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/demo.py create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/my_base64.py create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/server.py create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/static/js/base64.js create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/static/js/browser_check.js create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/templates/404.html create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/templates/500.html create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/templates/index.html create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/练习/get_data执行结果的前16位字符是.js create mode 100644 3-奇⻔遁甲调用 JavaScript 执行代码/练习/readme.md create mode 100644 6-阻挠爬虫工程师的无限debugger/myjs.js create mode 100644 6-阻挠爬虫工程师的无限debugger/test create mode 100644 7-定位加密参数对应代码位置的方法/Fuction eval create mode 100644 7-定位加密参数对应代码位置的方法/cookie create mode 100644 7-定位加密参数对应代码位置的方法/json create mode 100644 7-定位加密参数对应代码位置的方法/websocket create mode 100644 7-定位加密参数对应代码位置的方法/window attr create mode 100644 8-代码混淆的原理/README.md create mode 100644 8-代码混淆的原理/__MACOSX/._README.md create mode 100644 8-代码混淆的原理/__MACOSX/._demo_compact.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_control_flow_flattening.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_dead_code_injection.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_debug_protection.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_disable_console_output.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_domain_lock.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_identifier_names_generator.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_identifiers_prefix.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_rename_globals.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_self_defending.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_string_array.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_target.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_transform_object_keys.js create mode 100644 8-代码混淆的原理/__MACOSX/._demo_unicode_escape_sequence.js create mode 100644 8-代码混淆的原理/__MACOSX/._main.js create mode 100644 8-代码混淆的原理/__MACOSX/._package-lock.json create mode 100644 8-代码混淆的原理/__MACOSX/._package.json create mode 100644 8-代码混淆的原理/demo_compact.js create mode 100644 8-代码混淆的原理/demo_control_flow_flattening.js create mode 100644 8-代码混淆的原理/demo_dead_code_injection.js create mode 100644 8-代码混淆的原理/demo_debug_protection.js create mode 100644 8-代码混淆的原理/demo_disable_console_output.js create mode 100644 8-代码混淆的原理/demo_domain_lock.js create mode 100644 8-代码混淆的原理/demo_identifier_names_generator.js create mode 100644 8-代码混淆的原理/demo_identifiers_prefix.js create mode 100644 8-代码混淆的原理/demo_rename_globals.js create mode 100644 8-代码混淆的原理/demo_self_defending.js create mode 100644 8-代码混淆的原理/demo_string_array.js create mode 100644 8-代码混淆的原理/demo_target.js create mode 100644 8-代码混淆的原理/demo_transform_object_keys.js create mode 100644 8-代码混淆的原理/demo_unicode_escape_sequence.js create mode 100644 8-代码混淆的原理/main.js create mode 100644 8-代码混淆的原理/package-lock.json create mode 100644 8-代码混淆的原理/package.json create mode 100644 9-处理常见代码混淆操作的方法/9-1.js create mode 100644 9-处理常见代码混淆操作的方法/9-2.js create mode 100644 9-处理常见代码混淆操作的方法/9-3.js create mode 100644 9-处理常见代码混淆操作的方法/9-4.js create mode 100644 9-处理常见代码混淆操作的方法/9-5.js create mode 100644 test_pc_小红书破解/client/client-x-s.py create mode 100644 test_pc_小红书破解/client/client.py create mode 100644 test_pc_小红书破解/client/client_test.py create mode 100644 test_pc_小红书破解/encryption.js create mode 100644 test_pc_小红书破解/server/server-x-s.js create mode 100644 test_pc_小红书破解/server/server.js create mode 100644 test_pc_小红书破解/xhs-x-s.js create mode 100644 test_pc_抖音破解/sign.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..39b244e --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.idea/ +.env +*.csv +*.xlsx +*.xlsx# +*.zip +*.pyc +venv/ +setting.py +node_modules/ \ No newline at end of file diff --git a/12-服务端返回的神秘字符串/1.js b/12-服务端返回的神秘字符串/1.js new file mode 100644 index 0000000..f24ebca --- /dev/null +++ b/12-服务端返回的神秘字符串/1.js @@ -0,0 +1,3 @@ +var a = 1 +console.log("a",a) +console.log("global.a",global.a) \ No newline at end of file diff --git a/12-服务端返回的神秘字符串/hook_cookie_test.js b/12-服务端返回的神秘字符串/hook_cookie_test.js new file mode 100644 index 0000000..4fd0f73 --- /dev/null +++ b/12-服务端返回的神秘字符串/hook_cookie_test.js @@ -0,0 +1,34 @@ + window = global; + window.atob = true; + screen = {width:1920,height:1080}; + navigator = {userAgent:'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}; + + document = {cookie:''}; + cookie_cache = document.cookie; + Object.defineProperty(document, 'cookie', { + get: function() { + return cookie_cache; + }, + set: function(val) { + var cookie = val.split(";")[0]; + var ncookie = cookie.split("="); + var flag = false; + var cache = cookie_cache.split(";"); + cache = cache.map(function(a){ + if (a.split("=")[0] === ncookie[0]){ + flag = true; + return cookie; + } + return a; + }) + cookie_cache = cache.join(";"); + if (!flag){ + cookie_cache += cookie + ";"; + } + }, + }); + + $=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$.___+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'"+$.$$_+$.$$__+$.$$_+$._$_+$.$___+$.$$_+$.$$$$+$.$$_$+$.$_$$+$._$_+$.$__+$.$_$_+$.$__+$.$$_+$.$___+$.$$$_+$.$_$$+$.$___+$.___+$.$$$$+$._$_+$._$$+$._$$+$.$_$_+$._$$+$.$__$+$.$$$_+$.$$$$+$.$__+$.$$$$+$._$_+$.$$$+"';\\"+$.__$+$._$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$.__$+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'"+$.$$$_+$.$__+$._$_+$.__$+$.___+$.$$__+$.$$_$+$.__$+$.$$_+$.__$+$.$__+$.$_$+$.$$_+$.$_$$+$.$_$+$._$$+$.$__+$.$_$_+$.$$_$+$._$$+$.$$$$+$.$$_+$.$_$_+$.$$$+$.__$+$.$_$_+$._$_+$.$$_$+$.$_$+$.$_$_+$.$$__+$.$$$+"';\\"+$.__$+$._$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$._$_+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'"+$.__$+$.$_$_+$.$_$_+$.__$+$.$$_+$.$$_$+$.$_$$+$.$$$$+$.$__+$.$$$$+$.$$__+$.__$+$.$_$+$.$_$$+$.$_$+$.$$$_+$.$$_+$.$_$$+$.___+$.$$__+$.$_$$+$.___+$.$___+$.$$_$+$.$___+$.___+$.$$_+$.$$$_+$.$_$$+$._$_+$.$_$+$._$_+"';\\"+$.__$+$._$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$._$$+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'"+$.$_$_+$.___+$._$_+$.$$__+$.___+$.$__+$.$$_+$.$$$+$.$_$$+$.$_$_+$.$$_+$.__$+$.$$_+$.$__$+$._$_+$.$$$+$.$_$$+$.$$$+$.$$_$+$.$$$+$.$$__+$.$$$+$._$$+$.$_$$+$.$__+$.$_$$+$.__$+$.$_$$+$._$_+$.$$_$+$.$___+$.$__$+"';\\"+$.__$+$._$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$.$__+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'"+$.$$$_+$.$_$_+$.$_$_+$.$$$_+$.$$$+$.$$__+$.$__$+$.$__+$.$$_+$.$$__+$.$$$$+$.$$_+$.___+$.$$__+$.$$__+$.$$_+$.$$$+$.$$_+$._$$+$.$_$_+$.$_$+$.$$$$+$.$_$_+$.__$+$.$$$$+$.__$+$.$$__+$.$$$_+$._$$+$.__$+$.$$_+$.$_$+"';\\"+$.__$+$._$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$.$_$+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'"+$.$$_+$.$_$+$.$$$+$.$$$_+$.$_$+$.$__+$.$$$$+$.$__$+$.$___+$.__$+$.$$__+$.$$$+$.$$__+$.$$$+$.__$+$.$__+$.$___+$.$$$+$._$_+$.$$_+$.$$_+$.$__+$.$$$_+$.$___+$._$$+$.$_$$+$.$_$_+$.$$$_+$.$_$_+$.___+$.$_$+$.$$_+"';\\"+$.__$+$._$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$.$$_+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'"+$.$$_+$.__$+$._$$+$.$$__+$.$_$$+$.$__$+$.$_$$+$.$___+$.$_$+$.$$$_+$.$_$+$.__$+$.__$+$.$$$_+$.$_$_+$.$_$+$.$$_+$.___+$.$$_+$.$$_$+$.$_$+$.$$__+$.$$__+$.$$__+$.$$$+$.$$_$+$.$_$_+$.$__$+$.$_$$+$.$_$_+$.$$_+$.$___+"';\\"+$.__$+$._$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$.$$$+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'"+$.___+$.$$__+$.$$$+$.___+$.$$_+$.$$$+$.$$_+$.$$_$+$.$$$$+$.__$+$.$$_$+$.___+$.$$_$+$.$___+$.__$+$.$$_$+$.__$+$.$$$_+$.$_$+$.___+$.___+$.$$$+$.$$$$+$.$$$$+$._$$+$._$$+$.__$+$.$$_+$._$$+$.__$+$.$___+$.$$__+"';\\"+$.__$+$._$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$.$___+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'"+$.$_$_+$.$$_$+$.$___+$.$_$$+$.$$_$+$.$___+$.$$_+$.$$$$+$.$__+$.$$_+$.$___+$.$_$$+$.$_$+$.$$$$+$.$___+$.$$_+$.$$_+$.$$$+$.$$_+$.__$+$.$_$_+$.$$$_+$._$_+$.__$+$.$$$$+$.$_$_+$.$__$+$.$_$$+$.$$__+$.$_$_+$.$_$$+$.$$_$+"';\\"+$.__$+$._$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$.$__$+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'"+$.$___+$.$__+$.$$$+$.$$_$+$.$$$_+$.___+$.$$_$+$.$_$+$._$$+$._$$+$.$$_$+$.$__+$.$$$$+$._$$+$.$_$+$.$___+$.$_$_+$.___+$.$_$_+$.$$$_+$._$_+$.$$$$+$._$$+$.$$_+$.$_$_+$._$_+$.__$+$.___+$.$$_+$.$__$+$.$_$$+$.$$$_+"';\\"+$.__$+$._$_+"\\"+$.__$+$._$_+"("+$.$$$$+$._+"\\"+$.__$+$.$_$+$.$$_+$.$$__+$.__+"\\"+$.__$+$.$_$+$.__$+$._$+"\\"+$.__$+$.$_$+$.$$_+"(){\\"+$.__$+$._$_+"\\"+$.__$+$._$_+"\\"+$.$__+$.___+"\\"+$.$__+$.___+$.$$_$+$._$+$.$$__+$._+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+"."+$.$$__+$._$+$._$+"\\"+$.__$+$.$_$+$._$$+"\\"+$.__$+$.$_$+$.__$+$.$$$_+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'\\"+$.__$+$.__$+$.$$_+"\\"+$.__$+$.__$+$.__$+"\\"+$.__$+$.___+$.$$$+"\\"+$.__$+$.__$+$.___+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.___+$.__$+"\\"+$.__$+$.__$+$.$_$+"_\\"+$.__$+$.__$+$.__$+"\\"+$.__$+$.___+$.$__+"="+$.$_$$+$.___+$.$$_$+$.__$+$.$_$+$.$_$_+$.$$$_+$.___+$.$$_$+$.$$__+$.$_$_+$.$__$+$.__$+$._$$+$.$_$+$.__$+$._$$+$.$$_+$.$$$$+$.$$_$+$._$$+$.$$$$+$.$__$+$.$_$+$.$$_$+$.___+$.$$$$+$.___+$.$$__+$.$_$$+$.$$$+$.$__$+"';\\"+$.__$+$._$_+"\\"+$.$__+$.___+"\\"+$.$__+$.___+$.$$_$+$._$+$.$$__+$._+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+"."+$.$$__+$._$+$._$+"\\"+$.__$+$.$_$+$._$$+"\\"+$.__$+$.$_$+$.__$+$.$$$_+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'\\"+$.__$+$.__$+$.$$_+"\\"+$.__$+$.__$+$.__$+"\\"+$.__$+$.___+$.$$$+"\\"+$.__$+$.__$+$.___+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.___+$.__$+"\\"+$.__$+$.__$+$.$_$+"_\\"+$.__$+$._$_+$._$$+"\\"+$.__$+$.__$+$.__$+"\\"+$.__$+$.___+$.$$$+"\\"+$.__$+$.__$+$.$$_+"="+$.$__$+$.$_$_+$.$_$$+$.$$$_+$.$$$_+$._$$+$.$__$+$.___+$._$_+$.$$_$+$.$__$+$._$$+$._$_+$.$__$+$.$__$+$.$$_+$.$$$$+$.__$+$.___+$.$$_+$.$$__+$.$_$_+$.$$_$+$.$_$+$.$$$$+$.$$_$+$._$_+$.$__+$._$_+$._$_+$.$_$+$._$_+"';\\"+$.__$+$._$_+"\\"+$.$__+$.___+"\\"+$.$__+$.___+$.$$_$+$._$+$.$$__+$._+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+"."+$.$$__+$._$+$._$+"\\"+$.__$+$.$_$+$._$$+"\\"+$.__$+$.$_$+$.__$+$.$$$_+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'\\"+$.__$+$.__$+$.$$_+"\\"+$.__$+$.__$+$.__$+"\\"+$.__$+$.___+$.$$$+"\\"+$.__$+$.__$+$.___+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.___+$.__$+"\\"+$.__$+$.__$+$.$_$+"_\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$.__$+$.$$$+"\\"+$.__$+$.__$+$._$$+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.__$+$.$$_+"="+$.$$$$+$.$$$+$.$$$+$.__$+$.__$+$._$_+$.$__+$.$_$$+$.$__+$.$$_$+$.$__+$._$$+$.$_$+$.$_$+$._$$+$.$$$+$.$_$$+$.$__+$.$__$+$.$$$_+$.$__$+$.$$$$+$.$_$$+$._$_+$.$$__+$.$___+$._$$+$.$_$_+$.$$$_+$.$_$_+$.$$$+$.$$__+"';\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"\\"+$.__$+$.$_$+$.__$+$.$$$$+"\\"+$.$__+$.___+"(\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+$.$$_$+$._$+"\\"+$.__$+$.$$_+$.$$$+"."+$.$_$_+$.__+$._$+$.$_$$+")\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"{\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"\\"+$.$__+$.___+"\\"+$.$__+$.___+"\\"+$.$__+$.___+$.$$_$+$._$+$.$$__+$._+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+"."+$.$$__+$._$+$._$+"\\"+$.__$+$.$_$+$._$$+"\\"+$.__$+$.$_$+$.__$+$.$$$_+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'\\"+$.__$+$.__$+$.$$_+"\\"+$.__$+$.__$+$.__$+"\\"+$.__$+$.___+$.$$$+"\\"+$.__$+$.__$+$.___+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.___+$.__$+"\\"+$.__$+$.__$+$.$_$+"_\\"+$.__$+$._$_+$.$$$+"\\"+$.__$+$.__$+$.__$+"\\"+$.__$+$.__$+$.$$_+"\\"+$.__$+$.___+$.$__+"\\"+$.__$+$.__$+$.$$$+"\\"+$.__$+$._$_+$.$$$+"='\\"+$.$__+$.___+"+\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$.$$$+"\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"}\\"+$.__$+$._$_+"\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"\\"+$.__$+$.$_$+$.__$+$.$$$$+"\\"+$.$__+$.___+"(\\\""+$._+"\\"+$.__$+$.$_$+$.$$_+$.$$_$+$.$$$_+$.$$$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+$.$$$_+$.$$_$+"\\\"\\"+$.$__+$.___+"!=\\"+$.$__+$.___+$.__+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.$$$_+$._$+$.$$$$+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+$.$$$_+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.$__+$.___+"&&\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+$.$$$_+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+".\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$_$+$.__$+$.$$_$+$.__+"\\"+$.__$+$.$_$+$.___+"\\"+$.$__+$.___+"&&\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+$.$$$_+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+".\\"+$.__$+$.$_$+$.___+$.$$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+")\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"{\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"\\"+$.$__+$.___+"\\"+$.$__+$.___+"\\"+$.$__+$.___+"\\"+$.$__+$.___+$.$$_$+$._$+$.$$__+$._+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+"."+$.$$__+$._$+$._$+"\\"+$.__$+$.$_$+$._$$+"\\"+$.__$+$.$_$+$.__$+$.$$$_+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'\\"+$.__$+$.__$+$.$$_+"\\"+$.__$+$.__$+$.__$+"\\"+$.__$+$.___+$.$$$+"\\"+$.__$+$.__$+$.___+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.___+$.__$+"\\"+$.__$+$.__$+$.$_$+"_\\"+$.__$+$._$_+$.$_$+"\\"+$.__$+$.__$+$.$$_+"\\"+$.__$+$.__$+$.__$+"\\"+$.__$+$._$_+$.$__+"='\\"+$.$__+$.___+"+\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$._$_+"\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"}\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$_$+$.__$+$.__+$.$$__+"\\"+$.__$+$.$_$+$.___+"_"+$.$$$$+(![]+"")[$._$_]+$.$_$_+"\\"+$.__$+$.$__+$.$$$+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+$.__+"\\"+$.__$+$.$$_+$._$_+$._+$.$$$_+";\\"+$.__$+$._$_+"\\"+$.__$+$.__$+$.$$$$+$._+"\\"+$.__$+$.$_$+$.$$_+$.$$__+$.__+"\\"+$.__$+$.$_$+$.__$+$._$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$__+$.$$$+$.$$$_+$.__+"_\\"+$.__$+$.$$_+$._$_+$.$_$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+"_\\"+$.__$+$.$$_+$.$$_+$.$_$_+(![]+"")[$._$_]+$._+$.$$$_+"(\\"+$.__$+$.$$_+$._$$+"){\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"\\"+$.__$+$.__$+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$_$+$.$$_+$.$$$_+"\\"+$.__$+$.$$_+$.$$$+"_\\"+$.__$+$.$$_+$._$$+$.__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$$_+$._$$+$._+$.$_$$+"\\"+$.__$+$.$$_+$._$$+$.__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"("+$._$_+$.___+","+$._$$+$._$_+")\\"+$.$__+$.___+"+\\"+$.$__+$.___+"\\\"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+$.__+$.__+$.$$$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+"\\\"\\"+$.$__+$.___+"+\\"+$.$__+$.___+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+".\\"+$.__$+$.$$_+$._$$+$._+$.$_$$+"\\"+$.__$+$.$$_+$._$$+$.__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+"("+$.___+",\\"+$.$__+$.___+$.__$+$.$$_+")\\"+$.$__+$.___+"+\\"+$.$__+$.___+"\\\""+$.$_$_+$.$_$$+$.$$__+$.$$_$+$.$$$_+$.$$$$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$._$_+"\\"+$.__$+$.$_$+$._$$+(![]+"")[$._$_]+"\\"+$.__$+$.$_$+$.$_$+"\\"+$.__$+$.$_$+$.$$_+$._$+"\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$$_+$.__$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$_+$._$$+$.__+$._+"\\"+$.__$+$.$$_+$.$$_+"\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$$$+$.___+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$$+$._$_+$.___+$.__$+$._$_+$._$$+$.$__+$.$_$+$.$$_+$.$$$+$.$___+$.$__$+"\\\";\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"\\"+$.__$+$.__$+"\\"+$.__$+$.$$_+$._$_+$.$$$_+$.__+$._+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$_$+$.$$_+$.$$$_+"\\"+$.__$+$.$$_+$.$$$+"_\\"+$.__$+$.$$_+$._$$+$.__+"\\"+$.__$+$.$$_+$._$_+".\\"+$.__$+$.$$_+$._$$+$._+$.$_$$+"\\"+$.__$+$.$$_+$._$$+$.__+"\\"+$.__$+$.$$_+$._$_+"("+$.___+",\\"+$.$__+$.___+$._$$+$._$_+");\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"}\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"\\"+$.__$+$.$_$+$.__$+$.$$$$+"\\"+$.$__+$.___+"(\\\""+$._+"\\"+$.__$+$.$_$+$.$$_+$.$$_$+$.$$$_+$.$$$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+$.$$$_+$.$$_$+"\\\"\\"+$.$__+$.___+"==\\"+$.$__+$.___+$.__+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.$$$_+$._$+$.$$$$+"\\"+$.$__+$.___+"\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+$.$_$_+$.__+$._$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+"||\\"+$.$__+$.___+"\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+$.$_$_+$.__+$._$+"\\"+$.__$+$.$$_+$._$_+"."+$._+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.___+$.__$+"\\"+$.__$+$.$__+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+"\\"+$.$__+$.___+"===\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$.$$_+$._$+"\\"+$.__$+$.$_$+$.__$+$.$$_$+"\\"+$.$__+$.___+$.___+"\\"+$.$__+$.___+"||\\"+$.$__+$.___+"\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+$.$_$_+$.__+$._$+"\\"+$.__$+$.$$_+$._$_+"."+$._+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.___+$.__$+"\\"+$.__$+$.$__+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+".\\"+$.__$+$.$_$+$.$_$+$.$_$_+$.__+$.$$__+"\\"+$.__$+$.$_$+$.___+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+$.$_$_+$.$$_$+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.___+$._$$+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$$_+$._$_+$._$+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\\")\\"+$.$__+$.___+"||\\"+$.$__+$.___+"\\"+$.__$+$.$_$+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$__+$.$$$+$.$_$_+$.__+$._$+"\\"+$.__$+$.$$_+$._$_+"."+$._+"\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.___+$.__$+"\\"+$.__$+$.$__+$.$$$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+".\\"+$.__$+$.$_$+$.$_$+$.$_$_+$.__+$.$$__+"\\"+$.__$+$.$_$+$.___+"(\\\"\\"+$.__$+$._$_+$.___+"\\"+$.__$+$.$_$+$.___+$.$_$_+"\\"+$.__$+$.$_$+$.$$_+$.__+$._$+"\\"+$.__$+$.$_$+$.$_$+"\\"+$.__$+$.__$+$._$_+"\\"+$.__$+$._$_+$._$$+"\\\"))\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"{\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"\\"+$.__$+$.__$+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$_$+$.__$+$.__+$.$$__+"\\"+$.__$+$.$_$+$.___+"_"+$.$$$$+(![]+"")[$._$_]+$.$_$_+"\\"+$.__$+$.$__+$.$$$+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+$.$$$$+$.$_$_+(![]+"")[$._$_]+"\\"+$.__$+$.$$_+$._$$+$.$$$_+";\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"}\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"\\"+$.__$+$.$_$+$.__$+$.$$$$+"\\"+$.$__+$.___+"(\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$_$+$.__$+$.__+$.$$__+"\\"+$.__$+$.$_$+$.___+"_"+$.$$$$+(![]+"")[$._$_]+$.$_$_+"\\"+$.__$+$.$__+$.$$$+")\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"{\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"\\"+$.__$+$.__$+$.$$_$+$._$+$.$$__+$._+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+"."+$.$$__+$._$+$._$+"\\"+$.__$+$.$_$+$._$$+"\\"+$.__$+$.$_$+$.__$+$.$$$_+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+"'\\"+$.__$+$.__$+$.$$_+"\\"+$.__$+$.__$+$.__$+"\\"+$.__$+$.___+$.$$$+"\\"+$.__$+$.__$+$.___+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$.___+$.$_$+"\\"+$.__$+$.___+$.__$+"\\"+$.__$+$.__$+$.$_$+"_\\"+$.__$+$._$_+$._$$+"\\"+$.__$+$._$_+$.$$$+"\\"+$.__$+$.__$+$.__$+"\\"+$.__$+$._$_+$.$__+"\\"+$.__$+$.___+$._$$+"\\"+$.__$+$.__$+$.___+"='\\"+$.$__+$.___+"+\\"+$.$__+$.___+"\\"+$.__$+$.$__+$.$$$+$.$$$_+$.__+"_\\"+$.__$+$.$$_+$._$_+$.$_$_+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$__+$.$$$+$.$$$_+"_\\"+$.__$+$.$$_+$.$$_+$.$_$_+(![]+"")[$._$_]+$._+$.$$$_+"(\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+$.$__+");\\"+$.__$+$._$_+"\\"+$.__$+$.__$+"}\\"+$.__$+$._$_+"})();\\"+$.__$+$._$_+"\"")())();; + + console.log(document.cookie); + \ No newline at end of file diff --git a/13-解密AES 并不是每次都奏效/aes.js b/13-解密AES 并不是每次都奏效/aes.js new file mode 100644 index 0000000..13c8395 --- /dev/null +++ b/13-解密AES 并不是每次都奏效/aes.js @@ -0,0 +1,11 @@ +_$vD=window; +!function(t,n){"object"==typeof exports?module.exports=exports=n():"function"==typeof define&&define.amd?define([],n):t.o00o0o00=n()}(this,function(){var t=t||function(t,n){var i=Object.create||function(){function t(){}return function(n){var i;return t.prototype=n,i=new t,t.prototype=null,i}}(),e={},r=e.lib={},o=r.Base=function(){return{extend:function(t){var n=i(this);return t&&n.mixIn(t),n.hasOwnProperty("init")&&this.init!==n.init||(n.init=function(){n.$super.init.apply(this,arguments)}),n.init.prototype=n,n.$super=this,n},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var n in t)t.hasOwnProperty(n)&&(this[n]=t[n]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),s=r.WordArray=o.extend({init:function(t,i){t=this.words=t||[],i!=n?this.sigBytes=i:this.sigBytes=4*t.length},toString:function(t){return(t||c).stringify(this)},concat:function(t){var n=this.words,i=t.words,e=this.sigBytes,r=t.sigBytes;if(this.clamp(),e%4)for(var o=0;o>>2]>>>24-o%4*8&255;n[e+o>>>2]|=s<<24-(e+o)%4*8}else for(var o=0;o>>2]=i[o>>>2];return this.sigBytes+=r,this},clamp:function(){var n=this.words,i=this.sigBytes;n[i>>>2]&=4294967295<<32-i%4*8,n.length=t.ceil(i/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(n){for(var i,e=[],r=function(n){var n=n,i=987654321,e=4294967295;return function(){i=36969*(65535&i)+(i>>16)&e,n=18e3*(65535&n)+(n>>16)&e;var r=(i<<16)+n&e;return r/=4294967296,r+=.5,r*(t.random()>.5?1:-1)}},o=0;o>>2]>>>24-r%4*8&255;e.push((o>>>4).toString(16)),e.push((15&o).toString(16))}return e.join("")},o00o0o00o0o:function(t){for(var n=t.length,i=[],e=0;e>>3]|=parseInt(t.substr(e,2),16)<<24-e%8*4;return new s.init(i,n/2)}},u=a.Latin1={stringify:function(t){for(var n=t.words,i=t.sigBytes,e=[],r=0;r>>2]>>>24-r%4*8&255;e.push(String.fromCharCode(o))}return e.join("")},o00o0o00o0o:function(t){for(var n=t.length,i=[],e=0;e>>2]|=(255&t.charCodeAt(e))<<24-e%4*8;return new s.init(i,n)}},f=a.o00o0o00o0={stringify:function(t){try{return decodeURIComponent(escape(u.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},o00o0o00o0o:function(t){return u.o00o0o00o0o(unescape(encodeURIComponent(t)))}},h=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=f.o00o0o00o0o(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(n){var i=this._data,e=i.words,r=i.sigBytes,o=this.blockSize,a=4*o,c=r/a;c=n?t.ceil(c):t.max((0|c)-this._minBufferSize,0);var u=c*o,f=t.min(4*u,r);if(u){for(var h=0;h35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('{2:"1"+"0"+"3"+"5"+"4"+"0"}',6,6,'{{ m }}'.split('|'),0,{}))}; +!function(r,e){"object"==typeof exports?module.exports=exports=e(require("./core.min")):"function"==typeof define&&define.amd?define(["./core.min"],e):e(r.o00o0o00)}(this,function(r){return function(){function e(r,e,t){for(var n=[],i=0,o=0;o>>6-o%4*2;n[i>>>2]|=(f|c)<<24-i%4*8,i++}return a.create(n,i)}var t=r,n=t.lib,a=n.WordArray,i=t.o00o0o00o;i.Base64={stringify:function(r){var e=r.words,t=r.sigBytes,n=this._map;r.clamp();for(var a=[],i=0;i>>2]>>>24-i%4*8&255,f=e[i+1>>>2]>>>24-(i+1)%4*8&255,c=e[i+2>>>2]>>>24-(i+2)%4*8&255,s=o<<16|f<<8|c,h=0;h<4&&i+.75*h>>6*(3-h)&63));var p=n.charAt(64);if(p)for(;a.length%4;)a.push(p);return a.join("")},o00o0o00o0o:function(r){var t=r.length,n=this._map,a=this._reverseMap;if(!a){a=this._reverseMap=[];for(var i=0;i>>2];e.sigBytes-=t}},y=(i.BlockCipher=d.extend({cfg:d.cfg.extend({mode:l,padding:v}),reset:function(){d.reset.call(this);var e=this.cfg,t=e.iv,r=e.mode;if(this._xformMode==this._o00o0o00o_XFORM_MODE)var i=r.createo00o0o00oryptor;else{var i=r.createDecryptor;this._minBufferSize=1}this._mode&&this._mode.__creator==i?this._mode.init(this,t&&t.words):(this._mode=i.call(r,this,t&&t.words),this._mode.__creator=i)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._o00o0o00o_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else{var t=this._process(!0);e.unpad(t)}return t},blockSize:4}),i.CipherParams=n.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}})),m=r.format={},k=m.OpenSSL={stringify:function(e){var t=e.ciphertext,r=e.salt;if(r)var i=c.create([1398893684,1701076831]).concat(r).concat(t);else var i=t;return i.toString(a)},o00o0o00o0o:function(e){var t=a.o00o0o00o0o(e),r=t.words;if(1398893684==r[0]&&1701076831==r[1]){var i=c.create(r.slice(2,4));r.splice(0,4),t.sigBytes-=16}return y.create({ciphertext:t,salt:i})}},x=i.SerializableCipher=n.extend({cfg:n.extend({format:k}),o00o0o00orypt:function(e,t,r,i){i=this.cfg.extend(i);var n=e.createo00o0o00oryptor(r,i),c=n.finalize(t),o=n.cfg;return y.create({ciphertext:c,key:r,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:i.format})},decrypt:function(e,t,r,i){i=this.cfg.extend(i),t=this._o00o0o00o0o(t,i.format);var n=e.createDecryptor(r,i).finalize(t.ciphertext);return n},_o00o0o00o0o:function(e,t){return"string"==typeof e?t.o00o0o00o0o(e,this):e}}),g=r.kdf={},S=g.OpenSSL={execute:function(e,t,r,i){i||(i=c.random(8));var n=p.create({keySize:t+r}).compute(e,i),o=c.create(n.words.slice(t),4*r);return n.sigBytes=4*t,y.create({key:n,iv:o,salt:i})}},B=i.PasswordBasedCipher=x.extend({cfg:x.cfg.extend({kdf:S}),o00o0o00orypt:function(e,t,r,i){i=this.cfg.extend(i);var n=i.kdf.execute(r,e.keySize,e.ivSize);i.iv=n.iv;var c=x.o00o0o00orypt.call(this,e,t,n.key,i);return c.mixIn(n),c},decrypt:function(e,t,r,i){i=this.cfg.extend(i),t=this._o00o0o00o0o(t,i.format);var n=i.kdf.execute(r,e.keySize,e.ivSize,t.salt);i.iv=n.iv;var c=x.decrypt.call(this,e,t,n.key,i);return c}})}()}); +!function(e,i){"object"==typeof exports?module.exports=exports=i(require("./core.min")):"function"==typeof define&&define.amd?define(["./core.min"],i):i(e.o00o0o00)}(this,function(e){!function(){var i=e,t=i.lib,n=t.Base,s=i.o00o0o00o,r=s.o00o0o00o0,o=i.algo;o.HMAC=n.extend({init:function(e,i){e=this._hasher=new e.init,"string"==typeof i&&(i=r.o00o0o00o0o(i));var t=e.blockSize,n=4*t;i.sigBytes>n&&(i=e.finalize(i)),i.clamp();for(var s=this._oKey=i.clone(),o=this._iKey=i.clone(),a=s.words,f=o.words,c=0;c>>8^255&o^99,t[i]=o,c[o]=i;var p=e[i],l=e[p],_=e[l],k=257*e[o]^16843008*o;s[i]=k<<24|k>>>8,f[i]=k<<16|k>>>16,a[i]=k<<8|k>>>24,d[i]=k;var k=16843009*_^65537*l^257*p^16843008*i;u[o]=k<<24|k>>>8,v[o]=k<<16|k>>>16,h[o]=k<<8|k>>>24,y[o]=k,i?(i=p^e[e[e[_^p]]],n^=e[e[n]]):i=n=1}}();var p=[0,1,2,4,8,16,32,64,128,27,54],l=o.o00o0o00o0o0=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,r=e.words,i=e.sigBytes/4,n=this._nRounds=i+6,o=4*(n+1),c=this._keySchedule=[],s=0;s6&&s%i==4&&(f=t[f>>>24]<<24|t[f>>>16&255]<<16|t[f>>>8&255]<<8|t[255&f]):(f=f<<8|f>>>24,f=t[f>>>24]<<24|t[f>>>16&255]<<16|t[f>>>8&255]<<8|t[255&f],f^=p[s/i|0]<<24),c[s]=c[s-i]^f}for(var a=this._invKeySchedule=[],d=0;d>>24]]^v[t[f>>>16&255]]^h[t[f>>>8&255]]^y[t[255&f]]}}},o00o0o00oryptBlock:function(e,r){this._doCryptBlock(e,r,this._keySchedule,s,f,a,d,t)},decryptBlock:function(e,r){var i=e[r+1];e[r+1]=e[r+3],e[r+3]=i,this._doCryptBlock(e,r,this._invKeySchedule,u,v,h,y,c);var i=e[r+1];e[r+1]=e[r+3],e[r+3]=i},_doCryptBlock:function(e,r,i,n,o,t,c,s){for(var f=this._nRounds,a=e[r]^i[0],d=e[r+1]^i[1],u=e[r+2]^i[2],v=e[r+3]^i[3],h=4,y=1;y>>24]^o[d>>>16&255]^t[u>>>8&255]^c[255&v]^i[h++],l=n[d>>>24]^o[u>>>16&255]^t[v>>>8&255]^c[255&a]^i[h++],_=n[u>>>24]^o[v>>>16&255]^t[a>>>8&255]^c[255&d]^i[h++],k=n[v>>>24]^o[a>>>16&255]^t[d>>>8&255]^c[255&u]^i[h++];a=p,d=l,u=_,v=k}var p=(s[a>>>24]<<24|s[d>>>16&255]<<16|s[u>>>8&255]<<8|s[255&v])^i[h++],l=(s[d>>>24]<<24|s[u>>>16&255]<<16|s[v>>>8&255]<<8|s[255&a])^i[h++],_=(s[u>>>24]<<24|s[v>>>16&255]<<16|s[a>>>8&255]<<8|s[255&d])^i[h++],k=(s[v>>>24]<<24|s[a>>>16&255]<<16|s[d>>>8&255]<<8|s[255&u])^i[h++];e[r]=p,e[r+1]=l,e[r+2]=_,e[r+3]=k},keySize:8});r.o00o0o00o0o0=n._createHelper(l)}(),e.o00o0o00o0o0}); +!function(e,n){"object"==typeof exports?module.exports=exports=n(require("./core.min")):"function"==typeof define&&define.amd?define(["./core.min"],n):n(e.o00o0o00)}(this,function(e){return e.o00o0o00o.o00o0o00o0}); +function _$he(){var a=new Date();_$fI();_$jD=(new Date()-a>100);if(_$jD){_$hR()}}function _$fI(){debugger}function _$hu(){return"(function() {var a = new Date(); debugger; return new Date() - a > 100;}())"}function _$hR(){function _$jG(){var o0000o="";var o00o0o=[101,119,99,111];for(var i=0;i { + // 起一个PCR实例 + const pcr = await PCR() + + // 初始化浏览器 + const browser = await pcr.puppeteer.launch({ + // headless: true, + headless: false, + hosts: ['https://npm.taobao.org/mirrors'], + args: ['--no-sandbox'], + executablePath: pcr.executablePath + }).catch(function (error) { + console.error(error) + }) + + // 初始化页面 + const page = await browser.newPage() + + // 导航至目标页面 + const url = 'http://localhost:9000/' + await page.goto(url, {waitUntil: 'domcontentloaded'}) + + // 等待 + await page.waitFor(3000) + + // 获取数据 + const scrapedData = await page.evaluate(() => { + // ==================== + // 这一部分将在浏览器中执行 + // ==================== + + // 定义数据列表 + const data = [] + + // 获取列表子项 + const elList = document.querySelectorAll('.m-airfly-lst > .b-airfly') + + // 遍历列表子项 + elList.forEach(el => { + // 价格元素 + const elPr = el.querySelector('.fix_price .prc_wp') + + // 被替换元素列表 + let strArr = Array.from(elPr.querySelectorAll('b:first-child > i')) + .map(elem => elem.innerText) + + // 替换元素 + elPr.querySelectorAll('b:not(:first-child)') + .forEach(elem => { + // 偏移量 + const left = Number(getComputedStyle(elem).left.replace('px', '')) + + // 替换值 + strArr[strArr.length + left / 16] = elem.innerText + }) + + // 加入数据列表 + data.push(strArr.join('')) + }) + + return data + }) + + // 打印抓取到的数据 + console.log(scrapedData) + + // 等待足够时间校验数据 + await new Promise((resolve) => setTimeout(() => { + resolve() + }, 60000)) + + // 关闭浏览器 + await browser.close() +})() diff --git a/14-纵然 CSS 加身,也难逃命运的安排/spider2.js b/14-纵然 CSS 加身,也难逃命运的安排/spider2.js new file mode 100644 index 0000000..cf16227 --- /dev/null +++ b/14-纵然 CSS 加身,也难逃命运的安排/spider2.js @@ -0,0 +1,80 @@ +const PCR = require('puppeteer-chromium-resolver'); + +(async () => { + // 起一个PCR实例 + const pcr = await PCR() + + // 初始化浏览器 + const browser = await pcr.puppeteer.launch({ + // headless: true, + headless: false, + hosts: ['https://npm.taobao.org/mirrors'], + args: ['--no-sandbox'], + executablePath: pcr.executablePath + }).catch(function (error) { + console.error(error) + }) + + // 初始化页面 + const page = await browser.newPage() + + // 导航至目标页面 + const url = 'http://localhost:9000/public' + await page.goto(url, {waitUntil: 'domcontentloaded'}) + + // 等待 + await page.waitFor(3000) + + // 获取数据 + const scrapedData = await page.evaluate(() => { + // ==================== + // 这一部分将在浏览器中执行 + // ==================== + + // 定义数据列表 + const data = [] + + // 获取列表子项 + const elList = document.querySelectorAll('#param-table tr:not(:first-child)') + + // 遍历列表子项 + elList.forEach(el => { + // 指标 + const a = el.querySelector('th a') + a.querySelectorAll('span').forEach(span => { + const text = getComputedStyle(span, 'before').content + span.insertAdjacentText('afterend', text.replace(/"/g, '')) + span.remove() + }) + const key = a.innerText + + // 值 + const td = el.querySelector('td') + td.querySelectorAll('span').forEach(span => { + const text = getComputedStyle(span, 'before').content + span.insertAdjacentText('afterend', text.replace(/"/g, '')) + span.remove() + }) + const value = td.innerText + + // 加入数据列表 + data.push({ + key, + value + }) + }) + + return data + }) + + // 打印抓取到的数据 + console.log(scrapedData) + + // 等待足够时间校验数据 + await new Promise((resolve) => setTimeout(() => { + resolve() + }, 60000)) + + // 关闭浏览器 + await browser.close() +})() diff --git a/15-Base64竟有如此威力/base64_orgin.py b/15-Base64竟有如此威力/base64_orgin.py new file mode 100644 index 0000000..9baf912 --- /dev/null +++ b/15-Base64竟有如此威力/base64_orgin.py @@ -0,0 +1,86 @@ +import string +import random + +# base 字符集 + + +base64_charset = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/' +base64_charset_list = list(base64_charset) +random.shuffle(base64_charset_list) +base64_charset = ''.join(base64_charset_list) + +def encode(orgin_string): + """ + 将bytes类型编码为base64 + :param origin_bytes:需要编码的bytes + :return:base64字符串 + """ + + origin_bytes = orgin_string.encode() + # 将每一位bytes转换为二进制字符串 + base64_bytes = [f"{str(bin(b)).replace('0b', ''):0>8}" for b in origin_bytes] + + resp = '' + nums = len(base64_bytes) // 3 + remain = len(base64_bytes) % 3 + + integral_part = base64_bytes[0:3 * nums] + while integral_part: + # 取三个字节,以每6比特,转换为4个整数 + tmp_unit = ''.join(integral_part[0:3]) + tmp_unit = [int(tmp_unit[x: x + 6], 2) for x in [0, 6, 12, 18]] + # 取对应base64字符 + resp += ''.join([base64_charset[i] for i in tmp_unit]) + integral_part = integral_part[3:] + + if remain: + # 补齐三个字节,每个字节补充 0000 0000 + remain_part = ''.join(base64_bytes[3 * nums:]) + (3 - remain) * '0' * 8 + # 取三个字节,以每6比特,转换为4个整数 + # 剩余1字节可构造2个base64字符,补充==;剩余2字节可构造3个base64字符,补充= + tmp_unit = [int(remain_part[x: x + 6], 2) for x in [0, 6, 12, 18]][:remain + 1] + resp += ''.join([base64_charset[i] for i in tmp_unit]) + (3 - remain) * '=' + + return resp + + +def decode(base64_str): + """ + 解码base64字符串 + :param base64_str:base64字符串 + :return:解码后的bytearray;若入参不是合法base64字符串,返回空bytearray + """ + + # 对每一个base64字符取下标索引,并转换为6为二进制字符串 + base64_bytes = [f"{str(bin(base64_charset.index(s))).replace('0b', ''):0>6}" for s in base64_str if + s != '='] + resp = bytearray() + nums = len(base64_bytes) // 4 + remain = len(base64_bytes) % 4 + integral_part = base64_bytes[0:4 * nums] + + while integral_part: + # 取4个6位base64字符,作为3个字节 + tmp_unit = ''.join(integral_part[0:4]) + tmp_unit = [int(tmp_unit[x: x + 8], 2) for x in [0, 8, 16]] + for i in tmp_unit: + resp.append(i) + integral_part = integral_part[4:] + + if remain: + remain_part = ''.join(base64_bytes[nums * 4:]) + tmp_unit = [int(remain_part[i * 8:(i + 1) * 8], 2) for i in range(remain - 1)] + for i in tmp_unit: + resp.append(i) + + return str(bytes(resp),encoding="utf-8") + + + + +if __name__ == '__main__': + a = encode("NightTeam") + b = decode(a) + print(a) + print("=====") + print(b) diff --git a/15-Base64竟有如此威力/demo.py b/15-Base64竟有如此威力/demo.py new file mode 100644 index 0000000..cb9d561 --- /dev/null +++ b/15-Base64竟有如此威力/demo.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# @时间 : 2019-12-30 21:46 +# @作者 : 陈祥安 +# @文件名 : demo.py +# @公众号: Python学习开发 +orgin_string = "123" +origin_bytes = orgin_string.encode() +# 将每一位bytes转换为二进制字符串 +base64_bytes = [f"{str(bin(b)).replace('0b', ''):0>8}" for b in origin_bytes] +print(base64_bytes) diff --git a/15-Base64竟有如此威力/my_base64.py b/15-Base64竟有如此威力/my_base64.py new file mode 100644 index 0000000..3abea65 --- /dev/null +++ b/15-Base64竟有如此威力/my_base64.py @@ -0,0 +1,88 @@ +import string +import random + +# base 字符集 + + +base64_charset = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/' +base64_charset_list = list(base64_charset) +random.shuffle(base64_charset_list) +base64_charset = ''.join(base64_charset_list) + + +def encode(orgin_string): + """ + 将bytes类型编码为base64 + :param origin_bytes:需要编码的bytes + :return:base64字符串 + """ + + origin_bytes = orgin_string.encode() + # 将每一位bytes转换为二进制字符串 + base64_bytes = [f"{str(bin(b)).replace('0b', ''):0>8}" for b in origin_bytes] + + resp = '' + nums = len(base64_bytes) // 3 + remain = len(base64_bytes) % 3 + + integral_part = base64_bytes[0:3 * nums] + while integral_part: + # 取三个字节,以每6比特,转换为4个整数 + tmp_unit = ''.join(integral_part[0:3]) + tmp_unit = [int(tmp_unit[x: x + 6], 2) for x in [0, 6, 12, 18]] + # 取对应base64字符 + resp += ''.join([base64_charset[i] for i in tmp_unit]) + integral_part = integral_part[3:] + + if remain: + # 补齐三个字节,每个字节补充 0000 0000 + remain_part = ''.join(base64_bytes[3 * nums:]) + (3 - remain) * '0' * 8 + # 取三个字节,以每6比特,转换为4个整数 + # 剩余1字节可构造2个base64字符,补充==;剩余2字节可构造3个base64字符,补充= + tmp_unit = [int(remain_part[x: x + 6], 2) for x in [0, 6, 12, 18]][:remain + 1] + resp += ''.join([base64_charset[i] for i in tmp_unit]) + (3 - remain) * '=' + + return resp, base64_charset + + +def decode(base64_str, charset): + """ + 解码base64字符串 + :param base64_str:base64字符串 + :return:解码后的bytearray;若入参不是合法base64字符串,返回空bytearray + """ + + # 对每一个base64字符取下标索引,并转换为6为二进制字符串 + base64_bytes = [f"{str(bin(charset.index(s))).replace('0b', ''):0>6}" for s in base64_str if + s != '='] + print("base64_bytes", base64_bytes) + resp = bytearray() + nums = len(base64_bytes) // 4 + remain = len(base64_bytes) % 4 + integral_part = base64_bytes[0:4 * nums] + + while integral_part: + # 取4个6位base64字符,作为3个字节 + tmp_unit = ''.join(integral_part[0:4]) + tmp_unit = [int(tmp_unit[x: x + 8], 2) for x in [0, 8, 16]] + for i in tmp_unit: + resp.append(i) + integral_part = integral_part[4:] + + if remain: + remain_part = ''.join(base64_bytes[nums * 4:]) + tmp_unit = [int(remain_part[i * 8:(i + 1) * 8], 2) for i in range(remain - 1)] + for i in tmp_unit: + resp.append(i) + + return str(bytes(resp),encoding="utf-8"), charset + + + + +if __name__ == '__main__': + # a = encode("我不想谋生。我想生活。--奥斯卡·王尔德。") + # b = decode(a[0], a[1]) + # print(a) + # print(b) + print(decode("9qQ69SQC9qEXHShS99ga22hh9qQ69qEX99ga9VgM22hhSg1B4IUfBZ7BFIuhnlYEQlJDBEJlnlEkPP==","kThNoOiuKj8SdCEzw6gLR5JUtcI0xvYaPWQFbBfsq4ZVyneGDpAX3rm129HM/+l7")) diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/MD5JS/md5.js b/3-奇⻔遁甲调用 JavaScript 执行代码/MD5JS/md5.js new file mode 100644 index 0000000..d5677c5 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/MD5JS/md5.js @@ -0,0 +1,208 @@ +var _0xafb7 = ['0123456789abcdef', 'charAt', 'length', 'abc', '900150983cd24fb0d6963f7d28e17f72', 'concat', 'charCodeAt', '0123456789ABCDEF']; +(function (_0x1d2076, _0x2a7e5a) { + var _0x6ffefc = function (_0x3ddd21) { + while (--_0x3ddd21) { + _0x1d2076['push'](_0x1d2076['shift']()); + } + }; + _0x6ffefc(++_0x2a7e5a); +}(_0xafb7, 0x132)); +var _0x4f75 = function (_0x254029, _0x1d4b71) { + _0x254029 = _0x254029 - 0x0; + var _0x18b07e = _0xafb7[_0x254029]; + return _0x18b07e; +}; +var hexcase = 0x0; +var b64pad = ''; +var chrsz = 0x8; + +function hex_md5(_0x3066e8) { + return binl2hex(core_md5(str2binl(_0x3066e8), _0x3066e8[_0x4f75('0x0')] * chrsz)); +} + +function b64_md5(_0x3e6d2a) { + return binl2b64(core_md5(str2binl(_0x3e6d2a), _0x3e6d2a[_0x4f75('0x0')] * chrsz)); +} + +function str_md5(_0x299d77) { + return binl2str(core_md5(str2binl(_0x299d77), _0x299d77[_0x4f75('0x0')] * chrsz)); +} + +function hex_hmac_md5(_0x527dc3, _0x2917f0) { + return binl2hex(core_hmac_md5(_0x527dc3, _0x2917f0)); +} + +function b64_hmac_md5(_0xef9e7f, _0x59c8eb) { + return binl2b64(core_hmac_md5(_0xef9e7f, _0x59c8eb)); +} + +function str_hmac_md5(_0x281d11, _0x378864) { + return binl2str(core_hmac_md5(_0x281d11, _0x378864)); +} + +function md5_vm_test() { + return hex_md5(_0x4f75('0x1')) == _0x4f75('0x2'); +} + +function core_md5(_0x22ee7b, _0x5112e5) { + _0x22ee7b[_0x5112e5 >> 0x5] |= 0x80 << _0x5112e5 % 0x20; + _0x22ee7b[(_0x5112e5 + 0x40 >>> 0x9 << 0x4) + 0xe] = _0x5112e5; + var _0x24dc11 = 0x67452301; + var _0x4d8080 = -0x10325477; + var _0x5a0e38 = -0x67452302; + var _0x1bea03 = 0x10325476; + for (var _0x19201a = 0x0; _0x19201a < _0x22ee7b['length']; _0x19201a += 0x10) { + var _0x5690f3 = _0x24dc11; + var _0x278f34 = _0x4d8080; + var _0x39995b = _0x5a0e38; + var _0x43e134 = _0x1bea03; + _0x24dc11 = md5_ff(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x0], 0x7, -0x28955b88); + _0x1bea03 = md5_ff(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x1], 0xc, -0x173848aa); + _0x5a0e38 = md5_ff(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x2], 0x11, 0x242070db); + _0x4d8080 = md5_ff(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x3], 0x16, -0x3e423112); + _0x24dc11 = md5_ff(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x4], 0x7, -0xa83f051); + _0x1bea03 = md5_ff(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x5], 0xc, 0x4787c62a); + _0x5a0e38 = md5_ff(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x6], 0x11, -0x57cfb9ed); + _0x4d8080 = md5_ff(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x7], 0x16, -0x2b96aff); + _0x24dc11 = md5_ff(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x8], 0x7, 0x698098d8); + _0x1bea03 = md5_ff(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x9], 0xc, -0x74bb0851); + _0x5a0e38 = md5_ff(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xa], 0x11, -0xa44f); + _0x4d8080 = md5_ff(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0xb], 0x16, -0x76a32842); + _0x24dc11 = md5_ff(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0xc], 0x7, 0x6b901122); + _0x1bea03 = md5_ff(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0xd], 0xc, -0x2678e6d); + _0x5a0e38 = md5_ff(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xe], 0x11, -0x5986bc72); + _0x4d8080 = md5_ff(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0xf], 0x16, 0x49b40821); + _0x24dc11 = md5_gg(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x1], 0x5, -0x9e1da9e); + _0x1bea03 = md5_gg(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x6], 0x9, -0x3fbf4cc0); + _0x5a0e38 = md5_gg(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xb], 0xe, 0x265e5a51); + _0x4d8080 = md5_gg(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x0], 0x14, -0x16493856); + _0x24dc11 = md5_gg(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x5], 0x5, -0x29d0efa3); + _0x1bea03 = md5_gg(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0xa], 0x9, 0x2441453); + _0x5a0e38 = md5_gg(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xf], 0xe, -0x275e197f); + _0x4d8080 = md5_gg(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x4], 0x14, -0x182c0438); + _0x24dc11 = md5_gg(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x9], 0x5, 0x21e1cde6); + _0x1bea03 = md5_gg(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0xe], 0x9, -0x3cc8f82a); + _0x5a0e38 = md5_gg(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x3], 0xe, -0xb2af279); + _0x4d8080 = md5_gg(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x8], 0x14, 0x455a14ed); + _0x24dc11 = md5_gg(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0xd], 0x5, -0x561c16fb); + _0x1bea03 = md5_gg(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x2], 0x9, -0x3105c08); + _0x5a0e38 = md5_gg(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x7], 0xe, 0x676f02d9); + _0x4d8080 = md5_gg(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0xc], 0x14, -0x72d5b376); + _0x24dc11 = md5_hh(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x5], 0x4, -0x5c6be); + _0x1bea03 = md5_hh(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x8], 0xb, -0x788e097f); + _0x5a0e38 = md5_hh(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xb], 0x10, 0x6d9d6122); + _0x4d8080 = md5_hh(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0xe], 0x17, -0x21ac7f4); + _0x24dc11 = md5_hh(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x1], 0x4, -0x5b4115bc); + _0x1bea03 = md5_hh(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x4], 0xb, 0x4bdecfa9); + _0x5a0e38 = md5_hh(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x7], 0x10, -0x944b4a0); + _0x4d8080 = md5_hh(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0xa], 0x17, -0x41404390); + _0x24dc11 = md5_hh(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0xd], 0x4, 0x289b7ec6); + _0x1bea03 = md5_hh(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x0], 0xb, -0x155ed806); + _0x5a0e38 = md5_hh(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x3], 0x10, -0x2b10cf7b); + _0x4d8080 = md5_hh(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x6], 0x17, 0x4881d05); + _0x24dc11 = md5_hh(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x9], 0x4, -0x262b2fc7); + _0x1bea03 = md5_hh(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0xc], 0xb, -0x1924661b); + _0x5a0e38 = md5_hh(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xf], 0x10, 0x1fa27cf8); + _0x4d8080 = md5_hh(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x2], 0x17, -0x3b53a99b); + _0x24dc11 = md5_ii(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x0], 0x6, -0xbd6ddbc); + _0x1bea03 = md5_ii(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x7], 0xa, 0x432aff97); + _0x5a0e38 = md5_ii(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xe], 0xf, -0x546bdc59); + _0x4d8080 = md5_ii(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x5], 0x15, -0x36c5fc7); + _0x24dc11 = md5_ii(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0xc], 0x6, 0x655b59c3); + _0x1bea03 = md5_ii(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x3], 0xa, -0x70f3336e); + _0x5a0e38 = md5_ii(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xa], 0xf, -0x100b83); + _0x4d8080 = md5_ii(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x1], 0x15, -0x7a7ba22f); + _0x24dc11 = md5_ii(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x8], 0x6, 0x6fa87e4f); + _0x1bea03 = md5_ii(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0xf], 0xa, -0x1d31920); + _0x5a0e38 = md5_ii(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x6], 0xf, -0x5cfebcec); + _0x4d8080 = md5_ii(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0xd], 0x15, 0x4e0811a1); + _0x24dc11 = md5_ii(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x4], 0x6, -0x8ac817e); + _0x1bea03 = md5_ii(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0xb], 0xa, -0x42c50dcb); + _0x5a0e38 = md5_ii(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x2], 0xf, 0x2ad7d2bb); + _0x4d8080 = md5_ii(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x9], 0x15, -0x14792c6f); + _0x24dc11 = safe_add(_0x24dc11, _0x5690f3); + _0x4d8080 = safe_add(_0x4d8080, _0x278f34); + _0x5a0e38 = safe_add(_0x5a0e38, _0x39995b); + _0x1bea03 = safe_add(_0x1bea03, _0x43e134); + } + return Array(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03); +} + +function md5_cmn(_0x13da99, _0x4e97a4, _0x35d420, _0x2be282, _0x30ef48, _0x31cceb) { + return safe_add(bit_rol(safe_add(safe_add(_0x4e97a4, _0x13da99), safe_add(_0x2be282, _0x31cceb)), _0x30ef48), _0x35d420); +} + +function md5_ff(_0x3470ed, _0xb5effa, _0x477770, _0x33e34f, _0x356226, _0x13dc1d, _0x1e29c9) { + return md5_cmn(_0xb5effa & _0x477770 | ~_0xb5effa & _0x33e34f, _0x3470ed, _0xb5effa, _0x356226, _0x13dc1d, _0x1e29c9); +} + +function md5_gg(_0x489772, _0x4cd15b, _0x53464d, _0x48aa94, _0x6a0a55, _0x12dbfb, _0x410e93) { + return md5_cmn(_0x4cd15b & _0x48aa94 | _0x53464d & ~_0x48aa94, _0x489772, _0x4cd15b, _0x6a0a55, _0x12dbfb, _0x410e93); +} + +function md5_hh(_0x2fb64f, _0x38b15b, _0x102f48, _0x3dc19b, _0x5e25aa, _0x3ae390, _0x89e2fc) { + return md5_cmn(_0x38b15b ^ _0x102f48 ^ _0x3dc19b, _0x2fb64f, _0x38b15b, _0x5e25aa, _0x3ae390, _0x89e2fc); +} + +function md5_ii(_0x1a821d, _0x1e15bd, _0x2e26e7, _0x1a3729, _0x3ef1a2, _0x32fa53, _0x163466) { + return md5_cmn(_0x2e26e7 ^ (_0x1e15bd | ~_0x1a3729), _0x1a821d, _0x1e15bd, _0x3ef1a2, _0x32fa53, _0x163466); +} + +function core_hmac_md5(_0x5d2cea, _0x5c190a) { + var _0x4e64d3 = str2binl(_0x5d2cea); + if (_0x4e64d3[_0x4f75('0x0')] > 0x10) _0x4e64d3 = core_md5(_0x4e64d3, _0x5d2cea['length'] * chrsz); + var _0x33c231 = Array(0x10), _0xe018a = Array(0x10); + for (var _0x5f0b9b = 0x0; _0x5f0b9b < 0x10; _0x5f0b9b++) { + _0x33c231[_0x5f0b9b] = _0x4e64d3[_0x5f0b9b] ^ 0x36363636; + _0xe018a[_0x5f0b9b] = _0x4e64d3[_0x5f0b9b] ^ 0x5c5c5c5c; + } + var _0x30e59b = core_md5(_0x33c231[_0x4f75('0x3')](str2binl(_0x5c190a)), 0x200 + _0x5c190a[_0x4f75('0x0')] * chrsz); + return core_md5(_0xe018a[_0x4f75('0x3')](_0x30e59b), 0x200 + 0x80); +} + +function safe_add(_0x3f936b, _0x452433) { + var _0x2830ca = (_0x3f936b & 0xffff) + (_0x452433 & 0xffff); + var _0x558dbe = (_0x3f936b >> 0x10) + (_0x452433 >> 0x10) + (_0x2830ca >> 0x10); + return _0x558dbe << 0x10 | _0x2830ca & 0xffff; +} + +function bit_rol(_0x4ae01b, _0x223c0d) { + return _0x4ae01b << _0x223c0d | _0x4ae01b >>> 0x20 - _0x223c0d; +} + +function str2binl(_0x5c42d1) { + var _0x18b049 = Array(); + var _0x4fdd09 = (0x1 << chrsz) - 0x1; + for (var _0x3fe83f = 0x0; _0x3fe83f < _0x5c42d1[_0x4f75('0x0')] * chrsz; _0x3fe83f += chrsz) _0x18b049[_0x3fe83f >> 0x5] |= (_0x5c42d1[_0x4f75('0x4')](_0x3fe83f / chrsz) & _0x4fdd09) << _0x3fe83f % 0x20; + return _0x18b049; +} + +function binl2str(_0xf5e77a) { + var _0x2c8aff = ''; + var _0x4a565 = (0x1 << chrsz) - 0x1; + for (var _0x24957b = 0x0; _0x24957b < _0xf5e77a[_0x4f75('0x0')] * 0x20; _0x24957b += chrsz) _0x2c8aff += String['fromCharCode'](_0xf5e77a[_0x24957b >> 0x5] >>> _0x24957b % 0x20 & _0x4a565); + return _0x2c8aff; +} + +function binl2hex(_0x2a8297) { + var _0x15a7cb = hexcase ? _0x4f75('0x5') : _0x4f75('0x6'); + var _0x1be29d = ''; + for (var _0x112c2f = 0x0; _0x112c2f < _0x2a8297[_0x4f75('0x0')] * 0x4; _0x112c2f++) { + _0x1be29d += _0x15a7cb['charAt'](_0x2a8297[_0x112c2f >> 0x2] >> _0x112c2f % 0x4 * 0x8 + 0x4 & 0xf) + _0x15a7cb[_0x4f75('0x7')](_0x2a8297[_0x112c2f >> 0x2] >> _0x112c2f % 0x4 * 0x8 & 0xf); + } + return _0x1be29d; +} + +function binl2b64(_0x1f399a) { + var _0x4657e3 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var _0x3409f2 = ''; + for (var _0x54da0a = 0x0; _0x54da0a < _0x1f399a[_0x4f75('0x0')] * 0x4; _0x54da0a += 0x3) { + var _0x71178d = (_0x1f399a[_0x54da0a >> 0x2] >> 0x8 * (_0x54da0a % 0x4) & 0xff) << 0x10 | (_0x1f399a[_0x54da0a + 0x1 >> 0x2] >> 0x8 * ((_0x54da0a + 0x1) % 0x4) & 0xff) << 0x8 | _0x1f399a[_0x54da0a + 0x2 >> 0x2] >> 0x8 * ((_0x54da0a + 0x2) % 0x4) & 0xff; + for (var _0x33e70d = 0x0; _0x33e70d < 0x4; _0x33e70d++) { + if (_0x54da0a * 0x8 + _0x33e70d * 0x6 > _0x1f399a[_0x4f75('0x0')] * 0x20) _0x3409f2 += b64pad; else _0x3409f2 += _0x4657e3[_0x4f75('0x7')](_0x71178d >> 0x6 * (0x3 - _0x33e70d) & 0x3f); + } + } + return _0x3409f2; +} + +console.log(hex_md5("NightTeam")); \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/client.py b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/client.py new file mode 100644 index 0000000..3c81f04 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/client.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# @时间 : 2019-12-15 14:31 +# @作者 : 陈祥安 +# @文件名 : client.py +# @公众号: Python学习开发 +import requests + +url = "http://127.0.0.1:3000/get_num" + +data = { + "a": 1, "b": 2 +} +req = requests.post(url,data) +print(req.text) \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/client2.py b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/client2.py new file mode 100644 index 0000000..d9ca84d --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/client2.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# @时间 : 2019-12-15 14:31 +# @作者 : 陈祥安 +# @文件名 : client.py +# @公众号: Python学习开发 +import requests + + +url = "http://127.0.0.1:3000/crypto" + +data = { + "user": "liming", "password": "1234qwer" +} +req = requests.post(url,data) +print(req.text) diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/crypto.js b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/crypto.js new file mode 100644 index 0000000..92cfbeb --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/crypto.js @@ -0,0 +1,766 @@ +var CryptoJS = function (o, e) { + var h = {} + , g = h.lib = {} + , z = function () { + } + , y = g.Base = { + extend: function (b) { + z.prototype = this; + var d = new z; + b && d.mixIn(b); + d.hasOwnProperty("init") || (d.init = function () { + d.$super.init.apply(this, arguments) + } + ); + d.init.prototype = d; + d.$super = this; + return d + }, + create: function () { + var b = this.extend(); + b.init.apply(b, arguments); + return b + }, + init: function () { + }, + mixIn: function (b) { + for (var d in b) { + b.hasOwnProperty(d) && (this[d] = b[d]) + } + b.hasOwnProperty("toString") && (this.toString = b.toString) + }, + clone: function () { + return this.init.prototype.extend(this) + } + } + , a = g.WordArray = y.extend({ + init: function (b, d) { + b = this.words = b || []; + this.sigBytes = d != e ? d : 4 * b.length + }, + toString: function (b) { + return (b || m).stringify(this) + }, + concat: function (b) { + var p = this.words + , n = b.words + , l = this.sigBytes; + b = b.sigBytes; + this.clamp(); + if (l % 4) { + for (var d = 0; d < b; d++) { + p[l + d >>> 2] |= (n[d >>> 2] >>> 24 - 8 * (d % 4) & 255) << 24 - 8 * ((l + d) % 4) + } + } else { + if (65535 < n.length) { + for (d = 0; d < b; d += 4) { + p[l + d >>> 2] = n[d >>> 2] + } + } else { + p.push.apply(p, n) + } + } + this.sigBytes += b; + return this + }, + clamp: function () { + var b = this.words + , d = this.sigBytes; + b[d >>> 2] &= 4294967295 << 32 - 8 * (d % 4); + b.length = o.ceil(d / 4) + }, + clone: function () { + var b = y.clone.call(this); + b.words = this.words.slice(0); + return b + }, + random: function (b) { + for (var l = [], d = 0; d < b; d += 4) { + l.push(4294967296 * o.random() | 0) + } + return new a.init(l, b) + } + }) + , k = h.enc = {} + , m = k.Hex = { + stringify: function (b) { + var p = b.words; + b = b.sigBytes; + for (var n = [], l = 0; l < b; l++) { + var d = p[l >>> 2] >>> 24 - 8 * (l % 4) & 255; + n.push((d >>> 4).toString(16)); + n.push((d & 15).toString(16)) + } + return n.join("") + }, + parse: function (b) { + for (var n = b.length, l = [], d = 0; d < n; d += 2) { + l[d >>> 3] |= parseInt(b.substr(d, 2), 16) << 24 - 4 * (d % 8) + } + return new a.init(l, n / 2) + } + } + , i = k.Latin1 = { + stringify: function (b) { + var n = b.words; + b = b.sigBytes; + for (var l = [], d = 0; d < b; d++) { + l.push(String.fromCharCode(n[d >>> 2] >>> 24 - 8 * (d % 4) & 255)) + } + return l.join("") + }, + parse: function (b) { + for (var n = b.length, l = [], d = 0; d < n; d++) { + l[d >>> 2] |= (b.charCodeAt(d) & 255) << 24 - 8 * (d % 4) + } + return new a.init(l, n) + } + } + , j = k.Utf8 = { + stringify: function (b) { + try { + return decodeURIComponent(escape(i.stringify(b))) + } catch (d) { + throw Error("Malformed UTF-8 data") + } + }, + parse: function (b) { + return i.parse(unescape(encodeURIComponent(b))) + } + } + , c = g.BufferedBlockAlgorithm = y.extend({ + reset: function () { + this._data = new a.init; + this._nDataBytes = 0 + }, + _append: function (b) { + "string" == typeof b && (b = j.parse(b)); + this._data.concat(b); + this._nDataBytes += b.sigBytes + }, + _process: function (l) { + var t = this._data + , s = t.words + , p = t.sigBytes + , n = this.blockSize + , d = p / (4 * n) + , d = l ? o.ceil(d) : o.max((d | 0) - this._minBufferSize, 0); + l = d * n; + p = o.min(4 * l, p); + if (l) { + for (var r = 0; r < l; r += n) { + this._doProcessBlock(s, r) + } + r = s.splice(0, l); + t.sigBytes -= p + } + return new a.init(r, p) + }, + clone: function () { + var b = y.clone.call(this); + b._data = this._data.clone(); + return b + }, + _minBufferSize: 0 + }); + g.Hasher = c.extend({ + cfg: y.extend(), + init: function (b) { + this.cfg = this.cfg.extend(b); + this.reset() + }, + reset: function () { + c.reset.call(this); + this._doReset() + }, + update: function (b) { + this._append(b); + this._process(); + return this + }, + finalize: function (b) { + b && this._append(b); + return this._doFinalize() + }, + blockSize: 16, + _createHelper: function (b) { + return function (d, l) { + return (new b.init(l)).finalize(d) + } + }, + _createHmacHelper: function (b) { + return function (d, l) { + return (new f.HMAC.init(b, l)).finalize(d) + } + } + }); + var f = h.algo = {}; + return h +}(Math); +(function () { + var a = CryptoJS + , b = a.lib.WordArray; + a.enc.Base64 = { + stringify: function (j) { + var e = j.words + , i = j.sigBytes + , g = this._map; + j.clamp(); + j = []; + for (var h = 0; h < i; h += 3) { + for (var c = (e[h >>> 2] >>> 24 - 8 * (h % 4) & 255) << 16 | (e[h + 1 >>> 2] >>> 24 - 8 * ((h + 1) % 4) & 255) << 8 | e[h + 2 >>> 2] >>> 24 - 8 * ((h + 2) % 4) & 255, f = 0; 4 > f && h + 0.75 * f < i; f++) { + j.push(g.charAt(c >>> 6 * (3 - f) & 63)) + } + } + if (e = g.charAt(64)) { + for (; j.length % 4;) { + j.push(e) + } + } + return j.join("") + }, + parse: function (k) { + var f = k.length + , i = this._map + , h = i.charAt(64); + h && (h = k.indexOf(h), + -1 != h && (f = h)); + for (var h = [], j = 0, e = 0; e < f; e++) { + if (e % 4) { + var g = i.indexOf(k.charAt(e - 1)) << 2 * (e % 4) + , c = i.indexOf(k.charAt(e)) >>> 6 - 2 * (e % 4); + h[j >>> 2] |= (g | c) << 24 - 8 * (j % 4); + j++ + } + } + return b.create(h, j) + }, + _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" + } + } +)(); +(function (k) { + function c(d, s, l, r, q, p, o) { + d = d + (s & l | ~s & r) + q + o; + return (d << p | d >>> 32 - p) + s + } + + function f(d, s, l, r, q, p, o) { + d = d + (s & r | l & ~r) + q + o; + return (d << p | d >>> 32 - p) + s + } + + function e(d, s, l, r, q, p, o) { + d = d + (s ^ l ^ r) + q + o; + return (d << p | d >>> 32 - p) + s + } + + function n(d, s, l, r, q, p, o) { + d = d + (l ^ (s | ~r)) + q + o; + return (d << p | d >>> 32 - p) + s + } + + for (var m = CryptoJS, a = m.lib, i = a.WordArray, j = a.Hasher, a = m.algo, g = [], h = 0; 64 > h; h++) { + g[h] = 4294967296 * k.abs(k.sin(h + 1)) | 0 + } + a = a.MD5 = j.extend({ + _doReset: function () { + this._hash = new i.init([1732584193, 4023233417, 2562383102, 271733878]) + }, + _doProcessBlock: function (J, L) { + for (var U = 0; 16 > U; U++) { + var T = L + U + , S = J[T]; + J[T] = (S << 8 | S >>> 24) & 16711935 | (S << 24 | S >>> 8) & 4278255360 + } + var U = this._hash.words + , T = J[L + 0] + , S = J[L + 1] + , O = J[L + 2] + , N = J[L + 3] + , b = J[L + 4] + , H = J[L + 5] + , y = J[L + 6] + , l = J[L + 7] + , o = J[L + 8] + , K = J[L + 9] + , I = J[L + 10] + , G = J[L + 11] + , p = J[L + 12] + , F = J[L + 13] + , s = J[L + 14] + , d = J[L + 15] + , R = U[0] + , M = U[1] + , Q = U[2] + , P = U[3] + , R = c(R, M, Q, P, T, 7, g[0]) + , P = c(P, R, M, Q, S, 12, g[1]) + , Q = c(Q, P, R, M, O, 17, g[2]) + , M = c(M, Q, P, R, N, 22, g[3]) + , R = c(R, M, Q, P, b, 7, g[4]) + , P = c(P, R, M, Q, H, 12, g[5]) + , Q = c(Q, P, R, M, y, 17, g[6]) + , M = c(M, Q, P, R, l, 22, g[7]) + , R = c(R, M, Q, P, o, 7, g[8]) + , P = c(P, R, M, Q, K, 12, g[9]) + , Q = c(Q, P, R, M, I, 17, g[10]) + , M = c(M, Q, P, R, G, 22, g[11]) + , R = c(R, M, Q, P, p, 7, g[12]) + , P = c(P, R, M, Q, F, 12, g[13]) + , Q = c(Q, P, R, M, s, 17, g[14]) + , M = c(M, Q, P, R, d, 22, g[15]) + , R = f(R, M, Q, P, S, 5, g[16]) + , P = f(P, R, M, Q, y, 9, g[17]) + , Q = f(Q, P, R, M, G, 14, g[18]) + , M = f(M, Q, P, R, T, 20, g[19]) + , R = f(R, M, Q, P, H, 5, g[20]) + , P = f(P, R, M, Q, I, 9, g[21]) + , Q = f(Q, P, R, M, d, 14, g[22]) + , M = f(M, Q, P, R, b, 20, g[23]) + , R = f(R, M, Q, P, K, 5, g[24]) + , P = f(P, R, M, Q, s, 9, g[25]) + , Q = f(Q, P, R, M, N, 14, g[26]) + , M = f(M, Q, P, R, o, 20, g[27]) + , R = f(R, M, Q, P, F, 5, g[28]) + , P = f(P, R, M, Q, O, 9, g[29]) + , Q = f(Q, P, R, M, l, 14, g[30]) + , M = f(M, Q, P, R, p, 20, g[31]) + , R = e(R, M, Q, P, H, 4, g[32]) + , P = e(P, R, M, Q, o, 11, g[33]) + , Q = e(Q, P, R, M, G, 16, g[34]) + , M = e(M, Q, P, R, s, 23, g[35]) + , R = e(R, M, Q, P, S, 4, g[36]) + , P = e(P, R, M, Q, b, 11, g[37]) + , Q = e(Q, P, R, M, l, 16, g[38]) + , M = e(M, Q, P, R, I, 23, g[39]) + , R = e(R, M, Q, P, F, 4, g[40]) + , P = e(P, R, M, Q, T, 11, g[41]) + , Q = e(Q, P, R, M, N, 16, g[42]) + , M = e(M, Q, P, R, y, 23, g[43]) + , R = e(R, M, Q, P, K, 4, g[44]) + , P = e(P, R, M, Q, p, 11, g[45]) + , Q = e(Q, P, R, M, d, 16, g[46]) + , M = e(M, Q, P, R, O, 23, g[47]) + , R = n(R, M, Q, P, T, 6, g[48]) + , P = n(P, R, M, Q, l, 10, g[49]) + , Q = n(Q, P, R, M, s, 15, g[50]) + , M = n(M, Q, P, R, H, 21, g[51]) + , R = n(R, M, Q, P, p, 6, g[52]) + , P = n(P, R, M, Q, N, 10, g[53]) + , Q = n(Q, P, R, M, I, 15, g[54]) + , M = n(M, Q, P, R, S, 21, g[55]) + , R = n(R, M, Q, P, o, 6, g[56]) + , P = n(P, R, M, Q, d, 10, g[57]) + , Q = n(Q, P, R, M, y, 15, g[58]) + , M = n(M, Q, P, R, F, 21, g[59]) + , R = n(R, M, Q, P, b, 6, g[60]) + , P = n(P, R, M, Q, G, 10, g[61]) + , Q = n(Q, P, R, M, O, 15, g[62]) + , M = n(M, Q, P, R, K, 21, g[63]); + U[0] = U[0] + R | 0; + U[1] = U[1] + M | 0; + U[2] = U[2] + Q | 0; + U[3] = U[3] + P | 0 + }, + _doFinalize: function () { + var d = this._data + , q = d.words + , l = 8 * this._nDataBytes + , p = 8 * d.sigBytes; + q[p >>> 5] |= 128 << 24 - p % 32; + var o = k.floor(l / 4294967296); + q[(p + 64 >>> 9 << 4) + 15] = (o << 8 | o >>> 24) & 16711935 | (o << 24 | o >>> 8) & 4278255360; + q[(p + 64 >>> 9 << 4) + 14] = (l << 8 | l >>> 24) & 16711935 | (l << 24 | l >>> 8) & 4278255360; + d.sigBytes = 4 * (q.length + 1); + this._process(); + d = this._hash; + q = d.words; + for (l = 0; 4 > l; l++) { + p = q[l], + q[l] = (p << 8 | p >>> 24) & 16711935 | (p << 24 | p >>> 8) & 4278255360 + } + return d + }, + clone: function () { + var d = j.clone.call(this); + d._hash = this._hash.clone(); + return d + } + }); + m.MD5 = j._createHelper(a); + m.HmacMD5 = j._createHmacHelper(a) + } +)(Math); +(function () { + var b = CryptoJS + , e = b.lib + , f = e.Base + , a = e.WordArray + , e = b.algo + , c = e.EvpKDF = f.extend({ + cfg: f.extend({ + keySize: 4, + hasher: e.MD5, + iterations: 1 + }), + init: function (g) { + this.cfg = this.cfg.extend(g) + }, + compute: function (k, g) { + for (var i = this.cfg, t = i.hasher.create(), l = a.create(), o = l.words, h = i.keySize, i = i.iterations; o.length < h;) { + j && t.update(j); + var j = t.update(k).finalize(g); + t.reset(); + for (var m = 1; m < i; m++) { + j = t.finalize(j), + t.reset() + } + l.concat(j) + } + l.sigBytes = 4 * h; + return l + } + }); + b.EvpKDF = function (i, g, h) { + return c.create(h).compute(i, g) + } + } +)(); +CryptoJS.lib.Cipher || function (B) { + var g = CryptoJS + , j = g.lib + , i = j.Base + , D = j.WordArray + , C = j.BufferedBlockAlgorithm + , e = g.enc.Base64 + , z = g.algo.EvpKDF + , A = j.Cipher = C.extend({ + cfg: i.extend(), + createEncryptor: function (c, b) { + return this.create(this._ENC_XFORM_MODE, c, b) + }, + createDecryptor: function (c, b) { + return this.create(this._DEC_XFORM_MODE, c, b) + }, + init: function (l, d, c) { + this.cfg = this.cfg.extend(c); + this._xformMode = l; + this._key = d; + this.reset() + }, + reset: function () { + C.reset.call(this); + this._doReset() + }, + process: function (a) { + this._append(a); + return this._process() + }, + finalize: function (a) { + a && this._append(a); + return this._doFinalize() + }, + keySize: 4, + ivSize: 4, + _ENC_XFORM_MODE: 1, + _DEC_XFORM_MODE: 2, + _createHelper: function (a) { + return { + encrypt: function (c, l, n) { + return ("string" == typeof l ? k : o).encrypt(a, c, l, n) + }, + decrypt: function (c, l, n) { + return ("string" == typeof l ? k : o).decrypt(a, c, l, n) + } + } + } + }); + j.StreamCipher = A.extend({ + _doFinalize: function () { + return this._process(!0) + }, + blockSize: 1 + }); + var m = g.mode = {} + , y = function (p, n, l) { + var r = this._iv; + r ? this._iv = B : r = this._prevBlock; + for (var q = 0; q < l; q++) { + p[n + q] ^= r[q] + } + } + , f = (j.BlockCipherMode = i.extend({ + createEncryptor: function (c, b) { + return this.Encryptor.create(c, b) + }, + createDecryptor: function (c, b) { + return this.Decryptor.create(c, b) + }, + init: function (c, b) { + this._cipher = c; + this._iv = b + } + })).extend(); + f.Encryptor = f.extend({ + processBlock: function (n, l) { + var d = this._cipher + , p = d.blockSize; + y.call(this, n, l, p); + d.encryptBlock(n, l); + this._prevBlock = n.slice(l, l + p) + } + }); + f.Decryptor = f.extend({ + processBlock: function (p, n) { + var l = this._cipher + , r = l.blockSize + , q = p.slice(n, n + r); + l.decryptBlock(p, n); + y.call(this, p, n, r); + this._prevBlock = q + } + }); + m = m.CBC = f; + f = (g.pad = {}).Pkcs7 = { + pad: function (r, p) { + for (var u = 4 * p, u = u - r.sigBytes % u, s = u << 24 | u << 16 | u << 8 | u, q = [], t = 0; t < u; t += 4) { + q.push(s) + } + u = D.create(q, u); + r.concat(u) + }, + unpad: function (b) { + b.sigBytes -= b.words[b.sigBytes - 1 >>> 2] & 255 + } + }; + j.BlockCipher = A.extend({ + cfg: A.cfg.extend({ + mode: m, + padding: f + }), + reset: function () { + A.reset.call(this); + var l = this.cfg + , d = l.iv + , l = l.mode; + if (this._xformMode == this._ENC_XFORM_MODE) { + var n = l.createEncryptor + } else { + n = l.createDecryptor, + this._minBufferSize = 1 + } + this._mode = n.call(l, this, d && d.words) + }, + _doProcessBlock: function (d, c) { + this._mode.processBlock(d, c) + }, + _doFinalize: function () { + var d = this.cfg.padding; + if (this._xformMode == this._ENC_XFORM_MODE) { + d.pad(this._data, this.blockSize); + var c = this._process(!0) + } else { + c = this._process(!0), + d.unpad(c) + } + return c + }, + blockSize: 4 + }); + var h = j.CipherParams = i.extend({ + init: function (b) { + this.mixIn(b) + }, + toString: function (b) { + return (b || this.formatter).stringify(this) + } + }) + , m = (g.format = {}).OpenSSL = { + stringify: function (d) { + var c = d.ciphertext; + d = d.salt; + return (d ? D.create([1398893684, 1701076831]).concat(d).concat(c) : c).toString(e) + }, + parse: function (l) { + l = e.parse(l); + var d = l.words; + if (1398893684 == d[0] && 1701076831 == d[1]) { + var n = D.create(d.slice(2, 4)); + d.splice(0, 4); + l.sigBytes -= 16 + } + return h.create({ + ciphertext: l, + salt: n + }) + } + } + , o = j.SerializableCipher = i.extend({ + cfg: i.extend({ + format: m + }), + encrypt: function (q, n, s, r) { + r = this.cfg.extend(r); + var p = q.createEncryptor(s, r); + n = p.finalize(n); + p = p.cfg; + return h.create({ + ciphertext: n, + key: s, + iv: p.iv, + algorithm: q, + mode: p.mode, + padding: p.padding, + blockSize: q.blockSize, + formatter: r.format + }) + }, + decrypt: function (n, l, q, p) { + p = this.cfg.extend(p); + l = this._parse(l, p.format); + return n.createDecryptor(q, p).finalize(l.ciphertext) + }, + _parse: function (d, c) { + return "string" == typeof d ? c.parse(d, this) : d + } + }) + , g = (g.kdf = {}).OpenSSL = { + execute: function (n, l, q, p) { + p || (p = D.random(8)); + n = z.create({ + keySize: l + q + }).compute(n, p); + q = D.create(n.words.slice(l), 4 * q); + n.sigBytes = 4 * l; + return h.create({ + key: n, + iv: q, + salt: p + }) + } + } + , k = j.PasswordBasedCipher = o.extend({ + cfg: o.cfg.extend({ + kdf: g + }), + encrypt: function (a, q, p, n) { + n = this.cfg.extend(n); + p = n.kdf.execute(p, a.keySize, a.ivSize); + n.iv = p.iv; + a = o.encrypt.call(this, a, q, p.key, n); + a.mixIn(p); + return a + }, + decrypt: function (a, q, p, n) { + n = this.cfg.extend(n); + q = this._parse(q, n.format); + p = n.kdf.execute(p, a.keySize, a.ivSize, q.salt); + n.iv = p.iv; + return o.decrypt.call(this, a, q, p.key, n) + } + }) +}(); +(function () { + for (var C = CryptoJS, K = C.lib.BlockCipher, Q = C.algo, M = [], E = [], D = [], I = [], m = [], A = [], S = [], h = [], J = [], L = [], T = [], R = 0; 256 > R; R++) { + T[R] = 128 > R ? R << 1 : R << 1 ^ 283 + } + for (var P = 0, O = 0, R = 0; 256 > R; R++) { + var N = O ^ O << 1 ^ O << 2 ^ O << 3 ^ O << 4 + , N = N >>> 8 ^ N & 255 ^ 99; + M[P] = N; + E[N] = P; + var f = T[P] + , B = T[f] + , o = T[B] + , g = 257 * T[N] ^ 16843008 * N; + D[P] = g << 24 | g >>> 8; + I[P] = g << 16 | g >>> 16; + m[P] = g << 8 | g >>> 24; + A[P] = g; + g = 16843009 * o ^ 65537 * B ^ 257 * f ^ 16843008 * P; + S[N] = g << 24 | g >>> 8; + h[N] = g << 16 | g >>> 16; + J[N] = g << 8 | g >>> 24; + L[N] = g; + P ? (P = f ^ T[T[T[o ^ f]]], + O ^= T[T[O]]) : P = O = 1 + } + var i = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54] + , Q = Q.AES = K.extend({ + _doReset: function () { + for (var b = this._key, r = b.words, q = b.sigBytes / 4, b = 4 * ((this._nRounds = q + 6) + 1), p = this._keySchedule = [], n = 0; n < b; n++) { + if (n < q) { + p[n] = r[n] + } else { + var l = p[n - 1]; + n % q ? 6 < q && 4 == n % q && (l = M[l >>> 24] << 24 | M[l >>> 16 & 255] << 16 | M[l >>> 8 & 255] << 8 | M[l & 255]) : (l = l << 8 | l >>> 24, + l = M[l >>> 24] << 24 | M[l >>> 16 & 255] << 16 | M[l >>> 8 & 255] << 8 | M[l & 255], + l ^= i[n / q | 0] << 24); + p[n] = p[n - q] ^ l + } + } + r = this._invKeySchedule = []; + for (q = 0; q < b; q++) { + n = b - q, + l = q % 4 ? p[n] : p[n - 4], + r[q] = 4 > q || 4 >= n ? l : S[M[l >>> 24]] ^ h[M[l >>> 16 & 255]] ^ J[M[l >>> 8 & 255]] ^ L[M[l & 255]] + } + }, + encryptBlock: function (d, c) { + this._doCryptBlock(d, c, this._keySchedule, D, I, m, A, M) + }, + decryptBlock: function (b, j) { + var e = b[j + 1]; + b[j + 1] = b[j + 3]; + b[j + 3] = e; + this._doCryptBlock(b, j, this._invKeySchedule, S, h, J, L, E); + e = b[j + 1]; + b[j + 1] = b[j + 3]; + b[j + 3] = e + }, + _doCryptBlock: function (ac, ab, aa, Z, Y, U, G, X) { + for (var F = this._nRounds, W = ac[ab] ^ aa[0], V = ac[ab + 1] ^ aa[1], H = ac[ab + 2] ^ aa[2], z = ac[ab + 3] ^ aa[3], y = 4, w = 1; w < F; w++) { + var x = Z[W >>> 24] ^ Y[V >>> 16 & 255] ^ U[H >>> 8 & 255] ^ G[z & 255] ^ aa[y++] + , v = Z[V >>> 24] ^ Y[H >>> 16 & 255] ^ U[z >>> 8 & 255] ^ G[W & 255] ^ aa[y++] + , u = Z[H >>> 24] ^ Y[z >>> 16 & 255] ^ U[W >>> 8 & 255] ^ G[V & 255] ^ aa[y++] + , z = Z[z >>> 24] ^ Y[W >>> 16 & 255] ^ U[V >>> 8 & 255] ^ G[H & 255] ^ aa[y++] + , W = x + , V = v + , H = u + } + x = (X[W >>> 24] << 24 | X[V >>> 16 & 255] << 16 | X[H >>> 8 & 255] << 8 | X[z & 255]) ^ aa[y++]; + v = (X[V >>> 24] << 24 | X[H >>> 16 & 255] << 16 | X[z >>> 8 & 255] << 8 | X[W & 255]) ^ aa[y++]; + u = (X[H >>> 24] << 24 | X[z >>> 16 & 255] << 16 | X[W >>> 8 & 255] << 8 | X[V & 255]) ^ aa[y++]; + z = (X[z >>> 24] << 24 | X[W >>> 16 & 255] << 16 | X[V >>> 8 & 255] << 8 | X[H & 255]) ^ aa[y++]; + ac[ab] = x; + ac[ab + 1] = v; + ac[ab + 2] = u; + ac[ab + 3] = z + }, + keySize: 8 + }); + C.AES = K._createHelper(Q) + } +)(); + + +const Encrypt = function (user, password) { + let result = {} + var t = CryptoJS.MD5(user), + i = CryptoJS.enc.Utf8.parse(t), + r = CryptoJS.enc.Utf8.parse(password), + u = CryptoJS.AES.encrypt(password, i, { + iv: r + }); + result.t = t.toString() + result.i = i.toString() + result.r = r.toString() + result.u = u.toString() + return result +}; + + +module.exports={ + Encrypt +} \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/last.js b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/last.js new file mode 100644 index 0000000..6d3ed02 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/last.js @@ -0,0 +1,15 @@ + + + +//1.这个对象存在于js,而不存在于nodejs,比如window,document,screen. +//2.这些对象的属性 是一个值。 +var window ={} +// window.btoa=function(aa){ +// return aa +// } +var document={} + +document={"location":{"href":"https://bbs.nightteam.cn/member.php?mod=register"}} +var screen ={"width":900,"height":1200} +console.log(screen.width) + diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/server.js b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/server.js new file mode 100644 index 0000000..22d8cad --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/server.js @@ -0,0 +1,22 @@ +const express = require('express') +const app = express() +const sum = require("./sum") +var bodyParser = require('body-parser'); +app.use(bodyParser()); + + +app.post('/get_num', function (req, res) { + let result = req.body + console.log("result",result) + let a = parseInt(result.a) + let b = parseInt(result.b) + result = sum.add(a, b) + res.send(result.toString()); +}) + +app.listen(3000, () => { + console.log("开启服务,端口3000") +}) + + + diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/server2.js b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/server2.js new file mode 100644 index 0000000..016621b --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/server2.js @@ -0,0 +1,22 @@ +const express = require('express') +const app = express() +const crypto = require("./crypto") +var bodyParser = require('body-parser'); +app.use(bodyParser()); + + +app.post('/crypto', function (req, res) { + let result = req.body + console.log(result) + let user = result.user + let pwd = result.password + result = crypto.Encrypt(user, pwd) + res.send(result); +}) + +app.listen(3000, () => { + console.log("开启服务,端口3000") +}) + + + diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/sum.js b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/sum.js new file mode 100644 index 0000000..c31551c --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/NodeServer/sum.js @@ -0,0 +1,8 @@ +function add(a, b) { + return a + b +} + +module.exports = + { + add + } \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/PyExecjsDemo/aes_demo.js b/3-奇⻔遁甲调用 JavaScript 执行代码/PyExecjsDemo/aes_demo.js new file mode 100644 index 0000000..55e834e --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/PyExecjsDemo/aes_demo.js @@ -0,0 +1,739 @@ +var CryptoJS= function(o, e) { + var h = {} + , g = h.lib = {} + , z = function() {} + , y = g.Base = { + extend: function(b) { + z.prototype = this; + var d = new z; + b && d.mixIn(b); + d.hasOwnProperty("init") || (d.init = function() { + d.$super.init.apply(this, arguments) + } + ); + d.init.prototype = d; + d.$super = this; + return d + }, + create: function() { + var b = this.extend(); + b.init.apply(b, arguments); + return b + }, + init: function() {}, + mixIn: function(b) { + for (var d in b) { + b.hasOwnProperty(d) && (this[d] = b[d]) + } + b.hasOwnProperty("toString") && (this.toString = b.toString) + }, + clone: function() { + return this.init.prototype.extend(this) + } + } + , a = g.WordArray = y.extend({ + init: function(b, d) { + b = this.words = b || []; + this.sigBytes = d != e ? d : 4 * b.length + }, + toString: function(b) { + return (b || m).stringify(this) + }, + concat: function(b) { + var p = this.words + , n = b.words + , l = this.sigBytes; + b = b.sigBytes; + this.clamp(); + if (l % 4) { + for (var d = 0; d < b; d++) { + p[l + d >>> 2] |= (n[d >>> 2] >>> 24 - 8 * (d % 4) & 255) << 24 - 8 * ((l + d) % 4) + } + } else { + if (65535 < n.length) { + for (d = 0; d < b; d += 4) { + p[l + d >>> 2] = n[d >>> 2] + } + } else { + p.push.apply(p, n) + } + } + this.sigBytes += b; + return this + }, + clamp: function() { + var b = this.words + , d = this.sigBytes; + b[d >>> 2] &= 4294967295 << 32 - 8 * (d % 4); + b.length = o.ceil(d / 4) + }, + clone: function() { + var b = y.clone.call(this); + b.words = this.words.slice(0); + return b + }, + random: function(b) { + for (var l = [], d = 0; d < b; d += 4) { + l.push(4294967296 * o.random() | 0) + } + return new a.init(l,b) + } + }) + , k = h.enc = {} + , m = k.Hex = { + stringify: function(b) { + var p = b.words; + b = b.sigBytes; + for (var n = [], l = 0; l < b; l++) { + var d = p[l >>> 2] >>> 24 - 8 * (l % 4) & 255; + n.push((d >>> 4).toString(16)); + n.push((d & 15).toString(16)) + } + return n.join("") + }, + parse: function(b) { + for (var n = b.length, l = [], d = 0; d < n; d += 2) { + l[d >>> 3] |= parseInt(b.substr(d, 2), 16) << 24 - 4 * (d % 8) + } + return new a.init(l,n / 2) + } + } + , i = k.Latin1 = { + stringify: function(b) { + var n = b.words; + b = b.sigBytes; + for (var l = [], d = 0; d < b; d++) { + l.push(String.fromCharCode(n[d >>> 2] >>> 24 - 8 * (d % 4) & 255)) + } + return l.join("") + }, + parse: function(b) { + for (var n = b.length, l = [], d = 0; d < n; d++) { + l[d >>> 2] |= (b.charCodeAt(d) & 255) << 24 - 8 * (d % 4) + } + return new a.init(l,n) + } + } + , j = k.Utf8 = { + stringify: function(b) { + try { + return decodeURIComponent(escape(i.stringify(b))) + } catch (d) { + throw Error("Malformed UTF-8 data") + } + }, + parse: function(b) { + return i.parse(unescape(encodeURIComponent(b))) + } + } + , c = g.BufferedBlockAlgorithm = y.extend({ + reset: function() { + this._data = new a.init; + this._nDataBytes = 0 + }, + _append: function(b) { + "string" == typeof b && (b = j.parse(b)); + this._data.concat(b); + this._nDataBytes += b.sigBytes + }, + _process: function(l) { + var t = this._data + , s = t.words + , p = t.sigBytes + , n = this.blockSize + , d = p / (4 * n) + , d = l ? o.ceil(d) : o.max((d | 0) - this._minBufferSize, 0); + l = d * n; + p = o.min(4 * l, p); + if (l) { + for (var r = 0; r < l; r += n) { + this._doProcessBlock(s, r) + } + r = s.splice(0, l); + t.sigBytes -= p + } + return new a.init(r,p) + }, + clone: function() { + var b = y.clone.call(this); + b._data = this._data.clone(); + return b + }, + _minBufferSize: 0 + }); + g.Hasher = c.extend({ + cfg: y.extend(), + init: function(b) { + this.cfg = this.cfg.extend(b); + this.reset() + }, + reset: function() { + c.reset.call(this); + this._doReset() + }, + update: function(b) { + this._append(b); + this._process(); + return this + }, + finalize: function(b) { + b && this._append(b); + return this._doFinalize() + }, + blockSize: 16, + _createHelper: function(b) { + return function(d, l) { + return (new b.init(l)).finalize(d) + } + }, + _createHmacHelper: function(b) { + return function(d, l) { + return (new f.HMAC.init(b,l)).finalize(d) + } + } + }); + var f = h.algo = {}; + return h +}(Math); +(function() { + var a = CryptoJS + , b = a.lib.WordArray; + a.enc.Base64 = { + stringify: function(j) { + var e = j.words + , i = j.sigBytes + , g = this._map; + j.clamp(); + j = []; + for (var h = 0; h < i; h += 3) { + for (var c = (e[h >>> 2] >>> 24 - 8 * (h % 4) & 255) << 16 | (e[h + 1 >>> 2] >>> 24 - 8 * ((h + 1) % 4) & 255) << 8 | e[h + 2 >>> 2] >>> 24 - 8 * ((h + 2) % 4) & 255, f = 0; 4 > f && h + 0.75 * f < i; f++) { + j.push(g.charAt(c >>> 6 * (3 - f) & 63)) + } + } + if (e = g.charAt(64)) { + for (; j.length % 4; ) { + j.push(e) + } + } + return j.join("") + }, + parse: function(k) { + var f = k.length + , i = this._map + , h = i.charAt(64); + h && (h = k.indexOf(h), + -1 != h && (f = h)); + for (var h = [], j = 0, e = 0; e < f; e++) { + if (e % 4) { + var g = i.indexOf(k.charAt(e - 1)) << 2 * (e % 4) + , c = i.indexOf(k.charAt(e)) >>> 6 - 2 * (e % 4); + h[j >>> 2] |= (g | c) << 24 - 8 * (j % 4); + j++ + } + } + return b.create(h, j) + }, + _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" + } +} +)(); +(function(k) { + function c(d, s, l, r, q, p, o) { + d = d + (s & l | ~s & r) + q + o; + return (d << p | d >>> 32 - p) + s + } + function f(d, s, l, r, q, p, o) { + d = d + (s & r | l & ~r) + q + o; + return (d << p | d >>> 32 - p) + s + } + function e(d, s, l, r, q, p, o) { + d = d + (s ^ l ^ r) + q + o; + return (d << p | d >>> 32 - p) + s + } + function n(d, s, l, r, q, p, o) { + d = d + (l ^ (s | ~r)) + q + o; + return (d << p | d >>> 32 - p) + s + } + for (var m = CryptoJS, a = m.lib, i = a.WordArray, j = a.Hasher, a = m.algo, g = [], h = 0; 64 > h; h++) { + g[h] = 4294967296 * k.abs(k.sin(h + 1)) | 0 + } + a = a.MD5 = j.extend({ + _doReset: function() { + this._hash = new i.init([1732584193, 4023233417, 2562383102, 271733878]) + }, + _doProcessBlock: function(J, L) { + for (var U = 0; 16 > U; U++) { + var T = L + U + , S = J[T]; + J[T] = (S << 8 | S >>> 24) & 16711935 | (S << 24 | S >>> 8) & 4278255360 + } + var U = this._hash.words + , T = J[L + 0] + , S = J[L + 1] + , O = J[L + 2] + , N = J[L + 3] + , b = J[L + 4] + , H = J[L + 5] + , y = J[L + 6] + , l = J[L + 7] + , o = J[L + 8] + , K = J[L + 9] + , I = J[L + 10] + , G = J[L + 11] + , p = J[L + 12] + , F = J[L + 13] + , s = J[L + 14] + , d = J[L + 15] + , R = U[0] + , M = U[1] + , Q = U[2] + , P = U[3] + , R = c(R, M, Q, P, T, 7, g[0]) + , P = c(P, R, M, Q, S, 12, g[1]) + , Q = c(Q, P, R, M, O, 17, g[2]) + , M = c(M, Q, P, R, N, 22, g[3]) + , R = c(R, M, Q, P, b, 7, g[4]) + , P = c(P, R, M, Q, H, 12, g[5]) + , Q = c(Q, P, R, M, y, 17, g[6]) + , M = c(M, Q, P, R, l, 22, g[7]) + , R = c(R, M, Q, P, o, 7, g[8]) + , P = c(P, R, M, Q, K, 12, g[9]) + , Q = c(Q, P, R, M, I, 17, g[10]) + , M = c(M, Q, P, R, G, 22, g[11]) + , R = c(R, M, Q, P, p, 7, g[12]) + , P = c(P, R, M, Q, F, 12, g[13]) + , Q = c(Q, P, R, M, s, 17, g[14]) + , M = c(M, Q, P, R, d, 22, g[15]) + , R = f(R, M, Q, P, S, 5, g[16]) + , P = f(P, R, M, Q, y, 9, g[17]) + , Q = f(Q, P, R, M, G, 14, g[18]) + , M = f(M, Q, P, R, T, 20, g[19]) + , R = f(R, M, Q, P, H, 5, g[20]) + , P = f(P, R, M, Q, I, 9, g[21]) + , Q = f(Q, P, R, M, d, 14, g[22]) + , M = f(M, Q, P, R, b, 20, g[23]) + , R = f(R, M, Q, P, K, 5, g[24]) + , P = f(P, R, M, Q, s, 9, g[25]) + , Q = f(Q, P, R, M, N, 14, g[26]) + , M = f(M, Q, P, R, o, 20, g[27]) + , R = f(R, M, Q, P, F, 5, g[28]) + , P = f(P, R, M, Q, O, 9, g[29]) + , Q = f(Q, P, R, M, l, 14, g[30]) + , M = f(M, Q, P, R, p, 20, g[31]) + , R = e(R, M, Q, P, H, 4, g[32]) + , P = e(P, R, M, Q, o, 11, g[33]) + , Q = e(Q, P, R, M, G, 16, g[34]) + , M = e(M, Q, P, R, s, 23, g[35]) + , R = e(R, M, Q, P, S, 4, g[36]) + , P = e(P, R, M, Q, b, 11, g[37]) + , Q = e(Q, P, R, M, l, 16, g[38]) + , M = e(M, Q, P, R, I, 23, g[39]) + , R = e(R, M, Q, P, F, 4, g[40]) + , P = e(P, R, M, Q, T, 11, g[41]) + , Q = e(Q, P, R, M, N, 16, g[42]) + , M = e(M, Q, P, R, y, 23, g[43]) + , R = e(R, M, Q, P, K, 4, g[44]) + , P = e(P, R, M, Q, p, 11, g[45]) + , Q = e(Q, P, R, M, d, 16, g[46]) + , M = e(M, Q, P, R, O, 23, g[47]) + , R = n(R, M, Q, P, T, 6, g[48]) + , P = n(P, R, M, Q, l, 10, g[49]) + , Q = n(Q, P, R, M, s, 15, g[50]) + , M = n(M, Q, P, R, H, 21, g[51]) + , R = n(R, M, Q, P, p, 6, g[52]) + , P = n(P, R, M, Q, N, 10, g[53]) + , Q = n(Q, P, R, M, I, 15, g[54]) + , M = n(M, Q, P, R, S, 21, g[55]) + , R = n(R, M, Q, P, o, 6, g[56]) + , P = n(P, R, M, Q, d, 10, g[57]) + , Q = n(Q, P, R, M, y, 15, g[58]) + , M = n(M, Q, P, R, F, 21, g[59]) + , R = n(R, M, Q, P, b, 6, g[60]) + , P = n(P, R, M, Q, G, 10, g[61]) + , Q = n(Q, P, R, M, O, 15, g[62]) + , M = n(M, Q, P, R, K, 21, g[63]); + U[0] = U[0] + R | 0; + U[1] = U[1] + M | 0; + U[2] = U[2] + Q | 0; + U[3] = U[3] + P | 0 + }, + _doFinalize: function() { + var d = this._data + , q = d.words + , l = 8 * this._nDataBytes + , p = 8 * d.sigBytes; + q[p >>> 5] |= 128 << 24 - p % 32; + var o = k.floor(l / 4294967296); + q[(p + 64 >>> 9 << 4) + 15] = (o << 8 | o >>> 24) & 16711935 | (o << 24 | o >>> 8) & 4278255360; + q[(p + 64 >>> 9 << 4) + 14] = (l << 8 | l >>> 24) & 16711935 | (l << 24 | l >>> 8) & 4278255360; + d.sigBytes = 4 * (q.length + 1); + this._process(); + d = this._hash; + q = d.words; + for (l = 0; 4 > l; l++) { + p = q[l], + q[l] = (p << 8 | p >>> 24) & 16711935 | (p << 24 | p >>> 8) & 4278255360 + } + return d + }, + clone: function() { + var d = j.clone.call(this); + d._hash = this._hash.clone(); + return d + } + }); + m.MD5 = j._createHelper(a); + m.HmacMD5 = j._createHmacHelper(a) +} +)(Math); +(function() { + var b = CryptoJS + , e = b.lib + , f = e.Base + , a = e.WordArray + , e = b.algo + , c = e.EvpKDF = f.extend({ + cfg: f.extend({ + keySize: 4, + hasher: e.MD5, + iterations: 1 + }), + init: function(g) { + this.cfg = this.cfg.extend(g) + }, + compute: function(k, g) { + for (var i = this.cfg, t = i.hasher.create(), l = a.create(), o = l.words, h = i.keySize, i = i.iterations; o.length < h; ) { + j && t.update(j); + var j = t.update(k).finalize(g); + t.reset(); + for (var m = 1; m < i; m++) { + j = t.finalize(j), + t.reset() + } + l.concat(j) + } + l.sigBytes = 4 * h; + return l + } + }); + b.EvpKDF = function(i, g, h) { + return c.create(h).compute(i, g) + } +} +)(); +CryptoJS.lib.Cipher || function(B) { + var g = CryptoJS + , j = g.lib + , i = j.Base + , D = j.WordArray + , C = j.BufferedBlockAlgorithm + , e = g.enc.Base64 + , z = g.algo.EvpKDF + , A = j.Cipher = C.extend({ + cfg: i.extend(), + createEncryptor: function(c, b) { + return this.create(this._ENC_XFORM_MODE, c, b) + }, + createDecryptor: function(c, b) { + return this.create(this._DEC_XFORM_MODE, c, b) + }, + init: function(l, d, c) { + this.cfg = this.cfg.extend(c); + this._xformMode = l; + this._key = d; + this.reset() + }, + reset: function() { + C.reset.call(this); + this._doReset() + }, + process: function(a) { + this._append(a); + return this._process() + }, + finalize: function(a) { + a && this._append(a); + return this._doFinalize() + }, + keySize: 4, + ivSize: 4, + _ENC_XFORM_MODE: 1, + _DEC_XFORM_MODE: 2, + _createHelper: function(a) { + return { + encrypt: function(c, l, n) { + return ("string" == typeof l ? k : o).encrypt(a, c, l, n) + }, + decrypt: function(c, l, n) { + return ("string" == typeof l ? k : o).decrypt(a, c, l, n) + } + } + } + }); + j.StreamCipher = A.extend({ + _doFinalize: function() { + return this._process(!0) + }, + blockSize: 1 + }); + var m = g.mode = {} + , y = function(p, n, l) { + var r = this._iv; + r ? this._iv = B : r = this._prevBlock; + for (var q = 0; q < l; q++) { + p[n + q] ^= r[q] + } + } + , f = (j.BlockCipherMode = i.extend({ + createEncryptor: function(c, b) { + return this.Encryptor.create(c, b) + }, + createDecryptor: function(c, b) { + return this.Decryptor.create(c, b) + }, + init: function(c, b) { + this._cipher = c; + this._iv = b + } + })).extend(); + f.Encryptor = f.extend({ + processBlock: function(n, l) { + var d = this._cipher + , p = d.blockSize; + y.call(this, n, l, p); + d.encryptBlock(n, l); + this._prevBlock = n.slice(l, l + p) + } + }); + f.Decryptor = f.extend({ + processBlock: function(p, n) { + var l = this._cipher + , r = l.blockSize + , q = p.slice(n, n + r); + l.decryptBlock(p, n); + y.call(this, p, n, r); + this._prevBlock = q + } + }); + m = m.CBC = f; + f = (g.pad = {}).Pkcs7 = { + pad: function(r, p) { + for (var u = 4 * p, u = u - r.sigBytes % u, s = u << 24 | u << 16 | u << 8 | u, q = [], t = 0; t < u; t += 4) { + q.push(s) + } + u = D.create(q, u); + r.concat(u) + }, + unpad: function(b) { + b.sigBytes -= b.words[b.sigBytes - 1 >>> 2] & 255 + } + }; + j.BlockCipher = A.extend({ + cfg: A.cfg.extend({ + mode: m, + padding: f + }), + reset: function() { + A.reset.call(this); + var l = this.cfg + , d = l.iv + , l = l.mode; + if (this._xformMode == this._ENC_XFORM_MODE) { + var n = l.createEncryptor + } else { + n = l.createDecryptor, + this._minBufferSize = 1 + } + this._mode = n.call(l, this, d && d.words) + }, + _doProcessBlock: function(d, c) { + this._mode.processBlock(d, c) + }, + _doFinalize: function() { + var d = this.cfg.padding; + if (this._xformMode == this._ENC_XFORM_MODE) { + d.pad(this._data, this.blockSize); + var c = this._process(!0) + } else { + c = this._process(!0), + d.unpad(c) + } + return c + }, + blockSize: 4 + }); + var h = j.CipherParams = i.extend({ + init: function(b) { + this.mixIn(b) + }, + toString: function(b) { + return (b || this.formatter).stringify(this) + } + }) + , m = (g.format = {}).OpenSSL = { + stringify: function(d) { + var c = d.ciphertext; + d = d.salt; + return (d ? D.create([1398893684, 1701076831]).concat(d).concat(c) : c).toString(e) + }, + parse: function(l) { + l = e.parse(l); + var d = l.words; + if (1398893684 == d[0] && 1701076831 == d[1]) { + var n = D.create(d.slice(2, 4)); + d.splice(0, 4); + l.sigBytes -= 16 + } + return h.create({ + ciphertext: l, + salt: n + }) + } + } + , o = j.SerializableCipher = i.extend({ + cfg: i.extend({ + format: m + }), + encrypt: function(q, n, s, r) { + r = this.cfg.extend(r); + var p = q.createEncryptor(s, r); + n = p.finalize(n); + p = p.cfg; + return h.create({ + ciphertext: n, + key: s, + iv: p.iv, + algorithm: q, + mode: p.mode, + padding: p.padding, + blockSize: q.blockSize, + formatter: r.format + }) + }, + decrypt: function(n, l, q, p) { + p = this.cfg.extend(p); + l = this._parse(l, p.format); + return n.createDecryptor(q, p).finalize(l.ciphertext) + }, + _parse: function(d, c) { + return "string" == typeof d ? c.parse(d, this) : d + } + }) + , g = (g.kdf = {}).OpenSSL = { + execute: function(n, l, q, p) { + p || (p = D.random(8)); + n = z.create({ + keySize: l + q + }).compute(n, p); + q = D.create(n.words.slice(l), 4 * q); + n.sigBytes = 4 * l; + return h.create({ + key: n, + iv: q, + salt: p + }) + } + } + , k = j.PasswordBasedCipher = o.extend({ + cfg: o.cfg.extend({ + kdf: g + }), + encrypt: function(a, q, p, n) { + n = this.cfg.extend(n); + p = n.kdf.execute(p, a.keySize, a.ivSize); + n.iv = p.iv; + a = o.encrypt.call(this, a, q, p.key, n); + a.mixIn(p); + return a + }, + decrypt: function(a, q, p, n) { + n = this.cfg.extend(n); + q = this._parse(q, n.format); + p = n.kdf.execute(p, a.keySize, a.ivSize, q.salt); + n.iv = p.iv; + return o.decrypt.call(this, a, q, p.key, n) + } + }) +}(); +(function() { + for (var C = CryptoJS, K = C.lib.BlockCipher, Q = C.algo, M = [], E = [], D = [], I = [], m = [], A = [], S = [], h = [], J = [], L = [], T = [], R = 0; 256 > R; R++) { + T[R] = 128 > R ? R << 1 : R << 1 ^ 283 + } + for (var P = 0, O = 0, R = 0; 256 > R; R++) { + var N = O ^ O << 1 ^ O << 2 ^ O << 3 ^ O << 4 + , N = N >>> 8 ^ N & 255 ^ 99; + M[P] = N; + E[N] = P; + var f = T[P] + , B = T[f] + , o = T[B] + , g = 257 * T[N] ^ 16843008 * N; + D[P] = g << 24 | g >>> 8; + I[P] = g << 16 | g >>> 16; + m[P] = g << 8 | g >>> 24; + A[P] = g; + g = 16843009 * o ^ 65537 * B ^ 257 * f ^ 16843008 * P; + S[N] = g << 24 | g >>> 8; + h[N] = g << 16 | g >>> 16; + J[N] = g << 8 | g >>> 24; + L[N] = g; + P ? (P = f ^ T[T[T[o ^ f]]], + O ^= T[T[O]]) : P = O = 1 + } + var i = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54] + , Q = Q.AES = K.extend({ + _doReset: function() { + for (var b = this._key, r = b.words, q = b.sigBytes / 4, b = 4 * ((this._nRounds = q + 6) + 1), p = this._keySchedule = [], n = 0; n < b; n++) { + if (n < q) { + p[n] = r[n] + } else { + var l = p[n - 1]; + n % q ? 6 < q && 4 == n % q && (l = M[l >>> 24] << 24 | M[l >>> 16 & 255] << 16 | M[l >>> 8 & 255] << 8 | M[l & 255]) : (l = l << 8 | l >>> 24, + l = M[l >>> 24] << 24 | M[l >>> 16 & 255] << 16 | M[l >>> 8 & 255] << 8 | M[l & 255], + l ^= i[n / q | 0] << 24); + p[n] = p[n - q] ^ l + } + } + r = this._invKeySchedule = []; + for (q = 0; q < b; q++) { + n = b - q, + l = q % 4 ? p[n] : p[n - 4], + r[q] = 4 > q || 4 >= n ? l : S[M[l >>> 24]] ^ h[M[l >>> 16 & 255]] ^ J[M[l >>> 8 & 255]] ^ L[M[l & 255]] + } + }, + encryptBlock: function(d, c) { + this._doCryptBlock(d, c, this._keySchedule, D, I, m, A, M) + }, + decryptBlock: function(b, j) { + var e = b[j + 1]; + b[j + 1] = b[j + 3]; + b[j + 3] = e; + this._doCryptBlock(b, j, this._invKeySchedule, S, h, J, L, E); + e = b[j + 1]; + b[j + 1] = b[j + 3]; + b[j + 3] = e + }, + _doCryptBlock: function(ac, ab, aa, Z, Y, U, G, X) { + for (var F = this._nRounds, W = ac[ab] ^ aa[0], V = ac[ab + 1] ^ aa[1], H = ac[ab + 2] ^ aa[2], z = ac[ab + 3] ^ aa[3], y = 4, w = 1; w < F; w++) { + var x = Z[W >>> 24] ^ Y[V >>> 16 & 255] ^ U[H >>> 8 & 255] ^ G[z & 255] ^ aa[y++] + , v = Z[V >>> 24] ^ Y[H >>> 16 & 255] ^ U[z >>> 8 & 255] ^ G[W & 255] ^ aa[y++] + , u = Z[H >>> 24] ^ Y[z >>> 16 & 255] ^ U[W >>> 8 & 255] ^ G[V & 255] ^ aa[y++] + , z = Z[z >>> 24] ^ Y[W >>> 16 & 255] ^ U[V >>> 8 & 255] ^ G[H & 255] ^ aa[y++] + , W = x + , V = v + , H = u + } + x = (X[W >>> 24] << 24 | X[V >>> 16 & 255] << 16 | X[H >>> 8 & 255] << 8 | X[z & 255]) ^ aa[y++]; + v = (X[V >>> 24] << 24 | X[H >>> 16 & 255] << 16 | X[z >>> 8 & 255] << 8 | X[W & 255]) ^ aa[y++]; + u = (X[H >>> 24] << 24 | X[z >>> 16 & 255] << 16 | X[W >>> 8 & 255] << 8 | X[V & 255]) ^ aa[y++]; + z = (X[z >>> 24] << 24 | X[W >>> 16 & 255] << 16 | X[V >>> 8 & 255] << 8 | X[H & 255]) ^ aa[y++]; + ac[ab] = x; + ac[ab + 1] = v; + ac[ab + 2] = u; + ac[ab + 3] = z + }, + keySize: 8 + }); + C.AES = K._createHelper(Q) +} +)(); diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/PyExecjsDemo/run_aes.py b/3-奇⻔遁甲调用 JavaScript 执行代码/PyExecjsDemo/run_aes.py new file mode 100644 index 0000000..94a70c8 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/PyExecjsDemo/run_aes.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# @时间 : 2019-11-10 00:00 +# @作者 : 陈祥安 +# @文件名 : run_aes.py +# @公众号: Python学习开发 +from pprint import pprint + +import execjs +import pathlib +import os + +js_path = pathlib.Path(os.path.abspath(os.path.dirname(__file__))) +js_path = js_path / "crypto.js" +with js_path.open('r', encoding="utf-8") as f: + script = f.read() + +c = "1234" + +# 传入python中的变量 +add = (''' +aesEncrypt = function() { + result={} + var t = CryptoJS.MD5("login.xxx.com"), + i = CryptoJS.enc.Utf8.parse(t), + r = CryptoJS.enc.Utf8.parse("1234567812345678"), + u = CryptoJS.AES.encrypt(''' + "'{}'".format(c) + ''',i, { + iv: r + }); + result.t=t.toString() + result.i =i.toString() + result.r =r.toString() + result.u =u.toString() + return result +}; +''') +script = script + add +print("script",script) + + +x = execjs.compile(script) +result = x.call("aesEncrypt") +print(result) diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/__init__.py b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/__init__.py new file mode 100644 index 0000000..6766533 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# @Time : 2019-10-27 21:34 +# @Author : cxa +# @File : __init__.py.py +# @Software: PyCharm \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/demo.py b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/demo.py new file mode 100644 index 0000000..51061cf --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/demo.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# @Time : 2019-10-27 22:01 +# @Author : cxa +# @File : demo.py +# @Software: PyCharm +from pyppeteer import launch +import asyncio + + +def get_text(id,attr): + ###  拼接字符串注意{}要写出{{}} + script=(""" + let id='{id}'; + let attr='{attr}'; + let supporter ="chrome"; + const run=function(){{ + let all_str = $(id).getAttribute(attr) + let end_index=supporter.length+58 + Base64._keyStr = all_str.substring(0, end_index) + let charset = all_str.substring(64, all_str.length) + let encoded = Base64.decode(charset,supporter); + return encoded +}} + run() + """).format(id=id,attr=attr) + return script + + + +async def run(): + browser = await launch({"headless": True}) + page = await browser.newPage() + await page.goto('http://127.0.0.1:5002/') + script = get_text("base64","data") + text = await page.evaluate(script) + + print(text) + return text + + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(run()) diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/my_base64.py b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/my_base64.py new file mode 100644 index 0000000..f96fa5a --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/my_base64.py @@ -0,0 +1,87 @@ +import string +import random + +# base 字符集 + + +base64_charset = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/' +base64_charset_list = list(base64_charset) +random.shuffle(base64_charset_list) +base64_charset = ''.join(base64_charset_list) + + +def encode(orgin_string): + """ + 将bytes类型编码为base64 + :param origin_bytes:需要编码的bytes + :return:base64字符串 + """ + + origin_bytes = orgin_string.encode() + # 将每一位bytes转换为二进制字符串 + base64_bytes = [f"{str(bin(b)).replace('0b', ''):0>8}" for b in origin_bytes] + + resp = '' + nums = len(base64_bytes) // 3 + remain = len(base64_bytes) % 3 + + integral_part = base64_bytes[0:3 * nums] + while integral_part: + # 取三个字节,以每6比特,转换为4个整数 + tmp_unit = ''.join(integral_part[0:3]) + tmp_unit = [int(tmp_unit[x: x + 6], 2) for x in [0, 6, 12, 18]] + # 取对应base64字符 + resp += ''.join([base64_charset[i] for i in tmp_unit]) + integral_part = integral_part[3:] + + if remain: + # 补齐三个字节,每个字节补充 0000 0000 + remain_part = ''.join(base64_bytes[3 * nums:]) + (3 - remain) * '0' * 8 + # 取三个字节,以每6比特,转换为4个整数 + # 剩余1字节可构造2个base64字符,补充==;剩余2字节可构造3个base64字符,补充= + tmp_unit = [int(remain_part[x: x + 6], 2) for x in [0, 6, 12, 18]][:remain + 1] + resp += ''.join([base64_charset[i] for i in tmp_unit]) + (3 - remain) * '=' + + return resp, base64_charset + + +def decode(base64_str, charset): + """ + 解码base64字符串 + :param base64_str:base64字符串 + :return:解码后的bytearray;若入参不是合法base64字符串,返回空bytearray + """ + + # 对每一个base64字符取下标索引,并转换为6为二进制字符串 + base64_bytes = [f"{str(bin(charset.index(s))).replace('0b', ''):0>6}" for s in base64_str if + s != '='] + print("base64_bytes", base64_bytes) + resp = bytearray() + nums = len(base64_bytes) // 4 + remain = len(base64_bytes) % 4 + integral_part = base64_bytes[0:4 * nums] + + while integral_part: + # 取4个6位base64字符,作为3个字节 + tmp_unit = ''.join(integral_part[0:4]) + tmp_unit = [int(tmp_unit[x: x + 8], 2) for x in [0, 8, 16]] + for i in tmp_unit: + resp.append(i) + integral_part = integral_part[4:] + + if remain: + remain_part = ''.join(base64_bytes[nums * 4:]) + tmp_unit = [int(remain_part[i * 8:(i + 1) * 8], 2) for i in range(remain - 1)] + for i in tmp_unit: + resp.append(i) + + return str(bytes(resp),encoding="utf-8"), charset + + + + +if __name__ == '__main__': + a = encode("NightTeam") + b = decode(a[0], a[1]) + print(a) + print(b) diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/server.py b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/server.py new file mode 100644 index 0000000..08f33a2 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/server.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# @时间 : 2019-12-30 00:18 +# @作者 : 陈祥安 +# @文件名 : server.py +# @公众号: Python学习开发 + + +# -*- coding: utf-8 -*- +# @Time : 2019-10-14 16:22 +# @Author : cxa +# @File : server.py +# @Software: PyCharm + +from flask import Flask, render_template +import random +import my_base64 +app = Flask(__name__) + +text = """ +Life is not about waiting for the storm to pass. it's about learning to dance in the rain. +生活不是等待暴风雨过去,而是要学会在雨中跳舞。 +What is insistence? That is, day after day, you tell yourself to go on for another day. +什么是坚持?那就是,一天又一天,你告诉自己,再坚持一天。 +I don't want to earn my living. I want to live. --Oscar·Wilde. +我不想谋生。我想生活。--奥斯卡·王尔德。 +Life has not the best choice, but to undertake your choice. +生活不是拥有最好的选择,而是承担你的选择。 +It takes courage to follow your mind. But it takes everything to follow your heart. +跟着理智走,要有勇气;跟着感觉走,要有倾其所有的决心。 +You may be our of my sight, but never out of my mind. +""" +text_gen = [item for item in text.split("\n") if item] + + +@app.route('/') +def index(): + origin_text = random.choice(text_gen).strip() + + text_encode, charset = my_base64.encode(origin_text) + variable = {"text": text_encode, "charset": charset} + + return render_template("index.html", variable=variable) + + +@app.errorhandler(404) +def miss(e): + return render_template('404.html'), 404 + + +@app.errorhandler(500) +def error(e): + return render_template('500.html'), 500 + + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5002, debug=True) diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/static/js/base64.js b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/static/js/base64.js new file mode 100644 index 0000000..ccd9327 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/static/js/base64.js @@ -0,0 +1,162 @@ +function detectAuto() { + if (/HeadlessChrome/.test(navigator.userAgent) || // ua test + !window.chrome || // headless test + navigator.plugins.length === 0 || //plugins test + // languages test + !navigator.languages || navigator.languages.length === 0) { + return true; + }} +var Base64 = { + + // private property + _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" + + // public method for encoding + , encode: function (input) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + + input = Base64._utf8_encode(input); + + while (i < input.length) { + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + + output = output + + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); + } // Whend + + return output; + } // End Function encode + + + // public method for decoding + , decode: function (input,supporter) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + while (i < input.length) { + enc1 = this._keyStr.indexOf(input.charAt(i++)); + enc2 = this._keyStr.indexOf(input.charAt(i++)); + enc3 = this._keyStr.indexOf(input.charAt(i++)); + enc4 = this._keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << supporter.length) | enc4; + + output = output + String.fromCharCode(chr1); + + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + + } // Whend + + output = Base64._utf8_decode(output); + + return output; + } // End Function decode + + + // private method for UTF-8 encoding + , _utf8_encode: function (string) { + var utftext = ""; + string = string.replace(/\r\n/g, "\n"); + + for (var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } else if ((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } // Next n + + return utftext; + } // End Function _utf8_encode + + // private method for UTF-8 decoding + , _utf8_decode: function (utftext) { + var string = ""; + var i = 0; + var c, c1, c2, c3; + c = c1 = c2 = 0; + + while (i < utftext.length) { + c = utftext.charCodeAt(i); + + if (c < 128) { + string += String.fromCharCode(c); + i++; + } else if ((c > 191) && (c < 224)) { + c2 = utftext.charCodeAt(i + 1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } else { + c2 = utftext.charCodeAt(i + 1); + c3 = utftext.charCodeAt(i + 2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + + } // Whend + + return string; + }, // End Function _utf8_decode + run: function (id, attr,supporter) { + let all_str = $(id).getAttribute(attr) + let end_index=supporter.length+58 + Base64._keyStr = all_str.substring(0, end_index) + let charset = all_str.substring(64, all_str.length) + let encoded = Base64.decode(charset,supporter); + $(id).value = encoded; + } + +} +$ = function (id) { + return document.getElementById(id) +}; + +function doit() { + if(!detect){ + Base64.run('base64', 'data',"chrome") + } + +} +let detect=detectAuto() +if (detect){ +window.onload =doit +}else{ + let div=document.createElement("div") + div.innerHTML ="禁止爬虫" + document.body.appendChild(div) +} diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/static/js/browser_check.js b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/static/js/browser_check.js new file mode 100644 index 0000000..e879baf --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/static/js/browser_check.js @@ -0,0 +1,143 @@ +export default function BrowserType() { + // 权重:系统 + 系统版本 > 平台 > 内核 + 载体 + 内核版本 + 载体版本 > 外壳 + 外壳版本 + const ua = navigator.userAgent.toLowerCase(); + const testUa = regexp => regexp.test(ua); + const testVs = regexp => ua.match(regexp) + .toString() + .replace(/[^0-9|_.]/g, "") + .replace(/_/g, "."); + // 系统 + let system = "unknow"; + if (testUa(/windows|win32|win64|wow32|wow64/g)) { + system = "windows"; // windows系统 + } else if (testUa(/macintosh|macintel/g)) { + system = "macos"; // macos系统 + } else if (testUa(/x11/g)) { + system = "linux"; // linux系统 + } else if (testUa(/android|adr/g)) { + system = "android"; // android系统 + } else if (testUa(/ios|iphone|ipad|ipod|iwatch/g)) { + system = "ios"; // ios系统 + } + // 系统版本 + let systemVs = "unknow"; + if (system === "windows") { + if (testUa(/windows nt 5.0|windows 2000/g)) { + systemVs = "2000"; + } else if (testUa(/windows nt 5.1|windows xp/g)) { + systemVs = "xp"; + } else if (testUa(/windows nt 5.2|windows 2003/g)) { + systemVs = "2003"; + } else if (testUa(/windows nt 6.0|windows vista/g)) { + systemVs = "vista"; + } else if (testUa(/windows nt 6.1|windows 7/g)) { + systemVs = "7"; + } else if (testUa(/windows nt 6.2|windows 8/g)) { + systemVs = "8"; + } else if (testUa(/windows nt 6.3|windows 8.1/g)) { + systemVs = "8.1"; + } else if (testUa(/windows nt 10.0|windows 10/g)) { + systemVs = "10"; + } + } else if (system === "macos") { + systemVs = testVs(/os x [\d._]+/g); + } else if (system === "android") { + systemVs = testVs(/android [\d._]+/g); + } else if (system === "ios") { + systemVs = testVs(/os [\d._]+/g); + } + // 平台 + let platform = "unknow"; + if (system === "windows" || system === "macos" || system === "linux") { + platform = "desktop"; // 桌面端 + } else if (system === "android" || system === "ios" || testUa(/mobile/g)) { + platform = "mobile"; // 移动端 + } + // 内核和载体 + let engine = "unknow"; + let supporter = "unknow"; + if (testUa(/applewebkit/g)) { + engine = "webkit"; // webkit内核 + if (testUa(/edge/g)) { + supporter = "edge"; // edge浏览器 + } else if (testUa(/opr/g)) { + supporter = "opera"; // opera浏览器 + } else if (testUa(/chrome/g)) { + supporter = "chrome"; // chrome浏览器 + } else if (testUa(/safari/g)) { + supporter = "safari"; // safari浏览器 + } + } else if (testUa(/gecko/g) && testUa(/firefox/g)) { + engine = "gecko"; // gecko内核 + supporter = "firefox"; // firefox浏览器 + } else if (testUa(/presto/g)) { + engine = "presto"; // presto内核 + supporter = "opera"; // opera浏览器 + } else if (testUa(/trident|compatible|msie/g)) { + engine = "trident"; // trident内核 + supporter = "iexplore"; // iexplore浏览器 + } + // 内核版本 + let engineVs = "unknow"; + if (engine === "webkit") { + engineVs = testVs(/applewebkit\/[\d._]+/g); + } else if (engine === "gecko") { + engineVs = testVs(/gecko\/[\d._]+/g); + } else if (engine === "presto") { + engineVs = testVs(/presto\/[\d._]+/g); + } else if (engine === "trident") { + engineVs = testVs(/trident\/[\d._]+/g); + } + // 载体版本 + let supporterVs = "unknow"; + if (supporter === "chrome") { + supporterVs = testVs(/chrome\/[\d._]+/g); + } else if (supporter === "safari") { + supporterVs = testVs(/version\/[\d._]+/g); + } else if (supporter === "firefox") { + supporterVs = testVs(/firefox\/[\d._]+/g); + } else if (supporter === "opera") { + supporterVs = testVs(/opr\/[\d._]+/g); + } else if (supporter === "iexplore") { + supporterVs = testVs(/(msie [\d._]+)|(rv:[\d._]+)/g); + } else if (supporter === "edge") { + supporterVs = testVs(/edge\/[\d._]+/g); + } + // 外壳和外壳版本 + let shell = "none"; + let shellVs = "unknow"; + if (testUa(/micromessenger/g)) { + shell = "wechat"; // 微信浏览器 + shellVs = testVs(/micromessenger\/[\d._]+/g); + } else if (testUa(/qqbrowser/g)) { + shell = "qq"; // QQ浏览器 + shellVs = testVs(/qqbrowser\/[\d._]+/g); + } else if (testUa(/ucbrowser/g)) { + shell = "uc"; // UC浏览器 + shellVs = testVs(/ucbrowser\/[\d._]+/g); + } else if (testUa(/qihu 360se/g)) { + shell = "360"; // 360浏览器(无版本) + } else if (testUa(/2345explorer/g)) { + shell = "2345"; // 2345浏览器 + shellVs = testVs(/2345explorer\/[\d._]+/g); + } else if (testUa(/metasr/g)) { + shell = "sougou"; // 搜狗浏览器(无版本) + } else if (testUa(/lbbrowser/g)) { + shell = "liebao"; // 猎豹浏览器(无版本) + } else if (testUa(/maxthon/g)) { + shell = "maxthon"; // 遨游浏览器 + shellVs = testVs(/maxthon\/[\d._]+/g); + } + return Object.assign({ + engine, // webkit gecko presto trident + engineVs, + platform, // desktop mobile + supporter, // chrome safari firefox opera iexplore edge + supporterVs, + system, // windows macos linux android ios + systemVs + }, shell === "none" ? {} : { + shell, // wechat qq uc 360 2345 sougou liebao maxthon + shellVs + }); +} \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/templates/404.html b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/templates/404.html new file mode 100644 index 0000000..9eb35aa --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/templates/404.html @@ -0,0 +1,10 @@ + + + + + Title + + +

链接错误,请重新确认

+ + \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/templates/500.html b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/templates/500.html new file mode 100644 index 0000000..4c1caf5 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/templates/500.html @@ -0,0 +1,10 @@ + + + + + Title + + +

请使用post请求,谢谢。

+ + \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/templates/index.html b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/templates/index.html new file mode 100644 index 0000000..c674112 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/PyppeteerDemo/templates/index.html @@ -0,0 +1,14 @@ + + + + + 每日一句 + + + +
+ +
+ + diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/__init__.py b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/__init__.py new file mode 100644 index 0000000..ac4f670 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# @Time : 2019-10-27 20:56 +# @Author : cxa +# @File : __init__.py.py +# @Software: PyCharm \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/demo.py b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/demo.py new file mode 100644 index 0000000..54f1461 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/demo.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# @Time : 2019-10-27 20:56 +# @Author : cxa +# @File : demo.py +# @Software: PyCharm +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.common.action_chains import ActionChains +from selenium.webdriver.common.keys import Keys +from selenium.webdriver.chrome.options import Options +import time + + +def get_text(id,attr): + ###  拼接字符串注意{}要写出{{}} + script=(""" + let bt=BrowserType(); + let id='{id}'; + let attr='{attr}'; + let supporter =bt.supporter; + const run=function(){{ + let all_str = $(id).getAttribute(attr) + let end_index=supporter.length+58 + Base64._keyStr = all_str.substring(0, end_index) + let charset = all_str.substring(64, all_str.length) + let encoded = Base64.decode(charset,supporter); + return encoded +}} + return run() + """).format(id=id,attr=attr) + return script + + + +chrome_option = Options() +chrome_option.add_argument("--headless") +chrome_option.add_argument("--disable-gpu") +chrome_option.add_argument('--ignore-certificate-errors') # SSL保存 +browser = webdriver.Chrome(options=chrome_option) +wait = WebDriverWait(browser, 10) +# 启动浏览器,获取网页源代码 +mainUrl = "http://127.0.0.1:5002/" +browser.get(mainUrl) +result=browser.execute_script(get_text("base64","data")) +print(result) +time.sleep(10) +browser.quit() diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/my_base64.py b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/my_base64.py new file mode 100644 index 0000000..f96fa5a --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/my_base64.py @@ -0,0 +1,87 @@ +import string +import random + +# base 字符集 + + +base64_charset = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/' +base64_charset_list = list(base64_charset) +random.shuffle(base64_charset_list) +base64_charset = ''.join(base64_charset_list) + + +def encode(orgin_string): + """ + 将bytes类型编码为base64 + :param origin_bytes:需要编码的bytes + :return:base64字符串 + """ + + origin_bytes = orgin_string.encode() + # 将每一位bytes转换为二进制字符串 + base64_bytes = [f"{str(bin(b)).replace('0b', ''):0>8}" for b in origin_bytes] + + resp = '' + nums = len(base64_bytes) // 3 + remain = len(base64_bytes) % 3 + + integral_part = base64_bytes[0:3 * nums] + while integral_part: + # 取三个字节,以每6比特,转换为4个整数 + tmp_unit = ''.join(integral_part[0:3]) + tmp_unit = [int(tmp_unit[x: x + 6], 2) for x in [0, 6, 12, 18]] + # 取对应base64字符 + resp += ''.join([base64_charset[i] for i in tmp_unit]) + integral_part = integral_part[3:] + + if remain: + # 补齐三个字节,每个字节补充 0000 0000 + remain_part = ''.join(base64_bytes[3 * nums:]) + (3 - remain) * '0' * 8 + # 取三个字节,以每6比特,转换为4个整数 + # 剩余1字节可构造2个base64字符,补充==;剩余2字节可构造3个base64字符,补充= + tmp_unit = [int(remain_part[x: x + 6], 2) for x in [0, 6, 12, 18]][:remain + 1] + resp += ''.join([base64_charset[i] for i in tmp_unit]) + (3 - remain) * '=' + + return resp, base64_charset + + +def decode(base64_str, charset): + """ + 解码base64字符串 + :param base64_str:base64字符串 + :return:解码后的bytearray;若入参不是合法base64字符串,返回空bytearray + """ + + # 对每一个base64字符取下标索引,并转换为6为二进制字符串 + base64_bytes = [f"{str(bin(charset.index(s))).replace('0b', ''):0>6}" for s in base64_str if + s != '='] + print("base64_bytes", base64_bytes) + resp = bytearray() + nums = len(base64_bytes) // 4 + remain = len(base64_bytes) % 4 + integral_part = base64_bytes[0:4 * nums] + + while integral_part: + # 取4个6位base64字符,作为3个字节 + tmp_unit = ''.join(integral_part[0:4]) + tmp_unit = [int(tmp_unit[x: x + 8], 2) for x in [0, 8, 16]] + for i in tmp_unit: + resp.append(i) + integral_part = integral_part[4:] + + if remain: + remain_part = ''.join(base64_bytes[nums * 4:]) + tmp_unit = [int(remain_part[i * 8:(i + 1) * 8], 2) for i in range(remain - 1)] + for i in tmp_unit: + resp.append(i) + + return str(bytes(resp),encoding="utf-8"), charset + + + + +if __name__ == '__main__': + a = encode("NightTeam") + b = decode(a[0], a[1]) + print(a) + print(b) diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/server.py b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/server.py new file mode 100644 index 0000000..08f33a2 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/server.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# @时间 : 2019-12-30 00:18 +# @作者 : 陈祥安 +# @文件名 : server.py +# @公众号: Python学习开发 + + +# -*- coding: utf-8 -*- +# @Time : 2019-10-14 16:22 +# @Author : cxa +# @File : server.py +# @Software: PyCharm + +from flask import Flask, render_template +import random +import my_base64 +app = Flask(__name__) + +text = """ +Life is not about waiting for the storm to pass. it's about learning to dance in the rain. +生活不是等待暴风雨过去,而是要学会在雨中跳舞。 +What is insistence? That is, day after day, you tell yourself to go on for another day. +什么是坚持?那就是,一天又一天,你告诉自己,再坚持一天。 +I don't want to earn my living. I want to live. --Oscar·Wilde. +我不想谋生。我想生活。--奥斯卡·王尔德。 +Life has not the best choice, but to undertake your choice. +生活不是拥有最好的选择,而是承担你的选择。 +It takes courage to follow your mind. But it takes everything to follow your heart. +跟着理智走,要有勇气;跟着感觉走,要有倾其所有的决心。 +You may be our of my sight, but never out of my mind. +""" +text_gen = [item for item in text.split("\n") if item] + + +@app.route('/') +def index(): + origin_text = random.choice(text_gen).strip() + + text_encode, charset = my_base64.encode(origin_text) + variable = {"text": text_encode, "charset": charset} + + return render_template("index.html", variable=variable) + + +@app.errorhandler(404) +def miss(e): + return render_template('404.html'), 404 + + +@app.errorhandler(500) +def error(e): + return render_template('500.html'), 500 + + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5002, debug=True) diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/static/js/base64.js b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/static/js/base64.js new file mode 100644 index 0000000..03e59f9 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/static/js/base64.js @@ -0,0 +1,293 @@ +function BrowserType() { + // 权重:系统 + 系统版本 > 平台 > 内核 + 载体 + 内核版本 + 载体版本 > 外壳 + 外壳版本 + const ua = navigator.userAgent.toLowerCase(); + const testUa = regexp => regexp.test(ua); + const testVs = regexp => ua.match(regexp) + .toString() + .replace(/[^0-9|_.]/g, "") + .replace(/_/g, "."); + // 系统 + let system = "unknow"; + if (testUa(/windows|win32|win64|wow32|wow64/g)) { + system = "windows"; // windows系统 + } else if (testUa(/macintosh|macintel/g)) { + system = "macos"; // macos系统 + } else if (testUa(/x11/g)) { + system = "linux"; // linux系统 + } else if (testUa(/android|adr/g)) { + system = "android"; // android系统 + } else if (testUa(/ios|iphone|ipad|ipod|iwatch/g)) { + system = "ios"; // ios系统 + } + // 系统版本 + let systemVs = "unknow"; + if (system === "windows") { + if (testUa(/windows nt 5.0|windows 2000/g)) { + systemVs = "2000"; + } else if (testUa(/windows nt 5.1|windows xp/g)) { + systemVs = "xp"; + } else if (testUa(/windows nt 5.2|windows 2003/g)) { + systemVs = "2003"; + } else if (testUa(/windows nt 6.0|windows vista/g)) { + systemVs = "vista"; + } else if (testUa(/windows nt 6.1|windows 7/g)) { + systemVs = "7"; + } else if (testUa(/windows nt 6.2|windows 8/g)) { + systemVs = "8"; + } else if (testUa(/windows nt 6.3|windows 8.1/g)) { + systemVs = "8.1"; + } else if (testUa(/windows nt 10.0|windows 10/g)) { + systemVs = "10"; + } + } else if (system === "macos") { + systemVs = testVs(/os x [\d._]+/g); + } else if (system === "android") { + systemVs = testVs(/android [\d._]+/g); + } else if (system === "ios") { + systemVs = testVs(/os [\d._]+/g); + } + // 平台 + let platform = "unknow"; + if (system === "windows" || system === "macos" || system === "linux") { + platform = "desktop"; // 桌面端 + } else if (system === "android" || system === "ios" || testUa(/mobile/g)) { + platform = "mobile"; // 移动端 + } + // 内核和载体 + let engine = "unknow"; + let supporter = "unknow"; + if (testUa(/applewebkit/g)) { + engine = "webkit"; // webkit内核 + if (testUa(/edge/g)) { + supporter = "edge"; // edge浏览器 + } else if (testUa(/opr/g)) { + supporter = "opera"; // opera浏览器 + } else if (testUa(/chrome/g)) { + supporter = "chrome"; // chrome浏览器 + } else if (testUa(/safari/g)) { + supporter = "safari"; // safari浏览器 + } + } else if (testUa(/gecko/g) && testUa(/firefox/g)) { + engine = "gecko"; // gecko内核 + supporter = "firefox"; // firefox浏览器 + } else if (testUa(/presto/g)) { + engine = "presto"; // presto内核 + supporter = "opera"; // opera浏览器 + } else if (testUa(/trident|compatible|msie/g)) { + engine = "trident"; // trident内核 + supporter = "iexplore"; // iexplore浏览器 + } + // 内核版本 + let engineVs = "unknow"; + if (engine === "webkit") { + engineVs = testVs(/applewebkit\/[\d._]+/g); + } else if (engine === "gecko") { + engineVs = testVs(/gecko\/[\d._]+/g); + } else if (engine === "presto") { + engineVs = testVs(/presto\/[\d._]+/g); + } else if (engine === "trident") { + engineVs = testVs(/trident\/[\d._]+/g); + } + // 载体版本 + let supporterVs = "unknow"; + if (supporter === "chrome") { + supporterVs = testVs(/chrome\/[\d._]+/g); + } else if (supporter === "safari") { + supporterVs = testVs(/version\/[\d._]+/g); + } else if (supporter === "firefox") { + supporterVs = testVs(/firefox\/[\d._]+/g); + } else if (supporter === "opera") { + supporterVs = testVs(/opr\/[\d._]+/g); + } else if (supporter === "iexplore") { + supporterVs = testVs(/(msie [\d._]+)|(rv:[\d._]+)/g); + } else if (supporter === "edge") { + supporterVs = testVs(/edge\/[\d._]+/g); + } + // 外壳和外壳版本 + let shell = "none"; + let shellVs = "unknow"; + if (testUa(/micromessenger/g)) { + shell = "wechat"; // 微信浏览器 + shellVs = testVs(/micromessenger\/[\d._]+/g); + } else if (testUa(/qqbrowser/g)) { + shell = "qq"; // QQ浏览器 + shellVs = testVs(/qqbrowser\/[\d._]+/g); + } else if (testUa(/ucbrowser/g)) { + shell = "uc"; // UC浏览器 + shellVs = testVs(/ucbrowser\/[\d._]+/g); + } else if (testUa(/qihu 360se/g)) { + shell = "360"; // 360浏览器(无版本) + } else if (testUa(/2345explorer/g)) { + shell = "2345"; // 2345浏览器 + shellVs = testVs(/2345explorer\/[\d._]+/g); + } else if (testUa(/metasr/g)) { + shell = "sougou"; // 搜狗浏览器(无版本) + } else if (testUa(/lbbrowser/g)) { + shell = "liebao"; // 猎豹浏览器(无版本) + } else if (testUa(/maxthon/g)) { + shell = "maxthon"; // 遨游浏览器 + shellVs = testVs(/maxthon\/[\d._]+/g); + } + return Object.assign({ + engine, // webkit gecko presto trident + engineVs, + platform, // desktop mobile + supporter, // chrome safari firefox opera iexplore edge + supporterVs, + system, // windows macos linux android ios + systemVs + }, shell === "none" ? {} : { + shell, // wechat qq uc 360 2345 sougou liebao maxthon + shellVs + }); +} +var Base64 = { + + // private property + _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" + + // public method for encoding + , encode: function (input) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + + input = Base64._utf8_encode(input); + + while (i < input.length) { + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + + output = output + + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); + } // Whend + + return output; + } // End Function encode + + + // public method for decoding + , decode: function (input,supporter) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + while (i < input.length) { + enc1 = this._keyStr.indexOf(input.charAt(i++)); + enc2 = this._keyStr.indexOf(input.charAt(i++)); + enc3 = this._keyStr.indexOf(input.charAt(i++)); + enc4 = this._keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << supporter.length) | enc4; + + output = output + String.fromCharCode(chr1); + + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + + } // Whend + + output = Base64._utf8_decode(output); + + return output; + } // End Function decode + + + // private method for UTF-8 encoding + , _utf8_encode: function (string) { + var utftext = ""; + string = string.replace(/\r\n/g, "\n"); + + for (var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } else if ((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } // Next n + + return utftext; + } // End Function _utf8_encode + + // private method for UTF-8 decoding + , _utf8_decode: function (utftext) { + var string = ""; + var i = 0; + var c, c1, c2, c3; + c = c1 = c2 = 0; + + while (i < utftext.length) { + c = utftext.charCodeAt(i); + + if (c < 128) { + string += String.fromCharCode(c); + i++; + } else if ((c > 191) && (c < 224)) { + c2 = utftext.charCodeAt(i + 1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } else { + c2 = utftext.charCodeAt(i + 1); + c3 = utftext.charCodeAt(i + 2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + + } // Whend + + return string; + }, // End Function _utf8_decode + run: function (id, attr,supporter) { + let all_str = $(id).getAttribute(attr) + let end_index=supporter.length+58 + Base64._keyStr = all_str.substring(0, end_index) + let charset = all_str.substring(64, all_str.length) + let encoded = Base64.decode(charset,supporter); + $(id).value = encoded; + } + +} +$ = function (id) { + return document.getElementById(id) +}; + +function doit() { + let browser_type=BrowserType(); + console.log(browser_type) + let supporter =browser_type.supporter + if(supporter==="chrome"){ + Base64.run('base64', 'data',supporter) + } + +} +window.onload =doit \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/static/js/browser_check.js b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/static/js/browser_check.js new file mode 100644 index 0000000..e879baf --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/static/js/browser_check.js @@ -0,0 +1,143 @@ +export default function BrowserType() { + // 权重:系统 + 系统版本 > 平台 > 内核 + 载体 + 内核版本 + 载体版本 > 外壳 + 外壳版本 + const ua = navigator.userAgent.toLowerCase(); + const testUa = regexp => regexp.test(ua); + const testVs = regexp => ua.match(regexp) + .toString() + .replace(/[^0-9|_.]/g, "") + .replace(/_/g, "."); + // 系统 + let system = "unknow"; + if (testUa(/windows|win32|win64|wow32|wow64/g)) { + system = "windows"; // windows系统 + } else if (testUa(/macintosh|macintel/g)) { + system = "macos"; // macos系统 + } else if (testUa(/x11/g)) { + system = "linux"; // linux系统 + } else if (testUa(/android|adr/g)) { + system = "android"; // android系统 + } else if (testUa(/ios|iphone|ipad|ipod|iwatch/g)) { + system = "ios"; // ios系统 + } + // 系统版本 + let systemVs = "unknow"; + if (system === "windows") { + if (testUa(/windows nt 5.0|windows 2000/g)) { + systemVs = "2000"; + } else if (testUa(/windows nt 5.1|windows xp/g)) { + systemVs = "xp"; + } else if (testUa(/windows nt 5.2|windows 2003/g)) { + systemVs = "2003"; + } else if (testUa(/windows nt 6.0|windows vista/g)) { + systemVs = "vista"; + } else if (testUa(/windows nt 6.1|windows 7/g)) { + systemVs = "7"; + } else if (testUa(/windows nt 6.2|windows 8/g)) { + systemVs = "8"; + } else if (testUa(/windows nt 6.3|windows 8.1/g)) { + systemVs = "8.1"; + } else if (testUa(/windows nt 10.0|windows 10/g)) { + systemVs = "10"; + } + } else if (system === "macos") { + systemVs = testVs(/os x [\d._]+/g); + } else if (system === "android") { + systemVs = testVs(/android [\d._]+/g); + } else if (system === "ios") { + systemVs = testVs(/os [\d._]+/g); + } + // 平台 + let platform = "unknow"; + if (system === "windows" || system === "macos" || system === "linux") { + platform = "desktop"; // 桌面端 + } else if (system === "android" || system === "ios" || testUa(/mobile/g)) { + platform = "mobile"; // 移动端 + } + // 内核和载体 + let engine = "unknow"; + let supporter = "unknow"; + if (testUa(/applewebkit/g)) { + engine = "webkit"; // webkit内核 + if (testUa(/edge/g)) { + supporter = "edge"; // edge浏览器 + } else if (testUa(/opr/g)) { + supporter = "opera"; // opera浏览器 + } else if (testUa(/chrome/g)) { + supporter = "chrome"; // chrome浏览器 + } else if (testUa(/safari/g)) { + supporter = "safari"; // safari浏览器 + } + } else if (testUa(/gecko/g) && testUa(/firefox/g)) { + engine = "gecko"; // gecko内核 + supporter = "firefox"; // firefox浏览器 + } else if (testUa(/presto/g)) { + engine = "presto"; // presto内核 + supporter = "opera"; // opera浏览器 + } else if (testUa(/trident|compatible|msie/g)) { + engine = "trident"; // trident内核 + supporter = "iexplore"; // iexplore浏览器 + } + // 内核版本 + let engineVs = "unknow"; + if (engine === "webkit") { + engineVs = testVs(/applewebkit\/[\d._]+/g); + } else if (engine === "gecko") { + engineVs = testVs(/gecko\/[\d._]+/g); + } else if (engine === "presto") { + engineVs = testVs(/presto\/[\d._]+/g); + } else if (engine === "trident") { + engineVs = testVs(/trident\/[\d._]+/g); + } + // 载体版本 + let supporterVs = "unknow"; + if (supporter === "chrome") { + supporterVs = testVs(/chrome\/[\d._]+/g); + } else if (supporter === "safari") { + supporterVs = testVs(/version\/[\d._]+/g); + } else if (supporter === "firefox") { + supporterVs = testVs(/firefox\/[\d._]+/g); + } else if (supporter === "opera") { + supporterVs = testVs(/opr\/[\d._]+/g); + } else if (supporter === "iexplore") { + supporterVs = testVs(/(msie [\d._]+)|(rv:[\d._]+)/g); + } else if (supporter === "edge") { + supporterVs = testVs(/edge\/[\d._]+/g); + } + // 外壳和外壳版本 + let shell = "none"; + let shellVs = "unknow"; + if (testUa(/micromessenger/g)) { + shell = "wechat"; // 微信浏览器 + shellVs = testVs(/micromessenger\/[\d._]+/g); + } else if (testUa(/qqbrowser/g)) { + shell = "qq"; // QQ浏览器 + shellVs = testVs(/qqbrowser\/[\d._]+/g); + } else if (testUa(/ucbrowser/g)) { + shell = "uc"; // UC浏览器 + shellVs = testVs(/ucbrowser\/[\d._]+/g); + } else if (testUa(/qihu 360se/g)) { + shell = "360"; // 360浏览器(无版本) + } else if (testUa(/2345explorer/g)) { + shell = "2345"; // 2345浏览器 + shellVs = testVs(/2345explorer\/[\d._]+/g); + } else if (testUa(/metasr/g)) { + shell = "sougou"; // 搜狗浏览器(无版本) + } else if (testUa(/lbbrowser/g)) { + shell = "liebao"; // 猎豹浏览器(无版本) + } else if (testUa(/maxthon/g)) { + shell = "maxthon"; // 遨游浏览器 + shellVs = testVs(/maxthon\/[\d._]+/g); + } + return Object.assign({ + engine, // webkit gecko presto trident + engineVs, + platform, // desktop mobile + supporter, // chrome safari firefox opera iexplore edge + supporterVs, + system, // windows macos linux android ios + systemVs + }, shell === "none" ? {} : { + shell, // wechat qq uc 360 2345 sougou liebao maxthon + shellVs + }); +} \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/templates/404.html b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/templates/404.html new file mode 100644 index 0000000..9eb35aa --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/templates/404.html @@ -0,0 +1,10 @@ + + + + + Title + + +

链接错误,请重新确认

+ + \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/templates/500.html b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/templates/500.html new file mode 100644 index 0000000..4c1caf5 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/templates/500.html @@ -0,0 +1,10 @@ + + + + + Title + + +

请使用post请求,谢谢。

+ + \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/templates/index.html b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/templates/index.html new file mode 100644 index 0000000..c674112 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/SeleniumDemo/templates/index.html @@ -0,0 +1,14 @@ + + + + + 每日一句 + + + +
+ +
+ + diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/练习/get_data执行结果的前16位字符是.js b/3-奇⻔遁甲调用 JavaScript 执行代码/练习/get_data执行结果的前16位字符是.js new file mode 100644 index 0000000..6c7e9f0 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/练习/get_data执行结果的前16位字符是.js @@ -0,0 +1,471 @@ +function _0x2a7e5ao00a() { + const _0x227afe = { + 'yHOEV': 'unknow', + 'wzENk': function(_0x3ea4f9, _0x1d95e3) { + return _0x3ea4f9(_0x1d95e3); + }, + 'wsWEe': 'windows', + 'xTHMm': 'macos', + 'yavth': function(_0x136e2c, _0x288ce3) { + return _0x136e2c(_0x288ce3); + }, + 'azgCA': 'linux', + 'nGybX': function(_0x56f4ea, _0x281669) { + return _0x56f4ea(_0x281669); + }, + 'INJwr': 'ios', + 'hZWNh': function(_0x3a5bfd, _0x22a1f5) { + return _0x3a5bfd === _0x22a1f5; + }, + 'UQRFb': '2000', + 'wwUUs': function(_0x1e2526, _0x460646) { + return _0x1e2526(_0x460646); + }, + 'rqdHg': '2003', + 'RFYwz': '8.1', + 'VwpDM': function(_0xaa1cb5, _0xe1fb5) { + return _0xaa1cb5 === _0xe1fb5; + }, + 'ijcZr': 'android', + 'wsPCu': function(_0x4cffe7, _0x13c2c0) { + return _0x4cffe7(_0x13c2c0); + }, + 'CUddb': function(_0xf3d86b, _0x13613b) { + return _0xf3d86b === _0x13613b; + }, + 'UcAvE': function(_0x303653, _0x1050a9) { + return _0x303653 === _0x1050a9; + }, + 'UPKaK': 'desktop', + 'Teriw': function(_0x562472, _0x18365e) { + return _0x562472 === _0x18365e; + }, + 'bSheG': function(_0x736c40, _0x28fa8c) { + return _0x736c40(_0x28fa8c); + }, + 'VSVPX': 'mobile', + 'YLvkS': function(_0xcbe6ef, _0x62f17b) { + return _0xcbe6ef(_0x62f17b); + }, + 'IIJTU': 'webkit', + 'VnwxS': 'edge', + 'czVTJ': 'opera', + 'nqrWh': function(_0x1a9d6b, _0x4f0983) { + return _0x1a9d6b(_0x4f0983); + }, + 'qWvjw': 'chrome', + 'wcaLm': 'safari', + 'kpgHP': function(_0x357cb4, _0x4ec618) { + return _0x357cb4(_0x4ec618); + }, + 'uZEiZ': function(_0x54d846, _0x45401a) { + return _0x54d846(_0x45401a); + }, + 'Bsdxk': 'firefox', + 'brPia': function(_0x2698c5, _0x23fc33) { + return _0x2698c5(_0x23fc33); + }, + 'OfqeT': 'presto', + 'CKdHS': function(_0x63167b, _0x50e9aa) { + return _0x63167b(_0x50e9aa); + }, + 'MOinO': 'trident', + 'ubOMd': 'iexplore', + 'Ucccc': function(_0x48de88, _0x7d49d6) { + return _0x48de88(_0x7d49d6); + }, + 'SnFUd': function(_0x45a987, _0x4a0ed4) { + return _0x45a987 === _0x4a0ed4; + }, + 'dFIVJ': 'gecko', + 'wTQFv': function(_0x583a15, _0x1bad90) { + return _0x583a15(_0x1bad90); + }, + 'ShzBA': function(_0x299d61, _0x828843) { + return _0x299d61 === _0x828843; + }, + 'eMRyr': function(_0x5d0702, _0x2beb52) { + return _0x5d0702(_0x2beb52); + }, + 'IKmjV': function(_0x233069, _0x42f6c1) { + return _0x233069 === _0x42f6c1; + }, + 'TglAC': function(_0x1783e0, _0x1acb96) { + return _0x1783e0 === _0x1acb96; + }, + 'GIWpy': function(_0xea74a9, _0x40e03a) { + return _0xea74a9 === _0x40e03a; + }, + 'LSFzT': function(_0x2de986, _0x176669) { + return _0x2de986(_0x176669); + }, + 'JVzaP': function(_0x586484, _0x30862f) { + return _0x586484(_0x30862f); + }, + 'vnhkW': function(_0x527125, _0x3ef155) { + return _0x527125(_0x3ef155); + }, + 'bFQSo': function(_0x456f13, _0x4d29b3) { + return _0x456f13(_0x4d29b3); + }, + 'mucVu': function(_0x1fc559, _0x1b76da) { + return _0x1fc559(_0x1b76da); + }, + 'ndklM': function(_0xb3a50b, _0x49d22e) { + return _0xb3a50b(_0x49d22e); + }, + 'aKRfW': '2345', + 'JvNSR': 'sougou', + 'iEjLM': 'liebao', + 'mFXYd': function(_0x401402, _0x100996) { + return _0x401402(_0x100996); + }, + 'Fkpwj': 'maxthon' + }; + const _0x445504 = navigator['userAgent']['toLowerCase'](); + const _0x38e894 = _0x5bff6b=>_0x5bff6b['test'](_0x445504); + const _0x585fad = _0x9bfeb0=>_0x445504['match'](_0x9bfeb0)['toString']()['replace'](/[^0-9|_.]/g, '')['replace'](/_/g, '.'); + let _0x52bf77 = _0x227afe['yHOEV']; + if (_0x227afe['wzENk'](_0x38e894, /windows|win32|win64|wow32|wow64/g)) { + _0x52bf77 = _0x227afe['wsWEe']; + } else if (_0x227afe['wzENk'](_0x38e894, /macintosh|macintel/g)) { + _0x52bf77 = _0x227afe['xTHMm']; + } else if (_0x227afe['yavth'](_0x38e894, /x11/g)) { + _0x52bf77 = _0x227afe['azgCA']; + } else if (_0x227afe['nGybX'](_0x38e894, /android|adr/g)) { + _0x52bf77 = 'android'; + } else if (_0x227afe['nGybX'](_0x38e894, /ios|iphone|ipad|ipod|iwatch/g)) { + _0x52bf77 = _0x227afe['INJwr']; + } + let _0x4a314b = 'unknow'; + if (_0x227afe['hZWNh'](_0x52bf77, _0x227afe['wsWEe'])) { + if (_0x227afe['nGybX'](_0x38e894, /windows nt 5.0|windows 2000/g)) { + _0x4a314b = _0x227afe['UQRFb']; + } else if (_0x38e894(/windows nt 5.1|windows xp/g)) { + _0x4a314b = 'xp'; + } else if (_0x227afe['wwUUs'](_0x38e894, /windows nt 5.2|windows 2003/g)) { + _0x4a314b = _0x227afe['rqdHg']; + } else if (_0x227afe['wwUUs'](_0x38e894, /windows nt 6.0|windows vista/g)) { + _0x4a314b = 'vista'; + } else if (_0x38e894(/windows nt 6.1|windows 7/g)) { + _0x4a314b = '7'; + } else if (_0x38e894(/windows nt 6.2|windows 8/g)) { + _0x4a314b = '8'; + } else if (_0x38e894(/windows nt 6.3|windows 8.1/g)) { + _0x4a314b = _0x227afe['RFYwz']; + } else if (_0x38e894(/windows nt 10.0|windows 10/g)) { + _0x4a314b = '10'; + } + } else if (_0x227afe['hZWNh'](_0x52bf77, 'macos')) { + _0x4a314b = _0x227afe['wwUUs'](_0x585fad, /os x [\d._]+/g); + } else if (_0x227afe['VwpDM'](_0x52bf77, _0x227afe['ijcZr'])) { + _0x4a314b = _0x227afe['wsPCu'](_0x585fad, /android [\d._]+/g); + } else if (_0x227afe['CUddb'](_0x52bf77, _0x227afe['INJwr'])) { + _0x4a314b = _0x585fad(/os [\d._]+/g); + } + let _0x19ea9e = _0x227afe['yHOEV']; + if (_0x227afe['UcAvE'](_0x52bf77, _0x227afe['wsWEe']) || _0x227afe['UcAvE'](_0x52bf77, 'macos') || _0x52bf77 === 'linux') { + _0x19ea9e = _0x227afe['UPKaK']; + } else if (_0x52bf77 === 'android' || _0x227afe['Teriw'](_0x52bf77, _0x227afe['INJwr']) || _0x227afe['bSheG'](_0x38e894, /mobile/g)) { + _0x19ea9e = _0x227afe['VSVPX']; + } + let _0x184415 = 'unknow'; + let _0x51795a = 'unknow'; + if (_0x227afe['YLvkS'](_0x38e894, /applewebkit/g)) { + _0x184415 = _0x227afe['IIJTU']; + if (_0x38e894(/edge/g)) { + _0x51795a = _0x227afe['VnwxS']; + } else if (_0x227afe['YLvkS'](_0x38e894, /opr/g)) { + _0x51795a = _0x227afe['czVTJ']; + } else if (_0x227afe['nqrWh'](_0x38e894, /chrome/g)) { + _0x51795a = _0x227afe['qWvjw']; + } else if (_0x38e894(/safari/g)) { + _0x51795a = _0x227afe['wcaLm']; + } + } else if (_0x227afe['kpgHP'](_0x38e894, /gecko/g) && _0x227afe['uZEiZ'](_0x38e894, /firefox/g)) { + _0x184415 = 'gecko'; + _0x51795a = _0x227afe['Bsdxk']; + } else if (_0x227afe['brPia'](_0x38e894, /presto/g)) { + _0x184415 = _0x227afe['OfqeT']; + _0x51795a = _0x227afe['czVTJ']; + } else if (_0x227afe['CKdHS'](_0x38e894, /trident|compatible|msie/g)) { + _0x184415 = _0x227afe['MOinO']; + _0x51795a = _0x227afe['ubOMd']; + } + let _0xb5f01a = 'unknow'; + if (_0x227afe['Teriw'](_0x184415, _0x227afe['IIJTU'])) { + _0xb5f01a = _0x227afe['Ucccc'](_0x585fad, /applewebkit\/[\d._]+/g); + } else if (_0x227afe['SnFUd'](_0x184415, _0x227afe['dFIVJ'])) { + _0xb5f01a = _0x227afe['wTQFv'](_0x585fad, /gecko\/[\d._]+/g); + } else if (_0x227afe['ShzBA'](_0x184415, _0x227afe['OfqeT'])) { + _0xb5f01a = _0x227afe['wTQFv'](_0x585fad, /presto\/[\d._]+/g); + } else if (_0x184415 === _0x227afe['MOinO']) { + _0xb5f01a = _0x227afe['eMRyr'](_0x585fad, /trident\/[\d._]+/g); + } + let _0x4349d5 = _0x227afe['yHOEV']; + if (_0x227afe['IKmjV'](_0x51795a, _0x227afe['qWvjw'])) { + _0x4349d5 = _0x585fad(/chrome\/[\d._]+/g); + } else if (_0x227afe['TglAC'](_0x51795a, 'safari')) { + _0x4349d5 = _0x585fad(/version\/[\d._]+/g); + } else if (_0x51795a === _0x227afe['Bsdxk']) { + _0x4349d5 = _0x227afe['eMRyr'](_0x585fad, /firefox\/[\d._]+/g); + } else if (_0x227afe['TglAC'](_0x51795a, _0x227afe['czVTJ'])) { + _0x4349d5 = _0x585fad(/opr\/[\d._]+/g); + } else if (_0x227afe['GIWpy'](_0x51795a, _0x227afe['ubOMd'])) { + _0x4349d5 = _0x227afe['eMRyr'](_0x585fad, /(msie [\d._]+)|(rv:[\d._]+)/g); + } else if (_0x227afe['GIWpy'](_0x51795a, _0x227afe['VnwxS'])) { + _0x4349d5 = _0x227afe['LSFzT'](_0x585fad, /edge\/[\d._]+/g); + } + let _0x59a33a = 'none'; + let _0x25de0d = 'unknow'; + if (_0x227afe['LSFzT'](_0x38e894, /micromessenger/g)) { + _0x59a33a = 'wechat'; + _0x25de0d = _0x227afe['JVzaP'](_0x585fad, /micromessenger\/[\d._]+/g); + } else if (_0x38e894(/qqbrowser/g)) { + _0x59a33a = 'qq'; + _0x25de0d = _0x227afe['JVzaP'](_0x585fad, /qqbrowser\/[\d._]+/g); + } else if (_0x227afe['vnhkW'](_0x38e894, /ucbrowser/g)) { + _0x59a33a = 'uc'; + _0x25de0d = _0x227afe['bFQSo'](_0x585fad, /ucbrowser\/[\d._]+/g); + } else if (_0x227afe['mucVu'](_0x38e894, /qihu 360se/g)) { + _0x59a33a = '360'; + } else if (_0x227afe['ndklM'](_0x38e894, /2345explorer/g)) { + _0x59a33a = _0x227afe['aKRfW']; + _0x25de0d = _0x585fad(/2345explorer\/[\d._]+/g); + } else if (_0x227afe['ndklM'](_0x38e894, /metasr/g)) { + _0x59a33a = _0x227afe['JvNSR']; + } else if (_0x227afe['ndklM'](_0x38e894, /lbbrowser/g)) { + _0x59a33a = _0x227afe['iEjLM']; + } else if (_0x227afe['mFXYd'](_0x38e894, /maxthon/g)) { + _0x59a33a = _0x227afe['Fkpwj']; + _0x25de0d = _0x227afe['mFXYd'](_0x585fad, /maxthon\/[\d._]+/g); + } + return Object['assign']({ + 'engine': _0x184415, + 'engineVs': _0xb5f01a, + 'platform': _0x19ea9e, + 'supporter': _0x51795a, + 'supporterVs': _0x4349d5, + 'system': _0x52bf77, + 'systemVs': _0x4a314b + }, _0x227afe['GIWpy'](_0x59a33a, 'none') ? {} : { + 'shell': _0x59a33a, + 'shellVs': _0x25de0d + }); +} +var _0xafb7 = ['0123456789abcdef', 'charAt', 'length', 'abc', '900150983cd24fb0d6963f7d28e17f72', 'concat', 'charCodeAt', '0123456789ABCDEF']; +(function(_0x308400, _0x4dd0d5) { + var _0x55a1b9 = function(_0x42a510) { + while (--_0x42a510) { + _0x308400['push'](_0x308400['shift']()); + } + }; + _0x55a1b9(++_0x4dd0d5); +}(_0xafb7, 0x132)); +var _0x4f75 = function(_0x20aa38, _0x3feb9f) { + _0x20aa38 = _0x20aa38 - 0x0; + var _0x442357 = _0xafb7[_0x20aa38]; + return _0x442357; +}; +var hexcase = 0x0; +var b64pad = ''; +var chrsz = 0x8; +function get_data() { + var _0x49dc93 = { + 'ObbQh': function(_0x4cc272) { + return _0x4cc272(); + } + }; + result = ''; + if (1600 || 900) { + result = _0x49dc93['ObbQh'](___get_data); + } + return result; +} +function ___get_data() { + var _0xd1d5bb = { + 'chYzh': function(_0x3214e3, _0x5ecab4) { + return _0x3214e3(_0x5ecab4); + }, + 'EyjPx': function(_0x37547a, _0x58a366, _0x1463fd) { + return _0x37547a(_0x58a366, _0x1463fd); + }, + 'oWocp': '0x0' + }; + _0x3066e8 = 'NightTeam'; + return _0xd1d5bb['chYzh'](binl2hex, _0xd1d5bb['EyjPx'](core__0x5f3, _0xd1d5bb['chYzh'](str2binl, _0x3066e8), _0x3066e8[_0x4f75(_0xd1d5bb['oWocp'])] * chrsz)); +} +function b64__0x5f3(_0x285afb) { + return binl2b64(core__0x5f3(str2binl(_0x285afb), _0x285afb[_0x4f75('0x0')] * chrsz)); +} +function str__0x5f3(_0x508693) { + return binl2str(core__0x5f3(str2binl(_0x508693), _0x508693[_0x4f75('0x0')] * chrsz)); +} +function hex_hmac__0x5f3(_0x51842a, _0x49cf0a) { + return binl2hex(core_hmac__0x5f3(_0x51842a, _0x49cf0a)); +} +function b64_hmac__0x5f3(_0x32ca2c, _0x564ce2) { + return binl2b64(core_hmac__0x5f3(_0x32ca2c, _0x564ce2)); +} +function str_hmac__0x5f3(_0x2b5ae9, _0x33e2bc) { + return binl2str(core_hmac__0x5f3(_0x2b5ae9, _0x33e2bc)); +} +function _0x5f3_vm_test() { + return hex__0x5f3(_0x4f75('0x1')) == _0x4f75('0x2'); +} +function core__0x5f3(_0x29b141, _0x1d205c) { + _0x29b141[_0x1d205c >> 0x5] |= 0x80 << _0x1d205c % 0x20; + _0x29b141[(_0x1d205c + 0x40 >>> 0x9 << 0x4) + 0xe] = _0x1d205c; + var _0x2ca934 = 0x67452301; + var _0x37ae64 = -0x10325477; + var _0x25776a = -0x67452302; + var _0x225e4c = 0x10325476; + for (var _0x13a45d = 0x0; _0x13a45d < _0x29b141['length']; _0x13a45d += 0x10) { + var _0x588610 = _0x2ca934; + var _0x12af01 = _0x37ae64; + var _0x233171 = _0x25776a; + var _0x4c36c3 = _0x225e4c; + _0x2ca934 = _0x5f3_ff(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x0], 0x7, -0x28955b88); + _0x225e4c = _0x5f3_ff(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x1], 0xc, -0x173848aa); + _0x25776a = _0x5f3_ff(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x2], 0x11, 0x242070db); + _0x37ae64 = _0x5f3_ff(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x3], 0x16, -0x3e423112); + _0x2ca934 = _0x5f3_ff(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x4], 0x7, -0xa83f051); + _0x225e4c = _0x5f3_ff(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x5], 0xc, 0x4787c62a); + _0x25776a = _0x5f3_ff(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x6], 0x11, -0x57cfb9ed); + _0x37ae64 = _0x5f3_ff(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x7], 0x16, -0x2b96aff); + _0x2ca934 = _0x5f3_ff(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x8], 0x7, 0x698098d8); + _0x225e4c = _0x5f3_ff(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x9], 0xc, -0x74bb0851); + _0x25776a = _0x5f3_ff(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xa], 0x11, -0xa44f); + _0x37ae64 = _0x5f3_ff(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0xb], 0x16, -0x76a32842); + _0x2ca934 = _0x5f3_ff(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0xc], 0x7, 0x6b901122); + _0x225e4c = _0x5f3_ff(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0xd], 0xc, -0x2678e6d); + _0x25776a = _0x5f3_ff(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xe], 0x11, -0x5986bc72); + _0x37ae64 = _0x5f3_ff(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0xf], 0x16, 0x49b40821); + _0x2ca934 = _0x5f3_gg(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x1], 0x5, -0x9e1da9e); + _0x225e4c = _0x5f3_gg(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x6], 0x9, -0x3fbf4cc0); + _0x25776a = _0x5f3_gg(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xb], 0xe, 0x265e5a51); + _0x37ae64 = _0x5f3_gg(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x0], 0x14, -0x16493856); + _0x2ca934 = _0x5f3_gg(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x5], 0x5, -0x29d0efa3); + _0x225e4c = _0x5f3_gg(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0xa], 0x9, 0x2441453); + _0x25776a = _0x5f3_gg(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xf], 0xe, -0x275e197f); + _0x37ae64 = _0x5f3_gg(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x4], 0x14, -0x182c0438); + _0x2ca934 = _0x5f3_gg(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x9], 0x5, 0x21e1cde6); + _0x225e4c = _0x5f3_gg(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0xe], 0x9, -0x3cc8f82a); + _0x25776a = _0x5f3_gg(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x3], 0xe, -0xb2af279); + _0x37ae64 = _0x5f3_gg(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x8], 0x14, 0x455a14ed); + _0x2ca934 = _0x5f3_gg(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0xd], 0x5, -0x561c16fb); + _0x225e4c = _0x5f3_gg(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x2], 0x9, -0x3105c08); + _0x25776a = _0x5f3_gg(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x7], 0xe, 0x676f02d9); + _0x37ae64 = _0x5f3_gg(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0xc], 0x14, -0x72d5b376); + _0x2ca934 = _0x5f3_hh(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x5], 0x4, -0x5c6be); + _0x225e4c = _0x5f3_hh(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x8], 0xb, -0x788e097f); + _0x25776a = _0x5f3_hh(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xb], 0x10, 0x6d9d6122); + _0x37ae64 = _0x5f3_hh(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0xe], 0x17, -0x21ac7f4); + _0x2ca934 = _0x5f3_hh(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x1], 0x4, -0x5b4115bc); + _0x225e4c = _0x5f3_hh(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x4], 0xb, 0x4bdecfa9); + _0x25776a = _0x5f3_hh(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x7], 0x10, -0x944b4a0); + _0x37ae64 = _0x5f3_hh(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0xa], 0x17, -0x41404390); + _0x2ca934 = _0x5f3_hh(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0xd], 0x4, 0x289b7ec6); + _0x225e4c = _0x5f3_hh(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x0], 0xb, -0x155ed806); + _0x25776a = _0x5f3_hh(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x3], 0x10, -0x2b10cf7b); + _0x37ae64 = _0x5f3_hh(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x6], 0x17, 0x4881d05); + _0x2ca934 = _0x5f3_hh(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x9], 0x4, -0x262b2fc7); + _0x225e4c = _0x5f3_hh(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0xc], 0xb, -0x1924661b); + _0x25776a = _0x5f3_hh(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xf], 0x10, 0x1fa27cf8); + _0x37ae64 = _0x5f3_hh(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x2], 0x17, -0x3b53a99b); + _0x2ca934 = _0x5f3_ii(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x0], 0x6, -0xbd6ddbc); + _0x225e4c = _0x5f3_ii(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x7], 0xa, 0x432aff97); + _0x25776a = _0x5f3_ii(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xe], 0xf, -0x546bdc59); + _0x37ae64 = _0x5f3_ii(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x5], 0x15, -0x36c5fc7); + _0x2ca934 = _0x5f3_ii(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0xc], 0x6, 0x655b59c3); + _0x225e4c = _0x5f3_ii(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x3], 0xa, -0x70f3336e); + _0x25776a = _0x5f3_ii(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xa], 0xf, -0x100b83); + _0x37ae64 = _0x5f3_ii(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x1], 0x15, -0x7a7ba22f); + _0x2ca934 = _0x5f3_ii(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x8], 0x6, 0x6fa87e4f); + _0x225e4c = _0x5f3_ii(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0xf], 0xa, -0x1d31920); + _0x25776a = _0x5f3_ii(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x6], 0xf, -0x5cfebcec); + _0x37ae64 = _0x5f3_ii(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0xd], 0x15, 0x4e0811a1); + _0x2ca934 = _0x5f3_ii(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x4], 0x6, -0x8ac817e); + _0x225e4c = _0x5f3_ii(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0xb], 0xa, -0x42c50dcb); + _0x25776a = _0x5f3_ii(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x2], 0xf, 0x2ad7d2bb); + _0x37ae64 = _0x5f3_ii(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x9], 0x15, -0x14792c6f); + _0x2ca934 = safe_add(_0x2ca934, _0x588610); + _0x37ae64 = safe_add(_0x37ae64, _0x12af01); + _0x25776a = safe_add(_0x25776a, _0x233171); + _0x225e4c = safe_add(_0x225e4c, _0x4c36c3); + } + return Array(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c); +} +function _0x5f3_cmn(_0x37bd03, _0x204785, _0x4c8136, _0x4df7e5, _0x8adaae, _0x1bb5d5) { + return safe_add(bit_rol(safe_add(safe_add(_0x204785, _0x37bd03), safe_add(_0x4df7e5, _0x1bb5d5)), _0x8adaae), _0x4c8136); +} +function _0x5f3_ff(_0x592bc7, _0x27110f, _0x192e0e, _0x56094f, _0xf3c246, _0x3e601b, _0x5424f7) { + return _0x5f3_cmn(_0x27110f & _0x192e0e | ~_0x27110f & _0x56094f, _0x592bc7, _0x27110f, _0xf3c246, _0x3e601b, _0x5424f7); +} +function _0x5f3_gg(_0x133b26, _0x4f6e2b, _0x43870f, _0x3221b7, _0x5749c4, _0x4a7548, _0x2eeb85) { + return _0x5f3_cmn(_0x4f6e2b & _0x3221b7 | _0x43870f & ~_0x3221b7, _0x133b26, _0x4f6e2b, _0x5749c4, _0x4a7548, _0x2eeb85); +} +function _0x5f3_hh(_0x182bcc, _0x5983ea, _0x15f735, _0x53f395, _0x346932, _0x1845cc, _0x3c026d) { + return _0x5f3_cmn(_0x5983ea ^ _0x15f735 ^ _0x53f395, _0x182bcc, _0x5983ea, _0x346932, _0x1845cc, _0x3c026d); +} +function _0x5f3_ii(_0x51638c, _0x39d5b9, _0x5aa690, _0x332e8b, _0x40b6d3, _0x1f7f3b, _0x4a5089) { + return _0x5f3_cmn(_0x5aa690 ^ (_0x39d5b9 | ~_0x332e8b), _0x51638c, _0x39d5b9, _0x40b6d3, _0x1f7f3b, _0x4a5089); +} +function core_hmac__0x5f3(_0x3c9f1f, _0x24bf57) { + var _0xce47a9 = str2binl(_0x3c9f1f); + if (_0xce47a9[_0x4f75('0x0')] > 0x10) + _0xce47a9 = core__0x5f3(_0xce47a9, _0x3c9f1f['length'] * chrsz); + var _0x201e5e = Array(0x10) + , _0x3e6b17 = Array(0x10); + for (var _0x1a9e62 = 0x0; _0x1a9e62 < 0x10; _0x1a9e62++) { + _0x201e5e[_0x1a9e62] = _0xce47a9[_0x1a9e62] ^ 0x36363636; + _0x3e6b17[_0x1a9e62] = _0xce47a9[_0x1a9e62] ^ 0x5c5c5c5c; + } + var _0x32b17d = core__0x5f3(_0x201e5e[_0x4f75('0x3')](str2binl(_0x24bf57)), 0x200 + _0x24bf57[_0x4f75('0x0')] * chrsz); + return core__0x5f3(_0x3e6b17[_0x4f75('0x3')](_0x32b17d), 0x200 + 0x80); +} +function safe_add(_0x17d6bb, _0x338b5a) { + var _0x1da9a = (_0x17d6bb & 0xffff) + (_0x338b5a & 0xffff); + var _0x30eeed = (_0x17d6bb >> 0x10) + (_0x338b5a >> 0x10) + (_0x1da9a >> 0x10); + return _0x30eeed << 0x10 | _0x1da9a & 0xffff; +} +function bit_rol(_0x29570a, _0x50c5a5) { + return _0x29570a << _0x50c5a5 | _0x29570a >>> 0x20 - _0x50c5a5; +} +function str2binl(_0x564301) { + var _0x8000e = Array(); + var _0x5384bf = (0x1 << chrsz) - 0x1; + for (var _0x4eff36 = 0x0; _0x4eff36 < _0x564301[_0x4f75('0x0')] * chrsz; _0x4eff36 += chrsz) + _0x8000e[_0x4eff36 >> 0x5] |= (_0x564301[_0x4f75('0x4')](_0x4eff36 / chrsz) & _0x5384bf) << _0x4eff36 % 0x20; + return _0x8000e; +} +function binl2str(_0x1591a0) { + var _0x48bf42 = ''; + var _0x330495 = (0x1 << chrsz) - 0x1; + for (var _0x1d9e6e = 0x0; _0x1d9e6e < _0x1591a0[_0x4f75('0x0')] * 0x20; _0x1d9e6e += chrsz) + _0x48bf42 += String['fromCharCode'](_0x1591a0[_0x1d9e6e >> 0x5] >>> _0x1d9e6e % 0x20 & _0x330495); + return _0x48bf42; +} +function binl2hex(_0x2b2030) { + var _0x3b523a = hexcase ? _0x4f75('0x5') : _0x4f75('0x6'); + var _0x580323 = ''; + for (var _0x3c558a = 0x0; _0x3c558a < _0x2b2030[_0x4f75('0x0')] * 0x4; _0x3c558a++) { + _0x580323 += _0x3b523a['charAt'](_0x2b2030[_0x3c558a >> 0x2] >> _0x3c558a % 0x4 * 0x8 + 0x4 & 0xf) + _0x3b523a[_0x4f75('0x7')](_0x2b2030[_0x3c558a >> 0x2] >> _0x3c558a % 0x4 * 0x8 & 0xf); + } + return _0x580323; +} +function binl2b64(_0xbf0e43) { + var _0x5c1f17 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var _0x50c415 = ''; + for (var _0x30f226 = 0x0; _0x30f226 < _0xbf0e43[_0x4f75('0x0')] * 0x4; _0x30f226 += 0x3) { + var _0x13031f = (_0xbf0e43[_0x30f226 >> 0x2] >> 0x8 * (_0x30f226 % 0x4) & 0xff) << 0x10 | (_0xbf0e43[_0x30f226 + 0x1 >> 0x2] >> 0x8 * ((_0x30f226 + 0x1) % 0x4) & 0xff) << 0x8 | _0xbf0e43[_0x30f226 + 0x2 >> 0x2] >> 0x8 * ((_0x30f226 + 0x2) % 0x4) & 0xff; + for (var _0x25968b = 0x0; _0x25968b < 0x4; _0x25968b++) { + if (_0x30f226 * 0x8 + _0x25968b * 0x6 > _0xbf0e43[_0x4f75('0x0')] * 0x20) + _0x50c415 += b64pad; + else + _0x50c415 += _0x5c1f17[_0x4f75('0x7')](_0x13031f >> 0x6 * (0x3 - _0x25968b) & 0x3f); + } + } + return _0x50c415; +} +console.log(get_data()); \ No newline at end of file diff --git a/3-奇⻔遁甲调用 JavaScript 执行代码/练习/readme.md b/3-奇⻔遁甲调用 JavaScript 执行代码/练习/readme.md new file mode 100644 index 0000000..3f0fac3 --- /dev/null +++ b/3-奇⻔遁甲调用 JavaScript 执行代码/练习/readme.md @@ -0,0 +1,23 @@ +1打开浏览器开发者工具全局搜索 get_data,在console中打印 get_data() 返回 + + 1c28252a6a52a30aedcd18a75d127d13 + +2将代码复制,node.js运行代码发现 + + if (screen['width'] || screen['height']) { + result = _0x49dc93['ObbQh'](___get_data); + } + return result; + +3替换为 + + if (1600 || 900) { + result = _0x49dc93['ObbQh'](___get_data); + } + return result; + +运行打印 + + 1c28252a6a52a30aedcd18a75d127d13 + +1c28252a6a52a30a \ No newline at end of file diff --git a/6-阻挠爬虫工程师的无限debugger/myjs.js b/6-阻挠爬虫工程师的无限debugger/myjs.js new file mode 100644 index 0000000..87337cc --- /dev/null +++ b/6-阻挠爬虫工程师的无限debugger/myjs.js @@ -0,0 +1,311 @@ +var _0x4818 = ['\x63\x73\x4b\x48\x77\x71\x4d\x49', '\x5a\x73\x4b\x4a\x77\x72\x38\x56\x65\x41\x73\x79', '\x55\x63\x4b\x69\x4e\x38\x4f\x2f\x77\x70\x6c\x77\x4d\x41\x3d\x3d', '\x4a\x52\x38\x43\x54\x67\x3d\x3d', '\x59\x73\x4f\x6e\x62\x53\x45\x51\x77\x37\x6f\x7a\x77\x71\x5a\x4b\x65\x73\x4b\x55\x77\x37\x6b\x77\x58\x38\x4f\x52\x49\x51\x3d\x3d', '\x77\x37\x6f\x56\x53\x38\x4f\x53\x77\x6f\x50\x43\x6c\x33\x6a\x43\x68\x4d\x4b\x68\x77\x36\x48\x44\x6c\x73\x4b\x58\x77\x34\x73\x2f\x59\x73\x4f\x47', '\x66\x77\x56\x6d\x49\x31\x41\x74\x77\x70\x6c\x61\x59\x38\x4f\x74\x77\x35\x63\x4e\x66\x53\x67\x70\x77\x36\x4d\x3d', '\x4f\x63\x4f\x4e\x77\x72\x6a\x43\x71\x73\x4b\x78\x54\x47\x54\x43\x68\x73\x4f\x6a\x45\x57\x45\x38\x50\x63\x4f\x63\x4a\x38\x4b\x36', '\x55\x38\x4b\x35\x4c\x63\x4f\x74\x77\x70\x56\x30\x45\x4d\x4f\x6b\x77\x34\x37\x44\x72\x4d\x4f\x58', '\x48\x4d\x4f\x32\x77\x6f\x48\x43\x69\x4d\x4b\x39\x53\x6c\x58\x43\x6c\x63\x4f\x6f\x43\x31\x6b\x3d', '\x61\x73\x4b\x49\x77\x71\x4d\x44\x64\x67\x4d\x75\x50\x73\x4f\x4b\x42\x4d\x4b\x63\x77\x72\x72\x43\x74\x6b\x4c\x44\x72\x4d\x4b\x42\x77\x36\x34\x64', '\x77\x71\x49\x6d\x4d\x54\x30\x74\x77\x36\x52\x4e\x77\x35\x6b\x3d', '\x44\x4d\x4b\x63\x55\x30\x4a\x6d\x55\x77\x55\x76', '\x56\x6a\x48\x44\x6c\x4d\x4f\x48\x56\x63\x4f\x4e\x58\x33\x66\x44\x69\x63\x4b\x4a\x48\x51\x3d\x3d', '\x77\x71\x68\x42\x48\x38\x4b\x6e\x77\x34\x54\x44\x68\x53\x44\x44\x67\x4d\x4f\x64\x77\x72\x6a\x43\x6e\x63\x4f\x57\x77\x70\x68\x68\x4e\x38\x4b\x43\x47\x63\x4b\x71\x77\x36\x64\x48\x41\x55\x35\x2b\x77\x72\x67\x32\x4a\x63\x4b\x61\x77\x34\x49\x45\x4a\x63\x4f\x63\x77\x72\x52\x4a\x77\x6f\x5a\x30\x77\x71\x46\x39\x59\x67\x41\x56', '\x64\x7a\x64\x32\x77\x35\x62\x44\x6d\x33\x6a\x44\x70\x73\x4b\x33\x77\x70\x59\x3d', '\x77\x34\x50\x44\x67\x63\x4b\x58\x77\x6f\x33\x43\x6b\x63\x4b\x4c\x77\x72\x35\x71\x77\x72\x59\x3d', '\x77\x72\x4a\x4f\x54\x63\x4f\x51\x57\x4d\x4f\x67', '\x77\x71\x54\x44\x76\x63\x4f\x6a\x77\x34\x34\x37\x77\x72\x34\x3d', '\x77\x35\x58\x44\x71\x73\x4b\x68\x4d\x46\x31\x2f', '\x77\x72\x41\x79\x48\x73\x4f\x66\x77\x70\x70\x63', '\x4a\x33\x64\x56\x50\x63\x4f\x78\x4c\x67\x3d\x3d', '\x77\x72\x64\x48\x77\x37\x70\x39\x5a\x77\x3d\x3d', '\x77\x34\x72\x44\x6f\x38\x4b\x6d\x4e\x45\x77\x3d', '\x49\x4d\x4b\x41\x55\x6b\x42\x74', '\x77\x36\x62\x44\x72\x63\x4b\x51\x77\x70\x56\x48\x77\x70\x4e\x51\x77\x71\x55\x3d', '\x64\x38\x4f\x73\x57\x68\x41\x55\x77\x37\x59\x7a\x77\x72\x55\x3d', '\x77\x71\x6e\x43\x6b\x73\x4f\x65\x65\x7a\x72\x44\x68\x77\x3d\x3d', '\x55\x73\x4b\x6e\x49\x4d\x4b\x57\x56\x38\x4b\x2f', '\x77\x34\x7a\x44\x6f\x63\x4b\x38\x4e\x55\x5a\x76', '\x63\x38\x4f\x78\x5a\x68\x41\x4a\x77\x36\x73\x6b\x77\x71\x4a\x6a', '\x50\x63\x4b\x49\x77\x34\x6e\x43\x6b\x6b\x56\x62', '\x4b\x48\x67\x6f\x64\x4d\x4f\x32\x56\x51\x3d\x3d', '\x77\x70\x73\x6d\x77\x71\x76\x44\x6e\x47\x46\x71', '\x77\x71\x4c\x44\x74\x38\x4f\x6b\x77\x34\x63\x3d', '\x77\x37\x77\x31\x77\x34\x50\x43\x70\x73\x4f\x34\x77\x71\x41\x3d', '\x77\x71\x39\x46\x52\x73\x4f\x71\x57\x4d\x4f\x71', '\x62\x79\x42\x68\x77\x37\x72\x44\x6d\x33\x34\x3d', '\x4c\x48\x67\x2b\x53\x38\x4f\x74\x54\x77\x3d\x3d', '\x77\x71\x68\x4f\x77\x37\x31\x35\x64\x73\x4f\x48', '\x55\x38\x4f\x37\x56\x73\x4f\x30\x77\x71\x76\x44\x76\x63\x4b\x75\x4b\x73\x4f\x71\x58\x38\x4b\x72', '\x59\x69\x74\x74\x77\x35\x44\x44\x6e\x57\x6e\x44\x72\x41\x3d\x3d', '\x59\x4d\x4b\x49\x77\x71\x55\x55\x66\x67\x49\x6b', '\x61\x42\x37\x44\x6c\x4d\x4f\x44\x54\x51\x3d\x3d', '\x77\x70\x66\x44\x68\x38\x4f\x72\x77\x36\x6b\x6b', '\x77\x37\x76\x43\x71\x4d\x4f\x72\x59\x38\x4b\x41\x56\x6b\x35\x4f\x77\x70\x6e\x43\x75\x38\x4f\x61\x58\x73\x4b\x5a\x50\x33\x44\x43\x6c\x63\x4b\x79\x77\x36\x48\x44\x72\x51\x3d\x3d', '\x77\x6f\x77\x2b\x77\x36\x76\x44\x6d\x48\x70\x73\x77\x37\x52\x74\x77\x6f\x39\x38\x4c\x43\x37\x43\x69\x47\x37\x43\x6b\x73\x4f\x52\x54\x38\x4b\x6c\x57\x38\x4f\x35\x77\x72\x33\x44\x69\x38\x4f\x54\x48\x73\x4f\x44\x65\x48\x6a\x44\x6d\x63\x4b\x6c\x4a\x73\x4b\x71\x56\x41\x3d\x3d', '\x4e\x77\x56\x2b', '\x77\x37\x48\x44\x72\x63\x4b\x74\x77\x70\x4a\x61\x77\x70\x5a\x62', '\x77\x70\x51\x73\x77\x71\x76\x44\x69\x48\x70\x75\x77\x36\x49\x3d', '\x59\x4d\x4b\x55\x77\x71\x4d\x4a\x5a\x51\x3d\x3d', '\x4b\x48\x31\x56\x4b\x63\x4f\x71\x4b\x73\x4b\x31', '\x66\x51\x35\x73\x46\x55\x6b\x6b\x77\x70\x49\x3d', '\x77\x72\x76\x43\x72\x63\x4f\x42\x52\x38\x4b\x6b', '\x4d\x33\x77\x30\x66\x51\x3d\x3d', '\x77\x36\x78\x58\x77\x71\x50\x44\x76\x4d\x4f\x46\x77\x6f\x35\x64']; +(function (_0x4c97f0, _0x1742fd) { + var _0x4db1c = function (_0x48181e) { + while (--_0x48181e) { + _0x4c97f0['\x70\x75\x73\x68'](_0x4c97f0['\x73\x68\x69\x66\x74']()); + } + }; + var _0x3cd6c6 = function () { + var _0xb8360b = { + '\x64\x61\x74\x61': { + '\x6b\x65\x79': '\x63\x6f\x6f\x6b\x69\x65', + '\x76\x61\x6c\x75\x65': '\x74\x69\x6d\x65\x6f\x75\x74' + }, '\x73\x65\x74\x43\x6f\x6f\x6b\x69\x65': function (_0x20bf34, _0x3e840e, _0x5693d3, _0x5e8b26) { + _0x5e8b26 = _0x5e8b26 || {}; + var _0xba82f0 = _0x3e840e + '\x3d' + _0x5693d3; + var _0x5afe31 = 0x0; + for (var _0x5afe31 = 0x0, _0x178627 = _0x20bf34['\x6c\x65\x6e\x67\x74\x68']; _0x5afe31 < _0x178627; _0x5afe31++) { + var _0x41b2ff = _0x20bf34[_0x5afe31]; + _0xba82f0 += '\x3b\x20' + _0x41b2ff; + var _0xd79219 = _0x20bf34[_0x41b2ff]; + _0x20bf34['\x70\x75\x73\x68'](_0xd79219); + _0x178627 = _0x20bf34['\x6c\x65\x6e\x67\x74\x68']; + if (_0xd79219 !== !![]) { + _0xba82f0 += '\x3d' + _0xd79219; + } + } + _0x5e8b26['\x63\x6f\x6f\x6b\x69\x65'] = _0xba82f0; + }, '\x72\x65\x6d\x6f\x76\x65\x43\x6f\x6f\x6b\x69\x65': function () { + return '\x64\x65\x76'; + }, '\x67\x65\x74\x43\x6f\x6f\x6b\x69\x65': function (_0x4a11fe, _0x189946) { + _0x4a11fe = _0x4a11fe || function (_0x6259a2) { + return _0x6259a2; + }; + var _0x25af93 = _0x4a11fe(new RegExp('\x28\x3f\x3a\x5e\x7c\x3b\x20\x29' + _0x189946['\x72\x65\x70\x6c\x61\x63\x65'](/([.$?*|{}()[]\/+^])/g, '\x24\x31') + '\x3d\x28\x5b\x5e\x3b\x5d\x2a\x29')); + var _0x52d57c = function (_0x105f59, _0x3fd789) { + _0x105f59(++_0x3fd789); + }; + _0x52d57c(_0x4db1c, _0x1742fd); + return _0x25af93 ? decodeURIComponent(_0x25af93[0x1]) : undefined; + } + }; + var _0x4a2aed = function () { + var _0x124d17 = new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d'); + return _0x124d17['\x74\x65\x73\x74'](_0xb8360b['\x72\x65\x6d\x6f\x76\x65\x43\x6f\x6f\x6b\x69\x65']['\x74\x6f\x53\x74\x72\x69\x6e\x67']()); + }; + _0xb8360b['\x75\x70\x64\x61\x74\x65\x43\x6f\x6f\x6b\x69\x65'] = _0x4a2aed; + var _0x2d67ec = ''; + var _0x120551 = _0xb8360b['\x75\x70\x64\x61\x74\x65\x43\x6f\x6f\x6b\x69\x65'](); + if (!_0x120551) { + _0xb8360b['\x73\x65\x74\x43\x6f\x6f\x6b\x69\x65'](['\x2a'], '\x63\x6f\x75\x6e\x74\x65\x72', 0x1); + } else if (_0x120551) { + _0x2d67ec = _0xb8360b['\x67\x65\x74\x43\x6f\x6f\x6b\x69\x65'](null, '\x63\x6f\x75\x6e\x74\x65\x72'); + } else { + _0xb8360b['\x72\x65\x6d\x6f\x76\x65\x43\x6f\x6f\x6b\x69\x65'](); + } + }; + _0x3cd6c6(); +}(_0x4818, 0x15b)); +var _0x55f3 = function (_0x4c97f0, _0x1742fd) { + var _0x4c97f0 = parseInt(_0x4c97f0, 0x10); + var _0x48181e = _0x4818[_0x4c97f0]; + if (!_0x55f3['\x61\x74\x6f\x62\x50\x6f\x6c\x79\x66\x69\x6c\x6c\x41\x70\x70\x65\x6e\x64\x65\x64']) { + (function () { + var _0xdf49c6 = Function('\x72\x65\x74\x75\x72\x6e\x20\x28\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x29\x20' + '\x7b\x7d\x2e\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x28\x22\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x69\x73\x22\x29\x28\x29' + '\x29\x3b'); + var _0xb8360b = _0xdf49c6(); + var _0x389f44 = '\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d'; + _0xb8360b['\x61\x74\x6f\x62'] || (_0xb8360b['\x61\x74\x6f\x62'] = function (_0xba82f0) { + var _0xec6bb4 = String(_0xba82f0)['\x72\x65\x70\x6c\x61\x63\x65'](/=+$/, ''); + for (var _0x1a0f04 = 0x0, _0x18c94e, _0x41b2ff, _0xd79219 = 0x0, _0x5792f7 = ''; _0x41b2ff = _0xec6bb4['\x63\x68\x61\x72\x41\x74'](_0xd79219++); ~_0x41b2ff && (_0x18c94e = _0x1a0f04 % 0x4 ? _0x18c94e * 0x40 + _0x41b2ff : _0x41b2ff, _0x1a0f04++ % 0x4) ? _0x5792f7 += String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0xff & _0x18c94e >> (-0x2 * _0x1a0f04 & 0x6)) : 0x0) { + _0x41b2ff = _0x389f44['\x69\x6e\x64\x65\x78\x4f\x66'](_0x41b2ff); + } + return _0x5792f7; + }); + }()); + _0x55f3['\x61\x74\x6f\x62\x50\x6f\x6c\x79\x66\x69\x6c\x6c\x41\x70\x70\x65\x6e\x64\x65\x64'] = !![]; + } + if (!_0x55f3['\x72\x63\x34']) { + var _0x232678 = function (_0x401af1, _0x532ac0) { + var _0x45079a = [], _0x52d57c = 0x0, _0x105f59, _0x3fd789 = '', _0x4a2aed = ''; + _0x401af1 = atob(_0x401af1); + for (var _0x124d17 = 0x0, _0x1b9115 = _0x401af1['\x6c\x65\x6e\x67\x74\x68']; _0x124d17 < _0x1b9115; _0x124d17++) { + _0x4a2aed += '\x25' + ('\x30\x30' + _0x401af1['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x124d17)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x10))['\x73\x6c\x69\x63\x65'](-0x2); + } + _0x401af1 = decodeURIComponent(_0x4a2aed); + for (var _0x2d67ec = 0x0; _0x2d67ec < 0x100; _0x2d67ec++) { + _0x45079a[_0x2d67ec] = _0x2d67ec; + } + for (_0x2d67ec = 0x0; _0x2d67ec < 0x100; _0x2d67ec++) { + _0x52d57c = (_0x52d57c + _0x45079a[_0x2d67ec] + _0x532ac0['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x2d67ec % _0x532ac0['\x6c\x65\x6e\x67\x74\x68'])) % 0x100; + _0x105f59 = _0x45079a[_0x2d67ec]; + _0x45079a[_0x2d67ec] = _0x45079a[_0x52d57c]; + _0x45079a[_0x52d57c] = _0x105f59; + } + _0x2d67ec = 0x0; + _0x52d57c = 0x0; + for (var _0x4e5ce2 = 0x0; _0x4e5ce2 < _0x401af1['\x6c\x65\x6e\x67\x74\x68']; _0x4e5ce2++) { + _0x2d67ec = (_0x2d67ec + 0x1) % 0x100; + _0x52d57c = (_0x52d57c + _0x45079a[_0x2d67ec]) % 0x100; + _0x105f59 = _0x45079a[_0x2d67ec]; + _0x45079a[_0x2d67ec] = _0x45079a[_0x52d57c]; + _0x45079a[_0x52d57c] = _0x105f59; + _0x3fd789 += String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x401af1['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x4e5ce2) ^ _0x45079a[(_0x45079a[_0x2d67ec] + _0x45079a[_0x52d57c]) % 0x100]); + } + return _0x3fd789; + }; + _0x55f3['\x72\x63\x34'] = _0x232678; + } + if (!_0x55f3['\x64\x61\x74\x61']) { + _0x55f3['\x64\x61\x74\x61'] = {}; + } + if (_0x55f3['\x64\x61\x74\x61'][_0x4c97f0] === undefined) { + if (!_0x55f3['\x6f\x6e\x63\x65']) { + var _0x5f325c = function (_0x23a392) { + this['\x72\x63\x34\x42\x79\x74\x65\x73'] = _0x23a392; + this['\x73\x74\x61\x74\x65\x73'] = [0x1, 0x0, 0x0]; + this['\x6e\x65\x77\x53\x74\x61\x74\x65'] = function () { + return '\x6e\x65\x77\x53\x74\x61\x74\x65'; + }; + this['\x66\x69\x72\x73\x74\x53\x74\x61\x74\x65'] = '\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a'; + this['\x73\x65\x63\x6f\x6e\x64\x53\x74\x61\x74\x65'] = '\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d'; + }; + _0x5f325c['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x63\x68\x65\x63\x6b\x53\x74\x61\x74\x65'] = function () { + var _0x19f809 = new RegExp(this['\x66\x69\x72\x73\x74\x53\x74\x61\x74\x65'] + this['\x73\x65\x63\x6f\x6e\x64\x53\x74\x61\x74\x65']); + return this['\x72\x75\x6e\x53\x74\x61\x74\x65'](_0x19f809['\x74\x65\x73\x74'](this['\x6e\x65\x77\x53\x74\x61\x74\x65']['\x74\x6f\x53\x74\x72\x69\x6e\x67']()) ? --this['\x73\x74\x61\x74\x65\x73'][0x1] : --this['\x73\x74\x61\x74\x65\x73'][0x0]); + }; + _0x5f325c['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x72\x75\x6e\x53\x74\x61\x74\x65'] = function (_0x4380bd) { + if (!Boolean(~_0x4380bd)) { + return _0x4380bd; + } + return this['\x67\x65\x74\x53\x74\x61\x74\x65'](this['\x72\x63\x34\x42\x79\x74\x65\x73']); + }; + _0x5f325c['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x67\x65\x74\x53\x74\x61\x74\x65'] = function (_0x58d85e) { + for (var _0x1c9f5b = 0x0, _0x1ce9e0 = this['\x73\x74\x61\x74\x65\x73']['\x6c\x65\x6e\x67\x74\x68']; _0x1c9f5b < _0x1ce9e0; _0x1c9f5b++) { + this['\x73\x74\x61\x74\x65\x73']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())); + _0x1ce9e0 = this['\x73\x74\x61\x74\x65\x73']['\x6c\x65\x6e\x67\x74\x68']; + } + return _0x58d85e(this['\x73\x74\x61\x74\x65\x73'][0x0]); + }; + new _0x5f325c(_0x55f3)['\x63\x68\x65\x63\x6b\x53\x74\x61\x74\x65'](); + _0x55f3['\x6f\x6e\x63\x65'] = !![]; + } + _0x48181e = _0x55f3['\x72\x63\x34'](_0x48181e, _0x1742fd); + _0x55f3['\x64\x61\x74\x61'][_0x4c97f0] = _0x48181e; + } else { + _0x48181e = _0x55f3['\x64\x61\x74\x61'][_0x4c97f0]; + } + return _0x48181e; +}; +var arg3 = null; +var arg4 = null; +var arg5 = null; +var arg6 = null; +var arg7 = null; +var arg8 = null; +var arg9 = null; +var arg10 = null; +var l = function () { + while (window[_0x55f3('0x1', '\x58\x4d\x57\x5e')] || window['\x5f\x5f\x70\x68\x61\x6e\x74\x6f\x6d\x61\x73']) { + } + ;var _0x5e8b26 = _0x55f3('0x3', '\x6a\x53\x31\x59'); + String[_0x55f3('0x5', '\x6e\x5d\x66\x52')][_0x55f3('0x6', '\x50\x67\x35\x34')] = function (_0x4e08d8) { + var _0x5a5d3b = ''; + for (var _0xe89588 = 0x0; _0xe89588 < this[_0x55f3('0x8', '\x29\x68\x52\x63')] && _0xe89588 < _0x4e08d8[_0x55f3('0xa', '\x6a\x45\x26\x5e')]; _0xe89588 += 0x2) { + var _0x401af1 = parseInt(this[_0x55f3('0xb', '\x56\x32\x4b\x45')](_0xe89588, _0xe89588 + 0x2), 0x10); + var _0x105f59 = parseInt(_0x4e08d8[_0x55f3('0xd', '\x58\x4d\x57\x5e')](_0xe89588, _0xe89588 + 0x2), 0x10); + var _0x189e2c = (_0x401af1 ^ _0x105f59)[_0x55f3('0xf', '\x57\x31\x46\x45')](0x10); + if (_0x189e2c[_0x55f3('0x11', '\x4d\x47\x72\x76')] == 0x1) { + _0x189e2c = '\x30' + _0x189e2c; + } + _0x5a5d3b += _0x189e2c; + } + return _0x5a5d3b; + }; + String['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65'][_0x55f3('0x14', '\x5a\x2a\x44\x4d')] = function () { + var _0x4b082b = [0xf, 0x23, 0x1d, 0x18, 0x21, 0x10, 0x1, 0x26, 0xa, 0x9, 0x13, 0x1f, 0x28, 0x1b, 0x16, 0x17, 0x19, 0xd, 0x6, 0xb, 0x27, 0x12, 0x14, 0x8, 0xe, 0x15, 0x20, 0x1a, 0x2, 0x1e, 0x7, 0x4, 0x11, 0x5, 0x3, 0x1c, 0x22, 0x25, 0xc, 0x24]; + var _0x4da0dc = []; + var _0x12605e = ''; + for (var _0x20a7bf = 0x0; _0x20a7bf < this['\x6c\x65\x6e\x67\x74\x68']; _0x20a7bf++) { + var _0x385ee3 = this[_0x20a7bf]; + for (var _0x217721 = 0x0; _0x217721 < _0x4b082b[_0x55f3('0x16', '\x61\x48\x2a\x4e')]; _0x217721++) { + if (_0x4b082b[_0x217721] == _0x20a7bf + 0x1) { + _0x4da0dc[_0x217721] = _0x385ee3; + } + } + } + _0x12605e = _0x4da0dc['\x6a\x6f\x69\x6e'](''); + return _0x12605e; + }; + var _0x23a392 = arg1[_0x55f3('0x19', '\x50\x67\x35\x34')](); + arg2 = _0x23a392[_0x55f3('0x1b', '\x7a\x35\x4f\x26')](_0x5e8b26); + setTimeout('\x72\x65\x6c\x6f\x61\x64\x28\x61\x72\x67\x32\x29', 0x66a); +}; +var _0x4db1c = function () { + function _0x355d23(_0x450614) { + if (('' + _0x450614 / _0x450614)[_0x55f3('0x1c', '\x56\x32\x4b\x45')] !== 0x1 || _0x450614 % 0x14 === 0x0) { + (function () { + }[_0x55f3('0x1d', '\x43\x4e\x55\x59')]((undefined + '')[0x2] + (!![] + '')[0x3] + ([][_0x55f3('0x1e', '\x77\x38\x50\x52')]() + '')[0x2] + (undefined + '')[0x0] + (![] + [0x0] + String)[0x14] + (![] + [0x0] + String)[0x14] + (!![] + '')[0x3] + (!![] + '')[0x1])()); + } else { + (function () { + }['\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72']((undefined + '')[0x2] + (!![] + '')[0x3] + ([][_0x55f3('0x1f', '\x4c\x24\x28\x44')]() + '')[0x2] + (undefined + '')[0x0] + (![] + [0x0] + String)[0x14] + (![] + [0x0] + String)[0x14] + (!![] + '')[0x3] + (!![] + '')[0x1])()); + } + _0x355d23(++_0x450614); + } + + try { + _0x355d23(0x0); + } catch (_0x54c483) { + } +}; +if (function () { + var _0x470d8f = function () { + var _0x4c97f0 = !![]; + return function (_0x1742fd, _0x4db1c) { + var _0x48181e = _0x4c97f0 ? function () { + if (_0x4db1c) { + var _0x55f3be = _0x4db1c['\x61\x70\x70\x6c\x79'](_0x1742fd, arguments); + _0x4db1c = null; + return _0x55f3be; + } + } : function () { + }; + _0x4c97f0 = ![]; + return _0x48181e; + }; + }(); + var _0x501fd7 = _0x470d8f(this, function () { + var _0x4c97f0 = function () { + return '\x64\x65\x76'; + }, _0x1742fd = function () { + return '\x77\x69\x6e\x64\x6f\x77'; + }; + var _0x55f3be = function () { + var _0x3ad9a1 = new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d'); + return !_0x3ad9a1['\x74\x65\x73\x74'](_0x4c97f0['\x74\x6f\x53\x74\x72\x69\x6e\x67']()); + }; + var _0x1b93ad = function () { + var _0x20bf34 = new RegExp('\x28\x5c\x5c\x5b\x78\x7c\x75\x5d\x28\x5c\x77\x29\x7b\x32\x2c\x34\x7d\x29\x2b'); + return _0x20bf34['\x74\x65\x73\x74'](_0x1742fd['\x74\x6f\x53\x74\x72\x69\x6e\x67']()); + }; + var _0x5afe31 = function (_0x178627) { + var _0x1a0f04 = ~-0x1 >> 0x1 + 0xff % 0x0; + if (_0x178627['\x69\x6e\x64\x65\x78\x4f\x66']('\x69' === _0x1a0f04)) { + _0xd79219(_0x178627); + } + }; + var _0xd79219 = function (_0x5792f7) { + var _0x4e08d8 = ~-0x4 >> 0x1 + 0xff % 0x0; + if (_0x5792f7['\x69\x6e\x64\x65\x78\x4f\x66']((!![] + '')[0x3]) !== _0x4e08d8) { + _0x5afe31(_0x5792f7); + } + }; + if (!_0x55f3be()) { + if (!_0x1b93ad()) { + _0x5afe31('\x69\x6e\x64\u0435\x78\x4f\x66'); + } else { + _0x5afe31('\x69\x6e\x64\x65\x78\x4f\x66'); + } + } else { + _0x5afe31('\x69\x6e\x64\u0435\x78\x4f\x66'); + } + }); + _0x501fd7(); + var _0x3a394d = function () { + var _0x1ab151 = !![]; + return function (_0x372617, _0x42d229) { + var _0x3b3503 = _0x1ab151 ? function () { + if (_0x42d229) { + var _0x7086d9 = _0x42d229[_0x55f3('0x21', '\x4b\x4e\x29\x46')](_0x372617, arguments); + _0x42d229 = null; + return _0x7086d9; + } + } : function () { + }; + _0x1ab151 = ![]; + return _0x3b3503; + }; + }(); + var _0x5b6351 = _0x3a394d(this, function () { + var _0x46cbaa = Function(_0x55f3('0x22', '\x26\x68\x5a\x59') + _0x55f3('0x23', '\x61\x48\x2a\x4e') + '\x29\x3b'); + var _0x1766ff = function () { + }; + var _0x9b5e29 = _0x46cbaa(); + _0x9b5e29[_0x55f3('0x26', '\x61\x48\x2a\x4e')]['\x6c\x6f\x67'] = _0x1766ff; + _0x9b5e29[_0x55f3('0x29', '\x56\x25\x59\x52')][_0x55f3('0x2a', '\x50\x5e\x45\x71')] = _0x1766ff; + _0x9b5e29[_0x55f3('0x2c', '\x6c\x67\x4d\x30')][_0x55f3('0x2d', '\x4c\x24\x28\x44')] = _0x1766ff; + _0x9b5e29[_0x55f3('0x2f', '\x43\x5a\x63\x38')][_0x55f3('0x30', '\x57\x75\x36\x25')] = _0x1766ff; + }); + _0x5b6351(); + try { + return !!window['\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72']; + } catch (_0x35538d) { + return ![]; + } +}()) { + document[_0x55f3('0x33', '\x56\x25\x59\x52')](_0x55f3('0x34', '\x79\x41\x70\x7a'), l, ![]); +} else { + document[_0x55f3('0x36', '\x79\x41\x70\x7a')](_0x55f3('0x37', '\x4c\x24\x28\x44'), l); +} + +debugger; + +function setCookie(name, value) { + var expiredate = new Date(); + expiredate.setTime(expiredate.getTime() + (3600 * 1000)); + document.cookie = name + "=" + value + ";expires=" + expiredate.toGMTString() + ";max-age=3600;path=/"; +} + +function reload(x) { + setCookie("yemu", x); + document.location.reload(); +} \ No newline at end of file diff --git a/6-阻挠爬虫工程师的无限debugger/test b/6-阻挠爬虫工程师的无限debugger/test new file mode 100644 index 0000000..d6a5ef9 --- /dev/null +++ b/6-阻挠爬虫工程师的无限debugger/test @@ -0,0 +1,15 @@ +function start_debug(){ + debugger; +} +console.log(1111); +console.log(2222); +console.log(3333); +var i=0; +while (i < 10){ + start_debug(); + i++; + console.log("i:", i); +} +console.log(4444); +console.log(5555); +console.log(6666); \ No newline at end of file diff --git a/7-定位加密参数对应代码位置的方法/Fuction eval b/7-定位加密参数对应代码位置的方法/Fuction eval new file mode 100644 index 0000000..489c846 --- /dev/null +++ b/7-定位加密参数对应代码位置的方法/Fuction eval @@ -0,0 +1,20 @@ +window.__cr_eval = window.eval +var myeval = function (src) { + console.log(src); + debugger; + console.log("================ eval end ================") + return window.__cr_eval(src) +} +var _myeval = myeval.bind(null) +_myeval.toString = window.__cr_eval.toString; +Object.defineProperty(window, 'eval', { value: _myeval }) + +window.__cr_fun = window.Function +var myfun = function () { + var args = Array.prototype.slice.call(arguments, 0, -1).join(","), src = arguments[arguments.length - 1] + console.log(src); + console.log("================ Function end ================") + return window.__cr_fun.apply(this, arguments) +} +myfun.toString = function() { return window.__cr_fun + "" } // 小花招 +Object.defineProperty(window, 'Function', { value: myfun }) \ No newline at end of file diff --git a/7-定位加密参数对应代码位置的方法/cookie b/7-定位加密参数对应代码位置的方法/cookie new file mode 100644 index 0000000..61fae85 --- /dev/null +++ b/7-定位加密参数对应代码位置的方法/cookie @@ -0,0 +1,27 @@ +var cookie_cache = document.cookie; +Object.defineProperty(document, 'cookie', { + get: function() { + console.log('Getting cookie'); + return cookie_cache; + }, + set: function(val) { + console.log('Setting cookie', val); + var cookie = val.split(";")[0]; + var ncookie = cookie.split("="); + var flag = false; + var cache = cookie_cache.split("; "); + cache = cache.map(function(a){ + if (a.split("=")[0] === ncookie[0]){ + flag = true; + return cookie; + } + return a; + }) + cookie_cache = cache.join("; "); + if (!flag){ + cookie_cache += cookie + "; "; + } + this._value = val; + return cookie_cache; + }, +}); \ No newline at end of file diff --git a/7-定位加密参数对应代码位置的方法/json b/7-定位加密参数对应代码位置的方法/json new file mode 100644 index 0000000..0180818 --- /dev/null +++ b/7-定位加密参数对应代码位置的方法/json @@ -0,0 +1,11 @@ +var my_stringify = JSON.stringify; +JSON.stringify = function (params){ + console.log("yemu", params); + return my_stringify(params); +}; + +var my_parse = JSON.parse; +JSON.parse = function (params){ + console.log("yemu", params); + return my_parse(params); +}; \ No newline at end of file diff --git a/7-定位加密参数对应代码位置的方法/websocket b/7-定位加密参数对应代码位置的方法/websocket new file mode 100644 index 0000000..9e6ba53 --- /dev/null +++ b/7-定位加密参数对应代码位置的方法/websocket @@ -0,0 +1,5 @@ +WebSocket.prototype.senda = WebSocket.prototype.send; +WebSocket.prototype.send = function (data){ + console.info("Hook WebSocket", data); + return this.senda(data) +} \ No newline at end of file diff --git a/7-定位加密参数对应代码位置的方法/window attr b/7-定位加密参数对应代码位置的方法/window attr new file mode 100644 index 0000000..24aea83 --- /dev/null +++ b/7-定位加密参数对应代码位置的方法/window attr @@ -0,0 +1,36 @@ +var window_flag_1 = 't'; +var window_flag_2 = 'ccc'; + +var key_value_map = {}; +var window_value = window[window_flag_1]; + +Object.defineProperty(window, window_flag_1, { + get: function() { + console.log('Getting', window, window_flag_1, '=', window_value); + debugger; + return window_value; + }, + set: function(val) { + console.log('Setting', window, window_flag_1, '=', val); + debugger; + window_value = val; + key_value_map[window[window_flag_1]] = window_flag_1; + set_obj_attr(window[window_flag_1], window_flag_2); + }, +}); + +function set_obj_attr(obj, attr){ + var obj_attr_value = obj[attr]; + Object.defineProperty(obj, attr, { + get: function() { + console.log('Getting', key_value_map[obj], attr, '=', obj_attr_value); +// debugger; + return obj_attr_value; + }, + set: function(val) { + console.log('Setting', key_value_map[obj], attr, '=', val); +// debugger; + obj_attr_value = val; + }, + }); +} \ No newline at end of file diff --git a/8-代码混淆的原理/README.md b/8-代码混淆的原理/README.md new file mode 100644 index 0000000..9d8d8e8 --- /dev/null +++ b/8-代码混淆的原理/README.md @@ -0,0 +1,19 @@ +# JavaScript 混淆技术 + +本文件夹中提供了课程中的样例代码,可以直接用 Node.js 运行。 + +首先安装好 Node.js。 + +然后安装依赖库: + +``` +npm install +``` + +接着就可以运行,如: + +``` +node demo_string_array.js +``` + +其他的案例类似 \ No newline at end of file diff --git a/8-代码混淆的原理/__MACOSX/._README.md b/8-代码混淆的原理/__MACOSX/._README.md new file mode 100644 index 0000000000000000000000000000000000000000..f838187dce1cc1bb20beccee569eca8e094b0c2b GIT binary patch literal 176 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0cOV literal 0 HcmV?d00001 diff --git a/8-代码混淆的原理/__MACOSX/._demo_debug_protection.js b/8-代码混淆的原理/__MACOSX/._demo_debug_protection.js new file mode 100644 index 0000000000000000000000000000000000000000..64cfc4279e9f062c4300bf4adf3d8728b0c4993d GIT binary patch literal 176 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c@1WK|Fi0BkZA AzW@LL literal 0 HcmV?d00001 diff --git a/8-代码混淆的原理/__MACOSX/._demo_string_array.js b/8-代码混淆的原理/__MACOSX/._demo_string_array.js new file mode 100644 index 0000000000000000000000000000000000000000..de5362459b9e9a42d0c5c92fe6ee13c56099e610 GIT binary patch literal 176 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c= 2.1.2 < 3" + } + }, + "inquirer": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz", + "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=", + "dev": true, + "requires": { + "ansi-escapes": "^1.1.0", + "chalk": "^1.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.1", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx": "^4.1.0", + "string-width": "^2.0.0", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "inversify": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-5.0.1.tgz", + "integrity": "sha512-Ieh06s48WnEYGcqHepdsJUIJUXpwH5o5vodAX+DK2JA/gjy4EbEcQZxw+uFfzysmKjiLXGYwNG3qDZsKVMcINQ==", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "javascript-obfuscator": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-0.18.8.tgz", + "integrity": "sha512-lh/PT3dwLgv2vP9ymsmNZqjpbkDq1SQqpxLYtAerLzmYgHlQOzVpUe3NbFb8tUFNylMeg6ez1iEpA7oOQw/7Tw==", + "dev": true, + "requires": { + "@babel/runtime": "7.7.4", + "chalk": "3.0.0", + "chance": "1.1.3", + "class-validator": "0.11.0", + "commander": "4.0.1", + "escodegen-wallaby": "1.6.27", + "espree": "^6.1.2", + "estraverse": "4.3.0", + "eventemitter3": "4.0.0", + "inversify": "5.0.1", + "js-string-escape": "1.0.1", + "md5": "2.2.1", + "mkdirp": "0.5.1", + "multimatch": "4.0.0", + "opencollective": "1.0.3", + "reflect-metadata": "0.1.13", + "source-map-support": "0.5.16", + "string-template": "1.0.0", + "tslib": "1.10.0" + } + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "dev": true, + "requires": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "multimatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "node-fetch": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz", + "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "opencollective": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz", + "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=", + "dev": true, + "requires": { + "babel-polyfill": "6.23.0", + "chalk": "1.1.3", + "inquirer": "3.0.6", + "minimist": "1.2.0", + "node-fetch": "1.6.3", + "opn": "4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "opn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "string-template": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", + "integrity": "sha1-np8iM9wA8hhxjsN5oopWc+zKi5Y=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "validator": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-12.0.0.tgz", + "integrity": "sha512-r5zA1cQBEOgYlesRmSEwc9LkbfNLTtji+vWyaHzRZUxCTHdsX3bd+sdHfs5tGZ2W6ILGGsxWxCNwT/h3IY/3ng==", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + } + } +} diff --git a/8-代码混淆的原理/package.json b/8-代码混淆的原理/package.json new file mode 100644 index 0000000..4c7b653 --- /dev/null +++ b/8-代码混淆的原理/package.json @@ -0,0 +1,14 @@ +{ + "name": "js-obfuscate", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Germey", + "license": "MIT", + "devDependencies": { + "javascript-obfuscator": "^0.18.8" + } +} diff --git a/9-处理常见代码混淆操作的方法/9-1.js b/9-处理常见代码混淆操作的方法/9-1.js new file mode 100644 index 0000000..fd2c036 --- /dev/null +++ b/9-处理常见代码混淆操作的方法/9-1.js @@ -0,0 +1 @@ +゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (c^_^o)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (o^_^o)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (o^_^o)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_'); \ No newline at end of file diff --git a/9-处理常见代码混淆操作的方法/9-2.js b/9-处理常见代码混淆操作的方法/9-2.js new file mode 100644 index 0000000..4ea5be0 --- /dev/null +++ b/9-处理常见代码混淆操作的方法/9-2.js @@ -0,0 +1 @@ +q=~[];q={___:++q,$$$$:(![]+"")[q],__$:++q,$_$_:(![]+"")[q],_$_:++q,$_$$:({}+"")[q],$$_$:(q[q]+"")[q],_$$:++q,$$$_:(!""+"")[q],$__:++q,$_$:++q,$$__:({}+"")[q],$$_:++q,$$$:++q,$___:++q,$__$:++q};q.$_=(q.$_=q+"")[q.$_$]+(q._$=q.$_[q.__$])+(q.$$=(q.$+"")[q.__$])+((!q)+"")[q._$$]+(q.__=q.$_[q.$$_])+(q.$=(!""+"")[q.__$])+(q._=(!""+"")[q._$_])+q.$_[q.$_$]+q.__+q._$+q.$;q.$$=q.$+(!""+"")[q._$$]+q.__+q._+q.$+q.$$;q.$=(q.___)[q.$_][q.$_];q.$(q.$(q.$$+"\""+"\\"+q.__$+q.$$_+q.$$_+q.$_$_+"\\"+q.__$+q.$$_+q._$_+"\\"+q.$__+q.___+q.$_$$+q.$_$_+"\\"+q.__$+q.$$_+q._$$+q.$$$_+q.$$_+q.$__+"\\"+q.$__+q.___+"=\\"+q.$__+q.___+"\\"+q.__$+q.$_$+q.$$_+q.$$$_+"\\"+q.__$+q.$$_+q.$$$+"\\"+q.$__+q.___+"\\"+q.__$+q.___+q._$_+q.$_$_+"\\"+q.__$+q.$$_+q._$$+q.$$$_+q.$$_+q.$__+"();\\"+q.__$+q._$_+"\\"+q.__$+q.$$_+q.$$_+q.$_$_+"\\"+q.__$+q.$$_+q._$_+"\\"+q.$__+q.___+"\\"+q.__$+q.$_$+q._$$+q.$$$_+"\\"+q.__$+q.$$$+q.__$+"\\"+q.$__+q.___+"=\\"+q.$__+q.___+"$('#"+q.$$__+q._$+"\\"+q.__$+q.$_$+q.$$_+q.__+q.$$$_+"\\"+q.__$+q.$_$+q.$$_+q.__+"')."+q.$_$_+q.__+q.__+"\\"+q.__$+q.$$_+q._$_+"('"+q._+"');\\"+q.__$+q._$_+"\\"+q.__$+q.$$_+q.$$_+q.$_$_+"\\"+q.__$+q.$$_+q._$_+"\\"+q.$__+q.___+q.__+"\\"+q.__$+q.$_$+q.__$+"\\"+q.__$+q.$_$+q.$_$+q.$$$_+"=\\"+q.$__+q.___+"(\\"+q.__$+q.__$+q.$_$+q.$_$_+q.__+"\\"+q.__$+q.$_$+q.___+"."+q.$$$$+(![]+"")[q._$_]+q._$+q._$+"\\"+q.__$+q.$$_+q._$_+"(($('#"+q.$$__+q._$+"\\"+q.__$+q.$_$+q.$$_+q.__+q.$$$_+"\\"+q.__$+q.$_$+q.$$_+q.__+"')."+q.$_$_+q.__+q.__+"\\"+q.__$+q.$$_+q._$_+"('"+q.__+"')\\"+q.$__+q.___+"+\\"+q.$__+q.___+q.__$+q.___+q.___+q.__$+q.___+")\\"+q.$__+q.___+"/\\"+q.$__+q.___+q.$__$+q.$__$+"))."+q.__+q._$+"\\"+q.__$+q._$_+q._$$+q.__+"\\"+q.__$+q.$$_+q._$_+"\\"+q.__$+q.$_$+q.__$+"\\"+q.__$+q.$_$+q.$$_+"\\"+q.__$+q.$__+q.$$$+"();\\"+q.__$+q._$_+"\\"+q.__$+q.$$_+q.$$_+q.$_$_+"\\"+q.__$+q.$$_+q._$_+"\\"+q.$__+q.___+"\\"+q.__$+q.$$_+q._$$+"\\"+q.__$+q.$_$+q.__$+"\\"+q.__$+q.$__+q.$$$+"\\"+q.__$+q.$_$+q.$$_+"\\"+q.$__+q.___+"=\\"+q.$__+q.___+"\\"+q.__$+q.$_$+q.$_$+q.$$_$+q.$_$+"(\\"+q.__$+q.$_$+q._$$+q.$$$_+"\\"+q.__$+q.$$$+q.__$+"\\"+q.$__+q.___+"+\\"+q.$__+q.___+q.$_$$+q.$_$_+"\\"+q.__$+q.$$_+q._$$+q.$$$_+q.$$_+q.$__+"."+q.$$$_+"\\"+q.__$+q.$_$+q.$$_+q.$$__+q._$+q.$$_$+q.$$$_+"("+q.__+"\\"+q.__$+q.$_$+q.__$+"\\"+q.__$+q.$_$+q.$_$+q.$$$_+"));\\"+q.__$+q._$_+"\\"+q.__$+q.$$_+q.$$_+q.$_$_+"\\"+q.__$+q.$$_+q._$_+"\\"+q.$__+q.___+"\\"+q.__$+q.$$_+q.___+q.$_$_+"\\"+q.__$+q.$$_+q._$_+q.$_$_+"\\"+q.__$+q.$_$+q.$_$+"\\"+q.$__+q.___+"=\\"+q.$__+q.___+"{\\"+q.__$+q._$_+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\\"\\"+q.__$+q.$_$+q._$$+q.$$$_+"\\"+q.__$+q.$$$+q.__$+"\\\":\\"+q.$__+q.___+"\\"+q.__$+q.$_$+q._$$+q.$$$_+"\\"+q.__$+q.$$$+q.__$+",\\"+q.__$+q._$_+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\\""+q.__+"\\"+q.__$+q.$_$+q.__$+"\\"+q.__$+q.$_$+q.$_$+q.$$$_+"\\\":\\"+q.$__+q.___+q.__+"\\"+q.__$+q.$_$+q.__$+"\\"+q.__$+q.$_$+q.$_$+q.$$$_+",\\"+q.__$+q._$_+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\\"\\"+q.__$+q.$$_+q._$$+"\\"+q.__$+q.$_$+q.__$+"\\"+q.__$+q.$__+q.$$$+"\\"+q.__$+q.$_$+q.$$_+"\\\":\\"+q.$__+q.___+"\\"+q.__$+q.$$_+q._$$+"\\"+q.__$+q.$_$+q.__$+"\\"+q.__$+q.$__+q.$$$+"\\"+q.__$+q.$_$+q.$$_+"\\"+q.__$+q._$_+"};\\"+q.__$+q._$_+"\\"+q.__$+q._$_+"$.\\"+q.__$+q.$__+q.$$$+q.$$$_+q.__+"(\\\"/\\"+q.__$+q.$_$+q.__$+"\\"+q.__$+q.$_$+q.$$_+q.$$_$+q.$$$_+"\\"+q.__$+q.$$$+q.___+"\\\",\\"+q.$__+q.___+"\\"+q.__$+q.$$_+q.___+q.$_$_+"\\"+q.__$+q.$$_+q._$_+q.$_$_+"\\"+q.__$+q.$_$+q.$_$+",\\"+q.$__+q.___+q.$$$$+q._+"\\"+q.__$+q.$_$+q.$$_+q.$$__+q.__+"\\"+q.__$+q.$_$+q.__$+q._$+"\\"+q.__$+q.$_$+q.$$_+"\\"+q.$__+q.___+"(\\"+q.__$+q.$$_+q._$_+q.$$$_+"\\"+q.__$+q.$$_+q._$$+"\\"+q.__$+q.$$_+q.___+")\\"+q.$__+q.___+"{\\"+q.__$+q._$_+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.__$+q.$_$+q.__$+q.$$$$+"(\\"+q.__$+q.$$_+q._$_+q.$$$_+"\\"+q.__$+q.$$_+q._$$+"\\"+q.__$+q.$$_+q.___+"."+q.$$_$+q.$_$_+q.__+q.$_$_+"."+q.$$$_+"\\"+q.__$+q.$$_+q._$_+"\\"+q.__$+q.$$_+q._$_+"\\"+q.__$+q.$_$+q.$$_+q._$+"\\"+q.$__+q.___+"==\\"+q.$__+q.___+"\\\""+q.___+"\\\"){\\"+q.__$+q._$_+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"$(\\\"."+(![]+"")[q._$_]+"\\"+q.__$+q.$_$+q.__$+"\\"+q.__$+q.$$_+q._$$+q.__+"_"+q.$$__+q._$+"\\"+q.__$+q.$_$+q.$$_+"\\\").\\"+q.__$+q.$_$+q.___+q.__+"\\"+q.__$+q.$_$+q.$_$+(![]+"")[q._$_]+"(\\\"\\"+q.__$+q.$$$+q.__$+q._$+q._+"\\"+q.$__+q.___+q.$_$_+"\\"+q.__$+q.$$_+q._$_+q.$$$_+"\\"+q.$__+q.___+"\\"+q.__$+q.$$_+q._$_+"\\"+q.__$+q.$_$+q.__$+"\\"+q.__$+q.$__+q.$$$+"\\"+q.__$+q.$_$+q.___+q.__+"\\\")\\"+q.__$+q._$_+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"}"+q.$$$_+(![]+"")[q._$_]+"\\"+q.__$+q.$$_+q._$$+q.$$$_+"\\"+q.$__+q.___+"{\\"+q.__$+q._$_+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"$(\\\"."+(![]+"")[q._$_]+"\\"+q.__$+q.$_$+q.__$+"\\"+q.__$+q.$$_+q._$$+q.__+"_"+q.$$__+q._$+"\\"+q.__$+q.$_$+q.$$_+"\\\").\\"+q.__$+q.$_$+q.___+q.__+"\\"+q.__$+q.$_$+q.$_$+(![]+"")[q._$_]+"(\\\"\\"+q.__$+q.$$$+q.__$+q._$+q._+"\\"+q.$__+q.___+q.$_$_+"\\"+q.__$+q.$$_+q._$_+q.$$$_+"\\"+q.$__+q.___+q.$$$_+"\\"+q.__$+q.$$_+q._$_+"\\"+q.__$+q.$$_+q._$_+q._$+"\\"+q.__$+q.$$_+q._$_+"\\\")\\"+q.__$+q._$_+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"\\"+q.$__+q.___+"}\\"+q.__$+q._$_+"});"+"\"")())(); \ No newline at end of file diff --git a/9-处理常见代码混淆操作的方法/9-3.js b/9-处理常见代码混淆操作的方法/9-3.js new file mode 100644 index 0000000..8afb7f9 --- /dev/null +++ b/9-处理常见代码混淆操作的方法/9-3.js @@ -0,0 +1,113 @@ + [][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+([][[]]+[])[+[]]+([][[]]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()(([]+[])[([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]]()[+[]])[+[]]+(!+[]+!+[]+[!+[]+!+[]+!+[]+!+[]])+[])+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]()[+!+[]+[!+[]+!+[]]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+([][[]]+[])[+[]]+([][[]]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()(([]+[])[([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]]()[+[]])[+[]]+(!+[]+!+[]+[!+[]+!+[]+!+[]])+[])+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]()[+!+[]+[!+[]+!+[]]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+(+(+!+[]+[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+[!+[]+!+[]]+[+[]])+[])[+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]()[+!+[]+[!+[]+!+[]]]+(!![]+[])[+[]]+([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]()[+!+[]+[!+[]+!+[]]]+[[]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]([[]])+[]+(![]+[])[+[]]+([][[]]+[])[+[]]+([][[]]+[])[+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+(!+[]+!+[]+!+[]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]])+(![]+[])[+!+[]]+(!![]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+([][[]]+[])[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+(!+[]+!+[]+!+[]+[!+[]+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]+!+[]])+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]()[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+([][[]]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(+(!+[]+!+[]+!+[]+[!+[]+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]+!+[]])+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()(([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]()[+!+[]+[+!+[]]])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+(+(+!+[]+[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+[!+[]+!+[]]+[+[]])+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()(([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]()[+!+[]+[+!+[]]])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]])()())[!+[]+!+[]+!+[]+[+[]]]+([![]]+[][[]])[+!+[]+[+[]]]+((+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+([][[]]+[])[+[]]+([][[]]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()(([]+[])[([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]]()[+[]])[+[]]+[!+[]+!+[]+!+[]]+(+(+!+[]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+[+[]]))+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+([][[]]+[])[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+(!+[]+!+[]+!+[]+[!+[]+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]+!+[]])+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+([][[]]+[])[+[]]+([][[]]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()(([]+[])[([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]]()[+[]])[+[]]+[!+[]+!+[]+!+[]]+(+(+!+[]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+[+[]]))+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+([][[]]+[])[+[]]+([][[]]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()(([]+[])[([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]]()[+[]])[+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+([][[]]+[])[!+[]+!+[]])+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+([][[]]+[])[+[]]+([][[]]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()(([]+[])[([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]]()[+[]])[+[]]+[!+[]+!+[]+!+[]]+(+(+!+[]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+[+[]])))() + + + + +