tiktok.js

自用程序调用库

目前為 2024-11-25 提交的版本,檢視 最新版本

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.cn-greasyfork.org/scripts/518778/1490830/tiktokjs.js

importClass(android.content.Context);
importClass(android.provider.Settings);
try {
    var enabledServices = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
    //log('当前已启用的辅助服务\n', enabledServices);
    if(!enabledServices.match(/.*org\.autojs\.autoxjs\.v6\/com\.stardust\.autojs\.core\.accessibility\.AccessibilityService.*/g)){
        var Services = (enabledServices?enabledServices+":":"")+"org.autojs.autoxjs.v6/com.stardust.autojs.core.accessibility.AccessibilityService";
        Settings.Secure.putString(context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, Services);
        Settings.Secure.putString(context.getContentResolver(), Settings.Secure.ACCESSIBILITY_ENABLED, '1'); 
        sleep(3000);
    }
    toastLog("成功开启AutoJS的辅助服务");
} catch (error) {
    //受权方法:开启usb调试并使用adb工具链接手机,执行 adb shell pm grant org.autojs.autoxjs.v6 android.permission.WRITE_SECURE_SETTING
    toastLog("请受权AutoJS启用辅助服务");
}

auto.waitFor();

var tiktokAppName = "抖音极速版";    
var packageName = "com.ss.android.ugc.aweme.lite"; 
var times = 50; //滑动次数
var starttime = new Date().getTime();
var endtime = new Date().getTime();
var storageSign = "tiktok";
var woolStorage = storages.create(storageSign);//创建本地存储
toastLog('当前分辨率:'+device.width+'X'+device.height);
toastLog('唯一标识码:'+device.fingerprint);

//结束所有Autojx进程
//engines.stopAll(); 

//停止其它脚本
engines.all().map((ScriptEngine) => {
    if (engines.myEngine().toString() !== ScriptEngine.toString()) {
        ScriptEngine.forceStop();
    }
});

//息屏状态将屏幕唤醒
var ScreenState=isDeviceLocked();
//log('屏幕状态:',ScreenState);
//{'isScreenOn':device.isScreenOn(),'isLocked':km.isKeyguardLocked(),'isSecure':km.isKeyguardSecure()};
if(!ScreenState.isScreenOn||ScreenState.isLocked) {
    device.wakeUp();//唤醒设备
    toastLog('屏幕唤醒');
    //device.waitForIdle(10000);
    sleep(1500); //等待屏幕亮起
    back();//如果锁屏后收到新消息,上滑不能解锁屏幕,需要返回一次后上滑
    device.wakeUp();//唤醒设备
    sleep(1500);
    if(ScreenState.isSecure){
        toastLog('密码解锁');
        //待开发
    }else{
        toastLog('上滑解锁');
        slidingByCurve();//上滑解锁屏幕
    }
    sleep(1500);
}

if (!requestScreenCapture(false)) {toastLog("请求截图权限失败");exit;}
let img_single='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARkAAABICAYAAADCtYHxAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAhdEVYdENyZWF0aW9uIFRpbWUAMjAyNDoxMToxOSAxNjozODo1OJLusRcAAEP/SURBVHhe7Z1Xk5tXtp4XMjoxi0mURJESpRklajRn0vGFyxd2lav8Lxxu7X9wfpTLN3bZdexzzkiaGWVSgaLELObQ3WhkwO+z9reBD2gADTRAUpzhIld/aYe107vX2gmZ7n/8b137W6FMcn1OCyBVm+6Cqs605ZJ5XoBPj7rWzeyuvLPJ9a+LqIuj+DlNQVSkMQyopHlW2lYm+pMVc52Gn9NjpAAik3i39NcJMs9pTqJC7cQz0CjAcE6+P6enTKPKd5h3T38dIENlTfNzmoKGKhE91U691XA+78j645pK8vys0Q7ZMS11f5ZpT8pdHDQVf/lY6Lkm89dE2zSFnRg/CfdMoDlb1nD4zzrNmR2Rfr5A00muC0roCHq2QIaCGsXPBMWCnMBRm9gtjwpzEs8zvjJMEVh+zjRrMhdUv3rF80RpcDxlNMuVpy8tHPeRF0PPNZnHRQM9emTeT+C5KV1BJnBXvdcigQV+VmgByX52KFXm2zhSrHzpMkx/n59+niCTTnea56LhDN7pWSS03zUPhBf5KVBaW4k8Lz1rwBJp1no0nFULyLp5aLLJtV1TmZ7SAcdMmiWjJtPflibjeac/PZ70jId5iEJO81OgRQAKNJBHc2fMs0XDWfiUijLSTkDT52mJACNHWmwZP0WQSWWIp5Frwk7JN+eE0m5m5iSMbeHu9PyM0XONZXHk9TLcOm17fpJ5E+vkdo0l8u4o+hv2HxM7fxqfLMjEStvj4XeTnglgUTScoTs9/4wpDSqLAJZI5PlzmkyLzO+piPjG8Tw0zv9i6sBsIEOcM7MSAGeT6wAn3wcyaqfn59SjRVXyHpCn+Dk9ZUrX+8hPkhYX7+PXZLzSJvdjBZ/1+W+YFqW1PAeUqShO8/Y585h4VDz95042Yx29m4ZHhddvg4OUkdvxtJh2l+n+p0VtkEwFM0nu5zQbLVoln1ip/sqJrJw6+Wqo+usNXNdOp2NtcacbrqFccNP17/48lLez5fQI4VzL71N8mhQuoJEV5wRKuUzWsjmxrhnJ5ylyxImUjnNU6OnvUHQzGy0OZFyWxQT1nESLBJe/ZWBJU8zSCdkR2yDZ3xKYNNptXdsCF4GJuOtMUCEw/rq2wEM6XL2YJtcz0dUAoPAu/RzIZdshXL7BAE3kfDZnhVxOwAPgKMZe0PEmxgfHEMY9z07zmUs+rpLwLgV4Tiny2pvwvASwRH5OgWJ7GUOutSjrG+2OVRoN26jXrdpsWL3VSsCmYy3V87bqewe3CfdKi5vIqdtRHGVxgPIwEs2px+ln7hOHyf047iTclsem0lFvtZWGptJT9zTV9a6tUFz7krvBDCE2vsSYoThzFZ9np92BjFfe5P45/XzoObDsimJDbwlhttQQK/Wag0tDGkwAlQAmLZkgTXFDGkFdmkEtxTw3xE19wx1jI8ONBFMmcv/b7hvvOCJEN/EUDwyoNJS2msByS8BJGgHMADSjaFgmgCa53QWNMJfGJHogEh52zhwEcxDciXCzLRHpF9MEMo7GhbOo8FM0kI5U+GgmvUcciUeV2oD/FPEeGvVN7+jBRn0KNOw5PkNpX9O8T8gLNrnv0Tj/s9L4cKauTzMQg6SYQU1pKrVWUxoLsBLGWchXdyNm4LUlt81c1oEE5p0Psso/Yx45ecrrWlADLkqVKKhh59x3X2gPkUfdLDgpO1BIC/pOTteCTKhiPi/OuabB+8dFY0AmeaUMnIdCO0qHQWEkt2mK7wai4wEk5nMoblcIR/mfSMFniCTtedz7XdJw0En44TXy6w6w8TdwjD9FOKHS63V0kfUK7F8HnafKJuLV6LzhZQwNHn6OtNP7SPrWizBcAo3zvxuK8Q2GMzmds1EMq638xaSoSXNpdjuKmX9RC8hKi0F70Yty2coHD9jyoUNW2L/POvv2WndlxaxY9DLL1BuWqWxZZmPD2vcfWO3efauKu1tbDjx5AU/Oy7JfnlGGJ0MxslAXs/rL+ExJQLME0AgwF5GvoygFMsllgQkPhRUQnwaW9QSGhhOj20Z8SxpQV35RPVsqZJbZUFBhuU3imQtOcR/fzUR43slf+nuQaxtFJ6nPDhZ6QbWFSLMDhj/xbntYfA3pDeDE37x6Q9hdJ/kylkYHKxr+MMoh76BRAcRv0d/ISALxKTqfliZF/RiIxu15rfKoN5vOLQEM4B6/N9XTYwbZ/r22dvJlWzn5ipVefNGKe/ZYbqkk0BEXima4gQRU1mzJLmlYp1azxvqmNX66aVuXLtmjy1esc++eLctcybepw7NkUDpTZs3YSLHcoH4YvMnrb7GQt7I4p/tR4yeAzzyA2AcZD2S3iUhRqsHTGzSLBbN9+6ygnqD96JF1KhUrqEB2ymi3JdXYOgf2W/7QQTP1EvbgoXqGqtRSNV/8xyB2yIBYqXafOpRnIglmCSENoP6QHLgGKGypbDl6O/JEctvGpvdm48jTvLpimYP7zUol9Y516z54oN6xIn+JIxG3NAjcx3QRxayVAfeD4JeQHngTNKok3wYSvHMkOI+uonbgsYzw6nL7jT8OELJhhsxTesNEHgEwjFHUBApoMzE/YcZcbO+awOWkLf/yF1Z67ZS0l72WWVZZ5vXN8wJhRwgM8VnmV3erZq2HD61++apVz5+3zR8uWev+fSsJaKgH04FNjAe3u82D6C+G0yfe5JRmNJpxQBOLfrdAk+n+5/86teREMlDXBggJYiKCo4bs1/bhQ1b65ZuWPXDQOlIlm9//YBlldlFAMY7QAhhg664uW/7NNyx36pQa6ZY1v7tore8vWkmVY6oCkjiE5aPpXMWBEjmjuP2bhIa/94nKnsPW1vttMiTPgOOWCi2jHnD1F2/KoWz4S5et89V5K0r2cXmIvd89fsyKb/1CPeg+B9XWN99Y59oN2fgR6EJa6nJblZpLXD0xwmeFr3eKhNe8GvWMEMhfFuCXW6HSRwIMkIXyYxyC+PhKGMgO1IZnD8bDHH4mvBhmBF0HXtFo+UIYwQX3QfNFtiUx2lxwMS9RHwQw7ZYPgPraF+JWGpGvJvMnf/SIHTj7rq3+8pdWOPKCmYCfMnR2AdOSjiEXVymn3NTBtG/ftY3vLtjDzz635tXrVlQHEjRzh95+0pAlue0TLqZJ+zRuthOhAy6ATASaXuoIsvewO5oZZCAq0nbiIxwqT0flUS8VLfPG67b0q7Nmy8tC8QdW/ewL6wpoSkL6SDENhBsargqbHuPFY7bywftmx46qwT2yLfmtXfzByqogNPRIPf/80WuagJtVegRYustLlt23x7oFaVV6Do0E/yGuwKHPDkUenoe/uxvFizbVfbRuWanZvPXmr5tYYZiN2JAGl1UvuO83v3aVuv7119b6l49sGds9HXSKGoCGgGnp178yO3jQulKxG59+Zt0ffvTGFj14g33xuGVeO20d0uREgFA60OFI4rOY/2pkduWq5X687IOVkciz9t49ljnxonWlhdIAY9lD3MbYoG3P5AONVyDZVhoySktOZdgRaAVNN3G4Tb4U6TXhZGVy5FRfsrW6P89FHrU0FQErU7rMHkWA8Vkh1ZOy8n+f8n9ZQJ9V2s3rDH7HyLkTITNiK87O+obVBTSPPv6zbaoe5zel1SdAQ33FWTqfZ6fd5w/RFjJZWxbIllQP587rFM0AMmlnk3Ii9HyAROfwQVt6/z3LvfqqvHft4Y+X7P4XX1lxY9N7ZkIhVK40cJC9JLs2p2+15bIa6Ru2+t67Pui2eemKPfj8C8uocefVQ8QGTV5E2AhhiOU/r3AYcGvQe6pBLkmbsj1roTcKPsWRpnwmMtZL3PjJml9/Y11VmrZs96bQP6t40VIwBXG+rneZt39pB377dwKZrNXOCWT++UNbiSATKVV50U46gMzfCZgOHXCQqX/yuXVVIenNI6FhdKThlX8rdzKrnJDNOTz2KfWCuCJDariNL7+yjnrXAGKBaHDdo4et+K7yXpoV8gc/hJWOgHdJWGnyHrxtdWlglR9/tNLx47Zy5jUH2/B9lJwily11L3dtaa4dNcqcTEYv41H+piUF6dPU6hwY6A0art6pcdWkNS8LtA//7jdWfPOMZfasJummvgwSIkQxpyY8odVUKtZUeT746E+2fv4bAY3agmSiPo/MEv4kEW7/PsrHdJSWP4YC0PlAsDrIvOpA6PDnp9w/fPC7f0jupyAiRbxJWYzaKfNAvULu1KtWOi1Th0Eyvc9g9x3YbysvvWSlV16xIoNpuvr9yy9b8YVDllEjbaggsi8ctLK0oOzBAw4MGVXQgnqW5ZdOWFluSy/Lzyu6un/5jWHoO71PR7ZwVqCFLN1Dh6yIycVYx4oqj7Qq5xUxqnCaeSfZe256rHdLYqWlXa1Z49Ztt11LSmPh7betePRowKD1de8FAILM4RdsSdqAoXncuSez57qDkK+TiJwiN3327bWCQNHjq0rN/umWm01Mh0bClOlIjS+88pKDTFtg0fKxm03LKO+oyD1Wb2mVTfGWdWRyttBeVA5ZATdg0Lp9xzqKI63JeO++tmZ55MBsE2CaejdnxthgeniFY0Wx3/NdOaL8jqDUVPxVykFaZFl5QTPqSMYu74blFHclY3urYh1pGNmS5CsUgzZ0/YZlJTe5NZhjsxEpZBym2mq6tummNJMLSyVbUjke+sPvrKzOKACM0jMCYNI0tSzpZqO8yqmzK6outVUuW48eWVaADIDyfTjM6M1p+OMcNBBuJF6o7lIt89RfXbe52QXNADIxugnR6hNajI8tHDti5V8wFqOGTcUT58tSxfbsEVioITEYvJfrXsvrmpd6nlOlainTm2oMDhwAlNQ3UpuT6VVUxQ9+5NfDEOOXMDwchbG6psJTY5KaXUBbIqMEEvm1Pd67mgAicFU1TleSk8ThKMF7aUs+0MxgrV/FvK+Idd+9d986srGzSlPx1ZOWf+2U5RRHW/6ad+/6WERTldRB5kWBjMJu3blr3avXXCbiJNphmhZkAM6OwnZAVTw1Ad76ufPWlrYHkDXVKHuM1nUjXGs/iSUj+VHYs9fzo3X7tnXJqxTIIF2Hbxsb1rhx0xoMXF6+Yg2lLSswya2uWu3+fWmXlx1Q8wLmhsKpSEttyLRpyvxqX7okje+GtZTHRZlLJQF9V/dVmX7Vr7/tydlKyVqXjJVbN60jLbQEuBUFoDKxu3KbazQlVdBed0M+5qI8ZC1MU2nlOWjcSs/xo3bo97+15XffNltTR5OA5OhSCm/9SwSPnSi6IUzY83BFQFq0utLXVPnGGcTB4JIy18v5zKjxFGtVjJsmwEv2PuV3ANlpacZQJqcUAwhVm5H58isnLPeCtBAylQbilVj3FCA9IP2K7GJv6DU1XhqxnlkK1ZH2UqBxYgqQaJkYqPZoBN5bFlC75d/9JSAA0yOqJ/Rw5Y9KydhN5u492/rsM1v/6CN79OGH9vCPH9rdDz+y2zITKmqgUb6mzJOHMsnu6vv9P37kbu589LGuH9u9P35sD+R3Q9f6txd8XIaerkuPlw+9OmMOsYfsUaxYqVeRHJCVXwzgbilNVYXRyCkc8lBh8x2NiIYAY04xHkOW9EkmBeMLDx9Z4/49azCOs43v968C8XZd+RNDGQzMCTU5r/LICSQKF763/HffW+7CRcsKxDKPNuRHOonyunPrlpuM5F1mfVPfr8rtRSviR2CTF2gUVb5xALgLcMlfXQBFXsNpOXmuS8amtB3vEFw4mEzldkQmTklhwV1LANMOwYjbyufM/v229vZbtsQA/Vo0kYKfqWhE/k0kwqZ8BTLlM6/b/vfPWkEA7DNaYyKeNYppaWS4EoHp/KbM53S3Mw/NaC6liQyJHIieuM4aAplBmDpueqhSVS5csHXZoVmVbl69IKmrqvd8+OVXVtf7piovsy/169elzjdlCsmcEtNLs9Zg8/Mv9U0qs57pAaDarTv2UL13Vf7pwZvqbeH2FTWEm7csLxAAYJihMKnIXUAMux51XXZwjWdVqjWZbmghaC11NSR62ax6F7Shphqj4MNVdXrUghpUTv6zACMNS6YTA5rZF17wOJoCrPadOz4W1FJlzRw5HDQZ5YtrMteuBnNJ/7wnxQwRoGZfPGYm85DB3hyzS0ePWKZUCO6IR+ZJUdobGkiXpe5qLBmZlq7JYPpIxpLcLx04YKXDh6145MhoVrglhV86IplJM41eeTWsyVCi2Oc+i6b3WcZYlKas0puXhpqRzAxiotEV0B73qzO5/9Ay0tTyWzUfW8MfAbXVUWSPHraCNK+MNMac5C0q7vKwnDI3i8qvEjJKk8ur4dHgO2iN125IkwljWf3aNj3RmGg47EHyBXcKhPVbLeVr+fSrdvD3v7H8CZWBgNwBwGmKmHCyG4EglX9GplOeOi5NZvOu6o3KY1HjIPMQErBQLyfZfAd3eL1rijm6SwrRIxQL7uiFu6pMJRWc9wpSe10VPveNtdX7Ny9eNFOPi+ZQoLKxDoTZDXFWFbR987bUcTUWVTq386Wud3+8ZF01/s73F6353QUzVToaeF6VF3Wuq0aSvXLNilLniwKZwtXrVlCFL1JgkoyKSWNhoHlJDRzmfkVgte/Ei25ueWMTQHQFViubW7bc7NiqGsKB11+zvWffsyUBXkGAwFLxsvxi8vSmfGMJeIULD6MLBfd9dd99Y59Lhrx6s6J46f13rXzqpMBEphK9rK4lAfbye+9Z/uxZy6vnY/AaDScJweOkoS+9dtpKb/3CCm//0gpvJcx9fNaV72WZoPl9Mh2Vd5MoNMSgaTGIj7bF/hx6f+LkG1qVyyLmPdrWFm4FDs2cviVhOeEMsDx2TGa05ETWt94M118GLkrOJX1j0ZsJNAcyMknubompaswkiLSxwDPHQjt1hoVkHK+fJ+mIHwMleUYnmhPYMilRVLtBpqdJoYYGaqlNsNXCtb45aYZkRRGiGFKZk7lYemVWR7YPHbBlNcy8MswrntTihmzznJB6VT0ctnX96hWloGF5NZZVNd6ybG/GGFrqJVuyhyudlj28ds2acteQ/d64fNnKAqOlat06ApCawsN0yq+t2dqpU7Z0VD2QCJuW3jgvIHATyd8G4t5noyQuEncEcAUBmVdmei9miRS23XtgJamJuGURXfnECfVwJ7yhl+Se3i/2ppGdPB+4JjyS9KFLdqsHS5x7r7m0bBlpKUyX5vbtD1qVGm+shNll2e5S6VnQmBEwZgR20Xsg3EouTLasNKOs0iN/ztz3nhWXrhnSS2NykCQxg6FBvAE8OixBOHzIcq+etJzAL/fSi5bxGbqM5FqyvLSpLJ0J8q4qHS8dt8zpk5aVW5Mm0lZ8vUrqgeqPKm6m2VQHJBO4x3pmQJpxF91npHG42zmJuB0sFTkL7giRugrXlQ9Zyb+CxrxUDvnteTF/vD3aKSjyRpr/svJ1WRpmS2U1YGo/JUJs1hL5ERe6zgs0880uJbdecHv2WOmMAIYKxszFZsUa33/vg4DlWsNXOaLZ0Jfk1vb4bBG2eUXaCjNIrKxkoLck86MosOk8WrcKgCLNBw0CFdxkJjSogEuq4DRMxZOTZoJ5w+pYB4B0hqTvqWR6rjHmIcDABs+yklj+69KCatK0iptVK7g7KqEas3o6GlKGWSXJ7ms+1AhYIekVuGcuSbXXe2acmK1hkBYNoDfwq0bYH/gN64O84BSHAwcDzwwow4o/U5TJyXeluctgM+mTiddVfnUUfqu6JdkTc0n5yLjSva/O2ZZMR9JSlWa45XzFrzxXdb959aptShNklq+I2dpuBg1uxMCvL1wUgOTVaeTefMPyMukKMmdyKmeALouqzwyUwgG4SAOD75hkeWkrzFwxCM7apJzym3GHtszMDcm4fu5rq6sjqUrLrarjqcocqspUrogf/XTDx5jKiodZrY6Av4u5xNS/SzYDyTE1lobC2hhMJYi0tQSWy9Lu9rzzdpg1lOYVXM8cy840Njh90P+s0tmWGd5Q+dCBPgYJZibix2QqqB5T3+eRZwZNJia9H503ajFFk8NeV6WT0a2MqllDJkzz4iUrVYONjl1PA8uoUje/+NIqn35uj6Q9oC6uvPuuFWRilUD0E8etDNDILi8K3TvSKMJK0UzQUu49tLYqqt24aXb3ntntWx6faypBKv1XsmgkibxdtWi+sh6is3fNCvTKajC46SiMtkyyvLQZ1t/4AjDCUqF31Ajs4bqr0qwCzRw7YrVCTr18DDlN5ELkyYQ/Mp5NdS2ZaFsffWyVDz+yR3/8yDbPf+MAy5oKZqs2v/7GHul79cOPra7G2ZVWyDL7XuwCtI4AqM0MjMLKX7rsXHC+4tfw7ooP3HaVpq7S5mtZxpGCdhBV5UdzyUhDzakjcIABEEVZmT55ADIxa7IOMtLGGGM6uN83D3ZVQfu5oTvGth7ct+bNmz5t3rlxy2fP2gI5Zz0zm9UUsLh2Iy9ex5IQhsllHOJhIn60mDbpTYShEykoXUusAWKML6lffd4NEXjkhAaCG/Edoq6Wl3yMqnTgQFijtGsZZqNR+RVF9vFA5RsD5vPSDCADjU48FaEpjaRy8aK1MHGkvdQvXLC8GklRPQgN17UdueuqYVVv3vLVv3vUcPecOeODgjRk1nGwzoTGn1OvuPzGGVuVnY7qXVWFZ4l7TppMhmnVTz61upjp1ajFhAgi8xxuAQVG7xtSTXPq/VlfYzIFOlsV9aLXrC4tA4cs3Kv6LE/OGgqwIhk3ATGKXVpN7mVpJaqcPsMzkBX9opmWKMSs0pJTegvKj6LSlFeDy96VpiHT0AeWlVfZ+/cs99NPVkDb0Le8tEIGZZ1InJPilUBUzp2Z1CTUuxkkdxOCVND6o7zrVKtBU6N8+K4et8P4GrLKA7NGjTt3HPBptF0x+Z4mtNeSNJ81aZCrCXO/pvINfND26Fqms8LMk7z8HyXmqAYCxffp7+E0uxhK2KdUUBwMlLu53HM7JtCpaUyG9mjoO9HByqsCWqNA2sey5hVjBhqVj/EVWdbFbE0cpc/DmZrRhBYxu5ShhTNIVNmyjhpm59Ydyz544Ctgw8Y+BgYz1siroa8sW/aENJZfvOGL6rJUKCrB7dtWU69do0dWoliLgd2f27vXsupBGViuM1As0GI1ry86Uw+eVUP0DXS93ArXWJxcibtalPlz4pjifdNy6pmRd0Nx3RUoMovkdvlBmWACvPzxI1ZkUPj4Ud+7kkNGmRjMbrnWgPlCyCWB1tFoLrXc9GgrHRPNJUA3iOZX+q24zwcgzrBOhh6WsRmBbkfggzmIuenaj5hB1u5hzCWFLY0iJy2iKA1i6WUB6KuvWOHVkwlz339mTU+ZxYuMpWDSKkw3lxRH2lxCDqbRmc3CHDQ1xroAZOOb79zcLR046FPOFWlIKnzLr6zJFJO588MlWR7LMgFXrcWUtPIXzdbNJfXUyIq2y3hYgQHvZMwrr3Tkeda1qGdMrqxrGFlrC1hZU+PmkmccfxL2F/5ykFKvAFYOaGIQMzZeyqbA9oH33g1jTD3Ndx6K/seF0/9OnRxwpRds8ajcuG6b6vTY19ffEMvH5HZs2LsjQpsYoj4y+1VQGaoK70zk4TCLZtRkhikEAsZQSRl7KapBFFXBir54KqzzQDOoypzqqsIuv/eOrZyVecR4AlPcrPG4fNkqn31hnQsXLSMtqCpzqvbtt2EhnFRJBhzLqhDL8scUb71YMinTvu7C91iE/0jifyPxjorFVDMN0AFGjdN7r07bygKJQ2det4N/+J2t/as/2PLvf2Olv/uVFc++ZyXZ60v6Vjwo955hyiyBXfH4cV3RZtTQia4XJbEFKWanvj+/88KhRwsLG8Ppa+GgJNbhAMrsDULb8Zk2gfGywKwEkMgUBEz8euqV/jMAc/IVNxFYPOd+AS44ycM0CfL6vT/xMVYgzSXDeiSZHl2AGU1mK0zn+7qhhw9d+wpdYKhcDqCKA7MuI+2EToUyAICdZbZmjop1ZSkAO+5zcTC53fJV2+g0YUOlAvX8DvkTNbOdyMUhvU7yq3zNCGQz5EOS14uhncLpfx+Qm9eqox2BOiY96RqkmO4nQ8jWYzJvUtzeNhIeQ7vQZOhxiRcRCJhruIN9Y6Ic0Bs6wCjzqEAlmT5FMT1YltW3+GP26dvvrK4eMnf7rhVVQfPSflgZ2lQFRjNi6hgw8l51Lzb/Qcvu3aPG1rWqAIrK44p10uL5C0XJ2KhJz1p87bTlXpWZRA+eZAozOdjBRbGPJ6gBsH4kwyJAxpagluBM2ofPztBIMjKlJFf14QPXIOiV48Cvr5PxgV/1nGgCozQZgDGEnFD/yaeHJYev+F1ZkYZV84Fx0k44zIphlvjsl8w9DoamYTMr5tcHCfu9AMCfdU1/g9UROEtL6N68KfB46GAQibJD+2MK3QdxD+z3bRrtW7eUT/t9XYsf2xHXyRzY56uBuwpzmbEuaWOMdTEbSHmSf42NTduQNsSq487169LQfrKG7isyFTeVZ7WbP/mesM715LvzDTO9Q2YG+Hs5xQ1F6Je+3KOIBhsOBGeZZ/DUUieTP33a1ljhy9Q1RGBPiILcKSLvJeOG0rtx4XtfZsFaq+AuulysgFGGyaF2feCXE/QG3CXtZxKwpGl35hKqiyKIUbh6LWYBGsBSl1nEjlaWaxffkDYgjaAgbSTLUnEJzCrdOrMd33xrbda2MIOUVCJCZQqaQcIWi+bW162jilpgBgCwkRrNeA0DjMxm5FRJmszsqLdsq811EqmoeuEuyMX+pRwNBtWYXg0HXAERelrkguWpJk3s0bcXrPrDD7Ylc6oidR0Z2BLhM0KYbWpQ2JwFVPsZZ5d6+RavkolxHl+HojwqnjiudCqtAti84ixjXuw/YI1q1U9cYyKk3WxYTUBXlWnKtoKaGitcvcn9bav7c/99TQCRZr6zFaAjsGDK2ItUssDBXNLdSgIyyuuWyqgl4MgLcDB92P7RFrCwtSOnd3VARSbysmQFZNo8Y+Y0WtZhelplh1ZYENhkBD7tGzd8cL0g86og/0U2aP5005rSajOM7TBOJs483LAc5nEvt2ajCDIsYCRdJBDtsHDqVVtjvE957ol+mgTIqP5vXLlqm+p0l1MgE2jxAhLiTqHyHVOpKHa3nn87+dpOanGzkmBAWkMcA+FCs2Eh1ma5aHWpwvl33rLS739rxd984BoMMzM+TajG2RC4PPz0U3v05Tlr0HOp4XhFUKWmYXKOTBxYRSVvqEFsnP/a7n/yiR/z4NsHpEHkpFqXXheAffC+lf7+d1Z8/x1rvXjMNlfKtiVZWmqJqNjManFMANO0xnaAL7+y5p/+YpV//Cdb/9//aA/+r66ffGpNBngpbGlTzHDUVNgZlsZfumxZptJ/FKthmnp+2Aebqfgj8txlH/F+kHCQLGJTRd8sFqy2b49lGQPZy8CnwFbaChtKC2rkNNJOSW6Utkq+YBU1nM3Nims6Wwy6p3jb8/rgO54rm+u2WdFVja8iMGPWzPdEjapEyheauK9QTWaXOgLVDiYxH8RcRlFHDtAMyyqvMjOHpAegrdZkqgHcqwJivRcg55QH1JGcvuVkfmVZtS2AykyaCRO5DJPIszqpU6RPN4zteQczVvInTMoLXyOUyMNfUr0o6UJtCwwRbuRxRIcfB3B3Ay5Oqju7HPjtR+iFhtaiCpQ/I5PozGtWfPkl2d2yt1fVWKg4SkqTBqHG6RsIZW6U5G8Zc0WmDAvzMtjq6rUDc7/qI+5FaS4FVVIS3FLFqKtXY79QwXfpFiyzVHbzid40/8JB9Yoyf3BPA1AF5SBnCg7Aat2/Zy2Blv1027LqJXNoI9KU2AVLb5qV2s+CsKZUddZmrOp+CS1Kmg5hNeWewcyMtBWefVtBSpNpSqtg4DevkqPBTtZkgvbX4UgLhVFgxa40PqbxfdAzFipanRpdV/mWETiwcZAd6CVWzgqQlo6Kj4j9/ogti/1dmqM75+T7sXD15QJHj4UNk0orpioxuyYTzSWBXAONUprlkpfrijShm76Fwp/1vcq+KWk3xJ8RWLKmqKW8YvrYDrEK/JSDZ0XpeKT3rL5tq+PxeiM/DMRX9a0ijYl8AXzJQ980ikBiwCTJlQFKPgc38jvQMMT8IBs/aeJQpWfGPdgesec1ycQ2mOCRr0+HyCNpdVsXLtiWOrMl1be0+boIInXTpjDmXzgDWG1NPHPupOSf6dCqUeSLthjPeFuq5+sUmho/FRQTRD1RTSp0W70f04XNhnp/NUbfD6PPjtoeO39iNkRxuIr1qttlkFUVT2puRwnOCWA6Ai3GBZYUd9g568OD6gnVO11XA/jiK+sw7au46Ie9QSOXiHEjNBzgB82JIyBY1p/hzBM1aHYT17/40tak6rt/OYmVnkOrqAAe3r41K8hf7hdveFor8lOXpsTZLwx2c57M/t8k58lIG2v/yx9tuUbPHORoC4C7any5t98SyK6GvGMMSvF4WgRyDdnptQsXrY1JqUa/Iu3NMEnG6qCEHcLvUz8vQ4bGdwkBZDJvml99ZW2p7Kxr8vGhQwes9P77ZgLA9WtXHUQPcmSG5K58dc6acstituybZ/x75fIV288As4C18fU3Vv/wY2sp6Nwbb9qeX73n6WuqzJp37rl2klVnkFfe++yd8tpBfP1RWLFNJZUcmHLs1O5Io+SgMwB8G/FuOMkJASx1tDXVvbj7mgWZpbPv2LH/8O8tK1APJtP2ACYEu1hSukxpvPM//5fd+ehPXu/CSYCLJdIyNlRPqP4kCaZtsghvpaC2S2c+jThjgHEX5tIgIVOzVrU6u59psFJBu6pENKoHH31s6zKLsM85FqG0Is1kvyrVgYPe+7Eh0A6J0QR6/EK4+nu+H7KM7lkVXJBfxkXySnTn0UPbOn/e7rOQTY0bQDE1YCSqS54tprh7ORa0BgARk6wuOTFRfNZL7GMhAgKvaLjFjd5hmrAzuibGX1iYFDOShpDcDlES6xCl/YrkyJduMzDu59zInCR+NQQvLFUygJTNo90fLlleGlKGTZ0EzqCMZAssuZHdWe+5skCO8FaXw1VxuFuAgzi4wriN98m3voSDsjJIXqBcBHTtjfVwJow6DNY9IeuytJX97EmiTOUB376uSVppmSMsWcWs9+wVWxYQLQmsSi+d8NXfHrdMw4JM7WU/g+hVKzqfssLJk15PWHLv42mjiDwZQ7GxwIHCptnW5obV1QF6ZzimcUDjvyyQFEmL5R8P1308b0Jy5qLhtAxofcSaihi3/o2ymYYm5OHcmgydMg3QT1I7ccJnRBrsyJVq3VKj6Kixlo8ftyWpxV6ZeimJ0QYNAxAge33mBIHdDodxj7/gPhSBzC81upp6Nx8XUCPKrqxYURUYIGvQI8o0KasXRGvyc2rZFCiTCG2EMNFuXENRxaUnXVKl9jUhMskqTKlf5JjPduhVPU5JIZnyAq/OA6n0Chv1f5QmsyxNxs/4fUuaDKfXqTEHTebDRJPx4HyQvPPm61Y+e1bdbdWqMqma+YKtvCJzU6ZmR+ZD7ZNPzS7+6Js629IEOgLahho8a47QwsgvKmY4XF3iK31FAfWatA8/CZAxGIHU1i20unaiQUYw4W8Ay5zMyawqOYdJkUO+yhpN5ldoMq+pLcqUkqlKD1v77nurfvGFFWRaFQUCxfelpRAXeQuYKU9Z87Tx8Z+87Fd//YE0NeU/+5QSUPIs5cArgZbP5FHedBLSJL3Cxjqg8q1zRs258266zmpG4JqB361Ww39JkWf/ETYB34F/86/twB9+HzRIAPdpEOmRXFuffm73//v/kNZ23U/Ky1D1F0zU91CTezdjCSDmlLwVdQ4FQGhUtk9ZFnODDLGzFqVDTyX1lwHBLg1fX1jTQYF2sL2lYmfUUEITD9QDKFW0ZfWSaBrMiBQY+FOD6KcsVAB3r/BYzl6Sv9rtOz5T5egvp1llCntquvRODCCqkvLetRB6xnfflpyMESkgMogLaC0/PnVdDoOa7a2atWlskiEAAhJT8Arv2g1rCTA48yTrIPOeQObN0SAjM2i/n/GrdAEy/yyQUSMLYSoeNeSWgK8t9lPrBMqZw4dtz9n3XNPr3rubHL/JGb8sJgtjFe1y2bovHrPOCwcso3i7LKiTtsgCLs6cYVXzng9+FbTCe/e8AlcvhTDi4UiIAHPvrPwglwEtXLDyFG2yxPnMr8uMBHSaKhNmqj7/wk0lxpfaK8vWkjvOBGZca+nFE34IWeXb76x27pzA7nUrKn84RH7r4kWrodUqYupMRmbuirQVgIgB/U2fybvhJiryuBYimTl601dG672v6ZmBcI1hHH6qteH3AHFluWxrStuL/+7fhjOkAccnTaRFaUIrfPB//tHui8vSaChH7whmTOtEAigo6CkJGZbVLpbVpgEcz8hdyrMA+FZ2qPVnARap9yx7pyKrn7f26qqV1aMuc6ShtIXW+qZlHqi3lCaQE3cfPnJQWD592k+X46wTjnBgzw4Lv7Ludt3d5vTMiXVssuP0OMaAlj446+fOZAVwxOmnp6mQOO8lAgwEOLGZMaNGkDtwwAeJfS+OOM9VDSTuwYFz6tmKcpPHLd8Tf1kx6cjQ846hUI6K2COnOxpfMN6QmEK+fNWyAgpvTOqtfTyi54+wFI7Ci3WEfWLLahirr79uKzI7OCmQxsdYip/lMlQZfPxD73gPx3umSf2qvGOsAy3HM4uL/01I3xvSsmrnv7GWtBhm6koJYOXJ7xs/WVtA2L5yzdBgITqDtswcpvjJh8btW75hNn/tmuXEWfXYnPvDgKdXXtY8CRA7N25Y9tp1y7OvDVbYAIyDI+6mJtwGoAIfOU4yL+D0Z9KsToj9U01kUJ7ttgHtnoJ8jMc0bt+1qtLKgkffMiKeB2C8vlOMzvpDBnCfUFLEY4nPmJd5+fM8V97Pkz8L0RERioJjdSYDo9RVZkgAmCLT2W+csSXO4F1bdbdUGJZOo4EUZB6UfK2FGrN68bKApqBGBJKyI7qEGzF+IMZ0CCt7TICEzS4TLSdgImAZRZIjNKgIMJF8PEPmxwCr4fhVDR2V1cud+ibtgMVkdgdOudc7PwlOFYOyG5vvJNIDG02xEuCMnrqoHpZtA2Ej6aC/9BN+MGMwm0zAyII9xlt4H8zNNOmJTKCHlruOtIvW/n3WTHFr/17ryszpSDPCpPSZwuBziBjDqNjGjz/6AG9DZhNrTTguATBBZD+eQXnoK5FFDFIzbZ0hbn7oTFpnq8q0f4hnu7x9AhrQdCKsDoLuLBT9CUyVbxyOTYj0zNS/1p07ti7g8wWKO4zNPBYirwSgWxcuWuX6jbA2ZkEi+DiLc/JiiCYCjeTw4T0fA+sLtFvgm24KO6l8I8njDd9DtQnqNgvg2PPCnhRfRFfIW1O9XoM9TcpcelAS2pBrdlpzFAADlkybtTc3rEnvJTcOGHrnh2dLvS6+ftoKJ18JKzVlVrWlXrd/+slXlsZVv2mK2dJpNqwpkGjIPb97AzfUY3LEQINBTICNGR6ZM0wjPvrinLWvXvWxHXfrfq75IVlobJ7h+JFGMbB36c5tB0R+gTA9hd1ODhLPC1TSEkaJYZ+ujSt+GasQMLaSM37zqo80TAakTWDMNgH2N3UFkGgQgB956it1BSjsYPcdxpiCe2TKAN4vv2z5ky9bLjJ7x2SqNBUueeD5nZQf42SsNM5jSqgcWcdBGtnCwDKBHIPxYlZgsxcsK84fPezHQbCsgIPNAeWi8qH+6KG8N22ZjoY9YWL2XRVfeskKx46EfVQyL3Myq9EgORkPN+RDXp0Kq7o7MmF9NTmZNpJiSUfqP3v+Ko28aQtMuAJ2bXUWrJRhQoG9X2Ex5vgY5qYQcSDuGy1r/HjF1v/0Zz/czQ9a64vt7WOSNL3qjrt4T7ntkIboNFIP2GhrugdgGI8Jv5Pdd7lTuONoOk2GBjVMvBvxnsJDMPawtNXoOnfvI52fAF98WVrHwf0+YElF9gxFa0BlpVLiT1pNRhW/w+IzudMrYwsBA50dVWDf84TmogKp37pjW2q4ftjRCBEj0XAKAriCGmzx+k89Lohz129aTuHkNqXpMAzEOhyOWrh5M5xRG93rviAwy0nOnHpsNCY3PeiNBByu3QhcfMBuWJZU4Qx/4jm+S9+niaMq/KqLL1pcVqP0tTT6T14q/FHROhXVeNVwAR3OhGHvV4/1zBqdjrQZxsOSaLaT3rO6euXNM7b87jtWfu8dK6a4pHf+/vRrYcOhyBdSCqQrf/lEZtJFaafSbNRBxBXgpddf88Piw+ySIigWLK/yXdJ7X2slLpyRGc2OeeRL6sJkijm4PSfwWlBHBaMZuckkwKnL9OMH19oqY2PVcaIxPzYieOJQnWHtFEfQcu5PyevU9rgnlQmNPrLXMXgCjWwjitM7TDG+aZlofGwloMNfBM1mLpFiBPXMCCIFhrgSnBKt75z90r3/0M/m9RmDXN57On5moy2txntK/fPDrLD31Yi9txSAcNZrQaq2r8ERMwPEyXFlVThOkXMh1Ni7LEF/+KinFXmBeMYAK6HngvyNHtit7eMIAoh8ty0zLLCbKT3Xco/8eodbBhtxz9VncbwwQiXNqiHZNcn91Xkz9l9J/UZLIz6op17G6w7k4ofbkeTAzPJ8mTo+M0PDW1uzrvKqxdEVo0oTAMQcUIM3VWbny7p31j1jJGgxShuVsFdpkSQlDAddEXd2VSYv41IDvOrvs4AfU81ISq8sYMfMLCh+NszSGThjmgrMXTbyhuzhisnlbhqJO9xIQ/UePsLoJB5PoYcOjcfNJsXHzCFnQdcEguv8iN6tm6EOelyPiyQIkxoMyHO4/fnzlmUsU/L0QSDceHn03ultUixex72MZiP3T3ie52KlP51t3JJHpXxBV2niqW/z0GRzCUF6FFOYplHvwhvqe1eFhSqeYRXv3n1+xqv3/AIGToFjNa6r+KpEXX1DDWfXNRUaDacr8EFV5ndxOAKSbQS+5qNW86M5mxe+t1KNWSSaX4pcLMk+IF7qIbmQ6W5eyCzIHT1m/NIhlbrO9LgAI4AX59WGHdAwszvE5mUsgOyoIbXv3beO3LMiN27kY3o6K7PGzSXds8+nw4rf5HukeO/BSZZhc4lDnZh9AASYqXMT7PQp3wnuQvBO+dVWfvIj7z5bJq2DQXRbXvEDqqrfXbD1b78NP42iHpufR/HDoTiFDnPs/n3Lq1EznI0cpM+1SMkQzSV+HqV69YqvmGY1r6/olTnkrPv6vQcuQ55ZRH4vibEspdd7aOUT+64qMiW39K4qrojZI+ZbFQRQlPfmxR/tvhodp/vVBYo1uWkzQHxf2qPkiwA/D8V1Hx3VK6o3nU9XMtYkO+BaZqnDUrI72wt5QURkMJ2qQHfr8y/t/p//LC3+tu/b2360Q4w7uVKuUab4aUai03OvvbgGiSIvC2DK+aKbTLuMZhuN12TIkAHiOb6L0affQfFZiVEjB0S6sscbqij+UyVKBeYSKjrajCOr3LDGg/OA2aHrP2eiQuckWzY/VpVafk+bc1J8YRkVlo1/qohZaUjeAxCMqI+8aZki6Z0DT/yGL6ps4F6FkowtaV0VaQrrArcKS+QFFFmp8YV33vIDuTuSv8GgGL0/y/DVAPklBD/bhl5QMpF9PSk8L0N8zkp4/B6/jCe5kAPAjTN3Gf/IoclA9PTKD2bIMGUyJ47ZRpE9SP0QM82Gz+J17tyz7O170rZ0FTBkBXrZO/f9rBr2CoX5skS+YZKwrDhufHvBGtLaml+es+YX56ylK9z44rzV9J7fXHJT09NLSInGJ+DOMq505ZozB8dnBCIZgR3A7D2qtBem4TkHmkPl885XLYfZWtl0bXJegEEu9CzGG9j4R0rdbJJ83dt37NEn0iw+/oufr+NaFnLNQmOd6wN5os4Urb3y50/s7sd/EtjftEICnn2SVDQML4rkSnlynZJ61dxZfxL2IPiGG+4T4h4gYPwsaDG8w/NiaBBkUgI59ZAz8rh3Kg+xjxdIQj+cynt/Btda6u3uWPPubTmQCszUYadljUI4I4V1HU1J0WBntkCmdfGiPfryS7t36ZJtqPBZfFZ69dUwuIoWIdWSn06pq9ISJ3FELYM4fWzBhQ9E1vKOk/Hij9SzgZJNgYEL/pvdHDXphSlzbeWlF+3IBx/Yvj/83lb//ve2xEbPX5214jtv+y8GdA8ddO3GtQYig5M8IC7XdhQeR1T2KojnKxLxEJhHFHP34ywgie4h9xLGW+qUvI+tSMthTEoaXFWNcBNzVH7YQ7X67tu2KjDkaIv+UvkYWIw1MAVPzxhnephd4rR8NYMgZpp4gYmD+SNQyIoBB5j77LqABeY7wCcPnjaFSV74LnhF6g1aHQodA5oZWm1vHEIX7mlwfKfjAVj4EPJmhFwzkpuCuuZ1LavcC2iBChSziWNGutLq7n78Z7vz//7JmtKq3Mx3sAkdx1TUc6Yb/OCXMNQZNVVe9/7lj3bnjx9a6+p1KyjOQTMpyBjaFcyL8H5q8mjp5JL4CTvFMTgeoRBF1wqqQ+QJU/39r4uhQXNpIIFRnJ2JykSjYxl+LTm+EuaZhl9TRrPqsra5aXcv/Whb6kWbqowABN85tLsOCDTrVpFpsKnetS71ml3H5ZMnbfmMGg4zKQKdR9dUUBd/8MOmHTzwr16J4yW4RxYqa5CehhNmZBoys9pMlR8+7DMtzHox08LZwszU5ARiGYENQJYrs05GZovMJz+wfHXFZ0zC2SMKU/L52SqqnCHtAehY5AVj1rT2roXfj2JrhArNT6BTD86YDcKh6VGUNEJ+Sibkg3Q/ARgHbBkbQGVCtNSTt9AOJEOeJQHMrGEeyTyrfv2NmytsIOVXA/hNKkzOwsFDvpwfd11pMtUH921D2hb5RTkhX+AAvFybDKxLFgcfJOZPylyqC0Q2lWYOcg+ATt6HMLj6wetrK77hknVH/kNtkp0V33XlZ0MyNpW/zsWiP3dWl31zZIFtFdJkair7iswWDh/nN5Ga4pbcsveNxucHbC2gASgoHzBnYJPG2FE5klym31kQ6T8+l5iQBToKyj7mDA7HkQfCjWSkgWMaAboypxvnztm9jz72DjSj+p8XaEczH3n8j2TqhzEDeZYk+TJj9gSAydqS8riYQ4uJbWdxtIAVv0lPzCZFNSpmgBjHiJml/sp7S+/V1YiaqkxZIXsPCCgMLrj1huc3oSLIZOEclQLmgTLCZ5QAIM5UUQGSQQO9gCpLjj0+HMugBkr4aDAdgUpBGgg9PNOlWYXr4z6Sx6ct1chDhISiABVOj6goDEI21KvRs6mx1hU+U48s9fdfG1Ca2Xvj6rAqKrvEAYucAIFZGTS4GlPiH/3Jlr2nD0S+sX4lc+SIj0mhxfBDb34GseTqCJhqUuH5+VZmYsrvnzX/2V/2ip3/xqpffhV64iMv+I/pcZSl7xHyypqkR70lB4A1JLefG8OgI3nuaZQDNCRdfXqYcZQffvQFjWhlYYPkWbPTp6zFmI/y3RuNlxkcoqDMONOXRYKsY8qqUW59+61vklw5dtw6LyR1IpJk89il7fEbUHmWDiiPmwJTfj/btZskDi/jhsyZS1cs8/1FgTS61vxE6Exmcw4Rq4H9N4Z4pwShWXfKMs2pe+qI9rz5hq28/LJMVWnT1ONeXRlBLjbg0vCjaFlk9/DCBatJQ88q/zJxhboHEP4Ok1tLhDMNeV4l9zMScTPbtlQAYHJuSkLbZCL8UYJOSTOBjPduI8gXiKHKv/OWZdmlK8G9IJy4itN+YyXlnd9yHx+gxD2NRYl3gKGS4o5G7zMA0a0o3qIl/HjZ2n/51MchIDSqrDSAlV9/kJxMH7NSbr2AxPhj93ZdICK1FmZdRnOr4qfg0VAzipNG6ueb8DMlAI4izkhTKb71lpl65JBGhYesrP2gByRdajj1z7609mdf2BJAlBD51hXAFN+W/8MvhLQyQ5MAFkv3Nz/9XI0u46ZQDvBReBw3Ufv0M8tKvac3bAs0uwLiAprTS3Kjht6bfUKomM5kvCjkuYsQ5OOdwKP+3QVrKFx+YcIrukCGo0gBGXdH3uPR/cYAIBxz0R/KXp8qAhl+VWLPG2+o85FMlKH7wa04uQ0DAEnZUg68574Xvq4qm8aX56z76ae+E3tuIuhEBDfzla66gIZfmGQTLLN0HAfhq5bplNRRFKXprrAPS5qwz+5xNMbKctBuSZvqiI87bmxa88EDq9y9YxV1DkwicOBXRt98waXCJ9kIAJCMa1NjybPF//QukaYBJ6KD/edOVFYlAUxBbcI1mB387pYWBjItFUThzTOWp0JtA5lhUpQxVj5zPybskCtJeF4JE4/RfVp6tAj1HG1pDf6j+XKDyZZRb7TCkQWYEEyPcoiVgITfL2psCkhkxnXUsFjS72tgUGXpsak4uqf39+gUl6+x0C0F4mNQpPvdd3z9h2tGyBllg5ptP1ay8dnnlvMFVzTUQD5mJY2n8N67lj91OvGvD6RRmscWmwzV8Jel7azJjTFjpEpcO3feGhe+t7LSgclGuXCkZEvmTVtuOf9lSY2CozH9sDB6XwAM2RywI9AqHvKP9SECQsyvuBHRdUrS9sYZMxZUOkikCY+jSHEIzPiBfmaGVjHv+AE+6oT7IYHwEPFqIMjkgbxAy5EW05F8CwMZKBGFKFr6wxGdNZU3P8zvcKpvmMOucRZUj5aWfRq/o2tL4MNRHTFfM2jnkpPtCqwu99/QElOX0Myi5g5Hio16GqCJyyHcaZQ/Rf4qCWcUWMQouHJsa1laZMnNI7SpCHyPh0aCzDSJhkhMLAjs547U3u5ysoguuEiuacKTLv6pry56pSawGKiuIel6Ttz2AMYJN7rwTvH7G1UO1j3k6TlUuHxnCh1wYd8RppMfPo7ZQEMSkLASmJ3caA5oBaFCqE2Jw3N/3cswUfnqsmWzL5+wpVOvBlNFlTERTDW3Ze0HMlWkebBSmF3Lvlta/kgJ/lvSdvip2iJT3T7mo/xUJeVwL/bVcFAUZwmzUC3/0gn/Te+GgCe7UXHTIYxRxMFbet+sV35WzzJAzAB0F3PQy0Txyh0/TUJF4zCnjtKdbSudgOn6ug/ickiXl6vkoUwBL/x5VL3c8IeR5JUWc7WmRiY5fPc4/pOvHvgIik4o+Rg+r3wsZnPLcgJeBo7npih6jC+5hh/l74QfguOH7+i0JBSy48aHBcSMuwXwIajgmb9MQ1N/fP2N8tafe5FNInz33XkT8Lvk3VAQSfPYRrwK0vQpPlMmgklfJwSjxfjvXEveHo0KYAE0N8hAuCfTUT3JdH8dw9gW+iDJmxNpHY4Wr/F7IFW/GPiwYxHyUKhZFXIkTwvggnzynI4nXAE3v+k98z/AX6xCowlvfoyEGhE/ZtZW4fkPmiWeaBy5at1yvR4tAFYSnbvzmSjAST0jB3J5nGhR0qzoGVkGQL621eDZrU7aWLwFWIUKjLCEqnzXLen0t3q1rSxE4bk/6AmTfpx4byuOOgcvkZiGlTw6hVzhC664j1/6xDc/NlOBOyz0PPfdexyibb79BV/Fcu//kAv5+DQvDUUcy4t8IAZO82sKwJvMjCqf/bCr4EJX/iX5CqUE4tbrzZxyxobfi2OI4vud4ojysG+LmTSYhYhoL8N6qdO0Ac9IDjIxk6clZOl70V3vxbhsmY1Co1dh9iKZUcDHQqPTyR2NkJmZ2LOlKy3mTBjo294D49cZ/+pVogsHyoFGRfihsXtPOWclHksxWanAeTU6rig9NMpF/Aal7ydIvi2ybS/moHQ4aXmGSHnMV9o5nRK/PNlW+aH18aP9LBwFcvgO3LjjVNAOMiJeT08eklME/PAc7vrPo8lj5I9k50IHgpaCtppjvMWBBc0FJwrPA0uH6CE8Nto1yEDBm/56AHobpJ+bYiaEH/Qn7BkFfCw0Pp3hqQ8uacJpqt8bSdF/mnhSXelR381jAhgoLWYSCa9Gx8eXtIcFUAzusSSQQOFp5Q7uaf4RAlCQ/cxiUf9tQrPKnPKcDinUF96F+hTrDy76z8F7fHZKKgt/A4fTAMPaoAA+aJ998hDE0cfjo0znv8w7hS0BJzS+tPh87jdEJbz3POivT8MhBBoMZxzFMHEYHafj0bte8On34wj3OJbbHdI5mtJ+xrv2xVgTaLq4FkkxNmJOpyF9Px+RrUNZGmjhiSWwWeQecq+yCfVul0JFgBohRvpxl6H3wsC/80AcQxE68W63sU1PI02zRdEo8fsJDzcDA0/baHwGjKyUYwnHozwo/JnCGU/TBTPelfc4OwBMpIFQFiT/eCKCUbxYGttpLDSqWQNL3FMuSdlQ76izs3FHvbk4efZxNb3rs54VFxpL2lSehXt+E//EE+SPPIqmq2/z0gJAxnPdebDhx8T1X1KR0pXJF99Nkc6BYEXD4YwmHExypFATuSdTEhnOBtxzDbxTTIGiq77LCCwRXGLIk2gwBNHAw5w0IEA/fX0eTdOU4SQaWwzbErsYGpSX5jkioqRMdqYJ+UNDd06eByiGH66k3xdEbnPLi8jjKebhyHx8yrQgTaafsnQiA5qOI75F3pmmczWKJsUzbaixQgy7n9Z/pD6oRGBJ07TV+rHSQJJ4iDyZdgU0s2bfAmkb0FAeafbXqfuJNJSQCC5DtD2PpgkbeooZtQBaqLlEJvYzMim4sRkZ34/73qdJofRJLjzyYZfxeecQhikUrf6O7CJiXJPDDfVUfaVfJ7t9skR6hriXzsjT0bbsGed1+P1Tyo4BeWP5pIUbJ/848orPVX8mdKwDefRzoscs12Mdk/ESnEiLrmVJYW+j3ccTghtXCpPDnRlUnnglJMJxPAVNcjbu25RBPxGaVD7TyOmgktw/6/QY0/GYQeZJknJpoIuan6iCs8BE2hTqA0wMZYqQZolsZiJfhnlOGifvuOSOe/+kiDJJ8zji04TPO2ksi6UozCSB5qTHHPxfEchAT6rgB2kQVEbRYyzBmSiCy9PJp6dC04DKJIqAkuYnTj+X+rM7+isDmSdLO4PLkyQq/078N0LzAgv01ADlZ0zpfB3LOEzXOabVn9NMFIHl5wMuaRos3EH+G6BY0XdLT1VbeQIU82e3PA151vGnz89BZgdKg8rPH1hG0U7fn3GiTCLvhp5lYEmnfRqelqbKChzBHV1SnN66QJSK9znIjKGfL6iMop1qxTPYgHaiWRvOMP0cgCWmYbf8tKgHzAALeZgwIm2T8/mYzAA9OxrLME8i0hL5GaReZR3i3VCvceyUZ1PSKLlm4SdNw1GOe95JtFFp8S3efEuxk9n/B8iaO5ROe5MzAAAAAElFTkSuQmCC';


//log(currentActivity());
//gohome();
//singlecheck();
//log(istaskpage());
//playvideo();
//moneybox();
//log(isvideoPage());
//takelist();
//chengaccound();
//closeApp(tiktokAppName);

//toastLog(adfdsfdf);

/**判断是否在赚钱任务页**/
function istaskpage(){
    var istask = null;
    var taskpage=className("androidx.recyclerview.widget.RecyclerView").scrollable(true).focusable(true).find();
    //toastLog(taskpage);
    if(taskpage){
        for(i=0;i<taskpage.length;i++){
            var page=taskpage[i];
            //console.log('istaskpage',page.childCount(),page.rowCount(),page.id(),page.bounds())
            if(isRectInScreen(page.bounds()) && page.childCount()>5 && page.id()==null && page.rowCount()>20 ){
                istask = page;
                break;
            }
            //log('istaskpage===',page);
        }
    }
    return istask;
}

//执行赚钱任务函数
function takelist(){
    console.info('执行任务takelist');
    var homebtn = null;
    var taskpage = istaskpage();
    if(!taskpage){
        toastLog("不在任务页takelist");
        var homepage = className("android.widget.TextView").descStartsWith("推荐").clickable(true).findOne(1000);
        if(!homepage){
            gohome();//如果不在任务页面,则返回到首页再重新进入到任务页面
            sleep(3000);
            homepage = className("android.widget.TextView").descStartsWith("推荐").clickable(true).findOne(1000);
        }
        if(homepage){
            toastLog("进入任务页takelist");
            homebtn=desc("首页,按钮").findOne(1000);
            click(device.width/2,homebtn.bounds().centerY());
            sleep(3000);
        }
        taskpage = istaskpage();
    }
    if(taskpage){
        toastLog("已在任务页takelist");
        randomHeart(9);//下划
        var itemcount=taskpage.childCount();
        toastLog('找到任务数----------------'+itemcount);
        for(j=2; j<itemcount; j++){
            if(!taskpage){
                gohome();
                toastLog('返回到任务页----------------');
                //再次点中间赚钱图标进入任务页
                homebtn=desc("首页,按钮").findOne(1000);
                while(!homebtn){
                    back();sleep(1000);
                    homebtn=desc("首页,按钮").findOne(1000);
                }
                click(device.width / 2 , homebtn.bounds().centerY());//点赚钱图标
                sleep(5000);
                randomHeart(9);//下划
                taskpage = istaskpage();
                if(!taskpage)break;
                if(j>2)j--;
                if(j>=taskpage.childCount())break;
                continue;
            }
            if(j>=taskpage.childCount())break;
            var FrameLayout = taskpage.child(j);
            if (!FrameLayout || FrameLayout.className() != 'android.widget.FrameLayout' || FrameLayout.bounds().height() < 200) {
                //toastLog(FrameLayout);
                continue;
            }
            toastLog('执行赚钱任务目:' + j);
            if (FrameLayout.childCount() > 0) {
                if (FrameLayout.find(descMatches(/.*(\d{2}:\d{2}).*|.*填码得现金/)).length > 0) {
                    toastLog('有倒计时不点击====条目' + j);
                    continue;
                }
            }
            //toastLog('点击条目:' + j);
            //swipe(FrameLayout.bounds().left+100, FrameLayout.bounds().top, FrameLayout.bounds().right-100, FrameLayout.bounds().bottom, 5000);
            click(FrameLayout.bounds().centerX(), FrameLayout.bounds().centerY());
            sleep(3000);

            var videopage = className("com.lynx.tasm.behavior.ui.text.FlattenUIText").desc("反馈").findOne(1000);
            if (videopage) {
                console.error('观看广告视频-------条目' + j);
                //看广告视频赚金币
                playvideo();
                sleep(3000);
                taskpage = istaskpage();
                break;
            }
            var livingpage = id("com.ss.android.ugc.aweme.lite:id/root").desc("关闭").findOne(1000);
            if (livingpage) {
                console.error('直播间领金币-------条目' + j);
                //退出直播间
                toastLog('退出直播间takelist');
                var living = id("com.ss.android.ugc.aweme.lite:id/root").desc("关闭").findOne(1000);//直播间
                if (living) { living.click(); } else { back(); }
                sleep(3000);
                taskpage = istaskpage();
                continue;
            }
            var address = textContains("发现你的通讯录朋友").findOne(1000);
            if (address) {
                //通讯录朋友
                console.error('通讯录朋友-------条目' + j);
                click("拒绝");
                toastLog('拒绝发现通讯录朋友');
                sleep(3000);
                continue;
            } 
            var book = descMatches(/一键领取|立即预约领取/).findOne(1000);
            if (book) {
                console.error('进入预约-------条目' + j);
                //判断是否进入预约
                click(book.bounds().centerX(), book.bounds().centerY());
                sleep(3000);
                back();
                toastLog('预约已完成takelist');
                taskpage = istaskpage();
                continue;
            }
            var daygold=text('closePopup').findOne(1000);
            if(daygold){
                console.error('进入天天领金币-------条目' + j);
                var today=text('今日可领').findOnce();
                if(today){
                    click(device.width-200,today.bounds().centerY());
                }
                toastLog('金币已领完takelist');
                sleep(1000);
                click(daygold.bounds().centerX(),daygold.bounds().centerY());
                sleep(1000);back();sleep(1000);
                taskpage = istaskpage();
                continue;
            }
            var friendpage = className("android.widget.TextView").text("朋友日常").clickable(true).findOne(1000);
            if (friendpage) {
                console.error('进入朋友随机刷10次-------条目' + j);
                //进入朋友页面
                gogogo(10);
                toastLog('朋友视频已刷完takelist');
                //再次点中间赚钱图标进入任务页
                homebtn=desc("首页,按钮").findOne(1000);
                while(!homebtn){
                    back();sleep(1000);
                    homebtn=desc("首页,按钮").findOne(1000);
                }
                click(device.width / 2 , homebtn.bounds().centerY());//点赚钱图标
                sleep(3000);
                taskpage = istaskpage();
                continue;
            } 
            if (!istaskpage()) {
                toastLog('不执行该条目任务返回====条目' + j);
                back();
            } else {
                console.error('判断是否为签到-------条目' + j);
                //判断是否进入签到
                singlecheck();
                back();
            } 
            sleep(3000);
            taskpage = istaskpage();
        }
        console.info('任务完成takelist');
    }else{
        console.info('无法取得任务列表takelist');
        //截图保存界面,以备后续查看
        captureScreen(files.getSdcardPath() + '/脚本/'+currentActivity()+'.png');
        back();
    }  
}

//判断进入看广告视频赚金币
function playvideo(){
    function stopvideo(){
        let plug = ['很糟糕','一般般','太赞了'];
        var s=plug[2];//randomPointLoc(0,3)
        console.error('点击评价:'+s);
        var uc = className("com.lynx.tasm.behavior.ui.text.UIText").desc(s).findOne(1000);
        click(uc.bounds().centerX(),uc.bounds().centerY());
        sleep(2000);
        console.error('点击收下金币playvideo');
        click(uc.bounds().centerX(),uc.bounds().centerY()+230);
        console.error('完成看广告视频赚金币playvideo');
    }
    var video = className("com.lynx.tasm.behavior.ui.text.FlattenUIText").desc("反馈").findOne(1000);
    if(video){
        toastLog('进入看广告视频赚金币playvideo');
        for(var i = 1; i < 99 ;i++){
            //判断进入了直播间
            var living = id("com.ss.android.ugc.aweme.lite:id/root").desc("关闭").findOne(1000);
            if(living){
                toastLog('进入直播间playvideo');
                //关闭领金币宝箱自动弹出
                if(currentActivity().match(/.*NoMarginSheetBaseDialog$/gi)){
                    click(80,150);
                    sleep(1000);
                }
                toastLog('退出直播间playvideo');
                living.click();
                sleep(3000);
            }
            //判断是否进入了广告页面/^playvideocom.bytedance.*/
            var adpage = className("android.widget.Button").desc("返回").findOne(1000);
            if(adpage){
                toastLog('退出广告页playvideo'+currentActivity());
                adpage.click();
                sleep(3000);
            }
            video = className("com.lynx.tasm.behavior.ui.text.FlattenUIText").desc("反馈").findOne(1000);
            
            if(!video){
                toastLog('未进入广告视频模式'+currentActivity());
                break;
            }
            var okbtn = className("com.lynx.tasm.behavior.ui.view.UIView").descMatches(/领取成功.*|\d{1,2}秒后可领奖励.*/).findOne(1000);
            if(!okbtn){
                    toastLog('无法取得领取成功,点击右上角');
                    click(device.width-200,video.bounds().centerY());
                    okbtn=true;
                    sleep(5000);
            }else{
                if(okbtn.text()=='领取成功'){
                    var t = 9;
                    toastLog('等待'+t+'秒');
                    sleep(t*1000);
                    toastLog('0.点击领取成功');
                    click(okbtn.bounds().centerX(),okbtn.bounds().centerY());
                    sleep(5000);
                }else{
                    var b = okbtn.desc().match(/\d+/);
                    var t = 1*(b?b[0]:1)+9;
                    toastLog('等待'+t+'秒');
                    sleep(t*1000);
                    toastLog('1.点击领取成功');
                    click(okbtn.bounds().centerX(),okbtn.bounds().centerY());
                    sleep(5000);
                }
            }
            if(okbtn){
                //随时点击弹出层className("com.lynx.tasm.behavior.ui.text.FlattenUIText")
                var tv=textMatches(/继续观看|领取奖励|评价并收下金币/).findOne(1000);
                if(tv){
                    try{
                        if(tv.text()=='评价并收下金币'){
                            stopvideo();
                            sleep(1000);
                            return;
                        }else{
                            toastLog('2.点击'+tv.text());
                            click(tv.bounds().centerX(),tv.bounds().centerY());
                            sleep(2000);
                            var a=textMatches(/再看\d{1,2}秒可领奖励|评价并收下金币/).findOne(1000);
                            if(a){
                                if(a.text()=='评价并收下金币'){
                                    stopvideo(); 
                                }else{
                                    var b = a.text().match(/\d+/);
                                    var t = 1*(b?b[0]:1)+9;
                                    toastLog('等待'+t+'秒');
                                    sleep(t*1000);
                                }
                            }
                        }
                    } catch(e) {
                        toastLog('3.点击'+tv.text()+'====='+tv.bounds());
                    }
                    sleep(1000);
                }
            }else{
                toastLog('等待观看倒计时结束playvideo');
                sleep(1000);
            }
            toastLog('继续检查playvideo-----'+i);
            sleep(1000);
        }//end for
    }
}

//判断签到层
function singlecheck(){
    console.error('判断签到提示singlecheck');
    var i=0;
    var single = className("android.view.ViewGroup").depth(4).findOnce();
    //toastLog(single);
    if(single&&isRectInScreen(single.bounds())){
        while(single){
            i++;
            click(single.bounds().centerX(),single.bounds().bottom+100);
            sleep(3000);
            single = className("android.view.ViewGroup").depth(4).findOnce();
            if(i>2||!single||!isRectInScreen(single.bounds()))break;
        }
    }else{
        //图像识别查找
        single=FindPicture(img_single);
        if(single){
            //点击签到
            click(single.x,single.y-100);
            sleep(1000);
            //点击关闭
            click(device.width/2,single.y+100);
            i++;
        }
    }
    //如果已经点击了签到按钮
    if(i>0){
        var popup=textMatches(/手机充值|确认身份信息/).findOne(1000);
        if(popup){
            click(80,popup.bounds().centerY());
            sleep(2000);
            var div=textMatches(/领惊喜现金|确认放弃.*/).findOne(1000);
            if(div){
                if(div.text()!='领惊喜现金'){
                    click(div.bounds().left+50,div.bounds().top+50);
                    sleep(1000);
                }
                back();
            }
        }
        console.error('签到结束singlecheck');
        sleep(3000);
        toastLog('判断是否进入看视频singlecheck');
        playvideo();
    }else{
        console.error('没有签到提示singlecheck');
    }
}

//点击右下角宝箱函数
function moneybox(){
    toastLog('执行右下角宝箱任务moneybox');
    var taskpage = istaskpage()
    if(!taskpage){
        toastLog("不在任务页moneybox");
        var homepage = className("android.widget.TextView").descStartsWith("推荐").clickable(true).findOne(1000);
        if(!homepage){
            gohome();//如果不在任务页面,则返回到首页再重新进入到任务页面
            sleep(3000);
            homepage = className("android.widget.TextView").descStartsWith("推荐").clickable(true).findOne(1000);
        }
        if(homepage){
            toastLog("点击首页赚钱moneybox");
            var homebtn=desc("首页,按钮").findOne(1000);
            click(device.width/2,homebtn.bounds().centerY());
            sleep(3000);
        }
        taskpage = istaskpage();
    }
    if(taskpage){
        console.error('点击右下角宝箱');
        //点击宝箱位置
        click(device.width - 150, device.height - 150);//点右下角
        sleep(3000);
        setScreenMetrics(1220,2700);
        click(device.width/2,1730);//点弹出宝箱层中的红色按钮,有可能没有弹出
        setScreenMetrics(device.width,device.height);
        sleep(5000);
        //如果进入看视频赚金币则观看视频
        //if(currentActivity()=='com.ss.android.excitingvideo.ExcitingVideoActivity')
        if(className("com.lynx.tasm.behavior.ui.text.FlattenUIText").desc("反馈").findOne(1000)){
            playvideo();
            console.error('右下角宝箱完成');
        }else{
            toastLog('右下角宝箱已开过');
        }
    }else{
        console.info('无法取得任务列表moneybox');
        //截图保存界面,以备后续查看
        captureScreen(files.getSdcardPath() + '/脚本/'+currentActivity()+'.png');
    }
}

//主程序函数===============================================================
function Main(){
    function work(){
        toastLog("开始工作work");
        var homebtn = className("android.widget.TextView").desc("首页,按钮").findOne(1000);
        if(!homebtn){
            toastLog("当前不在首页");
            gohome();sleep(3000);
            homebtn = className("android.widget.TextView").desc("首页,按钮").findOne(1000);
        }
        if(homebtn){
            toastLog("点赚钱图标进任务页");
            click(device.width / 2 , homebtn.bounds().centerY());//点赚钱图标
            sleep(8000);
            //检测签到提示是否弹出到【任务页】
            singlecheck();
            sleep(5000);
            //挨个点击任务列表里的任务
            takelist();
            sleep(3000);
            //点击右下角宝箱
            moneybox();
            sleep(3000);
        }
        //回到首页准备刷视频
        console.error("准备开始滑动+++++++++");
        gohome();gogogo(times);
        console.error("滑动"+times+"次已完成+++++++++");
    }
    //打开抖音App
    if (getPackageName(tiktokAppName)) {
        toastLog('启动应用:'+tiktokAppName);
        //launch('com.ss.android.ugc.aweme.lite');
        launchApp(tiktokAppName);
        sleep(5000);
        //跳过开屏广告
        if(desc("跳过").findOnce()){click("跳过");}
        //等待进入主界面成功
        var k=0;
        while(!className("android.widget.TextView").desc("首页,按钮").findOne(1000)){
            k++;
            sleep(1000);
            if(k>9)break;
        }
        
        toastLog("进入主函数main");
        sleep(3000);
        //先检测签到提示是否自动弹出在【首页】
        singlecheck();
        sleep(3000);
        slidingByCurve();

        //开始工作
        work();
        //切换账号
        chengaccound();
        //开始工作
        work();
        endtime = new Date().getTime();
        var worktime = Math.floor((endtime - starttime) /1000/60);
        console.show();
        console.warn('执行完成,用时'+worktime+'分钟');
        sleep(3000);
        console.hide();
        closeApp(tiktokAppName);
    }else{
        toastLog("未安装" + tiktokAppName);
        //launch('com.ss.android.ugc.aweme.lite');
        engines.myEngine().forceStop();
        return;
    }

    console.show();
    console.warn("执行完成,5秒后熄屏");
    sleep(5000);
    console.hide();
    console.clear();
    //熄屏
    runtime.accessibilityBridge.getService().performGlobalAction(android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_LOCK_SCREEN);
    //停止本脚本
    //engines.myEngine().forceStop();
    //结束所有Autojx进程
    engines.stopAll();
}

function toActivePage(page){
    //if(currentActivity()!=page){
        let intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        let package = packageName;
        let className = page;
        let componentName = new android.content.ComponentName(package, className);
        intent.setComponent(componentName);
        context.startActivity(intent);
    //}
}
/**回到首页面**/
function gohome(){
    toastLog('执行回到首页gohome');
    //launch(packageName);
    launchApp(tiktokAppName);
    toActivePage('com.ss.android.ugc.aweme.main.MainActivity');
    sleep(2000);
    var homebtn = className("android.widget.TextView").desc("首页,按钮").findOne(2000);
    if(!homebtn){
        toastLog('可能需要重启软件');
        //截图保存界面,以备后续查看
        captureScreen(files.getSdcardPath() + '/脚本/gohome_'+i+'.png');
        closeApp(tiktokAppName);
        sleep(3000);
    }
    //launch(packageName);
    launchApp(tiktokAppName);
    sleep(1000);
}

/**随机拟人化(防止被判定是机器)**/
function randomHeart(num) {
    let randomIndex = num?num:random(1, 30);
    let delayTime = random(10000, 15000);
    //随机点赞
    if (randomIndex % 10  == 0) {
        var like = className("android.widget.LinearLayout").descStartsWith('未点赞').clickable(true).findOnce();
        if(like){
            console.log('拟人:随机点赞');
            like.click();
            return;
        }
    }
    //随机下滑
    if (randomIndex % 9 == 0) {
        console.log('拟人:随机下滑');
        swipe(device.width / 2, device.height * 0.1+randomIndex, device.width / 2, device.height * 0.9-randomIndex, delayTime/10);
        return;
    }
    //随机切换频道
    if(randomIndex % 8 == 0){
        var idList = ["短剧","热点","包头","直播","关注","推荐"];
        var index = random(1, idList.length)-1;
        var tab = className("android.widget.TextView").desc(idList[index]+',按钮').clickable(true).findOnce();
        if (tab) {
            console.log('拟人:切换频道:'+idList[index]);
            tab.click();
            return;
        }
    }
    //连续上滑
    if (randomIndex % 7 == 0) {
        console.log('拟人:连续上滑');
        var k=random(2,4);
        for (var i = 0; i < k; i++) {
            var j=random(2,5);
            if(j==3){
                swipe(device.width / j, device.height * 0.1+j*k, device.width / j, device.height * 0.9-j*k, j*50);
            }else{
                swipe(device.width / j, device.height * 0.9-j*k, device.width / j, device.height * 0.1+j*k, j*50);
            } 
            sleep(j*250);
        }
        return;
    }
    //随机左右划
    if(randomIndex % 6 == 0){
        left2right();
        return;
    }
    //随机恢复到首页
    if(randomIndex % 5 == 0){
        console.log('拟人:随机回首页');
        gohome();
        return;
    }
    //向上滑
    slidingByCurve();
}

/**判断是否在视频播放页**/
function isvideoPage() {
    var isvideo = false;
    var taskpage = istaskpage();
    if(!taskpage){
        console.log("检测是否在视频播放中isvideoPage");
        //console.log(currentActivity());
        var view = descMatches(/播放视频.*|暂停视频.*|.*进入直播间.*/).findOnce();
        if(view){
            isvideo = true;
            console.log("正在播放视频:"+view.desc());
        }
        var living = id("com.ss.android.ugc.aweme.lite:id/root").desc("关闭").clickable(true).findOne(1000);//直播间
        if(living){
            isvideo = true;
            console.log("退出直播间isvideoPage");
            click(living.bounds().centerX(),living.bounds().centerY());
            sleep(2000);
        }
        if(currentActivity()=='com.ss.android.ugc.aweme.live.LivePlayActivity'){
            back();
        }
    }
    return isvideo;
}

/**随机上滑n次**/
function gogogo(n){
    times=0;
    for(var i = 1; i <= n ;i++){
        var sleepTime = randomRangeTime(6,20);  //每个视频随机时间 6-20s
        if(isvideoPage()){
            if(className('com.lynx.tasm.behavior.ui.view.UIView').descMatches(/提交,按钮.*/).findOne(1000)){
                //广告视频则多停留一个周期
                sleep(sleepTime);
            }
            randomHeart();//拟人化
            toastLog('观看视频:'+(sleepTime/1000)+'秒');
            sleep(sleepTime);
        }else{
            times=50;
            toastLog('not at the video page');
            var dialog=currentActivity();
            console.log(dialog);
            if(dialog.match(/.*Dialog.*/gi)){
                //截图保存界面,以备后续查看
                captureScreen(files.getSdcardPath() + '/脚本/'+dialog+'.png');
            }
            gohome();
            sleep(3000);
        }
    }
    times=50;
}

/**------------------------------------------------------------
 * 从下往上滑动,随机坐标
 */
function slidingByLine(){
    // top X,Y范围
    tx = randomPointLoc(parseInt(device.width/3),parseInt(device.width/2));
    ty = randomPointLoc(parseInt(device.height/5),parseInt(device.height/4));
    // bottom X,Y 范围
    bx = randomPointLoc(parseInt(device.width/2),parseInt(device.width/3));
    by = randomPointLoc(parseInt(4*device.height/5),parseInt(3*device.height/4));

    slidingTime = randomRangeTime(0.3,0.6);
    log("sliding:("+ bx +"," + by +"), ("+ tx +"," + ty +"),"+slidingTime);
    //log("X: "+ Math.abs(bx-tx) + " Y: "+ Math.abs(by - ty));
    swipe(bx,by ,tx ,ty ,slidingTime);
}

/**
 * 上部左右滑动
 */
function left2right() {
    var randomP = random(300, 500);
    var points = [randomP];
    var interval = 0.1;
    var x0 = random(device.width/2-500, device.width/2+500);
    var y0 = random(500, 700);
    var a = random(200, 300);
    for (var t = 0; t < Math.PI / 2; t += interval) {
      var x = x0 + a * (1.5 * Math.sin(t * 0.9) - Math.sin(2 * t * 0.6));
      var y = y0 + a * (0.6 * Math.cos(t * 0.9) - Math.cos(2 * t * 0.6));
      points.push([parseInt(x), parseInt(y)]);
    }
    gesture.apply(null, points);
    sleep(1000);
}
/*
*从下往上滑动,曲线滑动,随机坐标
*/
function slidingByCurve(){
    // top X,Y范围
    tx = randomPointLoc(parseInt(device.width/3),parseInt(device.width/2));
    ty = randomPointLoc(parseInt(device.height/5),parseInt(device.height/4));
    // bottom X,Y 范围
    bx = randomPointLoc(parseInt(device.width/2),parseInt(device.width/3));
    by = randomPointLoc(parseInt(4*device.height/5),parseInt(3*device.height/4));
 
    slidingTime = randomRangeTime(0.3,0.6);
    log("Move:["+ bx +"," + by +"], ["+ tx +"," + ty +"], T="+slidingTime);
    //log("X: "+ Math.abs(bx-tx) + " Y: "+ Math.abs(by - ty));
    sml_move(bx,by ,tx ,ty ,slidingTime);
}
/**
 * 随机位置点
 * @param {起始值} start 
 * @param {结束值} end 
 * @returns 
 */
function randomPointLoc(start,end){
    len = Math.abs(end - start); 
    loc = Math.floor(Math.random() * len) + start;
    return loc;
}

/**
 * 从几秒到几秒
 * @param {开始秒} start 
 * @param {结束秒} end 
 * @returns
 */
function randomRangeTime(start,end){
    len = Math.abs(end -start)*1000; 
    ms = Math.floor(Math.random() * len) + start*1000;
    return ms;
}

/**
 * 仿真随机带曲线滑动 
 * @param {起点x} qx 
 * @param {起点y} qy 
 * @param {终点x} zx 
 * @param {终点y} zy 
 * @param {滑动时间,单位毫秒} time 
 */
function sml_move(qx, qy, zx, zy, time) {
    var xxy = [time];
    var point = [];
    var dx0 = {
        "x": qx,
        "y": qy
    };
    var dx1 = {
        "x": random(qx - 100, qx + 100),
        "y": random(qy , qy + 50)
    };
    var dx2 = {
        "x": random(zx - 100, zx + 100),
        "y": random(zy , zy + 50),
    };
    var dx3 = {
        "x": zx,
        "y": zy
    };
    for (var i = 0; i < 4; i++) {
        eval("point.push(dx" + i + ")");
    }
    // log(point[3].x)
    for (let i = 0; i < 1; i += 0.08) {
        xxyy = [parseInt(bezier_curves(point, i).x), parseInt(bezier_curves(point, i).y)]
        xxy.push(xxyy);
    }
    try{
        gesture.apply(null, xxy);
    }catch(e){
        log(xxy);
    }
}
 
function bezier_curves(cp, t) {
    cx = 3.0 * (cp[1].x - cp[0].x); 
    bx = 3.0 * (cp[2].x - cp[1].x) - cx; 
    ax = cp[3].x - cp[0].x - cx - bx; 
    cy = 3.0 * (cp[1].y - cp[0].y); 
    by = 3.0 * (cp[2].y - cp[1].y) - cy; 
    ay = cp[3].y - cp[0].y - cy - by; 
    
    tSquared = t * t; 
    tCubed = tSquared * t; 
    result = {
        "x": 0,
        "y": 0
    };
    result.x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x; 
    result.y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y; 
    return result; 
}

/**
 * 判断一个元素是否在屏幕范围内
 * @param {元素的坐标rect类型} bounds 
 */
function isRectInScreen(bounds) {
    var x = bounds.left, y = bounds.top,
        a = bounds.right, b = bounds.bottom;
    return (
      x >= 0 && x <= device.width &&
      y >= 0 && y <= device.height &&
      a > 0 && a <= device.width &&
      b > 0 && b <=device.height
    );
}
/**
 * 获取当前时间格式yyyyMMdd
 */
function getDate() {
    var date = new Date();
    var year = date.getFullYear();
    var month = date.getMonth() + 1;
    if (month < 10) {
        month = "0" + month;
    }
    var day = date.getDate();
    if (day < 10) {
        day = "0" + day;
    }
    return year + "-" + month + "-" + day;
}

/**获取子元素的索引**/
function getindexInParent(child) {
    var parent = child.parent();
    for (var i = 0; i < parent.childCount(); i++) {
        if(parent.child(i).find(className('CheckBox').checked(true)).length>0){
            return i;
        }
    }
    return -1; // 如果找不到子元素,则返回-1
}

/**
*监控脚本是否卡在某界面不动,发现此情况重启脚本
*/
function Observer() {
    function unique(arr) {
        let newArr = [arr[0]];
        for (let i = 1; i < arr.length; i++) {
            let flag = false;
            for (var j = 0; j < newArr.length; j++) {
                if (arr[i] == newArr[j]) {
                    flag = true;
                    break;
                }
            }
            if (!flag) {
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }
    var currentActis = new Array();
    var PackageName=getPackageName(tiktokAppName);
    for (let c = 0; c < 59; c++) {//连续扫描60秒后返回结果,如果60秒停留在同一活动页面,则就要重启线程了
        var btntxt=textMatches(/同意|取消|关闭|不在提醒|我知道了|以后再说|暂不使用/).findOnce();
        if(btntxt&&btntxt.packageName()==PackageName){
            console.warn('执行:'+btntxt.text());
            click(btntxt.text());
        }
        var div1=text('请完成下列验证后继续').findOnce();
        if(div1&&div1.packageName()==PackageName){
            console.warn('请完成下列验证后继续');
            //这里有一个滑动块验证,待开发

            click(div1.bounds().right+250,div1.bounds().centerY());
        }
        var div2=textMatches(/确认身份信息/).findOnce();
        if(div2&&div2.packageName()==PackageName){
            console.warn('确认身份信息');
            click(80,div2.bounds().centerY());
        }
        //关闭签到提示
        var single = text("签到提醒").findOnce();
        if(single&&single.packageName()==PackageName){
            click(single.bounds().centerX(),single.bounds().centerY()-150);
            sleep(1000);
            click(single.bounds().centerX(),single.bounds().centerY()+180);
            console.warn('结束签到提醒');
        }
        // 验证账号重新登录
        //com.ss.android.ugc.aweme.account.ui.dialog.AccountStatusViewDialog
        if (textMatches(/账号安全,请重新登录|登录后,体验完整功能/).findOnce()) {
            click("重新登录");
            console.warn('重新登录验证');
            sleep(2000);
            var a=textContains("已阅读并同意").findOnce();
            if(a){
                click(a.bounds().left,a.bounds().centerY());
                sleep(500);
                click(a.bounds().centerX(),a.bounds().centerY()-200);
            }else{
                click("一键登录");
                sleep(2000);
                click("同意并登录");
            }
        }
        //toastLog(currentActivity());
        currentActis[c] = currentActivity();
        sleep(1000);//这是每秒扫描一次活动页
    }
    ac = unique(currentActis);
    cc = currentActivity().match(/.*ExcitingVideoActivity|.*main\.MainActivity|.*app\.Dialog/gi);
    if (ac.length == 1 && !cc) {
        return false;
    }
    return true;
}

// 》》》》》》》》》》》》》》》》》》》 START
work_thread = threads.start(function () {
    Main();
});
 
observer_thread = threads.start(function () {
    setInterval(function () {
        console.verbose('--------多线程安全检测---------');
        if (!Observer()&&times>0) {
            work_thread.interrupt();
            work_thread = threads.start(function () {
                //如果运行时间超过3小时,则关闭应用,停止脚本。
                endtime = new Date().getTime();
                if(Math.floor((endtime - starttime) / 1000)>60*180){
                    console.show();
                    console.warn("本脚本已运行超三小时!");
                    toast("本脚本已运行超三小时!");
                    sleep(5000);
                    console.hide();
                    closeApp(tiktokAppName);
                    //熄屏
                    runtime.accessibilityBridge.getService().performGlobalAction(android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_LOCK_SCREEN);
                    //停止本脚本
                    //engines.myEngine().forceStop();
                    //结束所有Autojx进程
                    engines.stopAll();
                }else{
                    console.warn("Main线程在5秒后重启!");
                    toast("Main线程在5秒后重启!");
                    //toastLog(currentActivity());
                    closeApp(tiktokAppName);
                    sleep(5000);
                    Main();
                }
            });
        }
    }, 3000);//这个时间是线程休息时间
});

//息屏挂机模式,常亮device.keepScreenOn()
function oled() {
    var w = floaty.rawWindow('<frame gravity="center" bg="#000000" />');
    w.setSize(-1, -1);
    w.setTouchable(true);
    //保持脚本运行
    setInterval(() => { }, 1000);
}

//关闭软件
function closeApp(appname) {
    let packageName = getPackageName(appname);
    // 使用ADB命令强行结束进程
    //shell("adb shell am force-stop " + packageName);
    console.warn('关闭软件:'+appname);
    app.openAppSetting(packageName);
    text(app.getAppName(packageName)).waitFor();  
    let is_sure = textMatches(/.*强行停止.*/).findOnce();
    if (is_sure.enabled()) {
        try {
            var btn=className("Button").text('强行停止').findOnce();
            if(btn)btn.click();
            sleep(1000);
            btn=className("Button").text('强行停止').findOnce();
            if(btn)btn.click();
            sleep(1000);
            btn=className("Button").text('确定').findOnce();
            if(btn)btn.click();
            back();back();back();
            home();
        } catch(e) {
            log(app.getAppName(packageName) + "应用已被关闭");
            sleep(1000);
            back();back();back();
            home();
        }
    } else {
        log(app.getAppName(packageName) + "应用不能被正常关闭或不在后台运行");
        back();back();back();
        home();
    }
}

//查找图片
function FindPicture(templateImage64) {
    let bounds = null;
    toastLog('开始图像识别FindPicture');

    //安卓系统中,autoJS运行截图操作时,每次都会询问“要开始录制或投射内容吗”,并且没有始终允许的设置,可以用如下adb命令设置为始终允许
    //adb shell appops set org.autojs.autoxjs.v6 PROJECT_MEDIA allow

    //该请求截图权限函数在截图脚本中只需执行一次,而无需每次调用captureScreen()都调用一次;若已有截图权限,则抛出异常。
    //if (!requestScreenCapture(false)) {
    //    console.log("请求截图权限失败");
    //    return bounds;
    //}

    /*
    let iscapture = captureScreen(files.getSdcardPath() + '/脚本/1.png');
    sleep(1000);
    if(iscapture){
        screenPicture = images.read(files.getSdcardPath() + '/脚本/1.png');
    }else{
        console.log("截图保存失败");
        return bounds;
    }
    */

    //这里可以不保存到文件,直接在内存中查找
    //let screenPicture = captureScreen();
    let coinPicture = images.fromBase64(templateImage64);
    if (!coinPicture) {
        console.log("模板:", coinPicture);
        return bounds;
    }
    //找到图会返回坐标 找不到返回null
    try{
        var result = images.findImage(captureScreen(), coinPicture, {region: [0, 2*device.height/3], threshold: 0.7});
        toastLog('图像识别完成FindPicture');
        if (result) {
            console.log("坐标:", result);
            bounds = result; 
        }
    }catch(e){
        toastLog('图像识别失败FindPicture');
    }
    coinPicture.recycle();
    return bounds;
}

//切换用户
function chengaccound(){
    console.show();
    console.warn("【准备切换登录账号】");
    //首先需要进入我的页面中
    if(!className("android.widget.TextView").desc('我,按钮').findOnce()){
        gohome();
        sleep(1000);
    }
    try{
        var me=className("android.widget.TextView").desc('我,按钮').findOnce();
        if(me)click(me.bounds().centerX(),me.bounds().centerY());
        sleep(2000);
        var more=className("android.view.ViewGroup").desc('更多').findOnce();
        if(more)click(more.bounds().centerX(),more.bounds().centerY());
        sleep(2000);
        var setting=className("android.view.ViewGroup").desc('设置,按钮').findOnce().click();
        //if(setting)click(setting.bounds().centerX(),setting.bounds().centerY());
        sleep(2000);
        var account=className("android.widget.RelativeLayout").desc('切换账号').findOnce().click();
        //if(account)click(account.bounds().centerX(),account.bounds().centerY());
        sleep(2000);
        
        var checkbox = className("android.widget.CheckBox").checked(true).findOnce().parent();
        //找到当前为选择状态的下一个兄弟节点并点击选择,如果没有下一个兄弟,则选择第一个兄弟
        var checknext = checkbox.parent().child(getindexInParent(checkbox)+1);
        if(checknext&&checknext.className()==checkbox.className()){
            toastLog("选择下一个账号");
            checknext.click();
        }else{
            toastLog("选择第一个账号");
            checkbox.parent().child(0).click();
        }
        sleep(1000);

        var j=0;
        var backbtn = id("com.ss.android.ugc.aweme.lite:id/back_btn").desc('返回').findOnce();
        while(backbtn){
            backbtn.click();
            sleep(1000);
            backbtn = id("com.ss.android.ugc.aweme.lite:id/back_btn").desc('返回').findOnce();
            if(text('更多功能').findOnce()){
                back();
                break;
            }
            if(j>5)break;
        }
        back();
    } catch(e) {
        console.warn("切换登录账号失败");
        console.hide();
    }
    console.hide();
}


/**
 * 记录App一次运行的时间
 * @param {appName} appName 
 * @param {本次运行时间} recordTimes 
 */
function appRunTimeRecord(appName, recordTimes) {
    let key = appName + storageSign + getDate();
    var havedRunTimes = woolStorage.get("" + key + "");
    let value = "";
    if (!havedRunTimes) {
        woolStorage.put(key, parseInt(recordTimes));
    } else {
        value = parseInt(havedRunTimes) + parseInt(recordTimes);
        woolStorage.put(key, value);
    }
}

// 屏幕是否为锁定状态,返回{isScreenOn:0/1,isLocked:0/1,isSecure:0/1,}
function isDeviceLocked() {
    importClass(android.app.KeyguardManager);
    importClass(android.content.Context);
    var km = context.getSystemService(Context.KEYGUARD_SERVICE);
    return {'isScreenOn':device.isScreenOn(),'isLocked':km.isKeyguardLocked(),'isSecure':km.isKeyguardSecure()};
}

// 函数封装ADB命令
function shell(cmd) {
    return runtime.exec(cmd).waitFor();
}


/*
var RndMilSec = 0;
RndMilSec = random(1, 180) * 1000; //随机1-180秒 后执行 打卡.js 脚本
toastLog("打卡脚本将在(" + RndMilSec / 1000 + "秒)" + parseInt(RndMilSec / 1000 / 60) + "分" + RndMilSec / 1000 % 60 + "秒后运行");
var e = engines.execScriptFile("https://gitcode.com/zhangrf/autojs/blob/main/tiktok.js",{delay: RndMilSec});

云端运行脚本engines.execScript(“运行脚本名字”, Source);
var url = "http://源码所在位置"//你要运行的js云端源码
var res = http.post(url, {});
var Source = res.body.string();//变量自己随便写就行
if (Source != "") {
    engines.execScript("运行脚本名字", Source);
} else {
    toast("似乎出了点问题,请联系作者解决");
}
*/