离谱的protobuf与jsvmp

0x0 请求响应分析

请求响应都是加密的,就不贴图了,题目已经告诉我们这是protobuf了,我们直接使用blackboxprotobuf这个库来处理protobuf的序列化和反序列化。

我们先把请求体和响应体复制出来反序列化一下看看。可以用抓包工具,也可以直接在浏览器里复制。

然后将复制到的请求体和响应体用CyberChef转成base64格式,方便在python中使用。

1
pip install blackboxprotobuf
1
2
3
4
5
6
7
8
import blackboxprotobuf,base64 


request_data = base64.b64decode('CAEQ5Y+4mgMY4I+4mgMgysufBQ==')
print('request_data:\n',blackboxprotobuf.decode_message(request_data))

response_data = base64.b64decode('CO+/vRkQ77+9KRjvv70pIO+/vRko77+9IzDvv70oOO+/vSJA77+9Qkjvv706UO+/vQM=')
print('response_data:\n',blackboxprotobuf.decode_message(response_data))

输出结果为:

1
2
3
4
request_data:
({'1': 1, '2': 860751845, '3': 860751840, '4': 11003338}, {'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''}, '3': {'type': 'int', 'name': ''}, '4': {'type': 'int', 'name': ''}})
response_data:
({'1': 53436399, '2': 86990831, '3': 86990831, '4': 53436399, '5': 74407919, '6': 84893679, '7': 72310767, '8': 139419631, '9': 122642415, '10': 7299055}, {'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''}, '3': {'type': 'int', 'name': ''}, '4': {'type': 'int', 'name': ''}, '5': {'type': 'int', 'name': ''}, '6': {'type': 'int', 'name': ''}, '7': {'type': 'int', 'name': ''}, '8': {'type': 'int', 'name': ''}, '9': {'type': 'int', 'name': ''}, '10': {'type': 'int', 'name': ''}})

从请求反序列化的结果中我们可以看到一共有4个参数,{'1': 1, '2': 860751845, '3': 860751840, '4': 11003338},其中第一个是页码,后面三个数字就是这题需要破解的。

0x1 替换蚂蚁文(g了)

使用V神插件替换变量名 https://github.com/cilame/v_jstools

一开始我的想法是:

  1. 替换变量名
  2. hook掉代码监测
  3. 插桩分析

结果卡在hook代码检测 中道崩殂了。

我的尝试:

  • hookFunction.prototye.toString返回原蚂蚁文的函数代码
  • hookRegExp.prototype.test,不起作用,甚至我替换后代码都执行不到这个函数就g了
  • hookString.prototype.match,在网上找到一篇大佬的记录,其中看到猫猫有提到match这个的关键点,然后我也开始hook它,确实hook到非常多的内容,但是我依旧没有过掉代码检测,用大佬修改好的html替换也没复现成功,但是群里的大佬说可以复现,大抵是我姿势不对吧,抓包替换、浏览器本地替换都没成功。我还尝试把正常的match函数的所有结果收集起来,在替换的代码里重放,结果还是不行。

尝试了各种方式后,都以失败告终,而且永远都是执行完最后一次match后就戛然而止。

hook代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// ==UserScript==
// @name hook 23
// @namespace http://tampermonkey.net/
// @version 2024-07-20
// @description try to take over the world!
// @author yousan
// @match *://www.python-spider.com/challenge/23
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// ==/UserScript==

(function() {
'use strict';
const _fnToString = Function.prototype.toString;
let cc=0;
Function.prototype.toString=function(){
if(cc==0){
return 'function(ۥ,ۦ,ﱞ,ﱟ,ﱠ){var ﱡ,ﱢ,ﱣ,ۥۥ,ۦۥ,ﱞۥ,ﱟۥ,ﱠۥ,ﱡۥ,ﱢۥ,ﱣۥ,ۥۦ,ۦۦ,ﱞۦ,ﱟۦ,ﱠۦ,ﱡۦ,ﱢۦ,ﱣۦ,ۥﱞ,ۦﱞ,ﱞﱞ,ﱟﱞ,ﱠﱞ,ﱡﱞ,ﱢﱞ,ﱣﱞ,ۥﱟ,ۦﱟ,ﱞﱟ,ﱟﱟ,ﱠﱟ,ﱡﱟ,ﱢﱟ,ﱣﱟ,ۥﱠ,ۦﱠ,ﱞﱠ,ﱟﱠ,ﱠﱠ,ﱡﱠ,ﱢﱠ,ﱣﱠ,ۥﱡ,ۦﱡ,ﱞﱡ,ﱟﱡ,ﱠﱡ,ﱡﱡ,ﱢﱡ,ﱣﱡ,ۥﱢ,ۦﱢ,ﱞﱢ,ﱟﱢ,ﱠﱢ,ﱡﱢ,ﱢﱢ,ﱣﱢ,ۥﱣ,ۦﱣ,ﱞﱣ,ﱟﱣ,ﱠﱣ,ﱡﱣ,ﱢﱣ,ﱣﱣ,ۥۥۥ,ۦۥۥ,ﱞۥۥ,ﱟۥۥ,ﱠۥۥ,ﱡۥۥ,ﱢۥۥ,ﱣۥۥ,ۥۦۥ,ۦۦۥ,ﱞۦۥ,ﱟۦۥ,ﱠۦۥ,ﱡۦۥ,ﱢۦۥ,ﱣۦۥ,ۥﱞۥ,ۦﱞۥ,ﱞﱞۥ,ﱟﱞۥ,ﱠﱞۥ,ﱡﱞۥ,ﱢﱞۥ,ﱣﱞۥ,ۥﱟۥ,ۦﱟۥ,ﱞﱟۥ,ﱟﱟۥ,ﱠﱟۥ,ﱡﱟۥ,ﱢﱟۥ,ﱣﱟۥ,ۥﱠۥ,ۦﱠۥ,ﱞﱠۥ,ﱟﱠۥ,ﱠﱠۥ,ﱡﱠۥ,ﱢﱠۥ,ﱣﱠۥ,ۥﱡۥ,ۦﱡۥ,ﱞﱡۥ,ﱟﱡۥ,ﱠﱡۥ,ﱡﱡۥ,ﱢﱡۥ,ﱣﱡۥ,ۥﱢۥ,ۦﱢۥ,ﱞﱢۥ,ﱟﱢۥ,ﱠﱢۥ,ﱡﱢۥ,ﱢﱢۥ,ﱣﱢۥ,ۥﱣۥ,ۦﱣۥ,ﱞﱣۥ,ﱟﱣۥ,ﱠﱣۥ,ﱡﱣۥ,ﱢﱣۥ,ﱣﱣۥ,ۥۥۦ;function ۦۥۦ(ۥ){return ۥ==ۥۥ?function(ۥ){return ۥ[ۦﱞۥ[ﱞﱠ]]}:ۥ==ﱣﱣ?function(ۥ,ۦ,ﱞ,ﱟ){for((ﱞ="")||(ﱟ=ۥ);ﱟ<ۦ;ﱟ++)ﱞ+=ۦﱟۥ(ﱟ);return ﱞ}:ۥ==ﱟﱞ?function(ۥ,ۦ,ﱞ){return ﱞ&&ۦ!=ۦﱞۥ[ﱣ]?ۥ[ۦﱞۥ[ﱣ]](ۦ):ۦ in ۥ}:ۥ==ﱞۥ?function(ۥ,ۦ,ﱞ){return!(ﱞ=ﱡﱠۥ[ۥ[ۦ]])||ۦ!=ﱡۦ&&ۦ!=ۦﱟ?ﱞ:ۥ[ۦﱞۥ[ﱡﱠ]]?ﱠﱡۥ[ۥ[ۦﱞۥ[ﱡﱠ]]]:(ۥ[ۦﱞۥ[ﱡﱠ]]=ۥ[ۦﱞۥ[ﱟﱟ]]+ۦﱞۥ[ﱡﱠ]+(ۥ[ۦﱞۥ[ﱣۥ]]^ﱞﱞ),ﱠﱡۥ[ۥ[ۦﱞۥ[ﱡﱠ]]]=ﱠﱣۥ(ﱣ,ﱠﱣۥ(ﱢ,ﱞ),ۥ[ۦﱞۥ[ﱣۥ]]&ۥﱞۥ),ﱠﱡۥ[ۥ[ۦﱞۥ[ﱡﱠ]]])}:ۥ==ﱡۥ?function(ۥ,ۦ,ﱞ,ﱟ){return(ﱟ=ﱡﱣۥ(ۦ?ۥ[ۦﱞۥ[ۥﱢ]](ۦ):ۥ))&&[ﱞ?null:ۥ[ۦﱞۥ[ۥﱢ]](ۦ+ﱟ[ﱢ],ۦ+ﱟ[ﱡ]+ﱟ[ﱢ]),ۦ+ﱟ[ﱡ]+ﱟ[ﱢ]]}:ۥ==ﱟﱢ?function(ۥ,ۦ,ﱞ){return(ﱞ={})[ۦﱞۥ[ﱟﱠ]]=function(){return ۦﱢۥ(function(){return ۦ?+(ۥ+ۦﱞۥ[ﱠﱟ]):ﱡﱞۥ[ۦﱞۥ[ﱠۥ]][ۦﱞۥ[ﱢۦ]][ۦﱞۥ[ۦﱠ]](ۥ)})},ﱞ[ۦﱞۥ[ﱟﱠ]]=ۦﱢۥ(ﱞ[ۦﱞۥ[ﱟﱠ]]),ﱣﱡۥ(ﱠﱞۥ,ﱞ,ۦﱞۥ[ﱢۦ],ﱞ),ﱞ}:ۥ==ﱠﱢ?function(ۥ,ۦ){return(ۦ={})[ۦﱞۥ[ﱟﱠ]]=function(){return ﱞﱢۥ[ۦﱞۥ[ﱣﱢ]]++,ۥ},ۦ[ۦﱞۥ[ﱟﱠ]]=ۦﱢۥ(ۦ[ۦﱞۥ[ﱟﱠ]]),ۦ}:ۥ==ۥۦۥ?function(ۥ){return ۥﱢۥ[ۦﱞۥ[ۦﱠ]][ۦﱞۥ[ﱟﱣ]](ۥﱢۥ[ۦﱞۥ[ۦﱠ]],ۥ)}:ۥ==ﱠۥ?function(ۥ,ۦ,ﱞ,ﱟ,ﱠ,ﱣ,ۥۥ){for(ۦ=ﱡ,ﱟ=(ﱞ=ۥ[ۦﱞۥ[ۦﱡ]](ۦﱡۥ)[ﱡ])[ۦﱞۥ[ۥﱢ]](ﱡ,-ﱢ),ﱠ=ﱞ[ۥﱣۥ(ﱞ)-ﱢ],ۦ+=ﱣﱠۥ[ۦﱞۥ[ۦﱞ]](ﱠ),ﱣ=ﱡ,ۥۥ=ۥﱣۥ(ﱟ)-ﱢ;ۥۥ>=ﱡ;ۥۥ--)ۦ+=ۥﱡۥ[ۦﱞۥ[ۦﱞ]](ﱟ[ۥۥ])*ﱣﱟۥ(ۥﱣۥ(ۥﱡۥ),ﱣ)*ۥﱣۥ(ﱣﱠۥ),ﱣ+=ﱢ;return[ۦ,ۥﱣۥ(ﱞ)]}:ۥ==ﱢﱟ?(ﱞﱢۥ={})&&ﱣﱡۥ(ﱢ,ﱣﱣۥ,ۦﱞۥ[ﱢۦ],((ﱟﱢۥ={})[ۦﱞۥ[ﱟﱠ]]=function(){return function(){ﱡﱠۥ[ۦﱞۥ[ۥﱣ]]()}})&&ﱟﱢۥ)&&ﱡ:ۥ==ﱢﱡ?(ﱞﱣۥ=ﱟﱣۥ,ﱟﱢۥ+ﱠﱢۥ):ۥ==ۦﱣ?function(ۥ,ۦ){ۦ?ۥ[ۦﱞ][ۦﱞۥ[ۥﱣ]]()||ۥ[ۥﱠ][ۦﱞۥ[ۥﱣ]]():ۥ[ۦﱞ][ۦﱞۥ[ﱣﱣ]](ﱡ)||ۥ[ۥﱠ][ۦﱞۥ[ﱣﱣ]](ﱡ)}:ۥ==ﱡﱠ?function(ۥ,ۦ,ﱞ,ﱟ,ﱠ){for((ﱟ=[])&&(ﱠ=ﱡ);ﱠ<ۥﱣۥ(ۦ);ﱠ++)ﱟ[ﱠ]=ۥ==ﱢ?ۦ[ۦﱞۥ[ﱡۥ]](ﱠ):ۦﱟۥ(ۦ[ﱠ]^ﱞ);return ۥ==ﱢ?ﱟ:ﱟ[ۦﱞۥ[ﱡﱡ]](ۦﱞۥ[ﱠﱟ])}:ۥ==ﱣ?function(ۥ){return(ۥ={})&&(ۥ[ۦﱞ]=[])&&(ۥ[ۥﱠ]=[])&&((ۥ[ﱡﱣ]=ﱡ)||ﱢ)&&ۥ}:ۥ==ﱟﱡ?function(ۥ,ۦ,ﱞ){return ۥ?ۦ[ۥﱣۥ(ۦ)-ﱢ]:ۦ[ۥﱣۥ(ۦ)-ﱢ]=ﱞ}:ۥ==ۥﱢ?function(ۥ,ۦ,ﱞ,ﱟ){for(ﱟ=ۥﱣۥ(ۥ)-ﱢ;ﱟ>=ﱡ;ﱟ--)if(ﱞﱣۥ(ۥ[ﱟ][ﱡ],ۦ,ﱢ))return ۥ[ﱟ][ﱡ][ۦ]=ﱞ;return ۥ[ﱡ][ﱡ][ۦ]=ﱞ}:ۥ==ۦﱠ?function(ۥ,ۦ,ﱞ,ﱟ,ﱠ,ﱡۥ,ﱢۥ,ﱣۥ){return(ۦ=ﱠﱠۥ[ۦﱞۥ[ﱣﱣ]])&&(ﱞ=ﱠﱠۥ[ۦﱞۥ[ۥﱣ]])&&(ﱟ=ﱠﱠۥ[ۦﱞۥ[ﱡﱡ]])&&(ﱠ=ﱠﱠۥ[ۦﱞۥ[ۥﱠ]])&&(ﱡۥ=ۦﱞۥ[ﱠﱟ][ۦﱞۥ[ﱣۦ]])&&(ﱢۥ=ۥﱠۥ[ۦﱞۥ[ﱠۥ]][ۦﱞۥ[ﱞﱢ]])&&(ﱣۥ=ۥﱢۥ[ۦﱞۥ[ﱠﱡ]])&&(ﱞﱢۥ[ۦﱞۥ[ﱣﱢ]]=ﱡ),ﱣﱡۥ(ﱠﱞۥ,ﱟﱞۥ[ۦﱞۥ[ﱡ]],ﱡﱢۥ(ۦﱞۥ[ﱢﱟ]),ﱢﱢۥ(ۥﱟۥ))&&ﱣﱡۥ(ﱠﱞۥ,ﱡﱞۥ[ۦﱞۥ[ﱠۥ]],ﱡﱢۥ(ۦﱞۥ[ﱢۦ]),ﱢﱢۥ(ﱡﱞۥ[ۦﱞۥ[ﱠۥ]][ۦﱞۥ[ﱢۦ]]))&&ﱣﱡۥ(ﱠﱞۥ,ﱢﱞۥ[ۦﱞۥ[ﱠۥ]],ﱡﱢۥ(ۦﱞۥ[ﱢۦ]),ﱢﱢۥ(ﱢﱞۥ[ۦﱞۥ[ﱠۥ]][ۦﱞۥ[ﱢۦ]]))&&ﱣﱡۥ(ﱠﱞۥ,ۦﱠۥ[ۦﱞۥ[ﱠۥ]],ﱡﱢۥ(ۦﱞۥ[ﱢۦ]),ﱢﱢۥ(ۦﱠۥ[ۦﱞۥ[ﱠۥ]][ۦﱞۥ[ﱢۦ]]))&&ﱣﱡۥ(ﱠﱞۥ,ﱣﱞۥ[ۦﱞۥ[ﱠۥ]],ﱡﱢۥ(ۦﱞۥ[ﱢۦ]),ﱢﱢۥ(ﱣﱞۥ[ۦﱞۥ[ﱠۥ]][ۦﱞۥ[ﱢۦ]]))&&ﱣﱡۥ(ﱠﱞۥ,ۥﱠۥ[ۦﱞۥ[ﱠۥ]],ﱡﱢۥ(ۦﱞۥ[ﱢۦ]),ﱢﱢۥ(ۥﱠۥ[ۦﱞۥ[ﱠۥ]][ۦﱞۥ[ﱢۦ]]))&&ﱣﱡۥ(ﱠﱞۥ,ۦﱠۥ[ۦﱞۥ[ﱠۥ]],ﱡﱢۥ(ۦﱞۥ[ﱣﱣ]),ﱢﱢۥ(ۦ))&&ﱣﱡۥ(ﱠﱞۥ,ۦﱠۥ[ۦﱞۥ[ﱠۥ]],ﱡﱢۥ(ۦﱞۥ[ۥﱣ]),ﱢﱢۥ(ﱞ))&&ﱣﱡۥ(ﱠﱞۥ,ۦﱠۥ[ۦﱞۥ[ﱠۥ]],ﱡﱢۥ(ۦﱞۥ[ﱡﱡ]),ﱢﱢۥ(ﱟ))&&ﱣﱡۥ(ﱠﱞۥ,ۦﱠۥ[ۦﱞۥ[ﱠۥ]],ﱡﱢۥ(ۦﱞۥ[ۥﱠ]),ﱢﱢۥ(ﱠ))&&ﱣﱡۥ(ﱠﱞۥ,ﱡﱞۥ[ۦﱞۥ[ﱠۥ]],ﱡﱢۥ(ۦﱞۥ[ﱣۦ]),ﱢﱢۥ(ﱡۥ))&&ﱣﱡۥ(ﱠﱞۥ,ۥﱠۥ[ۦﱞۥ[ﱠۥ]],ﱡﱢۥ(ۦﱞۥ[ﱞﱢ]),ﱢﱢۥ(ﱢۥ))&&ﱣﱡۥ(ﱠﱞۥ,ۥﱢۥ,ﱡﱢۥ(ۦﱞۥ[ﱠﱡ]),ﱢﱢۥ(ﱣۥ)),(ۥ=function(ۥ,ۦ,ﱞ){return ۥ==ﱢ?ۦﱞۥ[ﱟﱟ+ﱢ]+=ۦﱟۥ((ﱢ<<ﱞۦ)+ﱞۦ):ۥ==ﱣ?ۦ(ﱞ)():(ۥ||ﱡ)==ﱡ?ﱞﱢۥ[ۦﱞۥ[ﱣﱢ]]:ۥ==ۥۥ?ۦۥۦ[ۦﱞۥ[ﱟﱡ]]:ۥ==ۦۥ?ۦﱟ=ﱟۦ:ۥ==ﱞۥ?ۦﱞۥ[ۥﱢ]=ۦﱞۥ[ۥﱠ]:ۥ==ﱟۥ?ﱣﱢۥ:void 0})[ۦﱞۥ[ﱡﱠ]]=ﱞﱢۥ[ۦﱞۥ[ﱣﱢ]],ۥ}:ۥ==ﱡﱢ?function(ۥ,ۦ,ﱞ){return ﱟﱣۥ(ۦ,ﱡۦ)||ﱟﱣۥ(ۦ,ﱞﱠ)||(ﱞ?ﱣﱣۥ(ۥ,ۦ):ﱟﱣۥ(ۦ,ۦﱟ))}:ۥ==ۦﱢ?function(ۥ,ۦ,ﱞ){return(ﱞ={})[ۦﱞۥ[ﱟﱠ]]=ۦﱢۥ(function(){return ۦ==ۦﱞۥ[ۦﱟ]?ﱡﱡۥ:ۥ}),ۥﱟۥ(ۥ,ﱡﱢۥ(ۦﱞۥ[ﱣﱢ]),ﱞ)}:ۥ==ۥﱣ?function(ۥ,ۦ){for(ۦ=ﱡ;ۦ<ۥﱣۥ(ۥ);ۦ++)ۥ[ۦ]=ۥ[ۦ]()}:ۥ==ﱟۥۥ?function(ۥ,ۦ){ۥ[ۦﱞۥ[ۥﱡ]](function(ۦ,ﱞ,ﱟ,ﱠ){(ﱠ=ۦﱢۥ(function(){if(ﱠ[ۦﱞۥ[ﱣﱢ]]>ﱡ)return ﱠ[ۦﱞۥ[ﱣﱢ]]-=ﱢ,ۦ}))[ۦﱞۥ[ﱣﱢ]]=ﱢ,(ﱟ={})[ۦﱞۥ[ﱟﱠ]]=function(){return ﱠ[ۦﱞۥ[ﱣﱢ]]=ﱡ,ۦۥۦ},ۥ[ﱞ]=ۥﱟۥ(ﱠ,ۦﱞۥ[ﱢۦ],ﱟ)}),ۦ[ۦﱞۥ[ﱡﱠ]]=ﱡ}:ۥ==ۦۥۥ?function(ۥ,ۦ,ﱞ,ﱟ,ﱠ,ﱣ){if(ۦ==ۦﱞۥ[ﱟﱢ]?(ﱣ=!0,ﱠ=null):ۦ==ۦﱞۥ[ﱞﱟ]?(ﱣ=!0,ﱠ=ﱣﱣۥ(ﱟﱡ)(ﱢ,ۥ)[ۦۥ]):ۦ==ۦﱞۥ[ۦۥ]&&(ﱣ=!0,ﱠ=ﱣﱣۥ(ﱟﱡ)(ﱢ,ۥ)[ﱠۥ]),ﱣ)return ﱠ;for(ﱟ=ۥﱣۥ(ۥ)-ﱢ;ﱟ>=ﱡ;ﱟ--){if(ﱟ==ﱡ&&ۦ==ۦﱞۥ[ۥۥ]&&(ﱣ=!0,ﱠ=ۥ[ﱡ][ﱡ]),ﱞﱣۥ(ۥ[ﱟ][ﱡ],ۦ,ﱢ)&&(ﱣ=!0,ﱠ=ۥ[ﱟ][ﱡ][ۦ]),ﱣ)return ﱠ;if(ﱟ==ﱡ&&(ۦ==ۦﱞۥ[ﱢۥ]?(ﱣ=!0,ﱠ=ۥ[ﱡ][ﱞۥ]):ۦ==ۦﱞۥ[ۥۦ]?(ﱣ=!0,ﱠ=ۥ[ﱡ][ﱟۥ]):((ﱠ=ۥ[ﱟ][ﱡ][ۦ])||ۦ in ۥ[ﱟ][ﱡ])&&(ﱣ=!0),ﱣ))return ﱠ}if(!ﱞ)throw ﱟﱟۥ(ۦ+ۦﱞۥ[ﱣﱟ])}:ۥ==ﱢۥۥ?function(ۥ,ۦ,ﱞ,ﱟ,ﱠ,ۥۥ){return function ﱞۥ(){return(ۥۥ=[][ۦﱞۥ[ۥﱠ]](ۥ,[[{},ﱟ,ﱞ,this,arguments]]))&&(ﱠ=ﱣﱣۥ(ﱟﱡ)(ﱢ,ۥۥ))&&(ۦ!==ۦﱞۥ[ﱟﱢ]?ﱠ[ﱡ][ۦ]=ﱞۥ:ﱢ)&&(ﱞۥ[ۦﱞۥ[ﱡﱠ]]===ﱡ&&ﱣﱣۥ(ۥﱣ)(ﱠ[ۦۥ])||ﱢ)&&ﱠ[ﱢ][ۦﱞۥ[ۥﱡ]](function(ۥ,ۦ){ﱞﱣۥ(ۥ,ۦﱟ)?ﱠ[ﱡ][ﱟﱣۥ(ۥ,ۦﱟ)]=ﱠ[ۦۥ][ۦ]:ﱞﱣۥ(ۥ,ﱠۦ)&&(ﱠ[ﱡ][ﱟﱣۥ(ﱟﱣۥ(ۥ[ﱠۦ],ۦﱟ),ۦﱟ)]=ﱠﱟۥ(ﱠ[ۦۥ])[ۦﱞۥ[ۥﱡ]](function(ۥ){return ﱠ[ۦۥ][ۥ]})[ۦﱞۥ[ۥﱢ]](ۦ))}),ﱣﱣۥ(ۥۥ,ﱠ[ﱣ],ﱣﱣۥ(ﱣ)())}}:ۥ==ۦۦۥ?function ۥ(ۦ,ﱞ,ﱠ,ﱢﱣ,ۥۦۥ){var ۦۦۥ,ﱠۦۥ,ﱡۦۥ,ﱢۦۥ,ﱣۦۥ,ۥﱞۥ,ﱞﱞۥ,ﱟﱞۥ,ﱡﱞۥ,ﱢﱞۥ,ۥﱟۥ,ۦﱟۥ,ﱞﱟۥ,ﱟﱟۥ,ﱠﱟۥ,ﱡﱟۥ,ﱢﱟۥ,ۥﱠۥ,ۦﱠۥ,ﱞﱠۥ,ﱟﱠۥ,ﱠﱠۥ,ﱡﱠۥ,ﱢﱠۥ,ﱣﱠۥ,ۥﱡۥ,ۦﱡۥ,ﱞﱡۥ;return ۦ===ۦﱣ?ۦۥۦ(ۦﱣ):ۦ===ﱢۥۥ?ۦۥۦ(ﱢۥۥ):ۦ===ﱣ?ۦۥۦ(ﱣ):ۦ===ۦۥۥ?ۦۥۦ(ۦۥۥ):ۦ===ﱟﱡ?ۦۥۦ(ﱟﱡ):ۦ===ۥﱢ?ۦۥۦ(ۥﱢ):ۦ===ﱡﱢ?ۦۥۦ(ﱡﱢ):ۦ===ۦﱢ?ۦۥۦ(ۦﱢ):ۦ===ۥﱣ?ۦۥۦ(ۥﱣ):ۦ===ﱟۥۥ?ۦۥۦ(ﱟۥۥ):(ﱣﱢۥ+=ﱢ,ۦۦۥ=ﱞ[ۦﱞۥ[ﱟﱟ]],ﱠۦۥ=ﱞ[ۦۦۥ],ۦۦۥ==ﱢﱠ?function(){throw ۥ(ۦ,ﱠۦۥ[ﱡ])}():ۦۦۥ==ﱠۥ?function(){debugger}():ۦۦۥ==ﱟۦ||ۦۦۥ==ﱡۦ||ۦۦۥ==ﱞﱠ||ۦۦۥ==ۥﱟ||ۦۦۥ==ۦﱢ||ۦۦۥ==ﱡﱠ||ۦۦۥ==ﱞۦ?ﱟﱣۥ(ﱞ,ۦۦۥ):ۦۦۥ==ۥﱡ?ﱠۦۥ[ۦﱞۥ[ۥﱡ]](function(ﱞ){ۥ(ۦ,ﱞ)}):ۦۦۥ==ۦﱡ?function(ﱞ,ﱟ){ﱞﱣۥ(ﱠۦۥ[ﱡ],ﱡۥ)?(ﱞ=ۥ(ۦ,ﱠۦۥ[ﱢ]),ﱠۦۥ[ﱡ][ﱡۥ][ۦﱞۥ[ۥﱡ]](function(ﱟ,ﱠ){ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ][ﱟﱣۥ(ﱟ,ۦﱟ)]=ﱞ[ﱠ]})):(ﱟ=ﱟﱣۥ(ﱠۦۥ[ﱡ],ۦﱟ),ﱞ=ۥ(ۦ,ﱠۦۥ[ﱢ]),ﱞﱣۥ(ﱠۦۥ[ﱢ],ﱟۦ)&&ﱟﱣۥ(ﱠۦۥ[ﱢ],ﱟۦ)==ﱠۦ?ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ][ﱟ]=ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ][ﱟ]:ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ][ﱟ]=ﱞ)}():ۦۦۥ==ﱟﱢ?ﱠۦۥ[ۦﱞۥ[ۥﱡ]](function(ﱞ){ۥ(ۦ,ﱞ,ﱠ)}):ۦۦۥ==ﱟﱞ?ﱠ?ۥ(ﱟﱡ)(ﱡ,ﱠ[ۦﱞ],ﱢ):ﱡ:ۦۦۥ==ﱡﱡ?ﱠ?ۥ(ﱟﱡ)(ﱡ,ﱠ[ۥﱠ],ﱢ):ﱡ:ۦۦۥ==ﱣﱡ||ۦۦۥ==ﱟﱡ?function(ﱞ,ﱟ,ۥۥ,ۦۥ,ﱞۥ,ۥۥ){if(ۦۦۥ==ﱣﱡ&&(ﱡﱡۥ=ﱢﱡۥ()),ﱟ=ﱠۦۥ[ۦﱞۥ[ۥۥۥ]](function(ﱟ){return ﱟ[ﱞﱟ]?ۥ(ۦ,ﱟ)&&null:!ﱟ[ۥﱡ]||(ﱟ[ۥﱡ][ۦﱞۥ[ۥﱡ]](function(ﱟ){ﱞ=ﱟ[ۦﱡ][ﱡ],ﱞ=ﱟﱣۥ(ﱞ,ۦﱟ),ﱞﱣۥ(ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ],ﱞ)||(ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ][ﱞ]=void 0)}),!0)}),ۦۦۥ==ﱣﱡ){for(ۥۥ=ۥ(ﱣ)(),ۦۥ=ﱡ;ۦۥ<ۥﱣۥ(ﱟ);ۦۥ++)if(ﱞۥ=ۥ(ۦ,ﱟ[ۦۥ],ۥۥ),ۥۥ[ﱡﱣ])return ﱞۥ}else if(ۦۦۥ==ﱟﱡ)for(ۥۥ=ﱠ,ۦۥ=ﱡ;ۦۥ<ۥﱣۥ(ﱟ);ۦۥ++){if(ۥ(ﱟﱡ)(ﱢ,ۥۥ[ۥﱠ])){ۥ(ﱟﱡ)(ﱡ,ۥۥ[ۥﱠ],ﱡ);break}if(ﱞۥ=ۥ(ۦ,ﱟ[ۦۥ],ۥۥ),ۥ(ﱟﱡ)(ﱢ,ۥۥ[ۦﱞ]))break;if(ۥۥ[ﱡﱣ])return ﱞۥ}}():ۦۦۥ==ﱢۥ?function(ﱞ,ﱟ){for(ﱞ=ﱠ,ۥ(ۦﱣ)(ﱞ),ۥ(ۦ,ﱠۦۥ[ﱡ]);ۥ(ۦ,ﱠۦۥ[ﱢ]);ۥ(ۦ,ﱠۦۥ[ﱣ]))if(ۥ(ﱟﱡ)(ﱢ,ﱞ[ۥﱠ]))ۥ(ﱟﱡ)(ﱡ,ﱞ[ۥﱠ],ﱡ);else{if(ﱟ=ۥ(ۦ,ﱠۦۥ[ۥۥ],ﱞ),ۥ(ﱟﱡ)(ﱢ,ﱞ[ۦﱞ]))break;if(ﱞ[ﱡﱣ])return ﱟ}ۥ(ۦﱣ)(ﱞ,ﱢ)}():ۦۦۥ==ۦﱠ||ۦۦۥ==ۥﱢ?function(ﱞ,ﱟ,ۥۥ,ۦۥ,ﱞۥ){function ﱟۥ(ۦ,ﱞ,ﱠ,ﱣ,ۥۥ){ﱞ[ﱠ][ۦﱞۥ[ۥﱡ]](function(ﱞ){ﱞﱣۥ(ﱞ,ﱠ)?ﱟۥ(ۦ,ﱞ,ﱠ,ﱣ,ۥۥ):ﱞﱣۥ(ﱞ,ۦﱟ)&&(ﱟ?(ﱟ=!1,ۥۥ?ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ][ﱟﱣۥ(ﱞ,ۦﱟ)]=ﱣ:ۥ(ۥﱢ)(ۦ,ﱟﱣۥ(ﱞ,ۦﱟ),ﱣ)):ۥۥ?ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ][ﱟﱣۥ(ﱞ,ۦﱟ)]=void 0:ۥ(ۥﱢ)(ۦ,ﱟﱣۥ(ﱞ,ۦﱟ),void 0))})}function ﱠۥ(ۦ,ﱞ,ﱟ,ﱠ,ﱣ,ۥۥ){ﱞ[ﱟ][ۦﱞۥ[ۥﱡ]](function(ﱞ){ﱣ=ﱞ[ۦﱡ],ۥۥ=ﱣ[ﱡ],ﱞﱣۥ(ۥۥ,ۦﱟ)?ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ][ﱟﱣۥ(ۥۥ,ۦﱟ)]=ﱠ:ﱞﱣۥ(ۥۥ,ﱡۥ)&&ﱟۥ(ۦ,ۥۥ,ﱡۥ,ﱠ,ﱢ)})}for(ۦۥ in ﱞ=ﱠ,ۥ(ۦﱣ)(ﱞ),ﱟ=!0,ۥۥ=ۥ(ۦ,ﱠۦۥ[ﱢ]))if(ۦۦۥ==ۥﱢ&&(ۦۥ=ۥۥ[ۦۥ]),ۥ(ﱟﱡ)(ﱢ,ﱞ[ۥﱠ]))ۥ(ﱟﱡ)(ﱡ,ﱞ[ۥﱠ],ﱡ);else{if(ﱞﱣۥ(ﱠۦۥ[ﱡ],ۦﱟ)?ۥ(ۥﱢ)(ۦ,ﱟﱣۥ(ﱠۦۥ[ﱡ],ۦﱟ),ۦۥ):ﱞﱣۥ(ﱠۦۥ[ﱡ],ﱡۥ)?(ﱟۥ(ۦ,ﱠۦۥ[ﱡ],ﱡۥ,ۦۥ),ﱟ=!0):ﱞﱣۥ(ﱠۦۥ[ﱡ],ۥﱡ)&&(ﱠۥ(ۦ,ﱠۦۥ[ﱡ],ۥﱡ,ۦۥ),ﱟ=!0),ﱞۥ=ۥ(ۦ,ﱠۦۥ[ﱣ],ﱞ),ۥ(ﱟﱡ)(ﱢ,ﱞ[ۦﱞ]))break;if(ﱞ[ﱡﱣ])return ﱞۥ}ۥ(ۦﱣ)(ﱞ,ﱢ)}():ۦۦۥ==ﱢﱟ?function(ﱞ){ﱞ=ﱠ,ۥ(ۦﱣ)(ﱞ);do{if(ۥ(ﱟﱡ)(ﱢ,ﱞ[ۥﱠ]))ۥ(ﱟﱡ)(ﱡ,ﱞ[ۥﱠ],ﱡ);else{if(ﱢۦۥ=ۥ(ۦ,ﱠۦۥ[ﱢ],ﱞ),ۥ(ﱟﱡ)(ﱢ,ﱞ[ۦﱞ]))break;if(ﱞ[ﱡﱣ])return ﱢۦۥ}}while(ۥ(ۦ,ﱠۦۥ[ﱡ],ﱞ));ۥ(ۦﱣ)(ﱞ,ﱢ)}():ۦۦۥ==ۥۦ?function(ﱞ){for(ﱞ=ﱠ,ۥ(ۦﱣ)(ﱞ);ۥ(ۦ,ﱠۦۥ[ﱡ]);)if(ۥ(ﱟﱡ)(ﱢ,ﱞ[ۥﱠ]))ۥ(ﱟﱡ)(ﱡ,ﱞ[ۥﱠ],ﱡ);else{if(ﱢۦۥ=ۥ(ۦ,ﱠۦۥ[ﱢ],ﱞ),ۥ(ﱟﱡ)(ﱢ,ﱞ[ۦﱞ]))break;if(ﱞ[ﱡﱣ])return ﱢۦۥ}ۥ(ۦﱣ)(ﱞ,ﱢ)}():ۦۦۥ==ﱣﱞ?function(ﱞ,ﱟ,ۥۥ){ﱞ=ﱠ,ﱟ=!1;try{if(ۥۥ=ۥ(ۦ,ﱠۦۥ[ﱡ],ﱞ),ﱞ[ﱡﱣ])return ﱟ=!0,ۥۥ}catch(ﱠ){if(ۥۥ=ۥ(ۦ,ﱠۦۥ[ﱢ],ﱞ,ﱠ),ﱞ[ﱡﱣ])return ﱟ=!0,ۥۥ}finally{if(ۥۥ=ۥ(ۦ,ﱠۦۥ[ﱣ],ﱞ),ﱞ[ﱡﱣ]&&!ﱟ)return ۥۥ}}():ۦۦۥ==ۥﱞ?function(ﱞ,ﱟ,ﱣ,ۥۥ,ۦۥ,ﱞۥ,ﱟۥ,ﱠۥ,ﱡۥ,ﱢۥ,ﱣۥ){for(ﱞ=ﱠ,ﱟ=ۥ(ۦ,ﱠۦۥ[ﱡ]),ﱣ=ﱠۦۥ[ۦﱞۥ[ۥﱢ]](ﱢ),ۥۥ=!1,ۦۥ=!1,ۥ(ۦﱣ)(ﱞ),ﱞۥ=ﱡ;ﱞۥ<ۥﱣۥ(ﱣ)&&!ۥ(ﱟﱡ)(ﱢ,ﱞ[ۥﱠ]);ﱞۥ++)if(ﱡۥ=(ﱠۥ=ۥ(ۦ,ﱣ[ﱞۥ],ﱟ))[ﱡ],ﱢۥ=ﱠۥ[ﱢ],ﱟ===ﱡۥ&&(ۥۥ=!0),ۥۥ){for(ﱟۥ=ﱡ;ﱟۥ<ۥﱣۥ(ﱢۥ);ﱟۥ++){if(ﱣۥ=ۥ(ۦ,ﱢۥ[ﱟۥ],ﱞ),ۥ(ﱟﱡ)(ﱢ,ﱞ[ۦﱞ])){ۦۥ=!0;break}if(ﱞ[ﱡﱣ])return ﱣۥ}if(ۦۥ)break}ۥ(ۦﱣ)(ﱞ,ﱢ)}():ۦۦۥ==ﱠﱟ?[ﱞﱣۥ(ﱠۦۥ[ﱡ],ۦﱟ)&&ﱟﱣۥ(ﱠۦۥ[ﱡ],ۦﱟ)==ۦﱞۥ[ﱟﱢ]?ﱠ:ۥ(ۦ,ﱠۦۥ[ﱡ]),ﱠۦۥ[ۦﱞۥ[ۥﱢ]](ﱢ)]:ۦۦۥ==ۦﱟ?ۥ(ۦۥۥ)(ۦ,ﱟﱣۥ(ﱞ,ۦۦۥ)):ۦۦۥ==ۦﱞ?((ﱡۦۥ={})[ﱟﱣۥ(ﱠۦۥ[ﱡ],ۦﱟ)]=ﱢﱣ,ۦ[ۦﱞۥ[ﱣﱣ]]([ﱡۦۥ,null]),ﱢۦۥ=ۥ(ۦ,ﱠۦۥ[ﱢ],ﱠ),ۦ[ۦﱞۥ[ۥﱣ]](),ﱠ[ﱡﱣ]?ﱢۦۥ:void 0):ۦۦۥ==ﱢۦ?ﱠۦۥ[ۦﱞۥ[ۥﱡ]](function(ﱞ){return ۥ(ۦ,ﱞ)[ۦﱞۥ[ﱢۦ]]()})[ۦﱞۥ[ﱡﱡ]](ۦﱞۥ[ﱠﱟ]):ۦۦۥ==ﱣ?ۥ(ۦ,ﱠۦۥ[ﱡ]):ۦۦۥ==ﱞﱢ?(ﱣۦۥ=ﱟﱣۥ(ﱠۦۥ[ﱡ],ﱟۦ),ۥﱞۥ=ﱠۦۥ[ﱢ],ﱞﱞۥ=function(ۦ,ﱞ,ﱟ,ﱠ,ۥۥ,ۦۥ,ﱞۥ,ﱟۥ){return ﱞﱣۥ(ﱟ,ﱡ)?(ﱟۥ=ﱟ[ﱡ],ﱞۥ=ۥ(ۦ,ﱟۥ[ﱡ]),ﱟۥ=ۥ(ﱡﱢ)(ۦ,ﱟۥ[ﱢ],ۥ(ۦ,ﱟۥ[ﱣ])==ﱣۥۥ),ۦۥ=!0):ﱟ=ﱟﱣۥ(ﱟ,ۦﱟ),ۥۥ&&(ﱠ=ۥ(ۦ,ﱠ)),ﱞ==ﱠﱣ?ۦۥ?ﱞۥ[ﱟۥ]=ﱠ:ۥ(ۥﱢ)(ۦ,ﱟ,ﱠ):ﱞ==ۥﱡ?ۦۥ?ﱞۥ[ﱟۥ]+=ﱠ:ۥ(ۥﱢ)(ۦ,ﱟ,ۥ(ۦۥۥ)(ۦ,ﱟ)+ﱠ):ﱞ==ﱡۦ?ۦۥ?ﱞۥ[ﱟۥ]-=ﱠ:ۥ(ۥﱢ)(ۦ,ﱟ,ۥ(ۦۥۥ)(ۦ,ﱟ)-ﱠ):ﱞ==ﱡﱡ?ۦۥ?ﱞۥ[ﱟۥ]*=ﱠ:ۥ(ۥﱢ)(ۦ,ﱟ,ۥ(ۦۥۥ)(ۦ,ﱟ)*ﱠ):ﱞ==ﱞۥۥ?ۦۥ?ﱞۥ[ﱟۥ]/=ﱠ:ۥ(ۥﱢ)(ۦ,ﱟ,ۥ(ۦۥۥ)(ۦ,ﱟ)/ﱠ):ﱞ==ﱞﱠ?ۦۥ?ﱞۥ[ﱟۥ]%=ﱠ:ۥ(ۥﱢ)(ۦ,ﱟ,ۥ(ۦۥۥ)(ۦ,ﱟ)%ﱠ):ﱞ==ﱞۦ?ۦۥ?ﱞۥ[ﱟۥ]<<=ﱠ:ۥ(ۥﱢ)(ۦ,ﱟ,ۥ(ۦۥۥ)(ۦ,ﱟ)<<ﱠ):ﱞ==ۥﱟ?ۦۥ?ﱞۥ[ﱟۥ]>>=ﱠ:ۥ(ۥﱢ)(ۦ,ﱟ,ۥ(ۦۥۥ)(ۦ,ﱟ)>>ﱠ):ﱞ==ﱟﱣ?ۦۥ?ﱞۥ[ﱟۥ]>>>=ﱠ:ۥ(ۥﱢ)(ۦ,ﱟ,ۥ(ۦۥۥ)(ۦ,ﱟ)>>>ﱠ):ﱞ==ﱢۦ?ۦۥ?ﱞۥ[ﱟۥ]&=ﱠ:ۥ(ۥﱢ)(ۦ,ﱟ,ۥ(ۦۥۥ)(ۦ,ﱟ)&ﱠ):ﱞ==ﱟۦ?ۦۥ?ﱞۥ[ﱟۥ]|=ﱠ:ۥ(ۥﱢ)(ۦ,ﱟ,ۥ(ۦۥۥ)(ۦ,ﱟ)|ﱠ):ﱞ==ﱞﱣ?ۦۥ?ﱞۥ[ﱟۥ]^=ﱠ:ۥ(ۥﱢ)(ۦ,ﱟ,ۥ(ۦۥۥ)(ۦ,ﱟ)^ﱠ):ﱞ==ۦﱟ?ۦۥ?ﱞۥ[ﱟۥ]=ﱣﱟۥ(ﱞۥ[ﱟۥ],ﱠ):ۥ(ۥﱢ)(ۦ,ﱟ,ﱣﱟۥ(ۥ(ۦۥۥ)(ۦ,ﱟ),ﱠ)):void 0},ﱞﱣۥ(ۥﱞۥ,ﱡۥ)?(ﱟﱞۥ=ۥ(ۦ,ﱠۦۥ[ﱣ]),ۥﱞۥ[ﱡۥ][ۦﱞۥ[ۥﱡ]](function(ۥ,ﱞ){return ﱞﱞۥ(ۦ,ﱣۦۥ,ۥ,ﱟﱞۥ[ﱞ])})):ﱞﱞۥ(ۦ,ﱣۦۥ,ۥﱞۥ,ﱠۦۥ[ﱣ],ﱢ)):ۦۦۥ==ۥۥ?ۥ(ۦ,ﱠۦۥ[ﱡ]):ۦۦۥ==ﱢﱞ?function(ﱞ,ﱟ){for((ﱞ=[])&&(ﱟ=ﱡ);ﱟ<ۥﱣۥ(ﱠۦۥ);ﱟ++)ﱞﱣۥ(ﱠۦۥ[ﱟ],ﱣﱟ)||(ﱞ[ﱟ]=ۥ(ۦ,ﱠۦۥ[ﱟ]));return ﱞ}():ۦۦۥ==ﱠﱠ?((ﱣۦۥ=ﱟﱣۥ(ﱠۦۥ[ﱡ],ﱟۦ))||ﱢ)&&((ﱡﱞۥ=ۥ(ۦ,ﱠۦۥ[ﱢ]))||ﱢ)&&((ﱢﱞۥ=ۥ(ۦ,ﱠۦۥ[ﱣ]))||ﱢ)&&(ﱣۦۥ==ﱟﱟ?ﱡﱞۥ+ﱢﱞۥ:ﱣۦۥ==ۦﱡ?ﱡﱞۥ-ﱢﱞۥ:ﱣۦۥ==ﱣﱠ?ﱡﱞۥ/ﱢﱞۥ:ﱣۦۥ==ﱞﱟ?ﱡﱞۥ*ﱢﱞۥ:ﱣۦۥ==ﱢ?ﱣﱟۥ(ﱡﱞۥ,ﱢﱞۥ):ﱣۦۥ==ﱡ?ﱡﱞۥ%ﱢﱞۥ:ﱣۦۥ==ﱠﱠ?ﱡﱞۥ<ﱢﱞۥ:ﱣۦۥ==ﱞۦۥ?ﱡﱞۥ<=ﱢﱞۥ:ﱣۦۥ==ﱞﱢ?ﱡﱞۥ>ﱢﱞۥ:ﱣۦۥ==ﱞﱡ?ﱡﱞۥ>=ﱢﱞۥ:ﱣۦۥ==ﱣﱟ?ﱡﱞۥ in ﱢﱞۥ:ﱣۦۥ==ﱢۥ?ﱡﱞۥ&ﱢﱞۥ:ﱣۦۥ==ﱣﱡ?ﱡﱞۥ!=ﱢﱞۥ:ﱣۦۥ==ۥۦ?ﱡﱞۥ!==ﱢﱞۥ:ﱣۦۥ==ﱢﱢ?ﱡﱞۥ|ﱢﱞۥ:ﱣۦۥ==ﱞﱞ?ﱡﱞۥ^ﱢﱞۥ:ﱣۦۥ==ﱣۥ?ﱡﱞۥ==ﱢﱞۥ:ﱣۦۥ==ﱠﱞ?ﱡﱞۥ===ﱢﱞۥ:ﱣۦۥ==ﱡۥۥ?ﱡﱞۥ<<ﱢﱞۥ:ﱣۦۥ==ۥﱞ?ﱡﱞۥ>>ﱢﱞۥ:ﱣۦۥ==ﱠﱟ?ﱡﱞۥ>>>ﱢﱞۥ:ﱣۦۥ==ﱟﱠ?ﱡﱞۥ instanceof ﱢﱞۥ:void 0):ۦۦۥ==ﱢ?((ۥﱟۥ=ﱠ)&&(ۥﱟۥ[ﱡﱣ]=ﱢ),ﱢۦۥ=ﱠۦۥ[ۦﱞۥ[ۥﱡ]](function(ﱞ){return ۥ(ۦ,ﱞ)}),ۥ(ﱟﱡ)(ﱢ,ﱢۦۥ)):ۦۦۥ==ۦۥ?(ﱢۦۥ={},ﱠۦۥ[ۦﱞۥ[ۥﱡ]](function(ﱞ){ۦﱟۥ=ۥ(ۦ,ﱞ),ﱞﱟۥ=ۦﱟۥ[ﱡ],ﱟﱟۥ=ۦﱟۥ[ﱢ],ۦﱟۥ[ﱣ]?((ﱠﱟۥ={})&&(ﱠﱟۥ[ۦﱞۥ[ۥﱞ]]=!0)&&(ﱠﱟۥ[ۦﱞۥ[ﱠﱞ]]=!0),ۦﱟۥ[ﱣ]==ﱢ?(ﱠﱟۥ[ۦﱞۥ[ﱟﱠ]]=ﱟﱟۥ,ﱣﱡۥ(ﱠﱞۥ,ﱢۦۥ,ﱞﱟۥ,ﱠﱟۥ)):ۦﱟۥ[ﱣ]==ﱣ&&(ﱠﱟۥ[ۦﱞۥ[ﱠﱢ]]=ﱟﱟۥ,ﱣﱡۥ(ﱠﱞۥ,ﱢۦۥ,ﱞﱟۥ,ﱠﱟۥ))):ﱢۦۥ[ﱞﱟۥ]=ﱟﱟۥ}),ﱢۦۥ):ۦۦۥ==ﱣۦ?[ۥ(ﱡﱢ)(ۦ,ﱠۦۥ[ﱡ],ۥ(ۦ,ۥ(ﱟﱡ)(ﱢ,ﱠۦۥ))==ﱣۥۥ),ۥ(ۦ,ﱠۦۥ[ﱢ])]:ۦۦۥ==ۦۦ?((ﱡﱟۥ=ۥ(ۦ,ۥ(ﱟﱡ)(ﱢ,ﱠۦۥ)))==ﱠﱡ?ﱢﱞۥ=ﱢ:ﱡﱟۥ==ﱟۦۥ&&(ﱢﱞۥ=ﱣ),ﱠۦۥ=ﱠۦۥ[ۦﱞۥ[ۥﱢ]](ﱡ,-ﱢ),ﱢﱟۥ=ۥ(ۦ,ۥ(ﱟﱡ)(ﱢ,ﱠۦۥ))==ﱣۥۥ,ﱠۦۥ=ﱠۦۥ[ۦﱞۥ[ۥﱢ]](ﱡ,-ﱢ),ﱞﱟۥ=ۥ(ﱡﱢ)(ۦ,ۥ(ﱟﱡ)(ﱢ,ﱠۦۥ),ﱢﱟۥ),ﱟﱟۥ=ﱠۦۥ[ۥﱣۥ(ﱠۦۥ)-ﱣ],ۥﱠۥ=ﱠۦۥ[ۦﱞۥ[ۥﱢ]](ﱡ,ۥﱣۥ(ﱠۦۥ)-ﱣ),ۦﱠۥ=ۥ(ۦﱢ)(ۥ(ﱢۥۥ)(ۦ,ﱡﱢۥ(ﱞﱟۥ),ﱟﱟۥ,ۥﱠۥ),ﱞﱟۥ)[ۦﱞۥ[ﱣﱢ]],[ﱞﱟۥ,ۦﱠۥ,ﱢﱞۥ]):ۦۦۥ==ﱟﱟ?ۥ(ﱟﱡ)(ﱢ,ﱠۦۥ[ۦﱞۥ[ۥﱡ]](function(ﱞ){return ۥ(ۦ,ﱞ)})):ۦۦۥ==ﱠﱡ?((ﱢۦۥ=ۥ(ۦ,ﱠۦۥ[ﱡ])?ۥ(ۦ,ﱠۦۥ[ﱢ],ﱠ):ۥ(ۦ,ﱠۦۥ[ﱣ],ﱠ))||ﱢ)&&ﱠ[ﱡﱣ]?ﱢۦۥ:void 0:ۦۦۥ==ﱞﱞ?(ﱞﱠۥ=ۥ(ۦ,ﱠۦۥ[ﱡ]),ﱟﱠۥ=ۥ(ۦ,ﱠۦۥ[ﱢ]),ﱠﱠۥ=ﱠۦۥ[ﱣ],function(ۦ,ﱞ,ﱟ,ﱠ,ۥۥ,ۦۥ){return ﱞ==ﱣﱞ?ﱞﱣۥ(ﱠ,ﱡ)?(ۦۥ=ﱠ[ﱡ],ۥۥ=ۥ(ۦ,ۦۥ[ﱡ]),ۦۥ=ۥ(ﱡﱢ)(ۦ,ۦۥ[ﱢ],ۥ(ۦ,ۦۥ[ﱣ])==ﱣۥۥ),ﱟ==ﱣۥۥ?++ۥۥ[ۦۥ]:ۥۥ[ۦۥ]++):(ۦۥ=ۥ(ۦ,ﱠ),ﱞﱣۥ(ﱠ,ۦﱟ)&&ۥ(ۥﱢ)(ۦ,ﱟﱣۥ(ﱠ,ۦﱟ),ۦۥ+ﱢ),ﱟ==ﱣۥۥ?ۦۥ+ﱢ:ۦۥ):ﱞ==ﱢﱠ?ﱞﱣۥ(ﱠ,ﱡ)?(ۦۥ=ﱠ[ﱡ],ۥۥ=ۥ(ۦ,ۦۥ[ﱡ]),ۦۥ=ۥ(ﱡﱢ)(ۦ,ۦۥ[ﱢ],ۥ(ۦ,ۦۥ[ﱣ])==ﱣۥۥ),ﱟ==ﱣۥۥ?--ۥۥ[ۦۥ]:ۥۥ[ۦۥ]--):(ۦۥ=ۥ(ۦ,ﱠ),ﱞﱣۥ(ﱠ,ۦﱟ)&&ۥ(ۥﱢ)(ۦ,ﱟﱣۥ(ﱠ,ۦﱟ),ۦۥ-ﱢ),ﱟ==ﱣۥۥ?ۦۥ-ﱢ:ۦۥ):void 0}(ۦ,ﱞﱠۥ,ﱟﱠۥ,ﱠﱠۥ)):(ۦۦۥ^ﱟۥ)<ﱢ?ۥ(ۦ,ۥ(ﱟﱡ)(ﱢ,ﱠۦۥ),ﱡ,ﱡ,ﱡ)[ۦﱞۥ[ﱣﱠ]](ﱡ,ﱠۦۥ[ۦﱞۥ[ۥﱢ]](ﱡ,-ﱢ)[ۦﱞۥ[ۥﱡ]](function(ﱞ){return ۥ(ۦ,ﱞ)})):ۦۦۥ==ﱞﱟ?ۥﱣۥ(ﱠۦۥ)<=ﱣ&&ﱞﱣۥ(ﱠۦۥ[ﱡ],ﱞﱠ)?ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ][ﱟﱣۥ(ۥ(ﱟﱡ)(ﱢ,ﱠۦۥ),ۦﱟ)]=ﱟ[ۥ(ۦ,ﱠۦۥ[ﱡ])]:(ﱞﱟۥ=ﱟﱣۥ(ۥ(ﱟﱡ)(ﱢ,ﱠۦۥ),ۦﱟ))&&(ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ][ﱞﱟۥ]=ۥ(ۦﱢ)(ۥ(ﱢۥۥ)(ۦ,ﱡﱢۥ(ﱞﱟۥ),ﱠۦۥ[ۥﱣۥ(ﱠۦۥ)-ﱣ],ﱠۦۥ[ۦﱞۥ[ۥﱢ]](ﱡ,ۥﱣۥ(ﱠۦۥ)-ﱣ)),ﱞﱟۥ)[ۦﱞۥ[ﱣﱢ]]):ۦۦۥ==ﱣۥ?ۥ(ۦ,ﱠۦۥ[ﱡ])?ۥ(ۦ,ﱠۦۥ[ﱢ]):ۥ(ۦ,ﱠۦۥ[ﱣ]):ۦۦۥ==ﱡﱞ?function(ۦ,ﱞ,ﱟ,ﱠ,ۥۥ,ﱞۥ){return ﱞ==ﱟﱟ?+ۥ(ۦ,ﱟ):ﱞ==ۦﱡ?-ۥ(ۦ,ﱟ):ﱞ==ﱢﱞ?!ۥ(ۦ,ﱟ):ﱞ==ۦۥ?~ۥ(ۦ,ﱟ):ﱞ==ﱣۦ?ﱞﱣۥ(ﱟ,ۦﱟ)?typeof ۥ(ۦۥۥ)(ۦ,ﱟﱣۥ(ﱟ,ۦﱟ),ﱢ):typeof ۥ(ۦ,ﱟ):ﱞ!=ﱠۥۥ?ﱞ==ۦۦ?ﱞﱣۥ(ﱟ,ۦﱟ)?ﱞﱣۥ(ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ],ﱟﱣۥ(ﱟ,ۦﱟ))?delete ۥ(ﱟﱡ)(ﱢ,ۦ)[ﱡ][ﱟﱣۥ(ﱟ,ۦﱟ)]:(ﱞۥ=ﱟﱣۥ(ﱟ,ۦﱟ))==ۦﱞۥ[ۥۦ]?delete module:ﱞۥ!=ۦﱞۥ[ﱢۥ]||delete exports:ﱞﱣۥ(ﱟ,ﱡ)?(ۥۥ=ﱟ[ﱡ],delete ۥ(ۦ,ۥۥ[ﱡ])[ۥۥ=ۥ(ﱡﱢ)(ۦ,ۥۥ[ﱢ],ۥ(ۦ,ۥۥ[ﱣ])==ﱣۥۥ)]):(ۥ(ۦ,ﱟ),!0):void 0:void ۥ(ۦ,ﱟ)}(ۦ,ۥ(ۦ,ﱠۦۥ[ﱡ]),ﱠۦۥ[ﱢ]):ۦۦۥ==ﱢﱡ?function(ۦ,ﱞ,ﱟ,ﱠ){return ﱞ==ﱡﱞ?ﱟ||ۥ(ۦ,ﱠ):ﱞ==ﱡﱟ?ﱟ&&ۥ(ۦ,ﱠ):void 0}(ۦ,ۥ(ۦ,ﱠۦۥ[ﱡ]),ۥ(ۦ,ﱠۦۥ[ﱢ]),ﱠۦۥ[ﱣ]):ۦۦۥ==ﱠﱞ?ۥﱣۥ(ﱠۦۥ)<=ﱣ&&ﱞﱣۥ(ﱠۦۥ[ﱡ],ﱞﱠ)?ﱟ[ۥ(ۦ,ﱠۦۥ[ﱡ])]:ۥ(ۦﱢ)(ۥ(ﱢۥۥ)(ۦ,ﱟﱣۥ(ۥ(ﱟﱡ)(ﱢ,ﱠۦۥ),ۦﱟ),ﱠۦۥ[ۥﱣۥ(ﱠۦۥ)-ﱣ],ﱠۦۥ[ۦﱞۥ[ۥﱢ]](ﱡ,ۥﱣۥ(ﱠۦۥ)-ﱣ)))[ۦﱞۥ[ﱣﱢ]]:ۦۦۥ==ۥﱠ?(ﱟﱟۥ=ۥ(ﱟﱡ)(ﱢ,ﱠۦۥ),ۥﱠۥ=ﱠۦۥ[ۦﱞۥ[ۥﱢ]](ﱡ,ۥﱣۥ(ﱠۦۥ)-ﱢ),ۦﱠۥ=ۥ(ۦﱢ)(ۥ(ﱢۥۥ)(ۦ,ۦﱞۥ[ﱟﱢ],ﱟﱟۥ,ۥﱠۥ))[ۦﱞۥ[ﱣﱢ]]):ۦۦۥ==ﱞۥ?ۥ(ﱟﱡ)(ﱢ,ۦ)[ۥۥ]:ۦۦۥ==ﱡ?(ﱟﱟۥ=ۥ(ﱡﱢ)(ۦ,ﱠۦۥ[ﱢ],ۥ(ۦ,ﱠۦۥ[ﱣ])==ﱣۥۥ),ﱡﱠۥ=ﱢﱣ||[],ۦﱠۥ=ۥ(ۦ,ﱠۦۥ[ﱡ],typeof ﱠ!=ۦﱞۥ[ﱢﱠ]?ﱢ:ﱠ+ﱢ,ﱡﱠۥ,ۥۦۥ),ﱠ?(ﱡﱠۥ[ۦﱞۥ[ﱣﱣ]](ﱟﱟۥ),[ۦﱠۥ,ۦﱠۥ[ﱟﱟۥ]]):(ﱡﱠۥ[ۦﱞۥ[ۥﱡ]](function(ۥ){return ۦﱠۥ=ۦﱠۥ[ﱡ],ۥ})[ۦﱞۥ[ۥﱡ]](function(ۥ){ۦﱠۥ=ۦﱠۥ[ۥ]}),ۥۦۥ&&ۥۦۥ[ﱣﱢ]?function(){return ۦﱠۥ[ﱟﱟۥ][ۦﱞۥ[ﱣﱠ]](ۦﱠۥ,(ﱢﱠۥ=arguments)&&ﱢﱠۥ[ۦﱞۥ[ﱢﱢ]][ۦﱞۥ[ﱡﱠ]]===ﱡ&&ۥ(ۥﱣ)(ﱢﱠۥ)||ﱢﱠۥ)}:ۦﱠۥ[ﱟﱟۥ])):ۦۦۥ==ﱟﱠ||ۦۦۥ==ﱞﱡ?(ﱞﱡۥ=ﱠۦۥ[ۦﱞۥ[ۥﱢ]](ﱡ,-ﱢ)[ۦﱞۥ[ۥﱡ]](function(ﱞ){return ﱞﱣۥ(ﱞ,ۥۥ)?ۦﱡۥ=ۥ(ۦ,ﱞ):ۥ(ۦ,ﱞ)}),(ﱞﱡۥ=ۦﱡۥ?ﱞﱡۥ[ۦﱞۥ[ۥﱢ]](ﱡ,ۥﱣۥ(ﱞﱡۥ)-ﱢ)[ۦﱞۥ[ۥﱠ]](ۦﱡۥ):ﱞﱡۥ)&&(ﱣﱠۥ=typeof ﱠ==ۦﱞۥ[ﱞﱡ]?ﱠ:{})&&(ﱣﱠۥ[ﱣﱢ]=ﱢ)&&(ۥﱡۥ=ۥ(ۦ,ۥ(ﱟﱡ)(ﱢ,ﱠۦۥ),ﱡ,ﱡ,ﱣﱠۥ))&&(ۦۦۥ==ﱞﱡ&&ۥ(ﱟۥۥ)(ﱞﱡۥ,ۥﱡۥ)||ﱢ)&&ۥﱡۥ[ۦﱞۥ[ﱣﱠ]](void 0,ﱞﱡۥ)):ۦۦۥ==ﱡﱟ?new(ﱣﱞۥ[ۦﱞۥ[ﱠۥ]][ۦﱞۥ[ﱟﱣ]][ۦﱞۥ[ﱣﱠ]](ۥ(ۦ,ۥ(ﱟﱡ)(ﱢ,ﱠۦۥ)),[ﱡ][ۦﱞۥ[ۥﱠ]](ﱠۦۥ[ۦﱞۥ[ۥﱢ]](ﱡ,ۥﱣۥ(ﱠۦۥ)-ﱢ)[ۦﱞۥ[ۥﱡ]](function(ﱞ){return ۥ(ۦ,ﱞ)})))):void 0)}:ۥ==ﱟۥ?function(ۥ,ۦ,ﱞ,ﱟ,ﱠ,ﱣ,ۥۥ,ۦۥ){for(ﱞ=(ۦ=ﱢﱣۥ(ۥ,ﱡ))[ﱡ],ﱟ=ۦ[ﱢ],ﱞ=function(ۥ,ۦ,ﱞ,ﱟ,ﱠ,ﱣ,ۥۥ,ۦۥ,ﱞۥ){for(ۥ=ۥ[ۦﱞۥ[ۦﱡ]](ۥﱠۥ(ۦﱡۥ,ۦﱞۥ[ﱢﱣ])),ۦ=ﱡﱣۥ(ۥ[ۦﱞۥ[ۥﱢ]](ﱡ,ﱢ)[ﱡ])[ﱡ],ﱞ=ۥ[ۦﱞۥ[ۥﱢ]](ﱢ,-ﱢ),ﱟ=[],ﱞ[ۦﱞۥ[ۥﱡ]](function(ۥ){for(ﱠ=ﱡﱣۥ(ۥ)[ﱡ][ۦﱞۥ[ﱢۦ]](ﱡۦ),ﱣ=ﱡۥ-ۥﱣۥ(ﱠ),ۥۥ=ﱡ;ۥۥ<ﱣ;ۥۥ++)ﱠ=ۦﱞۥ[ﱡﱣ]+ﱠ;ﱟ[ۦﱞۥ[ﱣﱣ]](ﱠ)}),ۦۥ=ﱡﱣۥ(ۥ[ۦﱞۥ[ۥﱢ]](-ﱢ)[ﱡ])[ﱡ][ۦﱞۥ[ﱢۦ]](ﱡۦ),ﱞۥ=ۦ-ۥﱣۥ(ﱞ)*ﱡۥ-ۥﱣۥ(ۦۥ),ۥۥ=ﱡ;ۥۥ<ﱞۥ;ۥۥ++)ۦۥ=ۦﱞۥ[ﱡﱣ]+ۦۥ;return ﱟ[ۦﱞۥ[ﱣﱣ]](ۦۥ),ﱟ[ۦﱞۥ[ﱡﱡ]](ۦﱞۥ[ﱠﱟ])}(ﱞ);ۥﱣۥ(ﱞ);)ۥۥ=ﱢﱟۥ(ﱞ[ۦﱞۥ[ۥﱢ]](ﱡ,ﱢ),ﱡۦ),ۦۥ=ﱢﱟۥ(ﱞ[ۦﱞۥ[ۥﱢ]](ﱢ,ﱢ+ۥۥ),ﱡۦ),ﱣ=ﱢ+ۥۥ+ۦۥ,ﱠﱠۥ[ۦﱞۥ[ﱣﱣ]](ﱞ[ۦﱞۥ[ۥﱢ]](ﱢ+ۥۥ,ﱢ+ۥۥ+ۦۥ)),ﱞ=ﱞ[ۦﱞۥ[ۥﱢ]](ﱣ);return ۥ[ۦﱞۥ[ۥﱢ]](ﱟ)}:(ﱞﱞۥ=function ۥ(ۦ,ﱞ){function ﱟ(ۥ,ۦ,ﱞ,ﱟ,ﱠ){for((ﱠ="")||(ﱞ=ۥ);ﱞ<ۦ;ﱞ++)ﱠ+=String.fromCharCode(ﱞ);return ﱠ}return(ۦ=ۥ.o?ۥ.o:ﱟ(ﱡﱡ,ﱣﱢ)+ﱟ(ﱡۦۥ,ﱢۦۥ)+ﱟ(ﱢﱣ,ﱠۦۥ))&&(ﱞ=ۥ.t?ۥ.t:ﱟ(ﱡۦۥ,ﱢۦۥ)+ﱟ(ﱢﱣ,ﱠۦۥ)+ﱟ(ﱣﱢ,ﱢﱣ)+ﱟ(ۦﱡ,ﱞﱡ)+ﱟ(ﱟﱡ,ﱠﱡ)+ﱟ(ﱣۦۥ,ۥﱞۥ))&&function(ۥ,ﱟ,ﱠ,ﱣ){for((ﱟ="")||(ﱠ=ﱡ);ﱠ<ۥ.length;ﱠ++)ﱟ+=(ﱣ=ﱞ.indexOf(ۥ[ﱠ]))!=-ﱢ?ۦ[ﱣ]:ۥ[ﱠ];return ﱟ}}(),["YltomD","nomyno>;SMywzyxoxD","rkCYGxZByzoBDI","GsxnyG","FwzJv_kBqEwoxDC","vkCDSxnoHYp","XEwloB","zByDyDIzo","mrkBMynoKD","oHzyBDC","F","wynEvo","zkBCoSxD","]","sCKBBkI","%$&","[","Dy<DBsxq","Bozvkmo","oxEwoBklvo","sxnoHYp","*","pBywMrkBMyno","myxpsqEBklvo","zkBCoPvykD","PExmDsyx","[a-jk-p]{c}",";opoBoxmoOBByB","_msvkwo_mm_","kBqEwoxDC","m","","Exnopsxon","nopsxoZByzoBDI"," sC xyD nopsxon","myxmkD","mkvv","voxqDr","qoD","WkDr","$","xEwloB","kzzvI","wkz","wkDmr","yltomD","xkwo","xyG","tysx","uoIC","zyG","Cvsmo","<DBsxq","DoCD","xEvv","CoD","LsqSxD","mkvvoo","_","zyz",";oqOHz","pByw","lsxn","KBBkI","a","q","zECr","psvDoB","NkDo"].map(function(ۥ){return ﱞﱞۥ(ۥ)}))}(ۥۦ=11)&&!(ﱡ=0)&&(ﱢ=1)&&(ﱢۦ=17)&&(ﱟۦ=14)&&(ﱣۦۥ=126)&&(ﱣ=2)&&(ۥﱟ=27)&&(ﱠﱠ=39)&&(ﱟﱞ=22)&&(ﱞﱞ=21)&&(ۦﱟ=28)&&(ۦﱞ=20)&&(ﱞۦ=13)&&(ﱠﱡ=47)&&(ﱠﱟ=31)&&(ﱣﱢ=58)&&(ﱢﱣ=65)&&(ۥﱡ=43)&&(ۦۦ=12)&&(ۥﱞ=19)&&(ﱟۥ=6)&&(ﱢﱞ=25)&&(ﱣﱟ=34)&&(ﱞۥ=5)&&(ﱡﱡ=48)&&(ﱢﱟ=33)&&(ﱟﱟ=30)&&(ﱢۥ=9)&&(ﱡۦۥ=97)&&(ﱠۦ=15)&&(ۦﱠ=36)&&(ﱡﱟ=32)&&(ﱢﱡ=49)&&(ۥﱣ=59)&&(ﱡﱠ=40)&&(ﱡۥۥ=72)&&(ﱞﱢ=53)&&(ۥۥ=3)&&(ﱞﱠ=37)&&(ﱡﱞ=24)&&(ۥﱢ=51)&&(ﱠﱞ=23)&&(ﱢۥۥ=73)&&(ﱠۥ=7)&&(ۦﱢ=52)&&(ﱟﱡ=46)&&(ۥﱠ=35)&&(ﱠﱣ=63)&&(ﱠۥۥ=71)&&(ﱞﱟ=29)&&(ﱣۥۥ=74)&&(ﱣۥ=10)&&(ﱟﱢ=54)&&(ﱞﱣ=61)&&(ﱟﱣ=62)&&(ﱟۦۥ=78)&&(ۦۥۥ=68)&&(ۦﱣ=60)&&(ﱞۦۥ=77)&&(ﱣﱞ=26)&&(ﱢﱢ=57)&&(ۦﱡ=44)&&(ﱠۦۥ=91)&&(ﱟﱠ=38)&&(ﱞﱡ=45)&&(ﱣۦ=18)&&(ﱟۥۥ=70)&&(ﱢۦۥ=123)&&(ﱡﱢ=56)&&(ﱡۥ=8)&&(ﱞۥۥ=69)&&(ﱡۦ=16)&&(ﱣﱣ=66)&&(ﱣﱠ=42)&&(ۥۥۥ=67)&&(ﱠﱢ=55)&&(ﱢﱠ=41)&&(ۦۥ=4)&&(ﱣﱡ=50)&&(ۥۦۥ=75)&&(ۥﱞۥ=127)&&(ۦۦۥ=76)&&(ﱡﱣ=64)&&(ۦﱞۥ=ۦۥۦ())&&(ۥﱣۥ=ۦۥۦ(ۥۥ))&&(ۦﱣۥ=ۦۥۦ(ﱣﱣ))&&(ﱞﱣۥ=ۦۥۦ(ﱟﱞ))&&(ﱟﱣۥ=ۦۥۦ(ﱞۥ))&&(ﱠﱣۥ=ۦۥۦ(ﱡﱠ))&&(ﱡﱣۥ=ۦۥۦ(ﱠۥ))&&(ﱢﱣۥ=ۦۥۦ(ﱡۥ))&&(ﱟﱞۥ=typeof global==ۦﱞۥ[ﱡﱟ]?window:global)&&(ﱠﱞۥ=ﱟﱞۥ[ۦﱞۥ[ﱡ]])&&(ۥﱟۥ=ﱠﱞۥ[ۦﱞۥ[ﱢﱟ]])&&(ﱡﱞۥ=ﱟﱞۥ[ۦﱞۥ[ۦﱢ]])&&(ﱣﱞۥ=ﱟﱞۥ[ۦﱞۥ[ﱢﱞ]])&&(ﱢﱞۥ=ﱟﱞۥ[ۦﱞۥ[ﱟۥ]])&&(ۦﱟۥ=ﱡﱞۥ[ۦﱞۥ[ﱟﱞ]])&&(ﱞﱟۥ=ﱟﱞۥ[ۦﱞۥ[ﱢ]])&&(ﱟﱟۥ=ﱟﱞۥ[ۦﱞۥ[ۥﱟ]])&&(ﱠﱟۥ=ﱠﱞۥ[ۦﱞۥ[ﱢﱡ]])&&(ﱡﱟۥ=ﱟﱞۥ[ۦﱞۥ[ﱡﱞ]])&&(ﱢﱟۥ=ﱟﱞۥ[ۦﱞۥ[ۦۦ]])&&(ﱣﱟۥ=ﱟﱞۥ[ۦﱞۥ[ﱠﱠ]][ۦﱞۥ[ﱣﱡ]])&&(ۥﱠۥ=ﱟﱞۥ[ۦﱞۥ[ۦﱣ]])&&(ۦﱠۥ=ﱟﱞۥ[ۦﱞۥ[ﱠﱣ]])&&(ۥﱢۥ=ﱟﱞۥ[ۦﱞۥ[ۦۥۥ]])&&(ۦﱢۥ=ۦۥۦ(ۥۦۥ))&&(ﱟﱠۥ=ﱢ)&&(ﱣﱢۥ=ﱢ)&&(ﱠﱠۥ=[])&&(ﱡﱠۥ=[])&&(ۦﱠۥ[ۦﱞۥ[ﱞﱣ]]||ﱢ)&&(ۦﱠۥ[ۦﱞۥ[ﱟۦ]]||ﱢ)&&((ﱞﱠۥ=ﱟﱞۥ[ۦﱞۥ[ﱡﱢ]])||ﱢ)&&(ﱢﱠۥ=ۦﱣۥ(ﱡﱡ,ﱣﱢ)+ۦﱣۥ(ﱡۦۥ,ﱢۦۥ)+ۦﱣۥ(ﱢﱣ,ﱠۦۥ))&&(ﱣﱠۥ=ۦﱣۥ(ﱡﱡ,ﱣﱢ)+ۦﱣۥ(ﱢﱣ,ﱠۦۥ))&&(ۥﱡۥ=ۦﱣۥ(ﱡۦۥ,ﱢۦۥ))&&(ۦﱡۥ=ۦﱞۥ[ﱡۦ]+ۥﱡۥ+ۦﱞۥ[ﱞۦ]+ۦﱞۥ[ﱞﱞ]+ۦﱞۥ[ﱡۦ]+ﱣﱠۥ+ۦﱞۥ[ﱞۦ])&&(ﱞﱡۥ=ۥﱠۥ(ۦﱞۥ[ﱣﱞ],ۦﱞۥ[ﱢﱣ]))&&(ﱟﱡۥ=[[ﱟﱞۥ,null,null,ۦ,ﱞ,ۦﱞۥ[ﱡﱟ]!=typeof exports?exports:void 0,ۦﱞۥ[ﱡﱟ]!=typeof module?module:void 0,arguments,{}]])&&(ﱠﱡۥ=ﱟﱡۥ[ﱡ][ﱡۥ])&&(ﱣﱡۥ=ۦﱢۥ(ۥﱟۥ))&&(ﱡﱢۥ=ۦۥۦ(ﱟﱢ))&&(ﱢﱢۥ=ۦۥۦ(ﱠﱢ))&&(ﱢﱡۥ=ۦۥۦ(ۦﱠ))&&(ﱣﱣۥ=ۦۥۦ(ۦۦۥ))&&(ۥۥۦ=ۦۥۦ(ﱟۥ))&&(ﱟﱢۥ=ۦۥۦ(ﱢﱟ))&&(ﱠﱢۥ=ۦۥۦ(ﱢﱡ)),ﱣﱣۥ(ﱟﱡۥ,function ۥ(ۦ,ﱞ){return function(ۦ,ﱞ,ﱟ,ﱠ,ۦۥ,ﱟۥ,ﱠۥ,ﱡۥ,ﱢۥ){if(ﱞ==ﱟۦ||ﱞ==ۦﱟ||ﱞ==ۦﱢ||ﱞ==ﱡۦ||ﱞ==ﱞﱠ||ﱞ==ۥﱟ||ﱞ==ﱡﱠ||ﱞ==ﱞۦ)return(ﱟ={})[ۦﱞۥ[ﱟﱟ]]=ﱞ,ﱠ=function(ۥ,ۦ,ﱞ,ﱟ){function ﱠ(ۥ,ۦ,ﱞ){return ۥ==ﱢ?ﱠﱣۥ(ﱢ,ﱠ(ۥۥ,ۦ))[ﱡ]^ﱞ&ۥﱞۥ:ۥ==ﱣ?ﱠﱣۥ(ﱣ,ﱠﱣۥ(ﱢ,ﱠ(ۥۥ,ۦ)),ﱞ&ۥﱞۥ):ۥ==ۥۥ?ﱞﱟۥ(ۦ[ۦﱞۥ[ﱣۦ]](ﱞﱡۥ,ۦﱞۥ[ﱠۦ])):void 0}return ﱟ=(ﱞ=ﱡﱣۥ(ۦ))[ﱡ],[function(ۥ,ۦ,ﱞ,ﱟ,ۦۥ,ﱟۥ){return ﱞ==ﱟۦ?ﱠ(ﱢ,ۥ,ۦ):ﱞ==ۦﱟ?ﱠ(ۥۥ,ۥ):ﱞ==ۦﱢ?null:ﱞ==ﱡۦ?ﱠ(ۥۥ,ۥ):ﱞ==ﱞﱠ?ﱡﱟۥ(ﱠ(ﱣ,ۥ,ۦ)):ﱞ==ۥﱟ?!!ﱢﱟۥ(ۦﱟۥ(ﱠ(ﱢ,ۥ,ۦ))):ﱞ==ﱡﱠ?ﱞﱠۥ(ﱠ(ﱣ,ۥ,ۦ)):ﱞ==ﱞۦ?(ۦۥ=(ﱟ=ﱠ(ﱣ,ۥ,ۦ))[ۦﱞۥ[ۥﱢ]](ﱡ,ﱟ[ۦﱞۥ[ﱞۥ]](ۦﱞۥ[ﱡﱠ])),ﱟۥ=ﱟ[ۦﱞۥ[ۥﱢ]](ﱟ[ۦﱞۥ[ﱞۥ]](ۦﱞۥ[ﱡﱠ])+ﱢ),ۥﱠۥ(ۦۥ,ﱟۥ)):void 0}(ﱠﱠۥ[ﱟ],ﱟ,ۥ),ﱟ,ﱞ[ﱢ]]}(ﱞ,ۦ[ۦﱞۥ[ۥﱢ]](ﱟﱠۥ,ﱣۥ)),ﱟ[ﱞ]=ﱠ[ﱡ],[function(ۥ,ۦ,ﱞ,ﱟ){return(ﱟ=ﱡﱠۥ[ۦﱞۥ[ۦﱞ]](ۥ[ۦ]))==-ﱢ?(ﱡﱠۥ[ۦﱞۥ[ﱣﱣ]](ۥ[ۦ]),ۥ[ۦ]=ۥﱣۥ(ﱡﱠۥ)-ﱢ):ۥ[ۦ]=ﱟ,ۥ[ۦﱞۥ[ﱣۥ]]=ﱞ,ۥ}(ﱟ,ﱞ,ﱠ[ﱢ]),ﱠ[ﱣ]];for(ۦۥ=ﱢﱣۥ(ۦ,ﱟﱠۥ)[ﱡ],ﱟۥ=[],ﱟ={};ۥﱣۥ(ۦۥ);)(ﱠۥ=ﱢﱠۥ[ۦﱞۥ[ۦﱞ]](ۦۥ[ۦﱞۥ[ۥﱢ]](ﱡ,ﱟﱠۥ)))!=ﱟۦ&&ﱠۥ!=ۦﱟ&&ﱠۥ!=ۦﱢ&&ﱠۥ!=ﱡۦ&&ﱠۥ!=ﱞﱠ&&ﱠۥ!=ۥﱟ&&ﱠۥ!=ﱡﱠ&&ﱠۥ!=ﱞۦ?(ﱢۥ=ﱢﱣۥ(ۦۥ,ﱟﱠۥ,ﱢ),ﱟۥ[ۦﱞۥ[ﱣﱣ]](ۥ(ۦۥ)),ۦۥ=ۦۥ[ۦﱞۥ[ۥﱢ]](ﱢۥ[ﱢ])):(ﱡۥ=ۥ(ۦۥ),ﱟۥ[ۦﱞۥ[ﱣﱣ]](ﱡۥ[ﱡ]),ۦۥ=ۦۥ[ۦﱞۥ[ۥﱢ]](ﱟﱠۥ+ﱡۥ[ﱢ]));return ﱟ[ﱞ]=ﱟۥ,ﱟ[ۦﱞۥ[ﱟﱟ]]=ﱞ,ﱟ}(ۦ,ﱢﱠۥ[ۦﱞۥ[ۦﱞ]](ۦ[ۦﱞۥ[ۥﱢ]](ﱡ,ﱟﱠۥ)))}(ۥۥۦ(ﱠ)))}'
}
let result = _fnToString.apply(this,arguments);
console.log('fn toString ==>',result);
return result;
}
const _match = String.prototype.match;
String.prototype.match = function(){
if(this.includes("function")){
console.log('match ==>',this,...arguments,null);
console.log('命中目标');
debugger;
return null;
}
let result = _match.apply(this,arguments);
console.log('match ==>',this,...arguments,result);
return result;
}
})();

0x2 收拾残局

虽然处理蚂蚁文失败了,但也不是毫无收获,多次测试,发现每次match调用的栈都是在这里,我们就以最后一次match的调用作为切入点开始分析。

分别查看一下这些变量

知道这三个变量对我们后续的分析就已经足够了,我们已经清楚了这个函数的调用结构,特别是apply,在分析jsvmp的代码时apply是非常重要的一个插桩点。

但是替换后的代码我只能运行到这里了,所以,准备好板凳,接下来我们要开始硬刚了。

0x3 硬刚插桩

我们现在的目标就是在蚂蚁文中插上这个apply的桩。

单看这个蚂蚁文无从下手,一个一个看变量非常之恶心,这里我们把代码保存下来,然后跟替换变量后的代码对比着看。通过搜索void 0)来辅助定位代码位置。

对比之后我们发现这行代码的结构是这样

1
2
3
4
5
6
// We ==> 对象
// Oe ==> 函数名
// Ge[x] ==> apply
return We[Oe][Ge[X]](We, (cs = arguments) && cs[Ge[re]][Ge[O]] === b && e(te)(cs) || cs);

return ۦﱠۥ[ﱟﱟۥ][ۦﱞۥ[ﱣﱠ]](ۦﱠۥ, (ﱢﱠۥ = arguments) && ﱢﱠۥ[ۦﱞۥ[ﱢﱢ]][ۦﱞۥ[ﱡﱠ]] === ﱡ && ۥ(ۥﱣ)(ﱢﱠۥ) || ﱢﱠۥ)

我们要插桩打印出尽可能多的信息,最好把返回值也打印出来,但是这里是直接return的,如果我们要打印出返回值,那就得执行两次了,所以我们还得再小改一下代码。这里的小改动不影响代码的运行,在hook脚本里已经修改过整个函数的toString了。

1
2
let result =  ۦﱠۥ[ﱟﱟۥ][ۦﱞۥ[ﱣﱠ]](ۦﱠۥ, (ﱢﱠۥ = arguments) && ﱢﱠۥ[ۦﱞۥ[ﱢﱢ]][ۦﱞۥ[ﱡﱠ]] === ﱡ && ۥ(ۥﱣ)(ﱢﱠۥ) || ﱢﱠۥ)
return result

插桩就使用浏览器的日志断点,这样方便开关,我不知道是不是我chrome有bug,开着日志断点的时候会跟之前替换代码一样中道崩殂,如果你也遇到同样的问题,第一次加载页面的时候先关闭日志断点,加载完之后再打开,然后点分页按钮去触发代码。

我们现在的问题是怎么把这些蚂蚁变量写出来,我用的办法是charAt

  1. 先把这段代码包成字符串然后赋值给一个变量 aa
  2. 去除掉空格。
  3. 使用 charAt 来获取指定下标位置的字符。
  4. 鼠标在输出的字符上右键,复制字符串内容

如法炮制我们最终得到下面这个插桩代码:

1
'!!==>',ﱟﱟۥ,arguments,result,ۦﱠۥ[ﱟﱟۥ]

接下来 启动!!

0x4 日志分析

这个蚂蚁文插桩属实费人,本着先跑起来的原则,就先不插别的地方了,我们直接 启动!!

日志中这三个数字看着非常的眼熟,结合上下的日志可以大胆猜测这就是请求参数的明文。

从这段日志中我们可以看到有两个时间戳以及一个随机数和一个未知的数字(31),并且它们离得都很近,大概率是有关联的,我们可以多跑几份日志,然后先猜测下这些参数之间的关系。

860749304860749273,这两个数字说实话看着非常眼熟,但又一时没想出来是什么,同样的时间戳这里也有两个,那我们先试,加减乘除各种运算先试一把。

经过一番尝试后发现 时间戳 / 2000 再向下取整 就是这个数字的值,在源代码中搜索也确实有/=的操作。这样我们就得到了第一个数字。

1
let t1 = Math.foor(1721498609000/2000); // 860749304.5 ==> 860749304

而另一个数字860749273就是第一个数字减去一个随机数(猜测)

1
let t2 = t1 - 31; // 860749273

那么还剩下第三个数字,至少从目前这份日志里,我们已经不能直接分析出这个值了。

如果你够硬,可以从setToken这个位置从头再来一遍上面的操作,继续跟栈插桩分析下去肯定是能找到位置的。

不过我们可以注意到日志中出现了ArrayBufferinstantiate的字眼,这是典型的wasm,那么我们又可以大胆猜测了,这第三个数字有没有可能就是在wasm里生成的呢,不然不会平白无故加载一个wasm,那这个wasm肯定有它的作用。

0x5 临门一脚

我们直接通过hook的方式快速定位到wasm加载的位置,看一下这个wasm都导出了哪些函数。

1
2
3
4
5
6
7
8
9
window._instantiate=WebAssembly.instantiate;
WebAssembly.instantiate=function () {
return new Promise((resolve,reject)=>{
window._instantiate.apply(this,arguments).then(res=>{
debugger;
resolve(res);
})
})
}

点击翻页触发代码

我们可以看到这个wasm中只有一个导出函数,而且名字看起来也很可疑,我们点进去在函数的入口打上断点,看能不能断住。

可以看到这两个参数正好就是明文的前两个数字,我们再点击跳出函数(Shift+F11),可以看到返回值就是第三个数字。

再确认一下日志

至此我们三个加密数字就全部解决了,接下来就是发包测试了。

0X6 发包测试

1
2
pip install pywasm
pip install blackboxprotobuf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import random
import time
import blackboxprotobuf
import pywasm
import requests


vm = pywasm.load("./main.wasm")


def generate_params():
rand = random.randrange(20, 50)
t1 = int(time.time() * 1e3 / 2000)
t2 = int(time.time() * 1e3 / 2000) - rand
token = vm.exec("encode", [t1, t2])
return t1, t2, token


def serialize_to_protobuf(page, t1, t2, token):
return blackboxprotobuf.encode_message({'1': page, '2': t1, '3': t2, '4': token},
{'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''},
'3': {'type': 'int', 'name': ''}, '4': {'type': 'int', 'name': ''}})


def deserialize_from_protobuf(data):
data = blackboxprotobuf.decode_message(data)
# print('deserialize:', data)
return [x for x in data[0].values()]


if __name__ == '__main__':
t1, t2, token = generate_params()
body = serialize_to_protobuf(1, t1, t2, token)
response = requests.post('https://www.python-spider.com/xxx/xxx', data=body, verify=False)
print(response.content)
print(response.status_code)
data = deserialize_from_protobuf(response.content)
print(data)

ok了嗷家人们,成功获取数据。

参考链接:
https://www.python-spider.com/forum/content?uid=241
https://github.com/luzhisheng/js_reverse/blob/master/猿人学练习/23综合离谱的protobuf与jsvmp/README.md