👆👆👆 多功能网页翻译工具,支持所有网站划词翻译,支持快捷键翻译和独立面板翻译,选择单词或段落后,按快捷键即可快速翻译(快捷键可自定义更换),可设置翻译字体颜色、翻译结果显示位置,独立翻译 面板支持显示多个翻译结果,方便对比翻译结果,支持多种语言互相翻译,全面支持百度翻译、彩云小译、有道翻译、阿里翻译、必应翻译、搜狗翻译、爱词霸翻译。👆👆👆
// ==UserScript== // @name iTranslator // @version 2.9.0 // @author SCI Great // @homepage https://www.hezibuluo.com/159129.html // @namespace https://www.hezibuluo.com/159129.html // @description 👆👆👆 多功能网页翻译工具,支持所有网站划词翻译,支持快捷键翻译和独立面板翻译,选择单词或段落后,按快捷键即可快速翻译(快捷键可自定义更换),可设置翻译字体颜色、翻译结果显示位置,独立翻译 面板支持显示多个翻译结果,方便对比翻译结果,支持多种语言互相翻译,全面支持百度翻译、彩云小译、有道翻译、阿里翻译、必应翻译、搜狗翻译、爱词霸翻译。👆👆👆 // @require https://unpkg.com/[email protected]/dist/sweetalert2.all.min.js // @require https://unpkg.com/[email protected]/crypto-js.js // @require https://unpkg.com/[email protected]/dist/jquery.min.js // @license AGPL-3.0-or-later // @grant unsafeWindow // @grant GM_info // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_addElement // @grant GM_openInTab // @grant GM_setClipboard // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // @run-at document-end // @compatible chrome // @compatible firefox // @compatible safari // @compatible opera // @compatible edge // @connect qq.com // @connect sssam.com // @connect ooopn.com // @connect scigreat.com // @connect bing.com // @connect baidu.com // @connect iciba.com // @connect sogou.com // @connect youdao.com // @connect taobao.com // @connect google.com // @connect alibaba.com // @connect ydstatic.com // @connect caiyunai.com // @connect googleapis.com // @connect volcengine.com // @connect reverso.net // @connect * // @match *://*/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAIABJREFUeF7lfQd4FNX6/pTtm2w2vRLS6F0RRFFQVFCMCCgqXERR6cYLiIhUQUBAQGoApalEunpRLyogKEpVejSUQCAhvW22Zndm/s97dk4c1gAJBOT+/usTE5LZ2Zn53vOV9yuHZf4PvCRJUjMMo5G/AuTvWovForPZbFqHw2HCbZaUlKjLy626/PzLenrbRqOxHD9LPG/D9yYNGrgVf7PFxMQ4GIbxMAwjMAxTyTAMjrezLOv6P/DoGPZ/9SYkSYJQDQzD6LKzs8MqKytDTp36M+zIsd+b5uXlBVzMyoqw2xym3NzL+vKKCq3L6dTZbFYIkTEa/XitVqvDzy6Xy6l8BjiG/F2ncwYHB9lCg0PdoaFhluDQoLzE+MSChg0bnWvYMDHLaDQWx8TEWBiGsQIYLMvi5/+51/8UACRJMjIME8gwTMjevftaHj95rNnly3khv+7dm1BaXhoiiKLeZXcaPaKoNRj0Gp7nebVazWg0Gg6S4TiOfK/JSxAE1uPxSJWVlR6Px4OfnYwoWDiVxqJWqZzxCXGW5s1bno+NibqQmNjwdJcunY8zDFPKMEwFy7JEm/wvvO54AMjqPdxisUTu2bO3GVb4qRPpjU6fzUjIy8sP4nneEBISooOgIXCe56VrPXhJkliGYavum2WZa4JCkhiR5zlGFEWRmApJYvGj0+kUKiqsDofdVh4XF1+RmBB/vHXrNudbt25zskuXzukMwxQyDFPMsmyVSbkTAXHHAkBe7dEMw9QbPHjwk/mFha2ysrJC3W53MMtyJq1Go9JotbLwvAIVRUGSeI7lJYaAgGXZKjB4Be990d9L0rWFf6XAJEkJHPwNwBAEkal0OQWrzebkOFWZOcBkqRdT73xCUvyRmdOn72IY5iLDMLl3qs9wRwFAXu1+DMNEnDhxovmIlDcGHD9+LKZeTP0YjUblx2F9cyqO5VhRYCWGl1gidKrZlQJXCFuUJIljWZasYLw8Hvh0DO+7IpXaA4DxPZ8SMPhcohEI4LyPkf5OEASXzeYozs6+lPfoI48c+/ij5f8JDAz8E1rhTvMV7hgAwKmzWCyNtm37tt3n69c9tm/f/oZR0dGRfmazn4phJMEt8gwniQLLSLwE55WubiIpIgxBEERBEBhJFFlXZaVTEAQ3x7FujuftdqvNxbAMcfjUvMqt0epUSgDY7Fbvs5AY4hxqtHojx0kaluUMPM9ryfvUanwR4FSnRZTmRJIkgeM4oTC/oKygqCD/4Ye6HHhpwEv7kpOfOACtcKf4Cf84ACRJCszOzq534cKl1uMnju+TdSGrqU6vCwoKCjKwLMtLeJJVQmcY788sUb9ut9vjcrncgkes5HmuUpAEu5/Bz67TaosNRr0l0BxY0aBRw8v169UrSExsWNC8cZNLnIaD186YTKYrbLPFYlHTkPHy5fyQc+dOh2VduhR29MiRqMrKSn9EFE6XK9hqtxp4ljcIgqjhVZxGq9WqVSoVfAOOaggKBFw7tAqu02KxWMvKyrLvbd/u1KiRb37fsWOH/QzD5P3TGuEfA4Bs42O3bfu2/eo1Kx/5fsfO++Lj4oICAgL8JXheZJUzDMtIosAxHC/CGeMljucZu83mLCoqqtDrDSURYWGF0dFROVTQzZo1O9O2bdvTDMMgfscLqx46HzG843pOmSRJWO34Aq8AbQBNobFYLAGHDv2ekJ2dVQ/AOJNxOion53J0XkFBqMNhD4qIiDCqVCpeFEX1lY7mX74Dx7GekpISa27u5ZwXXnjhQO+ez+zq0qXzYVkj/CPO4m0HAPXqMzMzW7733vRnjhw7eo/D4awXEBxk5DieZQURlp33sCyJ2Ymxllj47WJpaanl4qVLFfFx9S8/++yzv7ZpdVc6YvJGjRrlgJxhGAbh1y0jaWTQgkQC9xCUl5cXn5FxNubo0d8Stn7xZZucnOywhg2bRJgC/I1ejeB1DhA1IATlOLgiLHwSD0yDOdB8tnWrloeXL1++iWGYP1iWRRh5W1+3FQDy6moyY8b7yZ9++kl3tUaXpNNrA9RqNR6WJDESx4ocA1tPBM/zktPpJKud57ncBzs+cGzgwFd3x8XV+zMmJuYywzAgX667qm/VE5UBAU0RkJubG/P7sWMtV3700X3HT5xo4nELgfVi64XJACBaAUBgGY5nOW+U4oZtcHtK3R53+rix477o1+/5HxiGOX89LVWX93PbACBJUkhZUVmLgYNfeWX//gP3x9avH8HzvEaURJZjuStid1gAURQ8F7Oy8vR6/flhQ4f90rNnj30JCQmIr0tqI3RZ4yBc9FXrBGPyw6TaBqYCJgPmAlSvWFNhyJ8D7RCRmZmZ9FlaWufUJUs7aHX66MioyGCO44hzKWsFjmUkjmGBe0Z0uyudmefOZT/y6GPfb/h83YbbqQ1uOQDkBxO/bt36R9+fPfMFt9vTPDQ01OhhGFYURI5nJBEPg+V4CVJ3OBxOl8td4nLaM99IeX17SkrK93CWrkeq+OQDwBgasrOzzQAZcgHnz1/0p/a7oryctzkcfk67AzkERmfQu416vTUiIsoeEhJUDocxKiq8KMgU5LA6rcgHlMnaBqAAOED9XtVmKxjL2HHjxz+2ccPGB43+frFajTZco9FAYwAIPOwBXc0qtVq8mJVVGBIU8vukSZM2Jyc/sZthmJyaAvBGtcItBQAN7aZNm/b8osWLuzZv3iJJbTCoIHhcMMeIDFY/noPL5aosLS3NbtyoYfpjjz76S0pKyo+yOiy62s3JJsWfYRg/5APy8vIiYZPz8nIjfvl1b/yZs2fjzpw+bVZptMgZMCY/P1ar05GQTqv1/o4IQxAdlR430UJOp1OqsFpJosdT6bK3atW6tGGDBllg+SIiIvMaNUrKjoiIyJVNELQFqN9qE0PU3ykrKmswa/6cTr/+uq9tTk5Oo8DAwAgAQQkCWED4COXl5RXFxcXnRwwbvvWdd97ezDBM5q0kkW4ZAKDyDx8+fP+MmTOfPXL02MNhUZGhJH4XWU6AmSeOEcOwHO/Kzc1zaFT86f79X/zmxRf/9V1MTEwmsm5XQ7+cCCKq9ueff2565tz5JidPHo8vyC8MKSkuNJdXWPmAgACjv7+/FnG7WqNhRcGr5fGcr7VaKGGEaEPweDinw+EGy1deXm4LDAx2R4SFFIeGhmc3a9E0IzE+Kat7127p5hAznNCrhnQyUEMzMjIarPnkk06bNm1K5lk+Kiwi3B9RgxxpkMvCYvB4PJVFhYWZXR5+6PspU6ZsiYyMPHKreINbAgBJkiK2bfu22zsTxr3KMGxzk7+fycOxsKgMD/dOdvIcDoc9Py8v++meT/888KWXvm3btu1vDMPkVyd4eTUh1Ruzbdu3rRE6lpWWNSkqLQlgRNYsMaJOo9XodFody3Gc6BFE70cxVQQgtM01NaXo9T2rXvT4KqLJIzKVHpdU6ap0sgznZDipLCQw+BLC0MGDhyK2R0Io+2rglYEQuXPn7vbr1n3adfv337eJiIyMNej1BkmSiGmgL0EQhLKS4jy93m/fRx8tS2vbtu1PtyJKqHMASJIUs27d+h6w9wzDtjaZTHqYeVFkvcEcPC81JxQXF5e5nM4TU9+dtkX2fmHv/pZFkwUfXVZUFv9J2if3bPniywdLy0obV7oqQ3Q6ndZo0Gtxbob7y56KSqHLT/R6wr8WMgAM3/dLkiQianHYHS5Qv4IgZifE1z/37DPP/DxgwIBf5RzA1cCMVHZ0amrqw7PmfNAt0Bx4t9HPGCiKkkrJJgLIeE6MxOxdtHDR+i5dOu9hWRb+UJ296hQAkiTFLVy4sM/7s+e8EB0dncRp1UbOA73vXXksJzKCKLng3YeHRRw8cuTwEoZhTlSHbFnwwQzDNHzuhX69jx890t5ZWRkbEBAQqEEiSKPh3KAM4EeIIIw4BqaFvDiJ4T0yswtzU6d3eeWzBzh4rwMrQaOVlpQW+fn7ZSYnP7l35vTpcGBBSv3NnFGNlpmZ2e7J5B6vVbor4RyHgXpmGJKHIFcNENjsdkt5aemxaVPf/aRv3747WJaFlqmTV509GkmSEmfMeL/v3Hlz+zZo2DBOUnFa0Hm8199jOBUrWa3WSqu1In3gSwO/fOedt7/Ew6nOwYH/kJub23j16rUPzZk7p3dkZFS0f6DZrGIQQYskq4OzSiLHSJx3dYrI1YkMI6gkhhNZInT87lYKn0pAFETvBUG7cbwEG56VlVVis9kvLVowf/Njjz22PzIyEsmg6oCAiKXBuPHjn4Zv4O9vamAwGOCoVuUqgAW7w1GWm52dPnfuByvrEgR1AgCs/Bkz3u+/as3qF4OCguJ4lZpnvKQHw/LE8RJBgapUqsMzp8/8LDn5iWpRLDt39detW//gio9XPH769Ok2CQkJIR6WlHx5gSQLl/wDNtvHrkPo5Lg6ubOaLbLqfAckgsD4ZZ47l3fXXW2Ov/B8v+/79Xv+J4Zhsnz5f1kbxK5bt77bpMkTe2t1uhaBgYEwEyrCj3k1AetyuewlxcWH3hw9asvQoUO/qgtNcNOPiar9d6dOezk+Pj6e12s1ypUPh6+srKw0IT7u1ymTJ69q27btLyzL/i20g++wc+fu+5csXZR8/MTJ9nq9PtJg8teqJIn3VKXtRYbDfzd91TUT7M0cpdA+ksViqYCPcHeb1kffemvMVy1atNjn6+xSk7dz5+5O778/MzknN69jUJA5HH6BAFIU+k4GQfbFi0dlTbD9Zn2Cm3qU1OEbM3bMq/Hx8U2xUonN51gR4R7Mcm7u5cKO9923a/bsWcuqC2dkzzhh4cKFyampy3pVeoSG4eFhJjhYBPlyJqfKvF/Hk78Zod3C90rw6gsLi6x6ve73MaNHbR8wYMB31ZlAaMGMjIy7R4xIeeXSpawHQ8LCQ92SqOIEBqkSEiZSTbBi+UfLu3Tp/P3NRAc3DACEeuvWre89+d1JAwMDg5pyWrW2KsyTPf2zZ88WdLi3/Y9rVq9eYDKZjvvae6SCy4rKWoMexqoPDAyM0Wq1IEhYSWCI+cCrOi/8FgrrlpyaOosQXmlJycW7296zQ6Z9T1ZjEoy5ubltevV65sXS0uJuAAH4AuoYUp/AaXf89Mna1Wvatm37442mlW8IAEDpzp27H//3qDde12q0bdVajQaOGXH44IxzLHfu3Lm8x7t2/W7VqpULGYY55RvbQ3ts2/btI4MGvfpKQGBgC5INlCQeERzH17h285YI65acVBIZGq6qeE4oyMsv4lWq/RvWp6W1aNHiZ19VLtPJTR959PFXz549/WhMvZhIJQgQHZSXWcp5jtv57bfbFkVGRh66Ecaw1gCArcrOzm4zZOjQ8VkXL3VBnI+EDrJ4UNoiKwkFl3ML27RutWvrli0f+AqfOjxr167tOW78hH5hYWGNjUajRhL+KlFHuOjr3N0SodzmkyqdRUQLoH3tNtvvCxcv2ty9W7dvfbl/+Vm17tDh/tdKSkqSQ8JCg5TRAUBQmJ+X26rN3V9s+HzdMoZhztY2d3AjAGg4GLTXjp3PRUVGRCAUoy8IrqiwOL9du3t2LlmyGGr/qPKC5BtKGjd+/HNr16ztExUVlaDW6jQI3yTE85w3tPu/CgBfvIFhtNlstooKy5mUESM2pKSkIDS+Ih0MHyk3N/ee/i8O7J+Xn5McEGAGN4IQEbIjBVMF+flnnu3z7KaZ06evYVn2Qm1wXSsAID5fuHDhwHcmThrSqmXLaFES1SR/T7w1b6jXtEnjr5csXgyH7wqVRIU/ePDgQf/5+ps+9evXD2U5VkVIO1KuDw///y8AyIJC70Hl2bNnMoYMGfLlzOnT06oBgTEjI6MdHMOc3MtdzeZAs8wYEhAIglCZnv7HsXWffrYsOfkJhIc1LiypMQBgkzIzMzvdf3/HcTGxsW1VapW2iv1gRMZaYbUb9PojSxYv+qBt27aI86toXVn4jceMGfPSps1be0ZFR9cTGJG4ePAbBE70sh7w8KuJ7WuD6Boee83egRqe428L+kbeRx1c0MlFRYWUJENNgK8mCNy5c/djb4x84zWNVttGr9OZZS1AClShSVSc6qf//OeL92vjD9QIALIAm7Vp03acR/R0R3zOSSxPVDcnMh63x1VaWpK+ZtXaBR07dtimRKBy5X/3/Y4eEZERMRJWvhzikXUvU7fU67+RB1nNe26FkGt6aTV6rr4nIyAoLMyU1Xl1miAiLS2t28RJk18MDQvrwHOsFu0qcJoBgsL8goLWd921Ef4Ay7J/1ORia3Sh8NjHjBkz8rO0z59PTEyMAAcPdQ0AILFz7uzZ7Jkzpi8ZMGDAZ9V4s4ljxowZhvfGxyeEEVIDPp4c4iHcA4evqtGVXP2W5JWkbATx1u2LDCuInqo0H8ddWX3kbRf7q4GkJg+tumOgkmGQlUUedIXW9Jy4Bwm5kosX/3z7rTGfp6SkbPS16SDexo0f/9KmTZv7RURExAiioKWRE6KAzHPnzk+cMH7J0KFDN1RHuNVabUH1Hz58+JHn+/adFBIS2sK7ejmGEyWgQILdrxcd8/UPP3w33Rd1AM7ChQv7vj9r9ktx8QkNJFKC9ffMWk0f0NWOA9UMlkwUJdFut3ngeNJScbxHrVX/rXrH7XITetntqWTUKm8mFj9zrPcfKPmmnydrMfJPFc8TqLIch5JvwBj1/6juQUEHcYhEUeEZe09SK3hXVlbarBbLqdmzP4BNv4Lto+a0TZu2ExiWecDP3y8UfYwsS9YkklLW3Nzcn/b9sndWZGTkgetFBde9MEmSGvZ+ps/oM2fO9tYHGINA8+KTkICx2Wwuj8fzy8njxyYxDAOnr+pBg+RJS0vr8eZbY9+Ijo5uzKk1WpKbr9s4n/LkosNuF6wVloKoqOjCxk0aFyQmJp7RGwyOyPBwSaVSVSjBU1ZmQQKGqbBV8A67Xa/X6apyDQ6n011aZjFWuhxGq9WK+gPmcm6u1uVw+rtcLiJgp6tS7RE95G8AkqvSpXa5KnmXy8maTSZ/nV7v0RsMKBFXEhrXfdb0GqlNt5SXH96w/vMFvkQPFmVZUVm7u++9Z2JQcPA9Go3GINdWMpLECGVl5Tn33dt+1ccfr/jkelHBNS8KQty27dseY8e9/WaAKaAJw0kkE6fy0rHu8+fPpy9PXb4gOfmJrUomSukwRkRFtTLodX4gQbBO6pjVAwA8eXn5NoNBlz506NBfujz00J8mk+lMZGRkgVy/h2slvWA+rys6g+S/0SJRrH5tWVFZoMRLBrvdbrBarX5OpxtxOGOxlpNysvzcvCb4funSRZOlwhqCnwsLC/0OHj7kf+zYsaAWzZqrdXo9KoKrZFvNdVT7K4AAPIHgEX5MP3ViDsMwvymJHkRkqampz02bPuPVhISExigoEQWR5XgOUYWdY9mjM6bPXNylS+f/XoslvCoAZMKnSb/+L84oKSnp7OfvZ6BhGlK7YPqGDh2ybtKECUuVKKNE0csvv5KSV5D/pMlk8icXRpyGumH4qL1H+JOXm5f7RPfHf3jj9df3N2rUCN02CIFQo0crfZU9gFW9Boq/UwHQ45TfARJU8+J3AAX9N6p/ka1Dq3oMwzAo/0ZPI2+1WrUXL14k2qFf//71CwuLYmJjY/1l36DGWgDv97aWVU/00GJbysnExMSEVgoeXl6cUnFhQY5MEC1kWfbc1YB3LQAErlu3vu/gYUNGt2rZsr5HElma26+wWUjI98naNZMaNWr0qw8ySWp4xUcfvYyuTtEjsZTkqQsAKIV/MSvr/OhRo7eMHj3yP1iIsuCRS4fQIDAIrrqVTid+KIWP43B8lTmQf8bvIXC1IAj4G3oFoQEgfGgEEDP4AgBwLM4N7XMG53t36rTHPvr440bx8fF+ougNfWv5cufn5Z0dPWrkUt8UMPXPnnv+hTdgCtRqtR6+gJyJdKenn/pj88YtM6+lBaoFAF3F3Z7oPkOv17dXqTVGb5mV1/krt1gujR0zarGv10/t/qQpU143B5ibaXU6DdxwksStFfav+YgI8QFPeXnq0s3JycnfyHV4EDqpEKYCkwVCBUdOyvM89VOucAwFQYBgyQqHoOWGUGIK5PMBBBRc+A4/Ap8HMODfFGwAALqUULUDEJjHT5z0zJo1qyPj4xNYZZt6DYFAVLrD4TiwZtXKRdVwLN5ajNWrng8Lj2iIrip5oUkVFmtpeFjo9uoc9GvaJNiXGTPeH4pVXC+2Xr1KAcj1ll45XU5rw6SGP27YkDaBYZg/qeOnzBGcPZfZKSQkxF/wCLBJNbzP6x8Gu4jy8ZycHCp8rPxceSVGyGpZLwgCpoPgg0kzhmJlooOYmAEFEPA7CBwCpMKEsJUCJ/2BspDJWJpqBK+8UawWgAC0bGl6enr8gJcHdhIlUa/T6mr9QGAKsrOzC9u1a79pw+frlrAsizIz8gJVnJ2d3Qomt7is9HElQUT9tA9mz1rQt2/fahnCq2mAJk2btZih0Wq6IVFDGjVFCU4cU1pafmn8uHFz+vV7Ps2H8IlYuHDhi0uXLh0RHBoGmhgl4MTxu75oa3QEoUxtNvu5cWPH/qd//34bGYZBYQlUcZTCDitVP4RKHziEouwAUn4oBAz1TruHaEkWtf84D37GMVT4FBT4js9QmhrajIpO5AvwC1L+/e+uB/cfMAcEBuJ51PqZwMwWFxYemzhxwjJfYWLBTpkyre/GzZsGmc0BDSVGwhAFgo/S0tKS6Mio73744bupSuBcVQNAjcP2p7zx+oimzZolobwa4ZvEsCJ62RiR2Xno0P5xLMueUKCQ0MQv9O03TpSkthqNRkszXzdTjauQECmosFisl195+aVPZZuPlR8iCEI8z/PwwKGOsWqpICC06myu0hEkykDxhfcqv+jflMLHz3i6SrVfHQCoFoA/YB/46qvdftn7S0BoWFhV02iNYC8fBO1XVlaaHxkeuWv16pULY2Ji0CtAzBi0r8Viad2ydZtJkZGRD7Isa0RBjfzsiS/w0+7d01u0aPGtb+X135AoSVKTuITE2aGhoZ1h+/EBaNFGo+aRo0cvbdiw/oPu3bqB8auaigXCZ+DAV6Z+v2NHz7i4ONMN2LlrPgvcfG5uXvl997b/9tNPP1mKbhl55ccyDIMvaAHaYOEr+Os5XkpHsTrhE9OAh8yyLNUMVMvQ914VAJIklTocdmlEyhv3QQOYg4JuxA/wFr0ykufC+fNnq2P6qsLC96YPT0hMjBc8glY2v8QXMBr0W/ft+2WGLy9wBQDgVe7cufvJ/i/+a3J8QkIjD0r5RRY0rWS320myoZrVjwffQafXL73r7rYNBUZSyaFIbQB+rWMll9OJPtqTSxYvWdixYwfM3YGgYgVBqCevfthlKhS6qpXflef3BQTVGFT41GegoR/uj6p+pdqnQLuWCbBLklRx6lR6+MjRo6IKCwsjjUa/Wqt/habFQnSePX36SG7u5VEMw1Sl22m+Ji4hcRrVAiQiEERGo9MKR34/8pulrOQthmH2KQk7XwDEPfdCv5Fnzp75l1qvDYTwof5RvJB57tzFj1Z+PKd7t26f+9j+xA4d7h/rrHQ9rzHq/WhBaB0mdqTy8rL8YcOGfTpsyJA18vStSEEQknieh+MH1a9sr1LG8b6xvS/QlMKngqe/owMilMJXCpvyAr6rH+dR+gBlm7dsSXzj3/9udoNRwBXXDIcwNzf3QucHO3368ccrVihzL1QLzJr9wejomOj6svJmJIYTPIL7cstmLVZ+/PGKVcpq4ioAAEEZGRkdhw4dPqnCZr3XW+MnMTyDtnZRtNmsB08cOzaCZdmjStvvmyegNHFdLX+32y2oeNUfy5ctnYbSKXn1AwAN5dUPtXxFf53CpittPL2k6ngBXy1QtfolSSKjahS+wfXUvxIA6Cr2jJ84qcXnn38eGRUVxQqigHb4G348pCNJkmzg+48fPTJVWXSDiCAjI+O+J7o/OTEiMvJ+WjiC97jdbkd4WOiuZamp05X+A+wRbJubOn+zPpg10qj3iwftCy+eV3GMgvWb54M4kiX8z3++7hsSFhoGxo9kd2/iBn2fjMvprIypF/Prl1u3QuXB9oeirUqh/ikAfAWsdO6uRggpwaAEwfVWPz031QLVCRRhYNmOnTujR44aXd/P6K+vi4gIzrWKVwm5ly+flsmhK7J+aNB57oV+KSdOHO+LQUvUHxMEweOwO47PmztvjpIYUgIgcdiIEW/t3r2nV4A5MLhqqBoneTL+/PPcoYMHRickJOykrB+Ak5ub2/6xbt3e1+sN7XmVN/AmrzoEABJOjRo0+n7DhrS3UTNHAcAwTDiigGo8f1wBVct0Jfs6ekqB+YKAvofG+9Q3UKr6qwMATZ4sixkCWP18z97PtDmTkaG6UefPF1m0uthmteWHBAfv+uGH72b58DGmvXv3Pf3Iow+/dU+79o0U7KOEEL5HjyfXzJw+HfUCpMeQAAAPDKoD6r+krPRerZ9BqyJuJycVFxdXJCUm7FmWmjqxXr166H4lL0oWffLJmtcCwkJj0A9QNYj11gAAxBP1/iF4cPDw/kkHjSLkowKlZoEOka7O2asOCGT1y6qfev1KQCGMvBIAfwkdD4YCwNPxgU7RZaUlgSazGQUbN673FVfpDa85hue8vICcMq4ieWgN4aNdu03R6/X3IySnIkODSuuWLb/+9NNPqlL3AAAO8F+7du1Lk6dMHRYZWy9WlAQOzZUSI0l5+bn548a+lTpo0KBUZYGBJEktnkxOfg+VwagQYjARTVkger3gq4ZWED5AcGDg0bS0dVMCAwPRdQsBQOgAATh48PGIzSnrR505KjSlj6DUCHQCmFID4O8IfanjR2N+JcBwflwDgGIgAidLibXb7Xb29JkzQZOnTPFs/+67kObNm4P5uyHi56qPhxSNcKQQp7S0pLBZsxaEHVSWkKFoZOp77w1bvXrNv6Kjo8MVZsBls1l/e2/q1Lk9evRAQ4mxCtRDAAAgAElEQVQNAMAqCpg7b96o+R8u6F+/fn0Twj/04FVWOkWtWpu+cMH8iUoOmvYFTJw0cbwoiY15FImgOgTNHHVc0g3EV1gseXIU8LmsBSAAkD6U96+W/1dy+8Qb9A58pGQR3oMIQkkXQ5j0d9WFfFT4gs1mE8+fv6BLTz/V5NiJk2WYSn7kyFFN+h/pbIOERH1dqfy/AYH0F5AyMJIjMBgMe1YsS53bqFGjg5TkgXb+Zvv2PhPGjx+qVmsa0+GWiCDOnT17RuYRCJMLAMRhwtVrgwaNuZB1savJZFJhLh8A4LDbXHFx9fctXrjwbR/midC+y1asHBZgDohFqIj+PWWpVw0XeI0OgyOo0WhPj3v7rQ3JycloucYgZprjp4KCzcYX5fHJODcfzUC5fhSI0MQRFTihgSVJCrgK4UOvFeDD+60jXk9p+OVXX0UbDQaAiQkwmzF6Rh4a+dds4hrdZC0OImZAZDFfSnC5nBlvjhqzrF+/57dgjpJ8Gr/MzMwOr746aAxMutFoJGaA1g0+9dSTaXPmzJmPcBAAaIK5vC++9NIkoIXVqHgIH06g1WYtearHU1+9N3XKNJ+cf8P+/V+cdPT48Sf9/P1M0LWQRh0TQFWPxEuDlrlFkcl7snu3/Q907HiiYcOGGBOHiZ8kfRsWFuax2+2heXl50GjkVVxcTPLyeGVn5wScSk9PMPn7FaWkpGzleR4AgRmB8PClzPD5qn5lpg9dv0Usy5bs2LmzLTx8f39/DcrCbqTwoxZyr+5Q4th1f/yxLXPmzPlYHkoBURhyc3ObjR8/YeCh337r5W80mWRepkprrPv0k3diYmL+AABaf7N9+31j3hz7lr/ZH7QqWrAlDCmosFryUkaMuML+K/kCgi4yocPrd9dl+Ke8W+r5VlZWihaLxWYKMJWrOFV5bP3YvzlWDoed0Nd2u11dbrFU8f4o3SotLXW+/vrwr0ePGgUtAgAkyT4ENQfQEDSv7xvv47SU4EE0Ytm8ZUu7d6dOS0TCTM4mkoV2k0KtzdsJzZuUFL9d7sU4JVdB4dpj5s6b99rqNWueMZrMEV5+hjjvnooKy8HNGzdOJGZDkqR7pr733rPr12942Ww2B9IkAiVgpk2dNr1Ll85fK+yLadu2b3uhTMxk8m/IMbyKDmmozZXX9lhlKRmuDYTKtc7BSl4TgeJNCM7lrHQlJMYd/3Lr1nno0ZeZxMaKLCJyGCB9aEaQOn7KEFIJgJLxEyc9+dVXX4UGBAQoi0huJwCYyspKF8eyh+d+MO8jmSanO6AErV279qm5H344RG80JsBBhxYAH2CxVJye8M7bH/Tt23c7AHDfwIGvvLrn571PR0ZGBKCCBwc6XU4xwM/0865dO0b6sH/E/s+cNfsNlIiT+d11E+HUFhNXO15RGo5Bj2TYo4jRrBMmTFjdv3+/L2QvvxnDMHGyBsDKp76AsppImeyBnqPFHvnQAD169nzk3Jmz9WSH73avfnL/KAItyM87PXHC+NUDBgxAfQSSdACvf0ZGxr0vD3x1pMvtakrrEGBOiwryc3r27r1q5vTpGwCAB59MTh4NBxBIpvV7NrvDFRMd9f3X27aNUtaUwWkcOPCVSb/u398rODgYD+22Ir6GKPH2BEheAIii6MzKysq8nH1pIsMw5wRBaMzzfEvZB4DA9ddw/ij/j1OC4EGO/7LVamV79u7dSU7w0Mu67c8CAs3Jycl/+eWXPps0YcKnsoOKriGYv/qPP/7E5Nz8/OZKRxCjd++7996tq1atXMOWFpY+1PHhTuMNBkMnsHnEB2A5xmKx2O+5++6Nq1atRCFBVcPhpUuXWj7evftSnU5/tzz18rbfdE1BQMe1I4396ZrVG3v27LleXv2tMXxK6fxdQ/3T/gCqAVCEUrF5y5bGs2bPSWBZFtvVkJLXGl5XnR4GAJSUlJCij02fb1hpDjEXlRWVkQplc4jZ+HSvXqMuXMjqQAGA34NdlRf3R+y5c+ee6Phgp+mxsbHNJI7UxBEetbystHjEiOGrhg0ZgnCB0IaU/o1PSFjmQzPW6U3V0cmIFkAq2Wa1Hv3jj/TJIEsYholnGAbqH9+puqf1hMrYX5ntw6kAAFQbo+rYufyjj5osXryknr+/v+5GKn6vdo+U6atNAw38gJLi4n2HDx2cy/N8gSAIZEh1YGCgYdjw4QN/3vsLGkgM1ElHWM3z/KGtWzYvZI8fP/5s54cenkqrfxD+wQfIz88/t2bVmmkdO3b4khZ/0CrUzl0emd+mdet6N1jlWkfyve5pCADy8vLLX3jhhS/emzoF/fOooGnAMExThfqniR+Ys6sBgK5+mABLTk5O4MTJkxscPHjIT+EA1okGUM4QqElURZNDhw4eyDh39uy70dHRJ0tLSxMgfEEQ/BcuXNhr1Zq1nekcB+9ENZEpLCg48s22bYvZHTt+fK7Pc89OAQAULUZMfl7eH99/t32MTwKoqlS8RgC4iU5fFDLUqqD0L4aMIoOUkRUVFp75+ac9CyIjIzGYCUKmzh/oZFrzRyt8qwMAzke9fxR4uFDgMWTosHiHyxEoU7116gDWpnkGx2o0WuHAvl8zjh09Ckbwl9LS0gYmkymc53n/Xbt3dxox4vUHkBkUPJjBILEcrxLST506++sve2ez69ate+n1lDfGAgByKxMcQ7GgIP/Y74cPDwkICDhU9UQlKWLqe++N8uWYq1uLuDDMDriRwhBs/iVyLFvThlF8lne6gEjJKDKAGmVkXR975MDSJUtmyhPH6zEMg9AP3yF0CJwQQNX4AMrRrXCoXKjuQeoc6n/atPci5PK3OhX+dfWazwFUA0Cgn3z26aLu3bqhZqJ+RUVFM39/f2N6evpdyT163ocID3txkAHdvEqAxgBg2KVLlw6XK0iwRRvxAdxut8gyzP4D+/cN8yn+jOvf/8X3Dv3225Mo+75a7R8SiSLCb7miqCaqTHlftVkB9H0eTItF36JcDYsI4PiJ45f+++03qx+4/35M3sALVTKJDMNE1gAAytpCqH7k90vtdpse9X2KAs87AgCXLl669PqIEetQMCsIQkxpafl9ISFB2Dq3VfOWrZLCw8NDsFkFKrsxWgYd3ajwYqdPnzkRAx7Dw8PBAhIAOF1OSeYABvvUoCfec8+9C5yVzs6y83PVFGcdVwXXamFQ6jgpKfHXJYsWpcIuyqljsg+hTP5U1+RRXQKIrH55o4qKnJychu073Nc4JibG+A+xf397Fj4c/xZUSrtcjnsNBr8wm80WeU/7e5uYTKYAXwCgpZ998803527btu3Z4NCwcOx6hT53m81WiSTQl1u3DvEBQMPmLVst1Wm1HTVaraqucty1km4NDoYJw3DKEcOGbh42bNgqecNnCB79A1j9yBHQgo9r5QDwaQAA7fSx7di58+Huycmx997bQeeuxL4RpO+hThzAGtxatYfQUPDedu22rVq1cp0gCPVdLkcbg8Ev2m63J97f8cFQvUEfQsYaY3sGucZzyuRJq64AAM4OEFRUWGxNGzfds2FDmi8J1LBJk6afGP38WgMAitrzG732W/E+CRoMaezUpalrW7VqDt4fryhBEKLlOkJlKtgXANT204oGAADsGhosS5/v26/XyZMnk8xmsxoDoutyESCdjklrtW2jo53EDZISv966ZQvIoFir1drZaDSaHA5H7GNdH4/yCJ4AorEw0Y3jCXk0YtjwlezQ4cOX79qx43FoACoNi8XikCtHJvuwgP8TAEAJe4d72/8y/b33FgcGBqI/LwB2EWZAAQCaLoYzSKMAygvgUVAAUPWfBVPQtHmr541GfdXWL3W1+qnw6SDsWoKAjKOVF+1HMHNWq7WjEgCV7kozCCs0+arrCgD/lPqrbgo4mdjNoJKFkRx2R8GokSPX9O/fDwUkEGCEIAioHgIAQJPSWgAI/FoAoOof5M/lI8eORT7f5/lOwaGhIYq5/nWi/pWjcpRTUmuqIsHc1o+tt/Prbds+QgTAsmxLAIBlWf+OD3RqBgCwGOLNiEwVAIYP23xVDXA1E9CiVatVoIHVajUdXXrNB1DXzmB108BpGAiPVPC4BZfTdezY0d/HMgyTITt/YYIgkH5+BQCgAajwq9MAePY0+YP0b3HaZ2n3vvXOuFaxsfX96hoA+LCbmXROAfDVl1+usdvtDQEAPz8/vc1mC+na7YkmBAAaFY8PuQIASieQos1ut7vkDuAx1TmBarW6nV6vBwXK09Ek1SHVKxgvtVzbULD683n5WJrbriZ0JEWscqJjvkzbwukzKQCA1Q8tQAEALQBw0GygMv6n1b2w/9Z3p057HL3+ivj/Hw0B6f2TDF9RUUWrFq3gt31WUVGBHEVLjmP9JYkxd3ygU5LGqA/FZDc8QTT6wAcYM+bNT33DQHJOFF5ER0dVFwUkdnro4QUlJSUd/f394UVzkihxV2PsCAA4llHVUXXUdZwkQv5knjuX8eOunXMaNWqEXccgTNo4ChD4gx2Tk0D4jpXvCwBaTEpXP/YphB/heL5vvxfhANY1/VtTNX+142jvZO9eT38/e9YszEuAE9iUaoD2HTokmUzmULITCZpGeRWZ7Dbr/VmfswsWLHhr3vwFQ+RhxGTaFQCAIoMD+/cNUk7+Qiq49zN9xp08ceIpMrdWEtV0Tt3N3kRN33+NXUAwLLEyICBg554fd70rJ37QRIIvzAwgUz0UAMC/KR2s1ACU26CpX6j/s9AacfGJA6Kio2LkTqE7YvWTi2BZ6cKFC5bRI//9y8iRI3+w261JDMPWNxiMKpvN5nfXXW0bQF5E+8tMIACwfFnqx4QKfnPMW2+ho9Sb3EFcK0mlxcW///FHOngAZStYxLjx44esXbN2QHxCAmJqFdn38Q4oCMFDQAfTxIkTPhs2ZMhKOXSD8FEjSADA8zzCPwgbX/iZloD5AgCWBpU1WP0YuFiyf//+lj17P/NUUlIS/Ik7Iv73+g3eTqHz589bP5w377/PPNP7rNVqTWRZtp7RaBRzcnK0HR/sVB8zhDxuTLTz5gJABR/Yf2h1VTKoSdOmcRQAKKLIz887+fOePW8oZ835zA6oJwgC/IA6aXioqQa4ynFViZ9DBw+8FRgYiO3nwOpB/UO4vgCA6qdkEAUFzQbifR4kfeQmSjTDeIYNH94LaVV/f5P2VjiAN3r/FAAHDx10Hjl8eE/Tpk1z7XYbSD2z0WjkduzcGTh82IigsIjwECUAkDvYtfPHj9lDhw71eLRr13ebNWveCNuT0AtBmdHyZSumKvvIaDq44wMPTL+nXfu4OwQAJO2raF9HBxFidggYzh4pFZedQGgButopGUR6ChQVQdT7R+k3Ko+xXzHTqvVdgzVaTTO69Wtdxf83Knj6PiUAMs+cORkVFVWEeQQUAMs/+ih48eIlkWaz2UgAwLNkxPiFCxdO/HboYCopCMEA6ISkpHaUCkYiBcMG/50yfKWyI8inIAQaA550ncTBN/ogQPvS4RWff/bpyuTk5HUy9YuOITrEifQKCIIANozW/9FogDaVUGoYDwg6vlwG0oWKioqgLo89NkwSpbA7DQDEDAiSVFBYUP7T7l0ZqAOQJAnXzkADjHg9xbznp5/i6P6NaPdDss/hsB/4fvv2T9jLly93pH1karWmauNCzJbp3LnT1qWLF6MnoGqfOpSEder80Id0QuU/DQCw1yzLVh4+dPCcXBAB7x8vAOBvzSKKSADaAcLHd2U3MN6LwhHQv/D+bZs3b7l/+oyZnbU6bcidkgBShoBWawUTGhqa+9UXX9DGEIC4HADo0bNn9LlzmZHKymXqLO/a8cNW5P5bPPpo17F5BflPK+0bqMWIsHDMAPalg6siAdiVf7gqiIR+mKgJ4uqjj5a9ZzKZ4LGD34fzh+8AAUybrx8AwVMQ4BhQv7S8GwAA+4dz8fPnz3941Zq1Hf39TcY7yf7TCODy5cvSiy++KEyZOCHLZrcZWJYrNhgMpCfi0a5dwwoLi4LRu+ANGLycwT13340m0a8AALIDyJ6f976Mbd3pfFvYVJPJ9NOeH3f5DoSKmDHj/dcWLVk8BB4xLSK5URV+k+/DgGYRm1PJ3v8KufAD6h22HoKFUMmgR4UZwN8gfPgJ+KK9APRyHHKbFQZRmUe8nvLs/v37k7R/zRT+R82e8plBoADApIkTy/71r36Sy+kgO5kbDUb70ePH9SNGpOgUlUteABTk5yQnJ2+aM2fOtwAA2fETbd5yQog4ghjJBi7AdwMINIampaX1mjR5ypiQ0NAGskq87gPx0px1Pimc2DO3u/LP96ZPT+3erRvq4rFyIXBlype2itMRrxA+aYpVcAHK7B9Kv8nk0aKikrhXXnvlmaysixHyKrpj4n9cCPo3wOxNmzpV6tLl4XKX04GVXqHV6bVbt2zRzZ7zgVqt1qrpcArvMOmyjPHj3knFRpYAANm9S+70SeR5nlChqKezO+wXhw4aNF85e56OIaGzBKhqud5KJlVCpH/wekfW6u+E/EHtwrwPPvggISHhIBg7n85h2h5ONQDNCSBEVIKEhH/yF7z/bAyQ3PPzz09Omjj5AafT4X8nagCbzSrFxye4F8yfVxkVHe2SAQAHUPpg7jxmzdpPdP5+JgUAJI/Naju+8uMV07BbOwAQkpGR0eKZPn2mGY1+d1MAIFRAVq1nr6fRcHDFQGg4gilvvPHWnxmnuyrHkFxLdHWdFILzh89Db1y3bo/umDB+/FyTyYTkD20dV07zpHP+VMgKyoQQSCKaGVTOCIDzB+Hn4bi0z9JeeX/OB80NRr3pTnMAcf8AQOcHO3mmT59GW8IYrU5fCSCMHz9Rt/unPSq9wY+V08vK5tCpMTExpwAAU3Z2dhwEevbs+W5+/n4B1NGBH4Ck0Ny5s68YLIRNI+EHfJb2+Stmc0A0y1Y7kLFWS/kGDkasK1ptFVkjhg5dO2jQIBRCoG0cLzrjl3T9yDae+gJ0yjcFgHK4JM39w/bDlES+O3XaK598+lnDiIhw2mlctzrsBm6cvoXMTigrF0eNGikOHPiy3WazkWvD6r948RI3dPhwfU5ODkcBQEvHujza5T9LFy9GoWwOHRETDIEuXrJ4YGJSUgx1BNFUYfL3PzV79qypvgMi4Ae8N+N90iBaUz/gJu61ureS+YG4vgULPny/RYsWCP+g/vGik0AAABoJkIGPcngI+w8A0Omi+Bst/ERjRRFmCSOv/trgIf1pBZDc/n3HAAD236A3SHPnzJHatWtrt1gsZB8DvcHI7tr1ozT27bE8r1JJKp2WTHzBVBEwgJMnTVydkpKCcXFF5GZA8aampvadJk+ZxOYD8u+FyzmXs9+dMmnpgAEDsCdd1abPaCvv9NDD72EvgYCAADBpt/PBkPAP4QzmF329bRu6fsh4dgVS8DMt/KRagJJA6JwBT0A5ALwNdX/g/nGP+K7fv39/9wEDXn46MDgIZgPnu533eM31QlZzQYGY1CCJ+WbbNtFiKSfXxvMsZzSahHnz5vNz589jYuLjvFQ9mfkgKEfEYOCXhQKAzJcbNGToaIvF8qDBYCA99mRnysJCG/YC3LplyxXDhuE8jhs//tX16zcMioyMDGFZ705gt+lF1L+CrYT6h9CUnjw1BUotgBWPLwoAOhgCfkOZvPIpAMI3b97St9+L/ZMVBaB3Qt7DK08Bo3PKxUmTJjr69OmjoQBQqzRsuaWc6f7UU6zg8bBag4Hs84BNPsCXoG5w4YIFs+nAL+WgyLjBgwe/8cu+fc8hd0z9ALBsx4+fOHb098NTfbqEyIDo7t2fnBQQGNhKdh5v1wohewY47I5Tu3/cOTkwMPCA7PwpAUCneVEtQAs+sPKVAABwof6LZACg9duO0ur3ps8YC/uPporbrOGuu46g/rUaLfP99u2iVqdlHXabxHEqxs/PKB08eIh9oHMn1z1t7zG4RYGlu4hUOyaOfhI1Ays+/niIVqvDGFZiBmgTwdtj30pNSUnBJkSkUVQ2EQQ0u3f/9HxoeFjYbXxIZHaxYt8CJH9oMyfdDUQ5zo3y/WSXDzRPyqVh1AGE7wDHD5O9oUncgiA0e+DBzmMrK10N5fDvloP7GrUOvoCQcnNzpRHDhjGjRo0UrFav84eXn5+RG/jqq2W7d+8xR0ZGcnRwlyBKf5sQhuOVGoCYAXlULEa+E4cCqtbtrnTarLYd6adOvOtTH0B2Ee8/oP/b8fHxaLhUTsq4Lopv9ADqzb4x8o1Phg0ZAvYPQiNmS34hJFLuGVQFAEEQ0DMHDoDUCcjHI/OHCAIAAAegO3bs5IMv9Ov3usnkF3W77H9NAQDvv6SoWNiz+0cmIiKC2H+6+vPy8rj7Oj7AhkeEc3RbX5ZnSPhnNgV8tXr1yir1fwUA6IrGsOjTGRnP6g2GKjMAcuR8Zua55ctWzPbdmxZDprC5RIA54GGO4/Cgb/VKqdowec3qtbMUY1HIpC4FAJRTxGj7N4SO8neYAISDtP6PagAIH1+BS5cu7T93/oLnZPX/t2d1o+C92feRrqeSEqlBo0aeL7ZsZm02CzF7ksSLWP2rVq0SJ06ezMXFxXPIEiJXhpFyFdaK8+3uvucT3wHTVwgLnADm/wweOvgNbEVG96sn8XaFtby6/WdQI1BaWto5MipqVvsO9zXyuN01G5Zw453DZOcQuWQN84Np8od2+uJ5YPVTYoQ2gMIHCBYEIULWAIgAqM8A6hcmAKYEJi7i6V69pvz5Z8Zd1+qBvK4w5Y5ljFCtZZ3/VU8NABw6fMjusts1DruDEyU3kaFGa5DUKhWbkNSACQwKZDQaDYd6TLkK2HXuzJnDf5xIn2QOMV+xydffViuyg3EJiTO8M+c5AxCED+A4zv1HevqFr778z0zlzACqOR559PFxf2ak96np7likjl/2qWtZMUyaIOQumOmywKD+6Q4eFAAAAZlep6CGsfpRJQxNQLZ5k5808ucYHoH6P0QBDaNi6k2LjY3FKBmSRbuusH0OoAWxZAuvOqqKhvDPn8+UXnttkDBl0kQGqh9h399Wf/36HPZpRGEnHrHTbs/TabVfX3fDCFmYlBN4MyExMeIqWmCW75YxGBufnPzUm9hZvCajYzzQALWsGKbVL7SzVU7+YJdyCgCq0iF8ePZkcSjSwwAAahlp/A8A4FjYfpR+QwPwP//yS/LjT3R/GTMQlDMTbgQEtQT3NT8CtK+fnz+T9tmntsioKL3L6SLoQhTgqXQzzVq2ZLH6VRoNWVqcd7c294kTJ498sWXrfOW0N/pB1SKbaoHAwMBOer1Br8iBe7CH3fx5H86pxhcgmxp/nrb+Rew0dr06gRtpAVcOQ3A6HIMYhkHXr5LwobP9IFTqBNJKH3j/yt5AeiyAgoIX7MQF+x/a6aGH31LwIbVe/bUFSk2PLyosFMa+NUYaOHAgZ7NZiN3nOY6FiObNm8+sWrWKMZoDZOGTXgzldjFYtH/bQPJqAAgZN378CAgzOiY6WpIklIuTY5F8adWy+fZPP/3Ed0y5MSMjo92//jVgdIWtouNN2c6rPxES/2edP384N/fy6wr2j1b0+JoBuvrh8FHnj9YJUm1hFQThEs/z8CUQCTQPDA4e762RFNH99I+SP7AgPOfN+Tdp0ljavGEjo9KomUqXvcr2FxcVMa+89hoD3h9b0hDt6p3c6kZx79QpUxbVdts4shdAh/s7jqW+gLwhobx7V8VpOZ/su1kBmSE4+d13+zZq1LjRjdrPq8nfp5plqmyz6SAHfFcOfqb5ANh6Sv748v/QErD/ED7sP7N02bIeCz/88IWgkLBIb7XZPwsAXBNIH5fdwcydN0/s+tijZPV7/Qq1RFf/4qVLGd/Qz+F0lmlV6i2bNm1YTMbCKjb3vqYJkH0BsjnxhImTRjRv2TLJU+nCjpTE5sAJCwoK2rs+bd37kZGR2DWcVKHIew8kDR48eNB33+/oAVNwMzbUFwi09v/dyZOWDRo0aLWcscNh1JmjYIDjRzOBAEC4TP7Q2cBKX4HafzCA4c891/e102dPPyTT4f+o+qcjcrH6ZdKHocKnjt/Bg4dEmASVRk1oX7KXgHfQ141vHUuFmZ2d3aZf/xcnlZaU3evnbzRTM0DLsN4cNXrV6NEjV/oMkiam4Pnn+w0RRLFLgNmE1uw6WUkAwNFjx7Lkreu2ykMRfXcGp1M+4BjC/kPo0ABK778q/pfVP5w/98+//NJp7FtvP+v2uBvUxJG9lu2+mUZPnJcKn8b8GzesJyBXOn4I+/7975HCpi2beWxI5UbGB6pflJjSsvLiJo2bbF3w4bwlyo0+/raornUTKBZZt279c9NnzhiqSPuStyBHgNjys8/S/rZFOWjlEydOPHL/A51GN2rUsJlWqzXc7GZJMijFgoKC8/L4Ogx+QM7ea/C814S9j8BGQsC0LAzCpxqAFoBQ7x/8/2We5/PBEC5cuPCVj1auao+ZyTfT+k6rn6prYq2Jw0eFj2pfi6VC+nXvz5KS8cM5QPps3LjRMXL0aH2V8OWZTB63x+V0On77cN6CRV26dMbGEHhO1b6uqeLoFvLVFIuQ4kJkl2AK9vy4a0Y1+9sTf+D92XNeoPvb30g8rbxqMFvllvI/VixbPrtjxw7fyvabCF55nAwCavsBAOoDwBmklLFNFj4ppT527OQ9I0e+0bekrKxpTcvcrvZQbxYAOC/sfl5uLrNq5Spi9y2WchExP/6GdC/MHkgfk8lfVv1VXdiS3WbPb3fP3RuWL1+++Fpbx5NFcz1E0t1BRowYNjI4NLQVrRWg7ysqKCxo3qLFf7Zs3vihspFUXrGJ48aP7792zdo+6D2U33vdz7zqgxVEptxiSb8BAJD2cLkUDL4BWEKsCth9JH7ix73zznNbtn75WFRUpH9dVDrfjAkASZZfkC9OeGccse9Wq41oOZYVOOr43d2uHQPH0BhkxuRHsrE3urQFQXBZrdZftmzaOL1Ro0ZXsH7VPXxYEWEAABOFSURBVNcaCQNdwcgRHDvyW8/Q8Ajs2UebI4kpAEO4cMGixdi1widbCHVMnMJ16zf0aN2qVeTNgABaR7GB5UZlgcpVNABWO1g/2gJOCz/B/SMBhFf9L774ouPIUW/2oZ2/15p5cL0Fc7N/h/q/mJUlymwfr/T4cW7q9aPYIzYhkcH+TnSDD1T8YEuYQa8NXjZlykQ8n6rM7Q2ZAPomWaW2btqsxTs6g/5BnVZnUpBDGMdtLcjP/+3LL7amtmjRYofPzqIAQbPnXuj38oH9+5PBK9ANDWv7sGgUIDufy5UdS9UAgPoByuJQmiom5BFW/uR3pz354YIPH2rerFkkwlZkmv6p0I+u/KeefFL48MP5DLh+t6dSguqnK/+7738QU1JS2KCgYF6Ut2njRIns74jNpSPCo7ft+OG/f9PGNwUAWZ0bKd0bl5DQUs78kfPS7hz4A6tXfrw0ISFhj3KXanlnsiaDBw8egPCwCgQ31lpOqE15H9wDNAT1vUGFM0j5ABwCDUC2mz927GTrye9O6v7f7dvvQcWPnMSqkVmsLXCvdTxlRGEy8vNyRdLhM2lilfCR5sULTh9CvkFDBpNooGoPYkxk5XjJ5XLZkbLfueP7ucrQ/HrXWiMToNAEEVOmTOuzaPHCoWgnp/6AKJGhAkJxYWHR/fff998PP5yfajKZjiuFAxBYLJaWLw989dXvfvj+UZgDsklTLTacoLkAdAINHTpknTwf//R1QEAnfiAqiM/IyGi+ctWqrl9/89/moijEhEdEGBXz/m4rAKi3L3gE9uKlLPHZ3s+Qle/2eDhU+CgTPXl5eRLYvrNnzjIhIcHgZJSyJTH/kkWLPrwa43fTGkABgobPvdBvuK86R5cuQrKyMstleRMj1OmdUnroFARjxozpu+3rb7rG1q8fr1KpNLWdtweB5+XmZr415s31gwYNwhjYTKXG8TFdKOcOxQTt8RMnPvVn+h9t8woKYo1Go59Op0OfQJU/UxOn+HorqjZ/h0lzOB1SaUkpQ1c+hI9YHw4fJXsQAQx4+RUx/dQpHsInc5JkAGAPoIKCgqxnn31m3czp01G4W7W3Q02upVYaQDYFpHJoxIiUV/ILCruB6FF4zWR/npzsnJyujz3y1fLlyzGl809fECDdOmPG+08vXrqkV3R0dJJMukDX1fh64O0WFRZm9ny6x3b0uMmtXOBIaQoYDmDQ3r37muzavbP5N19/06GstCxJbzSYMTpF6cPID6rGn12TB3u1Y6jKh/AR5xcWFkrT3n0X3r5EhU/fiywfyJ5OD3eRLl28yEaERXJk+LZcS4FzWMorShs0SNqyZfPGxb7PuibXeUM3jdDwq6++6jJq9JuvoyAUTqE3Z+Ht1qGRwaDBgzbMnD4d+9ldoaZl+xybmpraberUac8Hh4YkBgSYMcdPVRsnDCCwWKz5/n6GSw0bNMh65JEuRxMTGxacO3c6bM+en5qeO38enbFxoqfS5B9gDlSrNbp/srtXkQGVyktLpdLyMhrnowurqriDOnx4lj17P+M5ePCAKi4unpUE7wLB5pyw+zabzeZ2uw+uWbVykbJvoyaCp8fcEABkTRCRmpra+4O583qHhYffLXKsAduHQoD4O8/zzvRTpy4907vX9uXLl6/FrB0fnwDRQfiJEyc6jBr1Zo/zWRfah4SExMAk1GT/PXjM3q3KJewJ5LbbHLaiooIKi9Uqmfz82KDgIK1Gq9Nq1GoDxmJRwf+TIR4dwFVeVsY0bdZMSF2ymAfDh6JOpHWpUBDqQe0nP92LPXvmNAumjxTcytvG0ho/h8NxYMH8BR9dj+27FiBuGAAyCGJSU1N7YBUjMkAFkVK1YtIGGktgDubMmZOG3j26+4jCTgdik8OFixc/smnTpmSVSp0YHBysp9NKrqaeAQBsVUxLnnEcchSK8wKMNw302qym6xxLKnnVKpU0eNAg9vWU1/EzKeikzh7N7cPhGzp8hHDs2DEVKnur9l6Qbw8VvkiJr1jx8crk5Ce21yTerzMn0PdEIIkWLlzYZ8KkKb2aNWvahGVZPR2jBm2A1Qk1fW+7trsmTBi/GR28vgQO6gox227duvUPf75+3WN//pmRZDKbIwx6vQFzi6pT21cpKMFHkhxubfyJOhTyFafC7XMcx8LWO+wOEat+yODBXNfHHiX2ntbyE40pF3Yg1Ht32lQW3n5wUChP92KWx8eS6t6cnJyzE8e/8/HQoUOxa3jV9JYbuY+b0gCK1UYoX6zg0NCwJCUIZE0hFBcWFZtMAb/Nnz9/o1zJm+/jHMIkBOTm5jbetGnTfZ9+mvZgYVFh03qx9TCEgvb3K++xTq79Rh5aTd4DdY/jUMOH9u2BLw3g+/R5jjRuQOWLooe0cQmCJKKbB2ofJA/6+QAWInye+WtDbtS4uT220tKS0ykjRmxISUkB01crj7+6666Th0idOoBgzarVXRKTGjSWGAmJl6p2MVpZbLNVHJ80ccK3AwYM+M7XOZTBAm0QmpmZ2TQ1NbXL8o9W3p+YkBCr1WkDlba8mpupk3upiXCvcYy8X6EkWcrKmDOZ5xzj3h6nGfjSAFdsbKwWjp4g0iwBwwAEaOSEp4+SruUrVqDAg0PdH9nAU1b5EsMSP+fixYt/vv3WmM/rSvjEobzJG656uwyCaJiDmTPfT/b6BH+ZA69wGVGSRHvWhQs5TZu2+HnHD/+lzuEV6Ur5XCBukMVL7NDh/ucKiwvv5lk+ymQOwNhzNUae0gIVn3uo7T1VOQo38yxgejwejwQHDy+o+y+2bHIyDKungofAKbNHVb7b45Huve8+FlwAwjxsw0v8GSId8n+i9rMvXjw6adLE9UOHDv2mLlb+LXOO4BOkpqZ2R3SAENHXjuNBqTUaKf9yTq5e77dv6tSp/01OfuJX0qvOsqjw9QUVgFA/Jyen8YcffnjvTz/vbVdhtdfjeTZEp9OhaYe8FOaIhqK1BcI15a/wLZTXJ7kqXSQrh5efyeR+pncv17/69TNGRITbrFa7QSl0+kaYAfy8cePGyrffGa836HSMf3Aww7pFjq56gBtObXmZpVyUhKMzp8/87GYdvltmAnxPjM7htLS0R96ZMLF3oDnwbp1eZ6TagIaJLMsKFRZrRWFB3h9Dhw/b96++fXcnJCRgKmehL4WsqO0PwpZoq1atuffH3btalpSUxZeVW0w8z5p5nteq1WoGo+54nkOCyrt8lKGAXNh6vZWuuMYqENEIw+VyYSglqThmWdZjNpuZkJAQVY+nnrI++0wvNYYz4G8Y1iBJLG09Ix8pEzsimjfT0tIkVPJEREZWNXGgkodcM8Niv2OhvLysWBSkA4sWLlrfpUtntHNXtedf7x5q+vc6XSU+qzfkq6++emDR4mXdLlw41zEiIjIMfgHCO9psgpsk+/peuFASHRVzasSIobt79uy5x2QyYUBTsU+FD13lyPKB3g3fu3df0vGTx5odPngotKSsNC4rKys0Py/fT28wBvj7++kNBgOv1mhYUfBWiEsSNmQh3//2fGCeABz64niewfvcbrfkdDoFi8WirqysrIiMjFTFxMSo69erx7Zu06aidetWjtatWqLriPEIopvO6PF+DquHBpCdPBF9e2lpn7Mo3wYJJMf3GPSIqeqsihEhfIypdRQWFGS3atV674zp09Y3atTo6LWqemoq7NumARTqGONnGk+ZMrXbxs2bn2jZokUiwzJ+siCIg4hFyatUYmlxablH8OQ1btTgaO9ez+7r1+95DHwCEGjeXln9Sz+CFH9aLJbQoqKi0D9On47LuXgx+GL25bhf9+5N+DPjz3CL1Uoqhc0BAcgCMmazmaxKlYpXMwxLm0cYj8fDOhxOu8vlJIuisKiQXF9MdD13QkKcvV279lKDpCR9TEx0fsMGDeoFBwdZMIkLxyiFrnzIHMsb9Aa9CB8gddkyduePuySEd34mf1ajJ723RO1LDMadMqKa5Tx2h8N+9szZM8OHD90us6jV5jluRujK994yDaAAAUI4QvvOmvNBN1OAqUmAKYB0HKHfANlM8iA4BtpAqHS77ZaysjyNRnt6ztw5P3Tv1g0bV6JvD/4BbfnGW5TNH/g3NAPdDFJfVlQWYXPZQjiOCywoKPY/fvxYcMaZM+ElxYVRl3NztS6Hk6xal8tFln1YRIQ2JDgYEzetDRISnS1btzIEBpqJ6sD4VXnwooaRp6dgIKOPEMj58KJmAD+vWrXaMGv2HFat0QgAndbPSO6X86BrExv1ktY7jLutLC4uLWIk8ciE8eO+6tu3727ZL7qi3K2uBE/Pc8sBoAACmUb20ksDXygsKrw/NCwshuM4nQ/jV7Xlu8PptGadP1+QEJ94DqahR/cev5lDzKjdRys4bf2qWsGKTl98JJ0HRBtGfcfFUF6BDo7CcYg4kI8gvQMYHm232+lgqKrnzrJs1e8kScTx9OVPBY8BTTt27NBB8FablYWd1+v05Fm7JVHEzh2SKHgwuZnjWA8jMdbM85nZDzzw4E9z58xaFxMTc+ZWqXxfAN02AOCDZcavwauvDnrqx90/djaZAhojvud5HrStcr4P2QAKD8dSXmGzWMotPM9d6NXz6SOvvvrqyfDg8AvmEPNFuSgUIKBtYFQTQDWbLBZLlbBMJtASf73Kisr8zCFmobS01N9kMkF7GOx2e4zL5Q4xGDQ6USSAqPZFt2LBpkyMJBk8ohh4OSdHm5eXr1u2YrkFu4q6PR42KDDQozYYVKIoSLwETcdKAisxrCBKKpVKgLp3Opy5jCSd6fNsnx+nTJm4HdxRdQ0cdb3yb7sGUGgCkgQ6fPjw3TPfn/1E+qmTrVieTwwKCvJDP6Eoikgk8T6euEcQBDE/P78093JOyX0d7i98ps8zB+vHxWU1adjwQkhISKHJZKKagbaFK0fFMhC4xEtEbQcGBrIYAilfE36nRRRRUVFxJUqUy9vfH54j9er1Vqu13oULWQ3y8vOMR48ejV6X9jmX/kc6GxdbXxccEiLRjTcEVjZxgijhtliWhadnzcvLLQg0B51v1arlwWnT3t0VGRmJtHmde/nXA85t1QDKi5G1QXRaWtp9q1evfeTw74ebx9WPD/Pz9zNR/4A2otD30VDMarU6ysrKrGZzQHH9+vULGzZoUBAeHl7QsEGD/Lvuuut0dHQ0qn1RF0Dtp9KO+tpu2j5eNd0E4OB5HsUiGmgn+d/+Z86ciTx27HjspUsXTecyz8dlnM4wFxUVmwoK8g2hoWFuPz8/Eml4Ix2GwWrniYmXENMLELzFaikvzMvPfbDzQ7/3fb7P7h49ehyBj3O1qqbrCfBm//6PAUChEQKzs7PrHTly/K5JkyY9XmG1NDcY/MJNAf7Y0ZuWc/3tPhE9YG+jyspKaAcXGEaD0ej20xuKTOaAco/bXdG0aVNHi+YtM+MS4hxJCQn5YWFhdJAkOR9mARJB/aUN8E9DQUGB8WxmZviJY8eiTp46FUedxnJLhdbhcIQgkvF4PBw0lZd7wH583q12vBfqbaQFAODZU8HbKqwX4+OTzox7e+yuLl06Y7BViW929GYFWtv3/+MAUACBhIzbtm27Z8WKlQ9euHi+UXxCYj29TocGjytG0Plm/Ci7jk3qBBdBBGliFQTBwXGsWxTZykqXw6bR6iStVi3pdQZJp9W4tVot4V0RCThdlWqH085WWCo4hmU1Go1OLXpcnFqrIzkNCFvF86xKreY4uRqXCpp68l7Re5NA4Dd4jq+kK75Z81bpA1/uv69v377Vsp61FVxdHX/HAAA3pOjoidi27dv2Y98e26OsvCwuPCw8XKVWwVnk4TnXsLijKjED58v7wEh6GsIBOUQcR4llVKxEzAUD4bJqNepwyfGCIFBa+ar5Ajn7TGw7WtfJ+0ShzOVwFZZbynMjwyNyFy1a8E3btm2P3Qkr3hc4dxQAfHwErLzozMzM+HHjJ3Z1uRwtwPS53e5gFJ4YjUYDckJem+uVE1l5kqhMpBAZy+CqyhF4HUyAQmIlnideOf1sqG1iHiTv++iqpoJWXiOEDjZTEiVHSWmZTa3iizRqTV6AOTAnrn69nHnzPvivyWQic4erK1qtq1V8M+e5YwGgMA2kuyc7OzvqyJHjTX/66ccWFy/mJP125HCM3WYPMgUEBPr7+8OL56GbUYAhC7za5wLK9y/BIjtJqGmsYAoULzHFAluktoQChwjb4/EQzeF0OG0V1gqb3W63mgPMF1q0bHmxSaPG51q3bfPn008+iWkjmDtgvZ0h3Y0A4Y4HgAIIVdO+AYaffvqpaVFRUdifp08nHjpwONpqtYSoddoQl91pZHlOr9Pp5OSQGsBQ8gRXPCcI9WoPDsKGS1HpcrrgRzCMZOV5tkzwiIUBJlNh54c7X46NiSmMrFfvzNNPPondxcBW2v8pj/7/NAB8b04OI8kW8NnZ2UE2my34t99+q3/i1Km4/Ny8WFQEFxcX60pKSoJdTifJB2i1WrKaDUajN+STpCom0e5wVP1stdrIwIvQkGC7yT+gMDgktAwqPSamXhlWeNvWrfNiYmLAO0DgeF/lnb7SrwaO/xkNcD10y+1n4OPB/gWB+EEuwGq1Vg2QPH36dFRubi7nEUU/h+0vgePc/v7GSq1W6wgJD7cH+AVYAwL8HEaj0RZkCnKYQ8woWME0cfQdIDn1Pytw3+f4/wCTtRLxd/WA8AAAAABJRU5ErkJggg== // ==/UserScript== (function() { 'use strict'; let sciid = "itranslator"; let tgoing, randomID, toLang; let odata = {}, tdata = {}, kdata = {}, initOption = {}; let $ = jQuery, doc = $(document), site = document.URL.toString(); const itran_ico = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAB6ZJREFUWEeVVwtUlNUW/obHiAGCiBByAWFQeQykICGUCi5RwdQoRcVSDHmIoKV5l0hSmkJohMrDlJua5QtQrqLcdVNDEHSBoRUBA5Q6GK8aAe12ec0wtY/9/5phZpD+tWbNzPnP2fvbe3/7cQRKpVKJET4ymQw3b91CfX09pM3N6Pl/D/T19SEcJYSDvT3EYjH8/fwwduzYEUoEBCMBcOKLL5CdcwgPHkihb6CPcRYWELu7Y8yYMVAoFHjy22+ora1FV3c3FHIFJk1yRkJ8PJaHLXsmkGEBfHXlChISNqGzqwsvv+SP9etjMS8oaFihdCYrOweVlVWwshqPnKwszJz5ss4zOgHExK5HfsE5+PvNQO6Rw7CxsWFCSEF5eTnq6iXo7u5ia+bmY+Hm6oKAgADMCQxka83NzYjbEI/Kqtt4Y1U4Mj5J1wpCK4BZgYGor5Ng396PELFmDTv4zuYtuFBUhNFGRjAUCmFoYAA9PT32bnBwkH16e3vR19ePV5cswcf70ti7459/jq3/3AYvr2n473+KNUBoACDlDZJGlJZcg4uLCyj+yR/shLm5OYyfew4CgYAXoou/BIT4kJaagmVLl6K2tg5BCxbAQyzWAKEGYO1bkbh0uRg3SkuYcgrD9eulsBxvySsmpXK5nFnMeYAQ0W/6EEAOmOxXGUJCgpn7CcScuUGMmAcP7OeN4AFcLi7Gm6sjkHlwP1aFhzPl5RUVzHLOamJ8d3c3bG0nwNraGgMD8r/c3ofOzk72u6enF6NGCVmGECDaH7wgmIWEwrF5y1ZcKDzPE5MH4DzZBR5idxSeP4ejx44hLW0fxluN55Fyygvy8uDu7jZsJpC10bGxvJfIE7t372LhWPxqKO7fv4+a775lMhiAI7m52JaYhEZJHczNzeA8xRW2EyaouZ2EVJSXwdLS8pm5TRvOFxZi1+49jDcUrs5HnWiQ1KGtrQ2eU72wPyOdeZoBmOo9Ha5TpuD0qZOIi49nOTx69Ghe0f9+/x1xsTGIjooakXLalLg9iaUsJ4dkBM+fj9SUPVgatpwBqbhRBoFUKlV6+/jifEE+i8tEkbOa9STs8ePH+Cg1BQtDQp4J4MmTJzhz9izS0zPUQkjEJC+SFwgY8U1S9wMEX548qSRidLS1gIi4LXE7zMzM1BRR/Pv7+5EQv4GRi4j18OHPeD95hwYgY1MzTJo8SSNlaWNXVxdysjIxe/ZsWNvY4uhnuRBsS9yuJETVt6tYsSm7cUPN/ZwGAtHT2wuFXM7SMGjuXLV0on0SiQShry/FuHHj1ICR9ZRJPT09WBgSjF07d8LVXYw3Vq2CIHJdlJKEHzv6GV5ZtBi/ymQwMDDQKDhcKpKwltZW3P3mtkbXS9u7F3n5BTAyMtJ6vq+vDw4ODijIO8uyweb55yFYtnyF0t7OnuUpobKwsHiaHioVT9UcVSFD/e/r589yn1o093DW038y1FBoiLKSEqyOWAuFQv4UgMjJibHT44WpMDExYQJUD6oKI5Lt2f0hFi9apBF/IvA/bG21up8DQN+3KsoZgIH+/qchoMV/5R5hbuno6IChoaFWthOotvZ23Gtq1HhfWlqK+I2bGEl1eW9gYIBVVmpKoa+9DisrKwh2JCcrr1y9xlANR0LSSCTy9X2R9fihj674Dw2f17RpOPzpIVDlXRuxBoK8/Hzl5i3v4qH0AS4WFSHpvR3MiqE8IOvJ/brqAVnU2tam03skj4rR2xsTsDwsDBOdnJ+mYWtrq3Kq13QUniuAv7+f1kJEhwlAR8cv+LFRojU82grY0I1SqRSNknpWpqn2sEJEpdjHdwZcXV1x4vgx1gW/qa7WqAUUPzs7O5ZCQ5/q6jtYHRGh1jmHkpiyx1kkYuX+pZmz2GxJ2cA3o6T3kvFTUwNzoavYg5Vj1TCQ+6IiI7Ehbr0GgJ27PmTh4+o+Nw+okpGs//7bu7h37z4WhCxEVuZBNhvw7ZhqgIeHB/LOnGYTcFZ2NqsJ3IBB5ffE8ePw9vbSAODt8yKEQiGf/0OtpxIcvnIlkrYngrxNc4NaOyaJZEHkumjkZGeyvr0uKhqVVVU8IQnApYsX4OjoqAaAZoeM/QfU+ocqAPKcvZ0dLv67EHtSUnEwMwunT33JD69qIxkpLbp0Gbcrb8He3p6BqLh5k3mCmhGXQlxKbtm6Fdeufq3W9VTRkeUikYgpv3r1GsJWrGQTstaRjDs4d948NDQ0oux6CbOWLExJTYOZ2RgoBgdhYmzMADVIGmBiasLirjqcUsiIcO3t7YiNiWFu55T7+EwffijlQMwPDsGdO3d5otD6xk1v41JxMT+WjxIK+UGUJh7qkANyOR7JZJg1ayYOZGSw6Yncnv5JBrQpZyTXdTUjhafPnEVgYADr4dwoRjNDSUkpGpsa0dLSwrxibWUFkcgJM3x9Eb5yBQwMDEGpGRsXh+bmh2ztb11MOE/QnEDlWSZ7hDmBAYiKWseTR2s1AnDy1Ckc+vQwmpp+xMSJDshIT2cFTtfzty+nJIjufJ6eHjAxNmFyqUR/X1PDLiP6enpwc3NDTHQUXgsN1amYezEiANxm7npeU/MDu/vRhEQKTU1N4eToCM8XPDHd25tP3Wdq/3PDH5ho6GFVpqLYAAAAAElFTkSuQmCC"; const tt_ico = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABStJREFUeF7tm09sVEUcx7/zgiHBhBMcShpZ4kW8CC4HtqLs3owhBlg9QldUYtSbJ+OB9mA8eVMT8U+3cNSKMYR46xqwS0I3oAfxYloNEZP2ZCIJh77x/XZ3HtPdee/9Zt7b7f7pnNq+mfm932d+/2beVGDMmxhz/bEJQH5Bvg3gvACe2QIwUgK/ArjYKIvP+iU/BEDKC+DTfgmOkyOBd/oFQQdwZ4tWvouFBH5plMWhfixGCODIAlngwDS5XBZeP95mUAFguSwiA3R+Qa4IICeB1Takmgf8dKssqrbQhhpAp7IEJABTDeDNckFkBmBiF7Dv8ZbYxhpXfHQ/jgVEjSYQGx5Kd04JZSGRgjID8OZB4PzBlpyXfwTuP0gHIQ0AksyFMLIAFIRGWRyIW4qRBtBWfCYuJrABkI/HtRP7H7nAW9eBv/+L7s1xjzgXUDMfuiJzj/koSoFpSBRNEskV4qyADeDW6XQ+rY+++icw24ifjwNAB7HDx3Tw+4xxVh+l5VdFzfRsJAAoxY58JxeNliBQWz4tSpkAoBR39a/uqfJ7AHIDahfvmrMAZQlypawtIATwjSzCw2Ln28W5gbUFkHJf3O0GwEmDP7zYWwAUEwJXWBlbAKR41J4mKqaMlAVsAwBAbmAKdlFlsbUFUACjONDZOHXA5y/0Nga4JGprAC5COsf0Kgu4vNs2gDCHJpwIqUqQVs9UB5x44lEdQFWeqdy9kB9iF6CXp0bKm/b7nDqA+uzbBTTWW8VQXLMphV1MX41hu0CSEA6ApDn059sAOs4Ep+pn0x7argKi5kPM3ixUw5OiobGADAAoA1v14ZUUhHEEAAlZqxcuN3eHYwkAwOpS4VLzqGxcAWCpcKmpe2YAen0snmEMaMaCzAHYpDhO3840uA0gfRrcxH3QLaDr42jPLSC/IAf28/hU/UwFEHMc1+H26bKAQb4gEaz+hUAx85E3V+OOfl0A6PmgXpGZqp9dOTd5Mvfs7vbHRwDv/vaRo+qtYUYAqWbs0eCp+vQcICvfHv4YEzv3hFIIwO1/f3eWOhQAjtUrRR/+4kt7n8cHT76xSdlra9fx4R9fji4A3e8/efp9HN79VFNZWnX6+f7Ddbxy+73RAXC0XsntAHLBih8PavUKgPB09+ej801FadWvrd0AAaFGFkB/c2l9dwHXPK6bP/n9Pw/XQfFAWYNrMBwaAHrwe+4mfQBGMx4QGGquwXAoAOirrwc9igHKDVyDYSIAyr0m31L7aFu/c3GBuJVWgdE1GHIAGM/g1MB+AFDBz6TkucmTeH3ylLMbOAPw4R3QDxW5IGwtQDf/r+5d6Sp6JnbuDWsDSo22wTARQKF+ZlFAdN278eCVbhSqxusmcTBsAei5Pwmyixs4A9APFJNeTH9uA4BKXpXquDLISr6+9z23e/JeIGELOhMQZF9HpbeyAaAHv7hiRwdlawWJFkCVmQffmAlIIbIEAcwvFS6zLijbADDl/qil1V3FpiZIBNBaNbuDiLgMwQUQlfujANj2V/OwAJAVCGzMmYJhRI0QecWdC4Br/kq+qxuwAJCQtivQ1TPj1RMdRFYWoObkbnRUWUzjuGPYAGwgZAGAHcZTdrQCoEGIvo6qHTOZ3o3rAin1Yg+3BqBmbrnERhHwjgOSCqXQNUbaAthoIzq2N1eJcSStHO54ZwvgCujsF1Vau86XbpyoLhXmX6M5+vavs0mFVTqFrEabL0hYTeHYuQ0hNpA6Ts0Z1rwio1ZeDeibBXDecCv6jD2A/wH84i9uy3XNpQAAAABJRU5ErkJggg=="; const cog_svg = '<span icon="cog"class="iTran-icon iTran-icon-cog"><svg data-icon="cog"width="14"height="14"viewBox="0 0 16 16"><path d="M15.19 6.39h-1.85c-.11-.37-.27-.71-.45-1.04l1.36-1.36c.31-.31.31-.82 0-1.13l-1.13-1.13a.803.803 0 00-1.13 0l-1.36 1.36c-.33-.17-.67-.33-1.04-.44V.79c0-.44-.36-.8-.8-.8h-1.6c-.44 0-.8.36-.8.8v1.86c-.39.12-.75.28-1.1.47l-1.3-1.3c-.3-.3-.79-.3-1.09 0L1.82 2.91c-.3.3-.3.79 0 1.09l1.3 1.3c-.2.34-.36.7-.48 1.09H.79c-.44 0-.8.36-.8.8v1.6c0 .44.36.8.8.8h1.85c.11.37.27.71.45 1.04l-1.36 1.36c-.31.31-.31.82 0 1.13l1.13 1.13c.31.31.82.31 1.13 0l1.36-1.36c.33.18.67.33 1.04.44v1.86c0 .44.36.8.8.8h1.6c.44 0 .8-.36.8-.8v-1.86c.39-.12.75-.28 1.1-.47l1.3 1.3c.3.3.79.3 1.09 0l1.09-1.09c.3-.3.3-.79 0-1.09l-1.3-1.3c.19-.35.36-.71.48-1.1h1.85c.44 0 .8-.36.8-.8v-1.6a.816.816 0 00-.81-.79zm-7.2 4.6c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"></path></svg></span>'; const copy_svg = '<span icon="copy"class="iTran-icon iTran-icon-copy"><svg data-icon="copy"width="12"height="12"viewBox="0 0 16 16"><path d="M15 0H5c-.55 0-1 .45-1 1v2h2V2h8v7h-1v2h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-4 4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-1 10H2V6h8v8z"></path></svg></span>'; const spin_svg = '<span icon="pin"class="iTran-icon iTran-icon-pin"><svg data-icon="pin"width="14"height="14"viewBox="0 0 16 16"><path d="M9.41.92c-.51.51-.41 1.5.15 2.56L4.34 7.54C2.8 6.48 1.45 6.05.92 6.58l3.54 3.54-3.54 4.95 4.95-3.54 3.54 3.54c.53-.53.1-1.88-.96-3.42l4.06-5.22c1.06.56 2.04.66 2.55.15L9.41.92z"></path></svg></span>'; const close_svg = '<span icon="close"class="iTran-icon iTran-icon-close"><svg data-icon="close"width="18"height="18"viewBox="0 0 16 16"><path d="M9.41 8l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L8 6.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42L6.59 8 3.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L8 9.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L9.41 8z"></path></svg></span>'; const share_svg = '<span icon="share"class="iTran-icon iTran-icon-share"><svg data-icon="share"width="12"height="12"viewBox="0 0 16 16"><path d="M10.99 13.99h-9v-9h4.76l2-2H.99c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h11c.55 0 1-.45 1-1V7.24l-2 2v4.75zm4-14h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L7.29 7.28a1 1 0 00-.3.71 1.003 1.003 0 001.71.71l5.29-5.29V6c0 .55.45 1 1 1s1-.45 1-1V1c0-.56-.45-1.01-1-1.01z"></path></svg></span>'; const search_svg = '<span icon="search"class="iTran-icon iTran-icon-search"><svg data-icon="search"width="14"height="14"viewBox="0 0 16 16"><path d="M15.55 13.43l-2.67-2.68a6.94 6.94 0 001.11-3.76c0-3.87-3.13-7-7-7s-7 3.13-7 7 3.13 7 7 7c1.39 0 2.68-.42 3.76-1.11l2.68 2.67a1.498 1.498 0 102.12-2.12zm-8.56-1.44c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"></path></svg></span>'; const def = { sgt : "aHR0cHM6Ly9mYW55aS5zb2dvdS5jb20vdGV4dD9rZXl3b3JkPQ==", ali : "aHR0cHM6Ly90cmFuc2xhdGUuYWxpYmFiYS5jb20vYXBpL3RyYW5zbGF0ZS90ZXh0", alicsrf : "aHR0cHM6Ly90cmFuc2xhdGUuYWxpYmFiYS5jb20vYXBpL3RyYW5zbGF0ZS9jc3JmdG9rZW4=", ydt : "aHR0cHM6Ly9mYW55aS55b3VkYW8uY29tL3RyYW5zbGF0ZV9vP3NtYXJ0cmVzdWx0PWRpY3Qmc21hcnRyZXN1bHQ9cnVsZQ==", ydm : "aHR0cDovL20ueW91ZGFvLmNvbS90cmFuc2xhdGU=", bing : "aHR0cHM6Ly9jbi5iaW5nLmNvbQ==", icb : "aHR0cHM6Ly9pZmFueWkuaWNpYmEuY29tL2luZGV4LnBocD9jPXRyYW5zJm09ZnkmY2xpZW50PTYmYXV0aF91c2VyPWtleV93ZWJfZmFueWkmc2lnbj0=", ticb : "NmtleV93ZWJfZmFueWlpZmFueWl3ZWI4aGM5czk4ZQ==", cai : "aHR0cHM6Ly9hcGkuaW50ZXJwcmV0ZXIuY2FpeXVuYWkuY29tL3Yx", cait : "Mzk3NWw2bHI1cGNidmlkbDZqbDI=", huoshan: "aHR0cHM6Ly90cmFuc2xhdGUudm9sY2VuZ2luZS5jb20vY3J4L3RyYW5zbGF0ZS92MQ==", reverso: "aHR0cHM6Ly9hcGkucmV2ZXJzby5uZXQvdHJhbnNsYXRlL3YxL3RyYW5zbGF0aW9u", wxapp: "aHR0cHM6Ly93eGFwcC50cmFuc2xhdG9yLnFxLmNvbS9hcGkvdHJhbnNsYXRl", transmart: "aHR0cHM6Ly90cmFuc21hcnQucXEuY29tL2FwaS9pbXQ=", t_setting: /scigreat\.com\/s\/app/i, t_tua : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/188.0.5845.188 Safari/537.36", t_ydt : "&smartresult=dict&client=fanyideskweb&bv=11b89db74b56b4ba918674d36e95a672&doctype=json&version=2.1&keyfrom=fanyi.web&action=FY_BY_REALTlME", t_tip : "脚本安装成功,请重新刷新网页使用吧!功能简介如下:\r\n\r\n(1) 多功能网页翻译工具,支持多种翻译引擎\r\n\r\n(2) 快捷键翻译:选中文字,按 T 翻译,按 Y 取消(快捷键可修改)\r\n\r\n(3) 独立面板翻译:可显示多个翻译结果,支持多种语言翻译\r\n\r\n(4) 可自定义更换翻译结果显示位置,自定义更换翻译字体颜色", t_itran: `<div id="iTranslator"> <div id="iTran-btn"> <img src="${itran_ico}" alt="点击展开翻译结果" title="点击展开翻译结果"> </div> <div id="iTran-panel"> <div class="iTran-front"> <div class="iTran-header"> <div class="iTran-left"> <div class="switch-pin"> <button type="button" class="iTran-button spin-btn" title="固定翻译面板">${spin_svg}</button> </div> </div> <div class="iTran-center" title="按住不放可以拖动"></div> <div class="iTran-right"> <button type="button" class="iTran-button isearch-icon" title="打开搜索框">${search_svg}</button> <a role="button" target="_blank" title="打开设置页面" class="iTran-button cog-btn">${cog_svg}</a> <button type="button" title="关闭" class="iTran-button iclose-btn">${close_svg}</button> </div> </div> <div class="iTran-search isearch"> <div class="quick-isearch"> <textarea placeholder="输入文本,按搜索图标翻译..." class="iTran-input iTran-fill"></textarea> <button type="button" class="iTran-button isearch-btn" title="翻译文本">${search_svg}</button> </div> </div> </div> <div class="iTran-body"></div> </div> </div>` }; const message = { success: (text) => { toast.fire({ title: text, icon: "success" }) }, error: (text) => { toast.fire({ title: text, icon: "error" }) }, warning: (text) => { toast.fire({ title: text, icon: "warning" }) }, info: (text) => { toast.fire({ title: text, icon: "info" }) }, question: (text) => { toast.fire({ title: text, icon: "question" }) } }; const toast = Swal.mixin({ toast: true, position: "top", showConfirmButton: false, timer: 3000, timerProgressBar: false, didOpen: (toast) => { toast.addEventListener("mouseenter", Swal.stopTimer); toast.addEventListener("mouseleave", Swal.resumeTimer); } }); const base = { d(str) { return decodeURIComponent(escape(atob(str))); }, e(str) { return btoa(unescape(encodeURIComponent(str))); }, deURL(str) { return decodeURIComponent(str); }, enURL(str) { return encodeURIComponent(str); }, setV(name, value) { GM_setValue(name, value); }, getV(name) { return GM_getValue(name); }, delV(name) { GM_deleteValue(name); }, isType(obj) { return Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase(); }, get(url, type) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: "GET", url, responseType: type || "json", onload: (res) => { resolve(res.response || res.responseText) }, onerror: () => { reject("") } }); }); }, post(url, data, headers, h) { if (this.isType(data) === "object") { data = JSON.stringify(data); } if (headers === undefined || headers.length == 0) { headers = h === undefined ? { "Content-Type": "application/x-www-form-urlencoded" } : { "Content-Type": "application/json", "User-Agent": def.t_tua } } return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: "POST", url, data, headers, responseType: "json", onload: (res) => { resolve(res.response || res.responseText); }, onerror: () => { reject(""); } }); }); }, addStyle(id, tag, css) { let styleDom = document.getElementById(id), added = null; if (styleDom) return; try { added = GM_addStyle(css); } catch {} if (!added) { let style = document.createElement(tag); style.id = id; style.textContent = css; if (document.head) document.head.appendChild(style); } }, initConfig() { initOption = { "itran_quick_open": true, "itran_panel_open": true, "itran_panel_size": 13, "itran_panel_eng": ["必应翻译"], "itran_tkey": [false, false, false, false, false, false], "itran_key": ["T", "Y"], "itran_tolang": "自动检测", "itran_place": "句后", "itran_icopos": "右上", "itran_engine": "必应翻译", "itran_color": "#1b538c" }; odata = base.getV("odata"); if (odata === undefined) { odata = initOption; base.setV("odata", initOption); } if (odata) { for (const k in initOption) { if (odata[k] === undefined) { odata[k] = initOption[k]; base.setV("odata", odata); } } } }, async getBaseData() { let tdata_time = base.getV("tdata_time"); if (tdata_time === undefined || Date.now() - tdata_time > 8e8) { base.setV("tdata", "eyJpdHJhbiI6Imh0dHBzOi8vd3d3LnNjaWdyZWF0LmNvbS9zL2FwcC8/dD1pdHJhbnNsYXRvciIsInNvZnR3YXJlIjoiaHR0cHM6Ly93d3cuc2NpZ3JlYXQuY29tL2FkL3NvZnR3YXJlIn0="); base.setV("tdata_time", Date.now()); if (tdata_time === undefined) { alert(def.t_tip); location.reload(); } } if (base.getV("odata")) { odata = base.getV("odata"); } if (base.getV("tdata")) { tdata = JSON.parse(base.d(base.getV("tdata"))); } if (base.getV("kdata") === undefined || base.getV("kdata_time") === undefined || Date.now() - base.getV("kdata_time") > 7.2e6) { upToken.all(); } }, addInitStyle() { let color = odata.itran_color; let bw = base.getV("itran_width"); let sb = base.getV("itran_so_open"); let sh = base.getV("itran_so_height"); let size = odata.itran_panel_size; let css = `#iTran-panel{width:${bw ? bw : 240}px}.iTran-search{height:${sb ? "auto" : 0}}.iTran-result p,.iTran-heading,.iTran-fill{font-size:${size}px!important}.iTran-fill{height: ${sh ? sh : 66}px}.itranslator_span{color: ${color}}`; css += `.itranslator_span { font-weight:bold; font-family:Times New Roman,STKaiTi,KaiTi,sans-serif,Georgia,Segoe UI,Microsoft Yahei } #iTran-btn { top:0; left:0; display:none; position:absolute; z-index:9999999999 } #iTran-btn img { cursor:pointer; width:20px; height:20px; background-color:#ffffff; border:1px solid #aeaeae; border-radius:4px; padding:2px; box-sizing:content-box } #iTran-btn img:hover { border:1px solid #ff9900 } #iTran-panel { top:0; left:0; display:none; min-width:280px; max-width:320px; position:absolute; font-size:13px; border-radius:3px; box-sizing:border-box; z-index:999999999; color:#333; background-color:#f5f8fa; box-shadow:0px 0px 10px #0000004d; } #iTran-panel,.iTran-fill { font-family:Times New Roman,Arial,STKaiti,KaiTi,sans-serif,Segoe UI,Microsoft Yahei!important } #iTran-panel.spin,#iTran-panel.iTran-spin { position:fixed; } .iTran-body { padding:0 10px; max-height:580px; margin-bottom:10px; flex-grow:1; overflow:auto; scrollbar-width:thin; } .iTran-body::-webkit-scrollbar { width:6px; background-color:rgba(0,0,0,0); -webkit-border-radius:100px } .iTran-body::-webkit-scrollbar:hover { background-color:rgba(0,0,0,0.09) } .iTran-body::-webkit-scrollbar-thumb:vertical { background:rgba(0,0,0,0.5); -webkit-border-radius:100px } .iTran-body::-webkit-scrollbar-thumb:vertical:active { background:rgba(0,0,0,0.61); -webkit-border-radius:100px } .iTran-input { background:#fff; border-radius:3px; border:thin solid #aaaaaa; color:#182026; font-weight:400; outline:0; transition:box-shadow .1s cubic-bezier(.4,1,.75,.9); vertical-align:middle } .iTran-header { display:flex; margin-bottom:10px; padding:4px 6px 4px 10px; border-bottom:1px solid #e8e8e8 } .iTran-center { cursor:pointer; flex-grow:1; align-self:stretch } .iTran-left,.iTran-right { display:flex } .iTran-button { position:relative!important; margin:0 0 0 1px; padding:0; min-height:20px; min-width:20px; max-height:20px; max-width:20px; background:0 0; box-shadow:none; align-items:center; border:none; border-radius:3px; cursor:pointer; display:inline-flex; flex-direction:row; font-size:14px; justify-content:center; text-align:left; vertical-align:middle } .quick-isearch { position:relative; padding:0 10px 10px 10px } .iTran-search { overflow:hidden; transition:transform .2s cubic-bezier(.4,1,.75,.9) } .iTran-fill { width:100%; padding:5px; margin:0; font-size:13px; min-height:44px; max-height:250px; max-width:100%; min-width:100%; line-height:1.3; box-sizing:border-box } .isearch-btn { display:none; position:absolute!important; opacity:0.6; right:18px; bottom:18px; min-height:18px; min-width:18px; padding:0 7px; color:#fff; background-color:#137cbd } .isearch-btn:hover { opacity:1 } .iTran-card { margin:8px 0; padding:2px 5px; background-color:#fff; border-radius:3px; border:thin dashed #aaaaaa; transition:transform .2s cubic-bezier(.4,1,.75,.9),box-shadow .2s cubic-bezier(.4,1,.75,.9) } .iTran-card .iTran-button { visibility:hidden } .iTran-card:hover .iTran-button { visibility:visible } .iTran-card:first-child { margin-top:0 } .iTran-card:last-child { margin-bottom:0 } .iTran-card .iTran-icon { position:relative; margin-left:1px } .iTran-icon { display:inline-block; flex:0 0 auto; vertical-align:text-bottom } .iTran-icon:not(:empty):before { content:""!important; box-sizing:inherit; content:unset!important } .iTran-icon>svg { display:block } .iTran-icon>svg:not([fill]) { fill:currentColor } .iTran-legend { display:flex; align-items:center; justify-content:space-between } .legend-left { display:flex; align-items:center } .engine-icon { display:inline-block; width:14px; height:14px; background-size:contain; margin-right:3px } .iTran-heading { font-size:13px; font-weight:400; margin:0 2px 0 0; letter-spacing:0; } .iTran-result p { margin:2px 0; font-size:13px; font-weight:bold; line-height:1.3; text-align:left; letter-spacing:0; overflow-wrap:break-word } .iTran-icon-pin { transition:transform 0.2s,color 0.2s; transform:rotate(-45deg) } .iTran-spin .iTran-icon-pin,.spin .iTran-icon-pin { transform:rotate(-70deg) } .iTran-button .iTran-icon { color:#5c7080 } .iTran-button .iTran-icon:first-child:last-child { margin:0 -7px } .iTran-button:hover { background:rgba(167,182,194,.3); box-shadow:none; color:#182026; text-decoration:none } .quick-isearch .iTran-icon { color:#ffffff } .isearch-btn:hover { background:rgba(16,107,163) } .iTran-active { background:rgba(115,134,148,.3); } .iTran-button:disabled { color:rgba(92,112,128,.6); background-color:initial; pointer-events:none; } .iTran-button:disabled .iTran-icon { color:inherit; }`; base.addStyle("itran_style", "style", css); $("body").append(def.t_itran); $(".cog-btn").attr("href", tdata.itran); }, registerMenu() { GM_registerMenuCommand("选项设置", () => { GM_openInTab(tdata.itran, { active: true }) }); GM_registerMenuCommand("免费软件", () => { GM_openInTab(tdata.software, { active: true }) }); GM_registerMenuCommand("打开翻译", () => { $("#iTran-panel").show().css({ left: $(window).width() / 2, top: $(window).scrollTop() }); }); }, pageListener() { let obj = $("#iTran-panel"); let twidth = $(window).width(); let theight = $(window).height(); obj.on("mousemove", (e) => { obj.unbind("mousedown"); obj.css("cursor", "default"); let left, top, yy; let scroll = $(window).scrollTop(); let now_left = obj.offset().left; let oWidth = obj.width(), oHeight = obj.height(); let now_top = obj.offset().top - scroll; let isSpin = $('.iTran-spin').css('display') === 'block' ? true : false; let moveTop = e.clientX - now_left > 0 && e.clientX - now_left < oWidth && e.clientY - now_top > 0 && e.clientY - now_top < 30; let moveRight = e.clientX - now_left > 0 && e.clientX - now_left < 10 && e.clientY - now_top > 30 && e.clientY - now_top < oHeight; let moveLeft = e.clientX - now_left > oWidth - 10 && e.clientX - now_left < oWidth && e.clientY - now_top > 30 && e.clientY - now_top < oHeight; if (moveTop || moveRight || moveLeft) { obj.on("mousedown", (e) => { let isMoving = true, x = e.pageX - now_left; if (moveTop) { let y = e.pageY - now_top; doc.on({ "mousemove": (e) => { left = e.pageX - x < 0 ? 0 : (e.pageX - x + oWidth > twidth ? twidth - oWidth : e.pageX - x); top = e.pageY - y < 0 ? 0 : (e.pageY - y + oHeight > theight ? theight - oHeight : e.pageY - y); top = isSpin ? top : top + scroll; yy = isSpin ? e.pageY - y : e.pageY - y + scroll; isMoving && obj.css({ "left": e.pageX - x, "top": yy }); }, "mouseup": () => { isMoving && obj.css({ "left": left, "top": top }); isMoving = false; } }); } if (moveRight) { let w = e.pageX + oWidth; obj.css("cursor", "w-resize"); doc.on({ "mousemove": (e) => { isMoving && obj.css({ "width": w - e.pageX, "left": e.pageX - x }); }, "mouseup": () => { base.setV('itran_width', oWidth); isMoving = false; } }); } if (moveLeft) { let w = e.pageX - oWidth; obj.css("cursor", "e-resize"); doc.on({ "mousemove": (e) => { isMoving && obj.css({ "width": e.pageX - w }); }, "mouseup": () => { base.setV('itran_width', oWidth); isMoving = false; } }); } }); } }); if (def.t_setting.test(site)) { $("#itranslator").attr("version", GM_info.script.version); setTimeout(() => { for (const k in odata) { const spa = `#${sciid} #${k}`, vv = odata[k]; if (vv === undefined) continue; switch (k) { case "itran_place": case "itran_engine": case "itran_icopos": case "itran_panel_size": case "itran_tolang": $(`${spa} dd[lay-value="${vv}"]`).trigger("click"); $(`${spa} dd:contains("${vv}")`).trigger("click"); break; case "itran_key": { let tk = odata.itran_tkey; let tkey = vv[0]; let hkey = vv[1]; if (tk[2]) tkey = "Shift+" + tkey; if (tk[1]) tkey = "Alt+" + tkey; if (tk[0]) tkey = "Ctrl+" + tkey; if (tk[5]) hkey = "Shift+" + hkey; if (tk[4]) hkey = "Alt+" + hkey; if (tk[3]) hkey = "Ctrl+" + hkey; $("#" + k).val(tkey) .attr("ctrlkey", tk[0] ? tk[0] : "") .attr("altkey", tk[1] ? tk[1] : "") .attr("shiftkey", tk[2] ? tk[2] : "") .attr("tkey", vv[0]); $("#h" + k).val(hkey) .attr("ctrlkey", tk[3] ? tk[3] : "") .attr("altkey", tk[4] ? tk[4] : "") .attr("shiftkey", tk[5] ? tk[5] : "") .attr("tkey", vv[1]); } break; case "itran_color": $(spa + " input").val(vv); $(spa + " .layui-colorpicker-trigger-span").css({ background: vv }); break; case "itran_panel_eng": { if (vv && Array.isArray(vv)) { for (const i of vv) { $(`${spa} input[name="${i}"]`).each((_, e) => $(e.nextSibling).trigger("click")); } } } break; case "itran_quick_open": case "itran_panel_open": if (vv === true) { const checked = $(`${spa} input:checked`).length; if (!checked) $(`${spa} .layui-form-switch`).trigger("click"); } break; default: break; } } }, 500); } doc.on("click", ".itranSave", () => { const option = {}; for (const k in odata) { const spa = `#${sciid} #${k}`, vv = odata[k]; switch (k) { case "itran_color": case "itran_place": case "itran_engine": case "itran_icopos": case "itran_panel_size": case "itran_tolang": { let input = $(spa + " input").val(); option[k] = input !== undefined ? input : vv; } break; case "itran_key": option.itran_tkey = [ Boolean($(spa).attr("ctrlkey")), Boolean($(spa).attr("altkey")), Boolean($(spa).attr("shiftkey")), Boolean($("#h" + k).attr("ctrlkey")), Boolean($("#h" + k).attr("altkey")), Boolean($("#h" + k).attr("shiftkey")) ]; option[k] = []; option[k][0] = $(spa).attr("tkey") || vv[0]; option[k][1] = $("#h" + k).attr("tkey") || vv[1]; break; case "itran_panel_eng": option[k] = []; $(spa + "_order span[data-order-cid]").each((i, e) => { const cc = $(e).attr("data-order-cid"); if (cc) option[k].push(cc); }); break; case "itran_quick_open": case "itran_panel_open": { let inout = $(spa + " input")[0]; if (inout) option[k] = inout.checked; } break; default: option[k] = vv; break; } } base.setV("odata", option); upToken.all(); }); doc.on("click", ".itranReset", (e) => { if (confirm("提示:即将进行初始化,所有设置将重置,确认吗?")) { base.setV("odata", initOption); message.success("初始化设置成功,重启插件中!"); setTimeout(() => { location.replace(tdata.itran); }, 1.5e3); } }); doc.on("click", ".itranDelete", (e) => { let del_time = base.getV("del_time"); if (del_time === undefined || Date.now() - del_time > 2e7) { if (confirm("警告:除非插件无法使用,否则不要删除所有数据,你确认吗?")) { base.delV("tdata_time"); base.delV("kdata_time"); base.setV("odata", initOption); base.setV("del_time", Date.now()); message.success("所有数据删除成功,重启插件中!"); setTimeout(() => { location.replace(tdata.itran); }, 1.5e3); } } else { alert("提示:6小时内删除过所有数据,请6小时后重试!"); } }); doc.on("click", ".isearch-icon", () => { if ($(".isearch-icon").is(".iTran-active")) { $(".isearch-icon").removeClass("iTran-active"); $(".iTran-search").height("0"); base.setV("itran_so_open", false); } else { $(".isearch-icon").addClass("iTran-active"); $(".iTran-search").height("auto"); base.setV("itran_so_open", true); } }); doc.on("click", ".spin-btn", () => { let obj = $("#iTran-panel"); let top = obj.offset().top; let scroll = $(window).scrollTop(); if ($(".spin-btn").is(".iTran-active")) { $(".spin-btn").removeClass("iTran-active"); $("#iTran-panel").removeClass("iTran-spin"); obj.css("top", top); } else { $(".spin-btn").addClass("iTran-active"); $("#iTran-panel").addClass("iTran-spin"); obj.css("top", top - scroll); } }); doc.on("click", ".icopy-btn", (e) => { let txt = $(e.currentTarget).parent().parent().parent().find(".iTran-result p").text(); GM_setClipboard(txt); message.success("复制成功!"); }); doc.on("keyup", ".iTran-fill", () => { $(".iTran-fill").val() === "" ? $(".isearch-btn").hide() : $(".isearch-btn").css("display", "inline-flex"); }); doc.on("click", ".iclose-btn", () => { $("#iTran-panel").removeClass("iTran-spin").hide(); $(".spin-btn").removeClass("iTran-active"); }); doc.on("click", ".isearch-btn", () => { let value = $(".iTran-fill").val(); let height = $(".iTran-fill").height(); utils.showResult(value); base.setV("itran_so_height", height); }); if (base.getV("itran_so_open")) { $(".isearch-icon").addClass("iTran-active") } else { $(".isearch-icon").removeClass("iTran-active"); } } }; let upToken = { async bing() { try { const res = await base.get(base.d(def.bing) + '/translator'); kdata.ig = res.match(/IG:"([A-Za-z0-9]+)"/)[1]; [, kdata.bingkey, kdata.bingtoken] = res.match(/var params_AbusePreventionHelper\s*=\s*\[([0-9]+),\s*"([^"]+)",[^\]]*\];/); kdata.bingiid = $(res).find("#rich_tta").attr("data-iid"); base.setV("kdata", kdata); } catch {} }, async ali() { try { const csrf = await base.get(base.d(def.alicsrf)); kdata.alicsrf = csrf.token; base.setV("kdata", kdata); } catch {} }, async cai() { try { kdata.caiyunid = CryptoJS.MD5(Math.random().toString()).toString(); const data = { "browser_id": kdata.caiyunid }; const header = { "Content-Type": "application/json", "X-Authorization": "token:" + base.d(def.cait), "origin": "https://fanyi.caiyunapp.com" }; const res = await base.post(base.d(def.cai) + '/user/jwt/generate', data, header); kdata.caiyunjwt = res.jwt; base.setV("kdata", kdata); } catch {} }, all() { this.bing(); this.ali(); this.cai(); base.setV("kdata_time", Date.now()); } }; let utils = { getTransInfo(e, node, engine) { let t_num = 0; $(".itranslator_span").each((i, v) => { let m = parseInt($(v).attr("value")); if (m > t_num) t_num = m; }); if (e) { let sp, tspan = document.createElement("span"); let eng = engine ? engine : odata.itran_engine; let num = { "必应翻译": 2500, "有道翻译": 1000 }; if (!engine || e.length > 5e3) { $(tspan).addClass("itranslator_span").attr("value", ++t_num).text(" " + odata.itran_engine + "等待中... "); node.insertNode(tspan); } if (e.length > 5e3) { $(tspan).text(" 字数过多,翻译暂不可用,请减少字数重试..."); } else { tspan = engine === undefined ? tspan : node; sp = engine === undefined ? " " : ""; if (!num[eng] || e.length < num[eng]) { utils.getTransText(e, tspan, eng); } else { $(tspan).text(sp + eng + "只能翻译" + num[eng] + "字符以内,请减少字数重试..."); } } } else { $(".itranslator_span[value=" + t_num + "]").remove(); } }, async getTransText(e, ele, eng) { let url, data, header, sign, num = 0, res = "", resTxt = ""; let ee = e.replace(/[,:“”‘’{}【】。、・=「」『』()〔〕[]-~?!……]/g, ""); let langMap = { "自动检测": "auto", "中文": "zh", "英语": "en", "法语": "fr", "日语": "ja", "德语": "de", "俄语": "ru", "韩语": "ko", "西班牙": "es" }; let langZH = { "有道翻译": "zh-CHS", "必应翻译": "zh-Hans", "搜狗翻译": "zh-CHS" }; tgoing = true kdata = base.getV("kdata"); e = e.replace(/\r|\n|\r\n/g," "); let fromLang = "auto"; toLang = (/[\u4E00-\u9FA5]/g.test(ee) && !/[\u0800-\u4e00]/g.test(ee)) ? "en" : "zh"; toLang = odata.itran_tolang === "自动检测" ? toLang : langMap[odata.itran_tolang]; if (toLang === "zh" && langZH[eng]) { toLang = langZH[eng]; } switch(eng) { case "彩云小译": while (!resTxt.length && num < 2) { data = { "source": [e], "trans_type": `auto2${toLang}`, "detect": true, "browser_id": kdata.caiyunid }; header = { "Content-Type": "application/json", "X-Authorization": "token:" + def.cait, "T-Authorization": kdata.caiyunjwt }; res = await base.post(base.d(def.cai) + "/translator", data, header); resTxt = res.target && res.target[0] ? res.target[0] : ""; !resTxt.length && await upToken.cai(); num++; }; break; case "阿里翻译": while (!resTxt.length && num < 2) { data = `srcLang=auto&tgtLang=${toLang}&domain=general&_csrf=${kdata.alicsrf}&query=${base.enURL(e)}`; res = await base.post(base.d(def.ali), data); resTxt = res.data ? res.data.translateText : ""; !resTxt.length && await upToken.ali(); num++; }; break; case "有道翻译": data = "type=AUTO&inputtext=" + base.enURL(e); res = await base.post(base.d(def.ydm), data); resTxt = $(res).find("#translateResult li").text() || ""; break; case "搜狗翻译": utils.transOutput("", ele, base.d(def.sgt) + base.enURL(e) + "&transto=" + toLang); break; case "火山翻译": while (!resTxt.length && num < 2) { try { if (fromLang === "auto") fromLang = "detect"; data = { "text": e, "source_language": fromLang, "target_language": toLang }; header = { "Content-Type": "application/json" }; res = await base.post(base.d(def.huoshan), data, header); if (res) { resTxt = res.translation ? res.translation : ""; } } catch (err) { } !resTxt.length && num++; } break; case "Reverso": while (!resTxt.length && num < 2) { try { fromLang = /[\u4E00-\u9FA5]/.test(e) ? "chi" : "eng"; data = { "format": "text", "from": fromLang, "to": toLang, "input": e, "options": { "contextResults": true, "languageDetection": true, "origin": "translation.web", "sentenceSplitter": true } }; header = { "Content-Type": "application/json", "x-reverso-origin": "translation.web" }; res = await base.post(base.d(def.reverso), data, header); if (res && res.translation) { for (const i of res.translation) { resTxt += i; } } } catch (err) { } !resTxt.length && num++; } break; case "Transmart": while (!resTxt.length && num < 2) { try { const clientKey = "tencent_transmart_crx_" + window.btoa(navigator.userAgent).slice(0, 100); data = { "header": { "fn": "auto_translation", client_key: clientKey }, "type": "plain", "model_category": "normal", "text_domain": "general", "source": { "lang": fromLang, "text_list": [e] }, "target": { "lang": toLang } }; header = { "Content-Type": "application/json", "Host": "transmart.qq.com", "Origin": "https://transmart.qq.com", "Referer": "https://transmart.qq.com/" }; res = await base.post(base.d(def.transmart), data, header); if (res && res.auto_translation) { resTxt = res.auto_translation[0] ? res.auto_translation[0] : ""; } } catch (err) { } !resTxt.length && num++; } break; case "WxApp": while (!resTxt.length && num < 2) { try { const param = new URLSearchParams({ source: fromLang, target: toLang, sourceText: e, platform: "WeChat_APP", candidateLangs: "en|zh", guid: "oqdgX0SIwhvM0TmqzTHghWBvfk22" }).toString(); res = await base.get(`${base.d(def.wxapp)}?${param}`); if (res && res.targetText) { resTxt = res.targetText; } } catch (err) { } !resTxt.length && num++; } break; case "必应翻译": default: while (!resTxt.length && num < 2) { url = `${base.d(def.bing)}/ttranslatev3?isVertical=1&&IG=${kdata.ig}&IID=${kdata.bingiid}`; data = `fromLang=auto-detect&to=${toLang}&token=${kdata.bingtoken}&key=${kdata.bingkey}&text=${base.enURL(e)}`; res = await base.post(url, data); resTxt = res[0] ? res[0].translations[0].text : ""; !resTxt.length && await upToken.bing(); num++; }; break; } if (resTxt) utils.transOutput(resTxt, ele); }, async transOutput(e, ele, url) { let node = $(ele); let sp = node.is(".itranslator_span") ? " " : ""; if (url && url.length > 0) { let res = await base.get(url); if (res) e += $(res).find("#trans-result").text(); tgoing = false; e.length > 0 ? node.text(sp + e + sp) : node.text(sp + "翻译暂不可用,请稍后重新尝试..."); } else { tgoing = false; e.length > 0 ? node.text(sp + e + sp) : node.text(sp + "翻译暂不可用,请稍后重新尝试..."); } setTimeout(() => { tgoing = false; }, 3e3); }, showResult(e) { $(".iTran-body").empty(); $(".iTran-fill").val(e); $("#iTran-panel").show(); randomID = (Math.floor(Math.random() * 9e2) + 1e2).toString(); const engToEid = { "彩云小译": "cai", "阿里翻译": "ali", "有道翻译": "ydt", "搜狗翻译": "sgt", "火山翻译": "hst", "Reverso": "reverso", "Transmart": "transmart", "WxApp": "wxapp", "必应翻译": "bing" }; for(let eng of odata.itran_panel_eng) { let eid = engToEid[eng]; let itran_card = `<div class="iTran-card ${eid}${randomID}"> <div class="iTran-legend"> <div class="legend-left"> <span class="engine-icon" style="background-image: url(${tt_ico});"></span> <div class="iTran-heading">${eng}</div> </div> <div class="legend-right"> <button type="button" title="复制翻译结果" class="iTran-button icopy-btn">${copy_svg}</button> </div> </div> <div class="iTran-result"><p></p></div> </div>`; $(".iTran-body").append(itran_card); utils.getTransInfo(e, `.${eid}${randomID} .iTran-result p`, eng, true); } setInterval(() => { let height = $(".iTran-body").css("height"); let maxheight = $(".iTran-body").css("max-height"); if (height === maxheight) { $(".iTran-body").css("padding", "0 4px 0 10px"); } else { $(".iTran-body").css("padding", "0 10px"); } }, 1e3); } }; let main = { init() { base.initConfig(); base.getBaseData(); base.addInitStyle(); base.registerMenu(); base.pageListener(); start.keyT(); start.panelT(); } }; let start = { keyT() { doc.on("keydown", (e) => { if (odata.itran_quick_open && !def.t_setting.test(site)) { let keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode; if ( !tgoing && e.ctrlKey == odata.itran_tkey[0] && e.altKey == odata.itran_tkey[1] && e.shiftKey == odata.itran_tkey[2] && keyCode == odata.itran_key[0].charCodeAt(0) ) { let isCont, startNode, selected = window.getSelection(); selected && (isCont = selected.toString().trim()) && (startNode = selected.getRangeAt(0)); if (isCont.length > 0) { if (odata.itran_place == "句前") { startNode.collapse(true); } else { startNode.collapse(false); } utils.getTransInfo(isCont, startNode); } } else if ( e.ctrlKey == odata.itran_tkey[3] && e.altKey == odata.itran_tkey[4] && e.shiftKey == odata.itran_tkey[5] && keyCode == odata.itran_key[1].charCodeAt(0) && $(".itranslator_span").length > 0 ) { utils.getTransInfo(); } } }); }, panelT() { if (odata.itran_panel_open && !def.t_setting.test(site)) { let isSpin, isIcon, isSelecting; let isPanel, isShow, isCont, selected; let iTranBtn = $("#iTran-btn"); let iTranPanel = $("#iTran-panel"); let icopos = { "右上": [16, -32], "右下": [16, 16], "左上": [-32, -32], "左下": [-32, 16] }; let eX = icopos[odata.itran_icopos]?.[0] || 16; let eY = icopos[odata.itran_icopos]?.[1] || 16; doc.on({ "selectionchange": () => { isSelecting = true; }, "mousedown": (e) => { const parents = $(e.target).parents(); isSpin = $(".iTran-spin").css("display") === "block" ? true : false; isShow = iTranPanel.css("display") === "block" ? true : false; isPanel = parents.is("#iTran-panel"); isIcon = parents.is("#iTran-btn"); !isIcon && iTranBtn.removeAttr("style"); if (!isIcon && !isPanel && !isSpin && isShow) { iTranPanel.removeClass("iTran-spin").removeAttr("style"); $(".spin-btn").removeClass("iTran-active"); } }, "mouseup": (e) => { selected = window.getSelection(); selected && (isCont = selected.toString().trim()); if (!isSpin && !isPanel && !isIcon && isSelecting && isCont) { let obj = $("#iTran-panel"); let twidth = $(window).width(); let xpos = e.pageX + eX + 26 + obj.width() > twidth ? twidth - obj.width() - 26 : e.pageX + eX; iTranBtn.show().css({ left: e.pageX + eX + "px", top: e.pageY + eY + "px" }); iTranPanel.css({ left: xpos + 26 + "px", top: e.pageY + eY + "px" }); } if (isSpin && !isPanel && !isIcon && isSelecting && isCont) { utils.showResult(isCont); } isSelecting = false; } }); iTranBtn.on("click", () => { iTranBtn.removeAttr("style"); utils.showResult(isCont); }); } } }; main.init(); })();