https://astexplorer.net/

https://zhuanlan.zhihu.com/p/371710865

1、基础了解

const {parse} =require("@babel/parser");
const generator = require("@babel/generator").default const ast_code = parse('var a;a = "yuanrenxue"') console.log(ast_code) ast_code.program.body[0].declarations[0].id.name = "b"
ast_code.program.body[1].expression.left.name = "b" console.log(generator(ast_code).code)

2、简单使用

const {parse} = require("@babel/parser")
const generator = require("@babel/generator").default;
const traverse = require("@babel/traverse").default; // const fs = require('fs');
// const js_code = fs.readFileSync("....js",{encoding:'utf-8'});
js_code = "function hi(){console['log']('\x48\x65\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21')};hi();" const ast_code = parse(js_code) //console.log(ast_code) const visitor = {
'StringLiteral|FunctionDeclaration'(path){
//delete path.node.extra
//path.node.extra.raw = '\'' + path.node.extra.rawValue + '\'';
//console.log(path.toString()) 可以看当前节点的源代码 作者重写了toString方法
//console.log(generator(path.node)) 可看当前节点源码
console.log(path.node.extra)
}
}; //path 和 node 的区别
//node是节点 path比node大的多 构造函数,一般使用path //path中的方法
// traverse(ast_code,visitor);
//traverse从ast_code的时候要给整个节点(file) const result_js_code = generator(ast_code);
console.log(result_js_code.code)

3、深入使用

const {parse} = require("@babel/parser")
const generator = require("@babel/generator").default;
const traverse = require("@babel/traverse").default;
const types = require("@babel/types");
//生成节点.和替换节点同时使用
// console.log(types.valueToNode('342342'));
//
// throw "" // const fs = require('fs');
// const js_code = fs.readFileSync("....js",{encoding:'utf-8'});
//let js_code = "var f = function a(a,b) { return a + b + '嘿嘿' } a('你爸爸','****')"; var js_code = "var a = 8899+78979;b=a<<2;" const ast_code = parse(js_code); //console.log(ast_code) const visitor = {
//'StringLiteral|FunctionDeclaration'(path){
'Identifier|BinaryExpression'(path){
//path.node.extra.raw = '\'' + path.node.extra.rawValue + '\'';
//console.log(path.toString()) 可以看当前节点的源代码 作者重写了toString方法
//console.log(generator(path.node)) 可看当前节点源码
//path.insertBefore(types.valueToNode(value='vefvdfvfd'))
//result = path.findParent(function (result){return result.isVariableDeclaration()});
//console.log(result.type)
//
//console.log(path.getSibling(0) +' ')
//console.log(path.key)
//console.log(path.getSibling(path.key + 1) + '');
//if (path.node.name === "a"){ path.evaluate().confident && path.replaceInline(types.valueToNode(path.evaluate().value))
//}
//console.log(path.container === path.parent)//true只是一种情况
//path.insertAfter(types.valueToNode(value='vefgbvdfvfd'))
//path.stop()
//path.remove()
//path.replaceInline(types.valueToNode('342342'));
//console.log(path.node.extra)
}
}; //path 和 node 的区别
//node是节点 path比node大的多 构造函数,一般使用path //path中的方法
//1、path.stop() 停止本次的遍历,只想操作当前的节点
//2、path中的节点替换 replaceWith 替换节点 1对1
// replaceWithMultipe 替换的是节点 1对多
// replaceInline 自动识别,包含以上两种方法
// replaceWithSourceString 节点替换成源码的字符串,强制替换
//3、path.remove() 删除节点
//4、insertBefore insertAfter 插入节点 //5、parent 与parentpath的区别 path.parentPath.node = path.parent
//6、path.findParent 向上遍历父节点,直到找到,满足回调函数要求的为止
//7、path.find 向上遍历 包含当前节点
//8、path.getFunctionParent() 向上找函数
//9、path.getStatementParent() 向上遍历,直到找到语法树为止,包含当前节点
//10、path.container 返回的是所在容器的节点(已写例子),如果是数组,返回的是所在的容器(没写例子)
// listkey是容器的名字,key是当前节点在容器中的索引,
// 数组中path.key是当前节点在容器中的索引,其他的应用返回的是父节点的名字
// 数组中path.listkey返回的数组的名字,其他的应用返回的是未定义
//11、path.inList 判断是否为容器,返回布尔值
//12、path.getSibling(index) 获取统计节点的第一个key的path,获取下一个同级节点就是path.getSibling(path,key+1)
//13、unshiftContainer 与pushContainer,在容器的前/后插入节点,不常用
//14、path.evalutate()获取当前作用域的引用值(两种用法),赋值替换和计算表达式 traverse(ast_code,visitor);
//traverse从ast_code的时候要给整个节点(file) const result_js_code = generator(ast_code);
console.log(result_js_code.code)

4、进阶使用

const {parse} = require("@babel/parser")
const generator = require("@babel/generator").default;
const traverse = require("@babel/traverse").default;
const types = require("@babel/types"); var js_code = "function f(a){ a = 105 + a; a++; return a};const a = f(a=100);console.log(a)" const ast_code = parse(js_code); //scope操作作用域,会更方便的操作节点
//scope.block 获得标识符作用域,返回node对象
//获取标识符绑定 Binging path.scope.getBinding(标识符)
//一般对标识符的修改都是从Binging走的,其中一些参数:regerenced表示标识符是否在其他的地方被引用
//作用域的遍历
//binding.scope.traverse()
//scope.rename 会同时修改引用标识符的位置,生成唯一标识符的犯法:path.scope.generateUidIde
//scope.dump() 打印当前作用域的信息
//scope.hasBingding("a") 查询是否有标识符的绑定,一般可以用getBingding代替
//scope.getAllBingdings() 获得当前作用域的全部绑定,并返回一个对象
//scope.hasReference("a") 查询节点是否有a标识符的引用
//scope.getBindingIdentifier('a') 获取Identifier 本身 const visitor = {
//'StringLiteral|FunctionDeclaration'(path){
// 'CallExpression'(path){
// console.log(path+'')
// console.log('-----')
// console.log(path.scope.path +'')
// console.log('------------------------------') FunctionDeclaration(path){
//path.scope.rename("a","b");
//console.log(path.scope.getAllBindings().a + '');
console.log(path.scope.getBindingIdentifier("a"));
console.log(generator(path.scope.getBindingIdentifier("a")).code);
path.stop()
} } traverse(ast_code,visitor);
//traverse从ast_code的时候要给整个节点(file) const result_js_code = generator(ast_code);
console.log("=======")
console.log(result_js_code.code)

5、简单实战

①js代码

var $a = ['\x53\x38\x4b\x67\x43\x67\x3d\x3d', '\x65\x4d\x4f\x65\x77\x6f\x38\x3d', '\x57\x58\x70\x7a', '\x53\x38\x4b\x4f\x4d\x67\x3d\x3d', '\x77\x71\x67\x64\x77\x37\x6b\x3d', '\x66\x6b\x46\x30', '\x4a\x38\x4b\x71\x47\x51\x3d\x3d', '\x4e\x79\x62\x43\x68\x67\x3d\x3d', '\x77\x6f\x41\x64\x77\x34\x67\x3d', '\x49\x44\x64\x39', '\x54\x4d\x4b\x67\x41\x41\x3d\x3d', '\x35\x4c\x75\x72\x35\x35\x53\x7a\x36\x49\x71\x56', '\x4e\x55\x4d\x42', '\x52\x63\x4b\x74\x41\x51\x3d\x3d', '\x77\x37\x6f\x69\x77\x35\x51\x3d', '\x4e\x38\x4b\x6e\x4b\x67\x3d\x3d', '\x77\x6f\x64\x4a\x4a\x41\x3d\x3d', '\x56\x63\x4f\x6a\x77\x70\x67\x3d', '\x77\x71\x59\x59\x4a\x51\x3d\x3d', '\x46\x73\x4b\x54\x46\x67\x3d\x3d', '\x4f\x4d\x4f\x78\x49\x51\x3d\x3d', '\x45\x33\x77\x45', '\x4d\x38\x4b\x42\x46\x51\x3d\x3d', '\x77\x36\x74\x4f\x77\x71\x55\x3d', '\x52\x38\x4b\x54\x64\x51\x3d\x3d', '\x48\x73\x4b\x44\x47\x77\x3d\x3d', '\x57\x53\x76\x43\x6d\x41\x3d\x3d', '\x77\x71\x4d\x78\x77\x37\x30\x3d', '\x59\x63\x4b\x62\x41\x67\x3d\x3d', '\x43\x67\x6f\x4a', '\x5a\x42\x4e\x38', '\x45\x63\x4f\x6f\x49\x41\x3d\x3d', '\x77\x70\x64\x58\x41\x67\x3d\x3d', '\x77\x72\x6e\x43\x75\x30\x45\x3d', '\x66\x69\x42\x72', '\x41\x38\x4b\x43\x43\x67\x3d\x3d', '\x4e\x55\x6b\x79', '\x53\x6d\x56\x47', '\x4f\x38\x4f\x7a\x4c\x77\x3d\x3d', '\x77\x72\x6a\x44\x75\x30\x77\x3d', '\x59\x6c\x31\x68', '\x43\x51\x49\x70', '\x77\x34\x4a\x4d\x55\x51\x3d\x3d', '\x50\x31\x5a\x4e', '\x77\x34\x49\x4c\x5a\x51\x3d\x3d', '\x77\x70\x4a\x32\x4a\x77\x3d\x3d', '\x62\x67\x73\x6e', '\x45\x4d\x4f\x51\x42\x67\x3d\x3d', '\x64\x63\x4b\x70\x42\x77\x3d\x3d', '\x49\x6a\x70\x31', '\x77\x72\x6f\x49\x77\x35\x38\x3d', '\x41\x7a\x59\x31', '\x77\x70\x74\x62\x77\x35\x6f\x3d', '\x63\x53\x6e\x43\x73\x77\x3d\x3d', '\x42\x73\x4b\x6a\x47\x77\x3d\x3d', '\x45\x57\x37\x44\x74\x67\x3d\x3d', '\x56\x63\x4b\x75\x48\x77\x3d\x3d', '\x66\x46\x4e\x6e', '\x77\x37\x6e\x43\x6e\x38\x4f\x31', '\x77\x70\x2f\x44\x70\x73\x4b\x37', '\x58\x69\x5a\x77', '\x77\x70\x2f\x44\x73\x73\x4b\x38', '\x77\x71\x7a\x44\x67\x63\x4b\x47', '\x77\x70\x48\x43\x71\x6d\x59\x3d', '\x61\x63\x4f\x31\x77\x6f\x45\x3d', '\x46\x63\x4b\x43\x50\x77\x3d\x3d', '\x62\x6a\x66\x43\x71\x41\x3d\x3d', '\x77\x71\x4d\x2f\x77\x36\x67\x3d', '\x66\x57\x42\x62', '\x77\x6f\x77\x6e\x4b\x67\x3d\x3d', '\x77\x36\x6a\x43\x74\x30\x73\x3d', '\x4f\x7a\x70\x51', '\x43\x4d\x4f\x43\x4b\x77\x3d\x3d', '\x43\x43\x51\x76', '\x62\x7a\x4a\x4d', '\x43\x63\x4f\x71\x77\x71\x45\x3d', '\x77\x34\x55\x47\x77\x6f\x6b\x3d', '\x77\x35\x49\x45\x52\x41\x3d\x3d', '\x77\x37\x68\x77\x77\x72\x45\x3d', '\x35\x35\x32\x4a\x37\x37\x32\x36\x35\x4c\x36\x73', '\x45\x32\x63\x46', '\x77\x36\x6f\x48\x77\x72\x77\x3d', '\x4b\x38\x4f\x37\x48\x67\x3d\x3d', '\x43\x52\x34\x6a', '\x77\x36\x70\x35\x77\x37\x73\x3d', '\x77\x34\x68\x52\x77\x35\x55\x3d', '\x77\x6f\x45\x59\x77\x35\x51\x3d', '\x77\x71\x4c\x43\x71\x6c\x45\x3d', '\x4f\x31\x55\x36', '\x4a\x63\x4f\x4f\x77\x71\x34\x3d', '\x48\x51\x76\x43\x6c\x67\x3d\x3d', '\x57\x77\x4d\x6b', '\x62\x4d\x4b\x4f\x4c\x41\x3d\x3d', '\x4d\x30\x50\x44\x69\x67\x3d\x3d', '\x77\x35\x66\x43\x71\x63\x4f\x70', '\x55\x4d\x4f\x4d\x77\x6f\x63\x3d', '\x53\x63\x4b\x58\x50\x51\x3d\x3d', '\x44\x63\x4f\x59\x4c\x41\x3d\x3d', '\x59\x63\x4b\x77\x4c\x41\x3d\x3d', '\x77\x36\x42\x38\x77\x34\x63\x3d', '\x5a\x41\x6e\x43\x73\x77\x3d\x3d', '\x77\x71\x54\x44\x71\x47\x34\x3d', '\x4a\x38\x4f\x6f\x45\x41\x3d\x3d', '\x77\x35\x37\x43\x67\x63\x4f\x51', '\x58\x52\x39\x68', '\x77\x37\x51\x69\x77\x37\x30\x3d', '\x77\x36\x67\x43\x77\x70\x38\x3d', '\x77\x6f\x4e\x43\x77\x36\x49\x3d', '\x77\x70\x63\x44\x50\x41\x3d\x3d', '\x47\x56\x30\x52', '\x44\x73\x4f\x4a\x4b\x51\x3d\x3d', '\x65\x77\x77\x37', '\x45\x57\x58\x44\x6e\x77\x3d\x3d', '\x4e\x56\x52\x47', '\x52\x42\x30\x50', '\x4f\x4d\x4b\x2b\x47\x41\x3d\x3d', '\x4e\x55\x73\x53', '\x77\x72\x63\x73\x77\x35\x4d\x3d', '\x55\x63\x4b\x70\x77\x6f\x51\x3d', '\x77\x71\x6a\x43\x6b\x58\x51\x3d', '\x47\x38\x4f\x6b\x4b\x51\x3d\x3d', '\x52\x63\x4f\x68\x46\x77\x3d\x3d', '\x52\x7a\x50\x43\x6d\x51\x3d\x3d', '\x77\x71\x74\x50\x77\x37\x77\x3d', '\x77\x34\x67\x48\x77\x70\x41\x3d', '\x46\x54\x31\x58', '\x77\x6f\x42\x33\x4f\x67\x3d\x3d', '\x77\x70\x58\x43\x6e\x31\x4d\x3d', '\x51\x38\x4f\x6e\x77\x70\x59\x3d', '\x77\x36\x4a\x66\x77\x34\x63\x3d', '\x62\x69\x4c\x43\x72\x77\x3d\x3d', '\x77\x34\x74\x47\x56\x67\x3d\x3d', '\x4d\x38\x4b\x64\x4a\x67\x3d\x3d', '\x55\x4d\x4b\x32\x47\x77\x3d\x3d', '\x58\x38\x4b\x48\x55\x41\x3d\x3d', '\x4b\x73\x4b\x67\x4a\x77\x3d\x3d', '\x58\x4d\x4b\x69\x77\x6f\x55\x3d', '\x77\x37\x30\x65\x77\x6f\x77\x3d', '\x43\x45\x63\x6d', '\x77\x35\x59\x33\x77\x6f\x30\x3d', '\x77\x36\x56\x77\x77\x72\x51\x3d', '\x56\x73\x4b\x77\x48\x67\x3d\x3d', '\x44\x38\x4f\x73\x77\x6f\x6f\x3d', '\x77\x71\x58\x43\x76\x54\x41\x3d', '\x63\x73\x4f\x48\x4f\x77\x3d\x3d', '\x43\x73\x4f\x45\x49\x41\x3d\x3d', '\x77\x35\x4a\x65\x64\x77\x3d\x3d', '\x4f\x38\x4f\x32\x4a\x67\x3d\x3d', '\x77\x6f\x48\x44\x75\x38\x4b\x6e', '\x45\x38\x4f\x56\x47\x67\x3d\x3d', '\x77\x71\x33\x44\x6d\x58\x45\x3d', '\x42\x57\x68\x2f', '\x77\x70\x41\x74\x77\x34\x6b\x3d', '\x61\x73\x4f\x79\x77\x71\x77\x3d', '\x77\x35\x52\x45\x77\x37\x41\x3d', '\x59\x4d\x4b\x39\x4d\x77\x3d\x3d', '\x64\x4d\x4f\x68\x4a\x77\x3d\x3d', '\x77\x71\x4c\x44\x68\x38\x4b\x43', '\x77\x72\x33\x44\x68\x58\x34\x3d', '\x48\x57\x34\x72', '\x46\x33\x42\x34', '\x5a\x4d\x4b\x2b\x4f\x41\x3d\x3d', '\x77\x35\x46\x49\x53\x77\x3d\x3d', '\x77\x70\x6f\x79\x77\x6f\x34\x3d', '\x44\x4d\x4b\x71\x4d\x77\x3d\x3d', '\x77\x34\x4c\x43\x72\x63\x4f\x43', '\x58\x79\x37\x43\x73\x41\x3d\x3d', '\x77\x37\x63\x6a\x77\x70\x59\x3d', '\x77\x71\x31\x77\x4a\x51\x3d\x3d', '\x48\x63\x4f\x75\x77\x71\x55\x3d', '\x45\x73\x4b\x51\x77\x34\x6f\x3d', '\x77\x6f\x63\x31\x50\x51\x3d\x3d', '\x77\x71\x7a\x43\x6c\x56\x49\x3d', '\x66\x4d\x4f\x43\x77\x6f\x59\x3d', '\x5a\x69\x30\x4a', '\x77\x37\x59\x68\x77\x6f\x41\x3d', '\x4c\x56\x62\x44\x71\x77\x3d\x3d', '\x77\x70\x38\x68\x4d\x51\x3d\x3d', '\x63\x7a\x41\x64', '\x4e\x42\x72\x43\x71\x67\x3d\x3d', '\x77\x35\x42\x52\x77\x35\x45\x3d', '\x58\x43\x4c\x43\x67\x77\x3d\x3d', '\x47\x38\x4f\x34\x4d\x51\x3d\x3d', '\x43\x53\x72\x43\x73\x77\x3d\x3d', '\x77\x70\x39\x2b\x49\x51\x3d\x3d', '\x77\x71\x41\x6a\x41\x67\x3d\x3d', '\x44\x38\x4f\x5a\x44\x77\x3d\x3d', '\x77\x70\x78\x72\x50\x67\x3d\x3d', '\x5a\x73\x4b\x68\x46\x77\x3d\x3d', '\x77\x34\x67\x5a\x77\x70\x34\x3d', '\x61\x52\x39\x6f', '\x50\x38\x4b\x39\x48\x77\x3d\x3d', '\x43\x73\x4f\x66\x42\x51\x3d\x3d', '\x66\x63\x4b\x44\x4d\x51\x3d\x3d', '\x54\x43\x4a\x79', '\x77\x36\x6c\x75\x58\x77\x3d\x3d', '\x53\x38\x4f\x38\x42\x41\x3d\x3d', '\x4f\x73\x4f\x79\x42\x51\x3d\x3d', '\x4e\x4d\x4b\x32\x4c\x41\x3d\x3d', '\x77\x70\x41\x47\x77\x71\x51\x3d', '\x77\x34\x49\x45\x77\x70\x59\x3d', '\x57\x33\x64\x72', '\x44\x43\x72\x43\x6f\x77\x3d\x3d', '\x77\x35\x74\x38\x77\x34\x34\x3d', '\x77\x70\x58\x44\x67\x58\x30\x3d', '\x56\x78\x56\x57', '\x77\x34\x63\x49\x77\x71\x49\x3d', '\x45\x48\x4c\x44\x67\x41\x3d\x3d', '\x52\x63\x4b\x37\x4b\x77\x3d\x3d', '\x77\x36\x68\x63\x77\x6f\x59\x3d', '\x77\x71\x68\x5a\x4a\x41\x3d\x3d', '\x77\x6f\x44\x43\x6e\x42\x67\x3d', '\x4a\x4d\x4b\x57\x42\x67\x3d\x3d', '\x5a\x41\x7a\x43\x75\x67\x3d\x3d', '\x77\x6f\x6e\x43\x75\x47\x34\x3d', '\x43\x52\x76\x43\x74\x51\x3d\x3d', '\x77\x72\x46\x73\x48\x67\x3d\x3d', '\x77\x37\x42\x69\x63\x51\x3d\x3d', '\x4b\x38\x4b\x72\x4e\x67\x3d\x3d', '\x77\x36\x6f\x76\x77\x72\x38\x3d', '\x4b\x47\x54\x44\x74\x77\x3d\x3d', '\x43\x4d\x4b\x38\x4f\x77\x3d\x3d', '\x77\x6f\x33\x44\x67\x47\x38\x3d', '\x77\x71\x4e\x2f\x46\x77\x3d\x3d', '\x77\x35\x41\x43\x64\x51\x3d\x3d', '\x77\x70\x7a\x44\x70\x4d\x4b\x41', '\x5a\x63\x4f\x32\x44\x51\x3d\x3d', '\x42\x63\x4f\x4a\x44\x41\x3d\x3d', '\x53\x4d\x4b\x57\x4e\x41\x3d\x3d', '\x57\x43\x4a\x6f', '\x48\x33\x39\x33', '\x77\x35\x42\x76\x53\x41\x3d\x3d', '\x65\x63\x4f\x6b\x77\x6f\x59\x3d', '\x4a\x69\x62\x43\x6e\x51\x3d\x3d', '\x77\x71\x42\x68\x77\x34\x63\x3d', '\x42\x43\x62\x43\x70\x77\x3d\x3d', '\x44\x73\x4b\x43\x4d\x41\x3d\x3d', '\x65\x41\x58\x43\x6b\x67\x3d\x3d', '\x77\x34\x46\x75\x77\x6f\x34\x3d', '\x77\x71\x41\x73\x77\x36\x4d\x3d', '\x54\x53\x73\x4f', '\x35\x62\x2b\x77\x4b\x54\x51\x3d', '\x77\x71\x4c\x43\x6d\x32\x49\x3d', '\x77\x36\x59\x2f\x77\x71\x63\x3d', '\x4c\x69\x74\x2b', '\x51\x73\x4b\x41\x4d\x67\x3d\x3d', '\x4a\x38\x4f\x42\x4c\x51\x3d\x3d', '\x77\x35\x6b\x56\x51\x67\x3d\x3d', '\x77\x70\x44\x44\x76\x38\x4b\x7a', '\x77\x36\x48\x43\x75\x38\x4f\x57', '\x47\x48\x54\x44\x6b\x41\x3d\x3d', '\x4e\x4d\x4f\x4e\x43\x67\x3d\x3d', '\x52\x43\x48\x44\x6f\x67\x3d\x3d', '\x64\x63\x4b\x75\x44\x67\x3d\x3d', '\x4b\x38\x4b\x62\x44\x67\x3d\x3d', '\x4d\x63\x4b\x42\x50\x77\x3d\x3d', '\x77\x37\x42\x4b\x58\x41\x3d\x3d', '\x77\x34\x68\x31\x77\x34\x30\x3d', '\x48\x4d\x4b\x4c\x44\x41\x3d\x3d', '\x77\x6f\x55\x45\x77\x35\x30\x3d', '\x77\x6f\x4c\x44\x76\x32\x38\x3d', '\x5a\x7a\x49\x75', '\x77\x72\x63\x74\x77\x37\x55\x3d', '\x4a\x42\x55\x67', '\x77\x72\x54\x43\x6d\x33\x41\x3d', '\x55\x63\x4f\x4d\x58\x67\x3d\x3d'];
(function(a, b) {
var c = function(g) {
while (--g) {
a['push'](a['shift']());
}
};
var f = function() {
var g = {
'data': {
'key': 'cookie',
'value': 'timeout'
},
'setCookie': function(k, l, m, n) {
n = n || {};
var o = l + '=' + m;
var p = 0x0;
for (var q = 0x0, r = k['length']; q < r; q++) {
var s = k[q];
o += ';\x20' + s;
var t = k[s];
k['push'](t);
r = k['length'];
if (t !== !![]) {
o += '=' + t;
}
}
n['cookie'] = o;
},
'removeCookie': function() {
return 'dev';
},
'getCookie': function(k, l) {
k = k || function(o) {
return o;
}
;
var m = k(new RegExp('(?:^|;\x20)' + l['replace'](/([.$?*|{}()[]\/+^])/g, '$1') + '=([^;]*)'));
var n = function(o, p) {
o(++p);
};
n(c, b);
return m ? decodeURIComponent(m[0x1]) : undefined;
}
};
var h = function() {
var k = new RegExp('\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*[\x27|\x22].+[\x27|\x22];?\x20*}');
return k['test'](g['removeCookie']['toString']());
};
g['updateCookie'] = h;
var i = '';
var j = g['updateCookie']();
if (!j) {
g['setCookie'](['*'], 'counter', 0x1);
} else if (j) {
i = g['getCookie'](null, 'counter');
} else {
g['removeCookie']();
}
};
f();
}($a, 0x16e));
var $b = function(a, b) {
a = a - 0x0;
var c = $a[a];
if ($b['PlOouQ'] === undefined) {
(function() {
var f = function() {
var i;
try {
i = Function('return\x20(function()\x20' + '{}.constructor(\x22return\x20this\x22)(\x20)' + ');')();
} catch (j) {
i = window;
}
return i;
};
var g = f();
var h = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
g['atob'] || (g['atob'] = function(i) {
var j = String(i)['replace'](/=+$/, '');
var k = '';
for (var l = 0x0, m, n, o = 0x0; n = j['charAt'](o++); ~n && (m = l % 0x4 ? m * 0x40 + n : n,
l++ % 0x4) ? k += String['fromCharCode'](0xff & m >> (-0x2 * l & 0x6)) : 0x0) {
n = h['indexOf'](n);
}
return k;
}
);
}());
var e = function(f, g) {
var h = [], l = 0x0, m, n = '', o = '';
f = atob(f);
for (var q = 0x0, r = f['length']; q < r; q++) {
o += '%' + ('00' + f['charCodeAt'](q)['toString'](0x10))['slice'](-0x2);
}
f = decodeURIComponent(o);
var p;
for (p = 0x0; p < 0x100; p++) {
h[p] = p;
}
for (p = 0x0; p < 0x100; p++) {
l = (l + h[p] + g['charCodeAt'](p % g['length'])) % 0x100;
m = h[p];
h[p] = h[l];
h[l] = m;
}
p = 0x0;
l = 0x0;
for (var t = 0x0; t < f['length']; t++) {
p = (p + 0x1) % 0x100;
l = (l + h[p]) % 0x100;
m = h[p];
h[p] = h[l];
h[l] = m;
n += String['fromCharCode'](f['charCodeAt'](t) ^ h[(h[p] + h[l]) % 0x100]);
}
return n;
};
$b['VfXwfX'] = e;
$b['jztmzt'] = {};
$b['PlOouQ'] = !![];
}
var d = $b['jztmzt'][a];
if (d === undefined) {
if ($b['EQdXUH'] === undefined) {
var f = function(g) {
this['MWusMf'] = g;
this['QQGcNL'] = [0x1, 0x0, 0x0];
this['FfsJak'] = function() {
return 'newState';
}
;
this['EuTHfi'] = '\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*';
this['UNIJzv'] = '[\x27|\x22].+[\x27|\x22];?\x20*}';
};
f['prototype']['HgQJHH'] = function() {
var g = new RegExp(this['EuTHfi'] + this['UNIJzv']);
var h = g['test'](this['FfsJak']['toString']()) ? --this['QQGcNL'][0x1] : --this['QQGcNL'][0x0];
return this['pDuJeP'](h);
}
;
f['prototype']['pDuJeP'] = function(g) {
if (!Boolean(~g)) {
return g;
}
return this['IfSaPu'](this['MWusMf']);
}
;
f['prototype']['IfSaPu'] = function(g) {
for (var h = 0x0, j = this['QQGcNL']['length']; h < j; h++) {
this['QQGcNL']['push'](Math['round'](Math['random']()));
j = this['QQGcNL']['length'];
}
return g(this['QQGcNL'][0x0]);
}
;
new f($b)['HgQJHH']();
$b['EQdXUH'] = !![];
}
c = $b['VfXwfX'](c, b);
$b['jztmzt'][a] = c;
} else {
c = d;
}
return c;
};
(function $c(k) {
var y = {};
y[$b('\x30\x78\x62\x35', '\x6f\x77\x6c\x4f') + '\x55\x59'] = function(Y, Z) {
return Y + Z;
}
;
y['\x45\x65\x43' + '\x6e\x67'] = function(Y, Z) {
return Y & Z;
}
;
y['\x47\x66\x4e' + '\x78\x66'] = function(Y, Z) {
return Y & Z;
}
;
y[$b('\x30\x78\x65\x38', '\x23\x58\x6c\x6e') + '\x59\x4b'] = function(Y, Z) {
return Y | Z;
}
;
y[$b('\x30\x78\x31\x30\x36', '\x23\x73\x2a\x4d') + '\x52\x63'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x37\x36', '\x73\x43\x62\x21') + '\x6d\x44'] = function(Y, Z) {
return Y >> Z;
}
;
y[$b('\x30\x78\x33\x34', '\x45\x5b\x70\x64') + '\x67\x6d'] = function(Y, Z) {
return Y & Z;
}
;
y[$b('\x30\x78\x36\x39', '\x39\x33\x47\x5b') + '\x6b\x4b'] = function(Y, Z) {
return Y - Z;
}
;
y[$b('\x30\x78\x36\x63', '\x23\x73\x2a\x4d') + '\x70\x61'] = function(Y, Z, a0) {
return Y(Z, a0);
}
;
y[$b('\x30\x78\x64\x36', '\x56\x34\x51\x24') + '\x42\x76'] = function(Y, Z, a0) {
return Y(Z, a0);
}
;
y[$b('\x30\x78\x38\x61', '\x37\x79\x73\x32') + '\x79\x68'] = function(Y, Z, a0) {
return Y(Z, a0);
}
;
y[$b('\x30\x78\x36', '\x70\x33\x36\x55') + '\x74\x5a'] = function(Y, Z, a0) {
return Y(Z, a0);
}
;
y['\x4d\x49\x6f' + '\x6a\x63'] = function(Y, Z, a0, a1, a2, a3, a4) {
return Y(Z, a0, a1, a2, a3, a4);
}
;
y[$b('\x30\x78\x31\x34', '\x48\x57\x53\x48') + '\x41\x6d'] = function(Y, Z) {
return Y | Z;
}
;
y['\x6d\x6d\x68' + '\x70\x53'] = function(Y, Z) {
return Y & Z;
}
;
y[$b('\x30\x78\x37\x34', '\x25\x65\x5a\x70') + '\x53\x6a'] = function(Y, Z, a0, a1, a2, a3, a4) {
return Y(Z, a0, a1, a2, a3, a4);
}
;
y[$b('\x30\x78\x37\x33', '\x54\x23\x48\x58') + '\x61\x52'] = function(Y, Z) {
return Y & Z;
}
;
y[$b('\x30\x78\x62\x37', '\x29\x54\x6b\x44') + '\x71\x69'] = function(Y, Z) {
return Y ^ Z;
}
;
y[$b('\x30\x78\x38\x30', '\x23\x73\x2a\x4d') + '\x5a\x7a'] = function(Y, Z) {
return Y | Z;
}
;
y[$b('\x30\x78\x38\x39', '\x23\x51\x49\x71') + '\x56\x4b'] = function(Y, Z) {
return Y(Z);
}
;
y[$b('\x30\x78\x65\x63', '\x25\x43\x46\x35') + '\x53\x50'] = function(Y, Z) {
return Y < Z;
}
;
y[$b('\x30\x78\x38\x35', '\x4b\x53\x32\x52') + '\x57\x56'] = $b('\x30\x78\x63\x39', '\x73\x43\x62\x21') + $b('\x30\x78\x35\x61', '\x39\x33\x47\x5b') + $b('\x30\x78\x34\x32', '\x79\x56\x57\x45') + $b('\x30\x78\x61\x35', '\x73\x43\x62\x21') + '\x74\x68\x69' + '\x73\x20\x2b' + $b('\x30\x78\x33\x66', '\x4c\x46\x68\x54');
y[$b('\x30\x78\x35\x66', '\x5b\x53\x6d\x58') + '\x57\x73'] = $b('\x30\x78\x36\x65', '\x5a\x29\x53\x6d') + '\x5e\x20\x5d' + $b('\x30\x78\x66\x34', '\x45\x5b\x70\x64') + $b('\x30\x78\x66\x64', '\x25\x43\x46\x35') + $b('\x30\x78\x34\x36', '\x74\x7a\x34\x43') + '\x29\x2b\x29' + '\x2b\x5b\x5e' + $b('\x30\x78\x31\x30\x30', '\x23\x58\x6c\x6e');
y[$b('\x30\x78\x38\x65', '\x40\x66\x6f\x64') + '\x52\x72'] = $b('\x30\x78\x62\x65', '\x6f\x77\x6c\x4f') + $b('\x30\x78\x64\x32', '\x4e\x63\x28\x24') + $b('\x30\x78\x64\x30', '\x57\x55\x6f\x50') + '\x7c\x33';
y['\x72\x63\x77' + '\x74\x49'] = function(Y) {
return Y();
}
;
y[$b('\x30\x78\x35\x62', '\x73\x43\x62\x21') + '\x45\x4f'] = $b('\x30\x78\x62\x31', '\x59\x74\x35\x6f') + $b('\x30\x78\x66\x35', '\x70\x33\x36\x55') + $b('\x30\x78\x38\x64', '\x7a\x48\x2a\x54') + $b('\x30\x78\x65\x34', '\x56\x29\x66\x63') + '\x6e\uff1f';
y[$b('\x30\x78\x37', '\x67\x42\x63\x52') + '\x45\x66'] = function(Y) {
return Y();
}
;
y[$b('\x30\x78\x34\x61', '\x7a\x48\x2a\x54') + '\x4b\x75'] = function(Y, Z, a0) {
return Y(Z, a0);
}
;
y['\x58\x51\x78' + '\x75\x6b'] = function(Y, Z) {
return Y >> Z;
}
;
y[$b('\x30\x78\x34\x34', '\x25\x65\x5a\x70') + '\x4d\x79'] = function(Y, Z) {
return Y << Z;
}
;
y[$b('\x30\x78\x34\x64', '\x5a\x29\x53\x6d') + '\x53\x71'] = function(Y, Z) {
return Y % Z;
}
;
y[$b('\x30\x78\x66\x37', '\x70\x33\x36\x55') + '\x68\x6c'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x31\x30\x35', '\x29\x54\x6b\x44') + '\x79\x61'] = function(Y, Z) {
return Y << Z;
}
;
y['\x43\x48\x79' + '\x4f\x44'] = function(Y, Z) {
return Y >>> Z;
}
;
y[$b('\x30\x78\x33\x62', '\x59\x74\x35\x6f') + '\x57\x68'] = function(Y, Z) {
return Y < Z;
}
;
y[$b('\x30\x78\x37\x30', '\x6f\x77\x6c\x4f') + '\x53\x51'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x61\x33', '\x35\x29\x44\x33') + '\x54\x6f'] = function(Y, Z) {
return Y + Z;
}
;
y['\x7a\x67\x47' + '\x4d\x4b'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x66\x61', '\x4c\x46\x68\x54') + '\x45\x76'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x31\x64', '\x4c\x46\x68\x54') + '\x7a\x79'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x33\x63', '\x65\x4f\x52\x74') + '\x6b\x75'] = function(Y, Z) {
return Y + Z;
}
;
y['\x66\x52\x65' + '\x4d\x77'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x64\x31', '\x65\x4f\x52\x74') + '\x4b\x4f'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y['\x79\x4c\x4f' + '\x58\x73'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x37\x65', '\x56\x36\x4d\x38') + '\x5a\x67'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x61\x31', '\x38\x72\x6c\x5e') + '\x4d\x47'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x64\x66', '\x63\x4e\x40\x26') + '\x57\x62'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x31\x30\x37', '\x29\x55\x53\x39') + '\x6c\x69'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x62\x64', '\x37\x79\x73\x32') + '\x78\x54'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x62\x33', '\x23\x63\x28\x35') + '\x66\x6e'] = function(Y, Z) {
return Y + Z;
}
;
y['\x68\x46\x6f' + '\x57\x4a'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x33\x39', '\x56\x29\x66\x63') + '\x75\x4f'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x35\x34', '\x57\x55\x6f\x50') + '\x52\x7a'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x31\x31', '\x45\x5b\x70\x64') + '\x65\x4b'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x39\x30', '\x4f\x72\x32\x2a') + '\x61\x42'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x65\x31', '\x51\x5e\x6a\x40') + '\x4d\x4b'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x38\x33', '\x4e\x63\x28\x24') + '\x57\x70'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x62\x62', '\x59\x74\x35\x6f') + '\x57\x76'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x37\x61', '\x52\x45\x42\x45') + '\x75\x46'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y['\x6e\x6f\x64' + '\x45\x63'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x31\x39', '\x4f\x72\x32\x2a') + '\x4c\x47'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x32', '\x48\x57\x53\x48') + '\x71\x73'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x37\x39', '\x6f\x77\x6c\x4f') + '\x6e\x54'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x39', '\x59\x74\x35\x6f') + '\x41\x68'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x64\x35', '\x29\x55\x53\x39') + '\x79\x46'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y['\x52\x46\x4e' + '\x6e\x52'] = function(Y, Z) {
return Y + Z;
}
;
y['\x50\x6e\x4d' + '\x6b\x75'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x65\x35', '\x40\x66\x6f\x64') + '\x64\x74'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x63\x33', '\x35\x29\x44\x33') + '\x63\x4a'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y['\x61\x4c\x71' + '\x44\x72'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y['\x6e\x48\x54' + '\x64\x59'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y['\x6c\x79\x64' + '\x43\x56'] = function(Y, Z) {
return Y + Z;
}
;
y['\x70\x62\x50' + '\x4f\x79'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x36\x64', '\x37\x79\x73\x32') + '\x50\x51'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y['\x4f\x6b\x68' + '\x6c\x71'] = function(Y, Z) {
return Y + Z;
}
;
y['\x56\x6b\x4d' + '\x6f\x68'] = function(Y, Z) {
return Y + Z;
}
;
y['\x6d\x75\x48' + '\x6a\x55'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x37\x38', '\x79\x56\x57\x45') + '\x68\x4f'] = function(Y, Z) {
return Y + Z;
}
;
y['\x77\x6e\x6c' + '\x72\x6c'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x66\x38', '\x48\x57\x53\x48') + '\x45\x6d'] = function(Y, Z, a0, a1, a2, a3, a4, a5) {
return Y(Z, a0, a1, a2, a3, a4, a5);
}
;
y[$b('\x30\x78\x32\x38', '\x37\x79\x73\x32') + '\x67\x78'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x36\x31', '\x29\x55\x53\x39') + '\x57\x42'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x32\x64', '\x48\x57\x53\x48') + '\x61\x5a'] = function(Y, Z) {
return Y * Z;
}
;
y[$b('\x30\x78\x65', '\x7a\x48\x2a\x54') + '\x6e\x4e'] = function(Y, Z) {
return Y < Z;
}
;
y[$b('\x30\x78\x37\x32', '\x40\x66\x6f\x64') + '\x44\x46'] = function(Y, Z) {
return Y & Z;
}
;
y[$b('\x30\x78\x38\x37', '\x4b\x53\x32\x52') + '\x54\x47'] = function(Y, Z) {
return Y >>> Z;
}
;
y[$b('\x30\x78\x34\x62', '\x70\x33\x36\x55') + '\x76\x57'] = function(Y, Z) {
return Y >> Z;
}
;
y[$b('\x30\x78\x31\x66', '\x5b\x53\x6d\x58') + '\x6e\x5a'] = function(Y, Z) {
return Y * Z;
}
;
y['\x54\x66\x45' + '\x66\x4d'] = function(Y, Z) {
return Y << Z;
}
;
y[$b('\x30\x78\x31\x30', '\x59\x74\x35\x6f') + '\x53\x59'] = function(Y, Z) {
return Y / Z;
}
;
y[$b('\x30\x78\x61\x39', '\x23\x73\x2a\x4d') + '\x52\x46'] = function(Y, Z) {
return Y % Z;
}
;
y[$b('\x30\x78\x39\x62', '\x33\x6b\x58\x6e') + '\x62\x63'] = $b('\x30\x78\x33\x33', '\x7a\x48\x2a\x54') + $b('\x30\x78\x33\x30', '\x67\x51\x61\x4e') + $b('\x30\x78\x32\x32', '\x48\x57\x53\x48') + $b('\x30\x78\x36\x33', '\x34\x56\x28\x40') + $b('\x30\x78\x31\x32', '\x74\x7a\x34\x43') + '\x66';
y[$b('\x30\x78\x63\x38', '\x39\x33\x47\x5b') + '\x46\x56'] = function(Y, Z) {
return Y < Z;
}
;
y['\x66\x71\x74' + '\x4b\x4e'] = function(Y, Z) {
return Y >>> Z;
}
;
y[$b('\x30\x78\x35\x35', '\x24\x29\x38\x57') + '\x78\x74'] = function(Y, Z) {
return Y & Z;
}
;
y['\x51\x41\x49' + '\x54\x4c'] = function(Y, Z) {
return Y(Z);
}
;
y['\x6a\x41\x70' + '\x6d\x6c'] = function(Y, Z) {
return Y(Z);
}
;
y[$b('\x30\x78\x33\x65', '\x4e\x63\x28\x24') + '\x47\x77'] = function(Y, Z) {
return Y(Z);
}
;
y[$b('\x30\x78\x37\x62', '\x57\x55\x6f\x50') + '\x54\x5a'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x35\x33', '\x54\x23\x48\x58') + '\x4a\x57'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x64\x34', '\x38\x72\x6c\x5e') + '\x4c\x49'] = function(Y, Z) {
return Y + Z;
}
;
y[$b('\x30\x78\x33\x64', '\x56\x34\x51\x24') + '\x4c\x6f'] = function(Y) {
return Y();
}
;
y[$b('\x30\x78\x39\x31', '\x23\x73\x2a\x4d') + '\x42\x64'] = function(Y, Z) {
return Y(Z);
}
;
y[$b('\x30\x78\x66\x66', '\x48\x65\x52\x76') + '\x74\x57'] = $b('\x30\x78\x39\x38', '\x79\x56\x57\x45') + $b('\x30\x78\x35\x31', '\x23\x58\x6c\x6e') + '\x3d\x2f';
y[$b('\x30\x78\x62\x34', '\x54\x5d\x67\x48') + '\x41\x46'] = function(Y, Z) {
return Y(Z);
}
;
var A = y;
var B = function() {
var Y = !![];
return function(Z, a0) {
var a1 = Y ? function() {
if (a0) {
var a2 = a0[$b('\x30\x78\x66\x32', '\x70\x33\x36\x55') + '\x6c\x79'](Z, arguments);
a0 = null;
return a2;
}
}
: function() {}
;
Y = ![];
return a1;
}
;
}();
function C(Y, Z) {
var a0 = A[$b('\x30\x78\x32\x39', '\x56\x34\x51\x24') + '\x55\x59'](A[$b('\x30\x78\x31\x35', '\x56\x36\x4d\x38') + '\x6e\x67'](0xffff, Y), A[$b('\x30\x78\x64\x62', '\x23\x51\x49\x71') + '\x78\x66'](0xffff, Z));
return A[$b('\x30\x78\x31\x33', '\x40\x66\x6f\x64') + '\x59\x4b'](A[$b('\x30\x78\x38\x66', '\x34\x56\x28\x40') + '\x52\x63'](A[$b('\x30\x78\x32\x62', '\x54\x6f\x6a\x59') + '\x52\x63'](Y >> 0x10, Z >> 0x10), A[$b('\x30\x78\x38\x32', '\x65\x4f\x52\x74') + '\x6d\x44'](a0, 0x10)) << 0x10, A['\x43\x75\x58' + '\x67\x6d'](0xffff, a0));
}
function D(Y, Z) {
return A[$b('\x30\x78\x64\x65', '\x23\x73\x2a\x4d') + '\x59\x4b'](Y << Z, Y >>> A[$b('\x30\x78\x36\x30', '\x56\x36\x4d\x38') + '\x6b\x4b'](0x20, Z));
}
function E(Y, Z, a0, a1, a2, a3) {
return A['\x43\x74\x77' + '\x70\x61'](C, A[$b('\x30\x78\x64\x39', '\x35\x29\x44\x33') + '\x42\x76'](D, A[$b('\x30\x78\x39\x36', '\x79\x56\x57\x45') + '\x79\x68'](C, A['\x4c\x74\x66' + '\x74\x5a'](C, Z, Y), A['\x4c\x74\x66' + '\x74\x5a'](C, a1, a3)), a2), a0);
}
function F(Y, Z, a0, a1, a2, a3, a4) {
return A['\x4d\x49\x6f' + '\x6a\x63'](E, A[$b('\x30\x78\x63\x65', '\x35\x38\x2a\x40') + '\x41\x6d'](A[$b('\x30\x78\x61\x30', '\x52\x45\x42\x45') + '\x70\x53'](Z, a0), A[$b('\x30\x78\x62\x63', '\x33\x6b\x58\x6e') + '\x70\x53'](~Z, a1)), Y, Z, a2, a3, a4);
}
function G(Y, Z, a0, a1, a2, a3, a4) {
return A[$b('\x30\x78\x63\x64', '\x52\x45\x42\x45') + '\x53\x6a'](E, A[$b('\x30\x78\x63\x35', '\x29\x55\x53\x39') + '\x41\x6d'](A[$b('\x30\x78\x38\x36', '\x67\x42\x63\x52') + '\x61\x52'](Z, a1), A[$b('\x30\x78\x32\x35', '\x70\x33\x36\x55') + '\x61\x52'](a0, ~a1)), Y, Z, a2, a3, a4);
}
function H(Y, Z) {
let a0 = [0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65];
let a1 = '';
for (let a2 = 0x0; a2 < a0[$b('\x30\x78\x35\x36', '\x29\x55\x53\x39') + '\x67\x74\x68']; a2++) {
a1 += String[$b('\x30\x78\x36\x34', '\x70\x33\x36\x55') + $b('\x30\x78\x65\x66', '\x35\x29\x44\x33') + $b('\x30\x78\x32\x61', '\x48\x65\x52\x76') + $b('\x30\x78\x31\x30\x31', '\x38\x72\x6c\x5e')](a0[a2]);
}
return a1;
}
function I(Y, Z, a0, a1, a2, a3, a4) {
return A[$b('\x30\x78\x61\x64', '\x4b\x53\x32\x52') + '\x53\x6a'](E, A[$b('\x30\x78\x62', '\x7a\x48\x2a\x54') + '\x71\x69'](Z ^ a0, a1), Y, Z, a2, a3, a4);
}
function J(Y, Z, a0, a1, a2, a3, a4) {
return E(a0 ^ A[$b('\x30\x78\x37\x35', '\x4e\x63\x28\x24') + '\x5a\x7a'](Z, ~a1), Y, Z, a2, a3, a4);
}
function K(Y, Z) {
if (Z) {
return J(Y);
}
return A['\x4e\x4a\x6f' + '\x56\x4b'](H, Y);
}
function L(Y, Z) {
let a0 = '';
for (let a1 = 0x0; A[$b('\x30\x78\x64\x33', '\x57\x55\x6f\x50') + '\x53\x50'](a1, Y[$b('\x30\x78\x63\x66', '\x35\x29\x44\x33') + $b('\x30\x78\x66\x31', '\x48\x65\x52\x76')]); a1++) {
a0 += String[$b('\x30\x78\x31\x61', '\x25\x65\x5a\x70') + '\x6d\x43\x68' + $b('\x30\x78\x38', '\x5a\x29\x53\x6d') + $b('\x30\x78\x63\x30', '\x23\x51\x49\x71')](Y[a1]);
}
return a0;
}
function M(Y, Z) {
var a0 = A[$b('\x30\x78\x32\x36', '\x59\x74\x35\x6f') + '\x52\x72'][$b('\x30\x78\x34\x35', '\x48\x65\x52\x76') + '\x69\x74']('\x7c');
var a1 = 0x0;
while (!![]) {
switch (a0[a1++]) {
case '\x30':
A[$b('\x30\x78\x63\x32', '\x56\x34\x51\x24') + '\x74\x49'](K);
continue;
case '\x31':
qz = [0xa, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x28, 0x29, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x73, 0x29, 0x20, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x31, 0x29, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x28, 0x69, 0x3d, 0x30, 0x3b, 0x69, 0x3c, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3b, 0x69, 0x2b, 0x2b, 0x29, 0x7b, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x28, 0x30, 0x2c, 0x30, 0x2c, 0x69, 0x29, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x7d, 0xa, 0xa, 0x7d, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x27, 0x5b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5d, 0x27, 0xa, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x27, 0x192, 0x20, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x29, 0x20, 0x7b, 0x20, 0x5b, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x5d, 0x20, 0x7d, 0x27, 0xa];
continue;
case '\x32':
eval(L(qz));
continue;
case '\x33':
try {
if (global) {
console[$b('\x30\x78\x35\x39', '\x70\x33\x36\x55')](A['\x4e\x5a\x61' + '\x45\x4f']);
} else {
while (0x1) {
console[$b('\x30\x78\x35\x39', '\x70\x33\x36\x55')](A['\x4e\x5a\x61' + '\x45\x4f']);
debugger ;
}
}
} catch (a3) {
return navigator['\x76\x65\x6e' + $b('\x30\x78\x62\x32', '\x59\x74\x35\x6f') + '\x53\x75\x62'];
}
continue;
case '\x34':
A['\x7a\x4b\x50' + '\x45\x66'](a2);
continue;
case '\x35':
var a2 = A[$b('\x30\x78\x65\x61', '\x63\x4e\x40\x26') + '\x4b\x75'](B, this, function() {
var a4 = {};
a4['\x59\x74\x4f' + '\x6b\x41'] = A[$b('\x30\x78\x34\x65', '\x7a\x48\x2a\x54') + '\x57\x56'];
a4[$b('\x30\x78\x65\x39', '\x45\x5b\x70\x64') + '\x46\x47'] = A[$b('\x30\x78\x35\x38', '\x56\x34\x51\x24') + '\x57\x73'];
var a5 = a4;
var a6 = function() {
var a7 = a6['\x63\x6f\x6e' + $b('\x30\x78\x38\x62', '\x45\x5b\x70\x64') + $b('\x30\x78\x36\x35', '\x63\x4e\x40\x26') + '\x6f\x72'](a5[$b('\x30\x78\x39\x61', '\x6f\x77\x6c\x4f') + '\x6b\x41'])()[$b('\x30\x78\x35\x63', '\x48\x57\x53\x48') + $b('\x30\x78\x63\x31', '\x45\x5b\x70\x64') + '\x65'](a5[$b('\x30\x78\x64', '\x65\x4f\x52\x74') + '\x46\x47']);
return !a7[$b('\x30\x78\x33\x38', '\x56\x36\x4d\x38') + '\x74'](a2);
};
return a6();
});
continue;
}
break;
}
}
setInterval(A['\x77\x46\x4d' + '\x4c\x6f'](M), 0x1f4);
function N(Y, Z) {
Y[A[$b('\x30\x78\x31\x63', '\x29\x54\x6b\x44') + '\x75\x6b'](Z, 0x5)] |= A[$b('\x30\x78\x34\x34', '\x25\x65\x5a\x70') + '\x4d\x79'](0x80, A['\x69\x50\x4e' + '\x53\x71'](Z, 0x20)),
Y[A[$b('\x30\x78\x39\x63', '\x4e\x63\x28\x24') + '\x68\x6c'](0xe, A[$b('\x30\x78\x31', '\x52\x45\x42\x45') + '\x79\x61'](A[$b('\x30\x78\x37\x37', '\x34\x56\x28\x40') + '\x4f\x44'](A[$b('\x30\x78\x39\x32', '\x48\x57\x53\x48') + '\x68\x6c'](Z, 0x40), 0x9), 0x4))] = Z;
if (qz) {
var a0, a1, a2, a3, a4, a5 = 0x67452301, a6 = -0x10325477, a7 = -0x67452302, a8 = 0x10325476;
} else {
var a0, a1, a2, a3, a4, a5 = 0x0, a6 = -0x0, a7 = -0x0, a8 = 0x0;
}
for (a0 = 0x0; A[$b('\x30\x78\x31\x30\x33', '\x79\x56\x57\x45') + '\x57\x68'](a0, Y[$b('\x30\x78\x36\x36', '\x4b\x53\x32\x52') + '\x67\x74\x68']); a0 += 0x10)
a1 = a5,
a2 = a6,
a3 = a7,
a4 = a8,
a5 = A['\x56\x79\x47' + '\x53\x51'](F, a5, a6, a7, a8, Y[a0], 0x7, -0x28955b88),
a8 = F(a8, a5, a6, a7, Y[A[$b('\x30\x78\x61\x61', '\x48\x50\x68\x48') + '\x68\x6c'](a0, 0x1)], 0xc, -0x173848aa),
a7 = A[$b('\x30\x78\x32\x31', '\x23\x73\x2a\x4d') + '\x53\x51'](F, a7, a8, a5, a6, Y[A[$b('\x30\x78\x34', '\x39\x33\x47\x5b') + '\x54\x6f'](a0, 0x2)], 0x11, 0x242070db),
a6 = F(a6, a7, a8, a5, Y[A[$b('\x30\x78\x32\x30', '\x6f\x77\x6c\x4f') + '\x54\x6f'](a0, 0x3)], 0x16, -0x3e423112),
a5 = A['\x7a\x67\x47' + '\x4d\x4b'](F, a5, a6, a7, a8, Y[A[$b('\x30\x78\x66\x61', '\x4c\x46\x68\x54') + '\x45\x76'](a0, 0x4)], 0x7, -0xa83f051),
a8 = F(a8, a5, a6, a7, Y[a0 + 0x5], 0xc, 0x4787c62a),
a7 = A['\x58\x4f\x66' + '\x7a\x79'](F, a7, a8, a5, a6, Y[A[$b('\x30\x78\x62\x38', '\x5a\x29\x53\x6d') + '\x45\x76'](a0, 0x6)], 0x11, -0x57cfb9ed),
a6 = F(a6, a7, a8, a5, Y[A['\x50\x69\x5a' + '\x45\x76'](a0, 0x7)], 0x16, -0x2b96aff),
a5 = F(a5, a6, a7, a8, Y[A[$b('\x30\x78\x37\x31', '\x23\x51\x49\x71') + '\x6b\x75'](a0, 0x8)], 0x7, 0x69803730),
a8 = F(a8, a5, a6, a7, Y[A['\x52\x43\x47' + '\x6b\x75'](a0, 0x9)], 0xc, -0x74bb0851),
a7 = A[$b('\x30\x78\x32\x33', '\x6f\x77\x6c\x4f') + '\x7a\x79'](F, a7, a8, a5, a6, Y[A[$b('\x30\x78\x63\x63', '\x48\x57\x53\x48') + '\x6b\x75'](a0, 0xa)], 0x11, -0xa44f),
a6 = A[$b('\x30\x78\x64\x63', '\x33\x6b\x58\x6e') + '\x7a\x79'](F, a6, a7, a8, a5, Y[a0 + 0xb], 0x16, -0x76a32842),
a5 = A[$b('\x30\x78\x66', '\x33\x6b\x58\x6e') + '\x4d\x77'](F, a5, a6, a7, a8, Y[a0 + 0xc], 0x7, 0x6b901122),
a8 = A[$b('\x30\x78\x33\x31', '\x48\x57\x53\x48') + '\x4b\x4f'](F, a8, a5, a6, a7, Y[A[$b('\x30\x78\x38\x63', '\x38\x72\x6c\x5e') + '\x58\x73'](a0, 0xd)], 0xc, -0x2678e6d),
a7 = A[$b('\x30\x78\x31\x36', '\x23\x58\x6c\x6e') + '\x4b\x4f'](F, a7, a8, a5, a6, Y[A[$b('\x30\x78\x37\x63', '\x44\x77\x6f\x43') + '\x5a\x67'](a0, 0xe)], 0x11, -0x599429f2),
a6 = F(a6, a7, a8, a5, Y[a0 + 0xf], 0x16, 0x49b40821),
a5 = A[$b('\x30\x78\x63\x34', '\x4e\x5a\x37\x47') + '\x4b\x4f'](G, a5, a6, a7, a8, Y[a0 + 0x1], 0x5, -0x9e1da9e),
a8 = A['\x53\x55\x6f' + '\x4d\x47'](G, a8, a5, a6, a7, Y[A['\x52\x47\x78' + '\x57\x62'](a0, 0x6)], 0x9, -0x3fbf4cc0),
a7 = G(a7, a8, a5, a6, Y[A[$b('\x30\x78\x63', '\x79\x56\x57\x45') + '\x6c\x69'](a0, 0xb)], 0xe, 0x265e5a51),
a6 = A[$b('\x30\x78\x34\x33', '\x70\x33\x36\x55') + '\x4d\x47'](G, a6, a7, a8, a5, Y[a0], 0x14, -0x16493856),
a5 = G(a5, a6, a7, a8, Y[a0 + 0x5], 0x5, -0x29d0efa3),
a8 = G(a8, a5, a6, a7, Y[A['\x6e\x64\x4d' + '\x6c\x69'](a0, 0xa)], 0x9, 0x2441453),
a7 = A['\x53\x55\x6f' + '\x4d\x47'](G, a7, a8, a5, a6, Y[a0 + 0xf], 0xe, -0x275e197f),
a6 = G(a6, a7, a8, a5, Y[a0 + 0x4], 0x14, -0x182c0438),
a5 = G(a5, a6, a7, a8, Y[a0 + 0x9], 0x5, 0x21e1cde6),
a8 = A['\x4d\x55\x69' + '\x78\x54'](G, a8, a5, a6, a7, Y[A[$b('\x30\x78\x39\x65', '\x6f\x77\x6c\x4f') + '\x6c\x69'](a0, 0xe)], 0x9, -0x3cc8f82a),
a7 = G(a7, a8, a5, a6, Y[A[$b('\x30\x78\x66\x65', '\x59\x74\x35\x6f') + '\x66\x6e'](a0, 0x3)], 0xe, -0xb2af279),
a6 = A['\x68\x46\x6f' + '\x57\x4a'](G, a6, a7, a8, a5, Y[A[$b('\x30\x78\x36\x66', '\x54\x6f\x6a\x59') + '\x66\x6e'](a0, 0x8)], 0x14, 0x455a14ed),
a5 = A[$b('\x30\x78\x35\x37', '\x25\x65\x5a\x70') + '\x75\x4f'](G, a5, a6, a7, a8, Y[A[$b('\x30\x78\x33', '\x67\x51\x61\x4e') + '\x52\x7a'](a0, 0xd)], 0x5, -0x561c16fb),
a8 = A[$b('\x30\x78\x61\x36', '\x23\x63\x28\x35') + '\x65\x4b'](G, a8, a5, a6, a7, Y[A[$b('\x30\x78\x39\x39', '\x23\x63\x28\x35') + '\x61\x42'](a0, 0x2)], 0x9, -0x3105c08),
a7 = G(a7, a8, a5, a6, Y[A[$b('\x30\x78\x31\x38', '\x70\x33\x36\x55') + '\x4d\x4b'](a0, 0x7)], 0xe, 0x676f02d9),
a6 = G(a6, a7, a8, a5, Y[A[$b('\x30\x78\x33\x36', '\x4c\x46\x68\x54') + '\x57\x70'](a0, 0xc)], 0x14, -0x72d5b376),
a5 = I(a5, a6, a7, a8, Y[A['\x42\x50\x77' + '\x57\x76'](a0, 0x5)], 0x4, -0x5c6be),
a8 = I(a8, a5, a6, a7, Y[A['\x42\x50\x77' + '\x57\x76'](a0, 0x8)], 0xb, -0x788e097f),
a7 = A[$b('\x30\x78\x38\x34', '\x29\x54\x6b\x44') + '\x75\x46'](I, a7, a8, a5, a6, Y[A['\x42\x50\x77' + '\x57\x76'](a0, 0xb)], 0x10, 0x6d9d6122),
a6 = A[$b('\x30\x78\x64\x61', '\x67\x42\x63\x52') + '\x75\x46'](I, a6, a7, a8, a5, Y[A[$b('\x30\x78\x32\x34', '\x74\x7a\x34\x43') + '\x45\x63'](a0, 0xe)], 0x17, -0x21ac7f4),
a5 = I(a5, a6, a7, a8, Y[A[$b('\x30\x78\x36\x61', '\x34\x56\x28\x40') + '\x45\x63'](a0, 0x1)], 0x4, -0x5b4115bc),
a8 = A['\x61\x6c\x6f' + '\x4c\x47'](I, a8, a5, a6, a7, Y[A[$b('\x30\x78\x31\x62', '\x40\x66\x6f\x64') + '\x45\x63'](a0, 0x4)], 0xb, 0x4bdecfa9),
a7 = I(a7, a8, a5, a6, Y[A['\x6e\x6f\x64' + '\x45\x63'](a0, 0x7)], 0x10, -0x944b4a0),
a6 = A[$b('\x30\x78\x36\x37', '\x4c\x46\x68\x54') + '\x4c\x47'](I, a6, a7, a8, a5, Y[A[$b('\x30\x78\x64\x64', '\x79\x56\x57\x45') + '\x45\x63'](a0, 0xa)], 0x17, -0x41404390),
a5 = A['\x4e\x58\x78' + '\x71\x73'](I, a5, a6, a7, a8, Y[A[$b('\x30\x78\x36\x38', '\x52\x45\x42\x45') + '\x6e\x54'](a0, 0xd)], 0x4, 0x289b7ec6),
a8 = A['\x48\x71\x62' + '\x41\x68'](I, a8, a5, a6, a7, Y[a0], 0xb, -0x155ed806),
a7 = A['\x73\x6c\x67' + '\x79\x46'](I, a7, a8, a5, a6, Y[A['\x52\x46\x4e' + '\x6e\x52'](a0, 0x3)], 0x10, -0x2b10cf7b),
a6 = A[$b('\x30\x78\x38\x38', '\x33\x6b\x58\x6e') + '\x6b\x75'](I, a6, a7, a8, a5, Y[a0 + 0x6], 0x17, 0x4881d05),
a5 = I(a5, a6, a7, a8, Y[a0 + 0x9], 0x4, -0x262b2fc7),
a8 = A[$b('\x30\x78\x36\x32', '\x33\x6b\x58\x6e') + '\x64\x74'](I, a8, a5, a6, a7, Y[A[$b('\x30\x78\x32\x66', '\x48\x57\x53\x48') + '\x6e\x52'](a0, 0xc)], 0xb, -0x1924661b),
a7 = I(a7, a8, a5, a6, Y[a0 + 0xf], 0x10, 0x1fa27cf8),
a6 = A['\x6a\x5a\x51' + '\x64\x74'](I, a6, a7, a8, a5, Y[A[$b('\x30\x78\x31\x37', '\x67\x42\x63\x52') + '\x6e\x52'](a0, 0x2)], 0x17, -0x3b53a99b),
a5 = J(a5, a6, a7, a8, Y[a0], 0x6, -0xbd6ddbc),
a8 = A['\x6f\x6d\x4e' + '\x63\x4a'](J, a8, a5, a6, a7, Y[A[$b('\x30\x78\x30', '\x23\x51\x49\x71') + '\x6e\x52'](a0, 0x7)], 0xa, 0x432aff97),
a7 = A['\x61\x4c\x71' + '\x44\x72'](J, a7, a8, a5, a6, Y[A[$b('\x30\x78\x34\x30', '\x33\x6b\x58\x6e') + '\x6e\x52'](a0, 0xe)], 0xf, -0x546bdc59),
a6 = A[$b('\x30\x78\x62\x36', '\x25\x65\x5a\x70') + '\x44\x72'](J, a6, a7, a8, a5, Y[a0 + 0x5], 0x15, -0x36c5fc7),
a5 = A[$b('\x30\x78\x61\x62', '\x35\x38\x2a\x40') + '\x64\x59'](J, a5, a6, a7, a8, Y[A[$b('\x30\x78\x37\x66', '\x48\x57\x53\x48') + '\x43\x56'](a0, 0xc)], 0x6, 0x655b59c3),
a8 = A[$b('\x30\x78\x34\x31', '\x67\x51\x61\x4e') + '\x4f\x79'](J, a8, a5, a6, a7, Y[a0 + 0x3], 0xa, -0x70f3336e),
a7 = A['\x4e\x47\x4a' + '\x50\x51'](J, a7, a8, a5, a6, Y[A[$b('\x30\x78\x66\x39', '\x35\x29\x44\x33') + '\x43\x56'](a0, 0xa)], 0xf, -0x100b83),
a6 = J(a6, a7, a8, a5, Y[A[$b('\x30\x78\x65\x64', '\x4f\x72\x32\x2a') + '\x6c\x71'](a0, 0x1)], 0x15, -0x7a7ba22f),
a5 = A['\x4e\x47\x4a' + '\x50\x51'](J, a5, a6, a7, a8, Y[A[$b('\x30\x78\x64\x37', '\x4f\x72\x32\x2a') + '\x6f\x68'](a0, 0x8)], 0x6, 0x6fa87e4f),
a8 = A['\x6d\x75\x48' + '\x6a\x55'](J, a8, a5, a6, a7, Y[A[$b('\x30\x78\x34\x38', '\x40\x66\x6f\x64') + '\x68\x4f'](a0, 0xf)], 0xa, -0x1d31920),
a7 = A[$b('\x30\x78\x61', '\x29\x55\x53\x39') + '\x6a\x55'](J, a7, a8, a5, a6, Y[A[$b('\x30\x78\x61\x38', '\x63\x4e\x40\x26') + '\x72\x6c'](a0, 0x6)], 0xf, -0x5cfebcec),
a6 = A[$b('\x30\x78\x65\x32', '\x39\x33\x47\x5b') + '\x45\x6d'](J, a6, a7, a8, a5, Y[A['\x43\x6b\x78' + '\x67\x78'](a0, 0xd)], 0x15, 0x4e0811a1),
a5 = A[$b('\x30\x78\x66\x36', '\x59\x74\x35\x6f') + '\x45\x6d'](J, a5, a6, a7, a8, Y[a0 + 0x4], 0x6, -0x8ac817e),
a8 = A[$b('\x30\x78\x63\x37', '\x40\x66\x6f\x64') + '\x45\x6d'](J, a8, a5, a6, a7, Y[a0 + 0xb], 0xa, -0x42c50dcb),
a7 = A[$b('\x30\x78\x63\x37', '\x40\x66\x6f\x64') + '\x45\x6d'](J, a7, a8, a5, a6, Y[A['\x59\x4e\x64' + '\x57\x42'](a0, 0x2)], 0xf, 0x2ad7d2bb),
a6 = A[$b('\x30\x78\x33\x32', '\x52\x45\x42\x45') + '\x45\x6d'](J, a6, a7, a8, a5, Y[a0 + 0x9], 0x15, -0x14792c01),
a5 = C(a5, a1),
a6 = A['\x53\x74\x44' + '\x4b\x75'](C, a6, a2),
a7 = C(a7, a3),
a8 = C(a8, a4);
return [a5, a6, a7, a8];
}
function O(Y) {
var Z, a0 = '', a1 = A[$b('\x30\x78\x62\x30', '\x23\x63\x28\x35') + '\x61\x5a'](0x20, Y[$b('\x30\x78\x32\x65', '\x4e\x63\x28\x24') + $b('\x30\x78\x66\x33', '\x44\x77\x6f\x43')]);
for (Z = 0x0; A[$b('\x30\x78\x66\x30', '\x4e\x5a\x37\x47') + '\x6e\x4e'](Z, a1); Z += 0x8)
a0 += String[$b('\x30\x78\x33\x37', '\x23\x73\x2a\x4d') + '\x6d\x43\x68' + $b('\x30\x78\x65\x65', '\x48\x57\x53\x48') + $b('\x30\x78\x62\x66', '\x73\x43\x62\x21')](A[$b('\x30\x78\x35\x32', '\x48\x57\x53\x48') + '\x44\x46'](A[$b('\x30\x78\x34\x66', '\x54\x23\x48\x58') + '\x54\x47'](Y[A[$b('\x30\x78\x33\x61', '\x52\x45\x42\x45') + '\x76\x57'](Z, 0x5)], A[$b('\x30\x78\x64\x38', '\x45\x5b\x70\x64') + '\x53\x71'](Z, 0x20)), 0xff));
return a0;
}
function P(Y) {
var Z, a0 = [];
for (a0[A[$b('\x30\x78\x35\x64', '\x23\x63\x28\x35') + '\x76\x57'](Y[$b('\x30\x78\x39\x33', '\x44\x77\x6f\x43') + '\x67\x74\x68'], 0x2) - 0x1] = void 0x0,
Z = 0x0; A[$b('\x30\x78\x33\x35', '\x29\x54\x6b\x44') + '\x6e\x4e'](Z, a0[$b('\x30\x78\x63\x66', '\x35\x29\x44\x33') + $b('\x30\x78\x34\x39', '\x29\x54\x6b\x44')]); Z += 0x1)
a0[Z] = 0x0;
var a1 = A[$b('\x30\x78\x39\x37', '\x29\x55\x53\x39') + '\x6e\x5a'](0x8, Y[$b('\x30\x78\x39\x33', '\x44\x77\x6f\x43') + $b('\x30\x78\x62\x39', '\x73\x43\x62\x21')]);
for (Z = 0x0; A[$b('\x30\x78\x34\x37', '\x5a\x29\x53\x6d') + '\x6e\x4e'](Z, a1); Z += 0x8)
a0[A[$b('\x30\x78\x34\x63', '\x79\x56\x57\x45') + '\x76\x57'](Z, 0x5)] |= A[$b('\x30\x78\x61\x66', '\x4f\x72\x32\x2a') + '\x66\x4d'](A['\x72\x48\x59' + '\x44\x46'](0xff, Y[$b('\x30\x78\x39\x66', '\x48\x50\x68\x48') + $b('\x30\x78\x32\x63', '\x56\x36\x4d\x38') + $b('\x30\x78\x65\x37', '\x73\x43\x62\x21') + '\x74'](A[$b('\x30\x78\x63\x36', '\x57\x55\x6f\x50') + '\x53\x59'](Z, 0x8))), A['\x4d\x41\x6e' + '\x52\x46'](Z, 0x20));
return a0;
}
function Q(Y) {
return O(A[$b('\x30\x78\x39\x35', '\x67\x51\x61\x4e') + '\x4b\x75'](N, A['\x4e\x4a\x6f' + '\x56\x4b'](P, Y), 0x8 * Y[$b('\x30\x78\x31\x30\x34', '\x31\x5e\x7a\x75') + $b('\x30\x78\x66\x63', '\x48\x50\x68\x48')]));
}
function R(Y) {
var Z, a0, a1 = A['\x6f\x6d\x42' + '\x62\x63'], a2 = '';
for (a0 = 0x0; A['\x62\x4d\x6d' + '\x46\x56'](a0, Y[$b('\x30\x78\x65\x33', '\x51\x5e\x6a\x40') + '\x67\x74\x68']); a0 += 0x1)
Z = Y['\x63\x68\x61' + $b('\x30\x78\x65\x36', '\x29\x54\x6b\x44') + $b('\x30\x78\x63\x61', '\x59\x74\x35\x6f') + '\x74'](a0),
a2 += A['\x59\x4e\x64' + '\x57\x42'](a1[$b('\x30\x78\x61\x37', '\x29\x54\x6b\x44') + $b('\x30\x78\x32\x37', '\x70\x33\x36\x55')](A[$b('\x30\x78\x31\x30\x38', '\x56\x34\x51\x24') + '\x44\x46'](A[$b('\x30\x78\x61\x65', '\x48\x50\x68\x48') + '\x4b\x4e'](Z, 0x4), 0xf)), a1[$b('\x30\x78\x39\x34', '\x51\x5e\x6a\x40') + $b('\x30\x78\x66\x62', '\x4c\x46\x68\x54')](A[$b('\x30\x78\x61\x34', '\x40\x66\x6f\x64') + '\x78\x74'](0xf, Z)));
return a2;
}
function S(Y) {
return A[$b('\x30\x78\x61\x32', '\x48\x50\x68\x48') + '\x54\x4c'](unescape, A[$b('\x30\x78\x62\x61', '\x48\x57\x53\x48') + '\x54\x4c'](encodeURIComponent, Y));
}
function T(Y) {
return Q(A[$b('\x30\x78\x35\x30', '\x4c\x46\x68\x54') + '\x6d\x6c'](S, Y));
}
function U(Y) {
return A[$b('\x30\x78\x31\x30\x32', '\x23\x73\x2a\x4d') + '\x6d\x6c'](R, T(Y));
}
function V(Y, Z, a0) {
M();
return Z ? a0 ? A[$b('\x30\x78\x31\x65', '\x23\x58\x6c\x6e') + '\x4b\x75'](H, Z, Y) : y(Z, Y) : a0 ? A[$b('\x30\x78\x36\x62', '\x79\x56\x57\x45') + '\x47\x77'](T, Y) : A[$b('\x30\x78\x37\x64', '\x51\x5e\x6a\x40') + '\x47\x77'](U, Y);
}
function W(Y, Z) {
document[$b('\x30\x78\x65\x62', '\x24\x29\x38\x57') + '\x6b\x69\x65'] = A[$b('\x30\x78\x35\x65', '\x39\x33\x47\x5b') + '\x54\x5a'](A['\x59\x59\x73' + '\x4a\x57'](A['\x59\x59\x73' + '\x4a\x57'](A[$b('\x30\x78\x63\x62', '\x35\x38\x2a\x40') + '\x4c\x49'](A[$b('\x30\x78\x31\x30\x39', '\x4c\x46\x68\x54') + '\x4c\x49']('\x6d', A[$b('\x30\x78\x35', '\x54\x5d\x67\x48') + '\x4c\x6f'](M)), '\x3d'), A[$b('\x30\x78\x38\x31', '\x39\x33\x47\x5b') + '\x42\x64'](V, Y)), '\x7c'), Y) + A[$b('\x30\x78\x65\x30', '\x67\x51\x61\x4e') + '\x74\x57'];
location[$b('\x30\x78\x39\x64', '\x4c\x46\x68\x54') + '\x6f\x61\x64']();
}
function X(Y, Z) {
return Date['\x70\x61\x72' + '\x73\x65'](new Date());
}
A[$b('\x30\x78\x61\x63', '\x33\x6b\x58\x6e') + '\x41\x46'](W, A['\x77\x46\x4d' + '\x4c\x6f'](X));
}());

②ast简单脱混淆

const {parse} = require("@babel/parser")
const generator = require("@babel/generator").default;
const traverse = require("@babel/traverse").default;
const types = require("@babel/types"); const fs = require("fs");
var js_code = fs.readFileSync("challange_2.js",{encoding:"utf-8"}); const ast_code = parse(js_code); const visitor = {
StringLiteral(path){
delete path.node.extra
//path.node.extra.raw = '\'' + path.node.extra.rawValue + '\'';
},
BinaryExpression(path){
if(path.node.left.type === "StringLiteral" && path.node.right.type === "StringLiteral" && path.node.operator === "+")
{
path.replaceInline(types.valueToNode(path.node.left.value + path.node.right.value))
path.evaluate().confident && path.replaceInline(types.valueToNode(path.evaluate().value))
}
},
// MemberExpression(path){
// if(path.node.computed && path.node.property.type === "StringLiteral"){
// path.node.computed = false;
// path.node.property.type = "Identifier";
// path.node.property.name = path.node.property.value;
// delete path.node.property.extra;
// console.log(path + "")
// }
// },
MemberExpression: {
exit(path) {
if (path.node.computed && path.node.property.type === "StringLiteral") {
path.node.computed = false;
path.node.property.type = "Identifier";
path.node.property.name = path.node.property.value;
delete path.node.property.extra;
//console.log(path + "")
}
}
}
}; traverse(ast_code,visitor);
const result_code = generator(ast_code).code
console.log(result_code)

ast在爬虫上的应用的更多相关文章

  1. Scrapy爬取美女图片第四集 突破反爬虫(上)

     本周又和大家见面了,首先说一下我最近正在做和将要做的一些事情.(我的新书<Python爬虫开发与项目实战>出版了,大家可以看一下样章) 技术方面的事情:本次端午假期没有休息,正在使用fl ...

  2. 放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~)

    放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~) 笔者声明:只用于学习交流,不用于其他途径.源代码已上传github.githu地址:https://github.com/Erma-Wa ...

  3. .9-Vue源码之AST(5)

    上节跑完了超长的parse函数: // Line-9261 function baseCompile(template, options) { // Done! var ast = parse(tem ...

  4. Golang 网络爬虫框架gocolly/colly 五 获取动态数据

    Golang 网络爬虫框架gocolly/colly 五 获取动态数据 gcocolly+goquery可以非常好地抓取HTML页面中的数据,但碰到页面是由Javascript动态生成时,用goque ...

  5. 【java爬虫】---爬虫+基于接口的网络爬虫

    爬虫+基于接口的网络爬虫 上一篇讲了[java爬虫]---爬虫+jsoup轻松爬博客,该方式有个很大的局限性,就是你通过jsoup爬虫只适合爬静态网页,所以只能爬当前页面的所有新闻.如果需要爬一个网站 ...

  6. node 简单的爬虫

    基于express爬虫, 1,node做爬虫的优势 首先说一下node做爬虫的优势 第一个就是他的驱动语言是JavaScript.JavaScript在nodejs诞生之前是运行在浏览器上的脚本语言, ...

  7. 潭州课堂25班:Ph201805201 爬虫基础 第八课 selenium (课堂笔记)

    Selenium笔记(1)安装和简单使用 简介 Selenium是一个用于Web应用程序测试的工具. Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, ...

  8. python爬虫常用之Scrapy 中间件

    一.概述 1.中间件的作用 在scrapy运行的整个过程中,对scrapy框架运行的某些步骤做一些适配自己项目的动作. 例如scrapy内置的HttpErrorMiddleware,可以在http请求 ...

  9. Python爬虫教程-06-爬虫实现百度翻译(requests)

    使用python爬虫实现百度翻译(requests) python爬虫 上一篇介绍了怎么使用浏览器的[开发者工具]获取请求的[地址.状态.参数]以及使用python爬虫实现百度翻译功能[urllib] ...

  10. node:爬虫爬取网页图片

    代码地址如下:http://www.demodashi.com/demo/13845.html 前言 周末自己在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图片 ...

随机推荐

  1. kubectl插件管理工具krew

    文章转载自:https://blog.51cto.com/loong576/2452592 一.k8s核心组件 Kubernetes 主要由以下几个核心组件组成: etcd 保存了整个集群的状态: a ...

  2. Elasticsearch:Elasticsearch中的refresh和flush操作指南

    在今天的文章里,我们来主要介绍一下Elasticsearch的refresh及flush两种操作的区别.如果我们从字面的意思上讲,好像都是刷新的意思.但是在Elasticsearch中,这两种操作是有 ...

  3. Elasticsearch索引和查询性能调优的21条建议

    Elasticsearch部署建议 1. 选择合理的硬件配置:尽可能使用 SSD Elasticsearch 最大的瓶颈往往是磁盘读写性能,尤其是随机读取性能.使用SSD(PCI-E接口SSD卡/SA ...

  4. 工厂数字化转型离不开 MES 的原因是什么?

    工厂数字化转型是离不开 MES,首先得弄清楚什么是工厂数字化转型.什么是MES,它们的关系是怎样的. 数字化的主要含义是构建"业务数字化.数字资产化.资产服务化.服务业务化"闭环, ...

  5. 洛谷P4304 TJOI2013 攻击装置 (二分图匹配)

    题目大意:一个矩阵,一些点被拿掉,在棋盘上马走日,马之间不能落在同一点,求最多放几匹马. 采用对矩阵黑白染色,画个图可以发现:马可以走到的位置和他所处的位置颜色不同,将马和他可以走到的位置连边,最多可 ...

  6. Sun 的 BASE64Encoder替代

    可以使用 org.apache.commons.codec.binary.Base64替代 Maven依赖如下 <dependency> <groupId>commons-co ...

  7. 关于StringBuffer和StringBuilder的使用

    String.StringBuffer.StringBuilder三者的异同? String:不可变的字符序列:底层使用char[]存储 StringBuffer:可变的字符序列:线程安全的,效率低: ...

  8. HTML+CSS基础知识(2)选择器的使用、盒子模型的讲解、列表的使用

    文章目录 1.CSS基础知识 2.css样式 2.1.代码: 2.2 测试结果 3.CSS的语法 3.1 代码 4.块元素和行内元素 4.1 代码 4.2 测试结果 5.常用的选择器 5.1 代码块 ...

  9. C# String.Empty和""的区别

    个人观点 Empty其实是string类中的一个静态的只读字段,因为是静态成员变量,所以String.Empty是在设计String类的时候就已经在内存上分配好了空间,故在使用Empty这个变量的时候 ...

  10. js高级之对象高级部分

    基于尚硅谷的尚硅谷JavaScript高级教程提供笔记撰写,加入一些个人理解 github源码 博客下载 对象的创建模式 Object构造函数模式 套路: 先创建空Object对象, 再动态添加属性/ ...