// SlaveHack Utilities
// version 0.31
// Copyright (c) 2007-2010 Philip & (c) 2009 Satori
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
////
// Bad idea to ban me on #slavehack, I was retiring anyway, and just wanted to
// give this out to one person. They'd have retired in turn and the script
// would have completely disappeared. Now it's going to be completely public.
////
// CHANGELOG:
// 0.1 - 2007-07-23
// * Started
// * Get our IP address from the page, rather than hard coding like certain other utilities
// * Shrunk the foreign logfile textarea, so you don't have to scroll down to hit "edit"
// * Remove our IP from foreign logs, and put a warning that we need to submit under the log textarea.
// * Sort slaves in slave list by clicking on headers, and added headers for individual virus types
// * Reverse sort on the second click
// 0.2 - 2007-07-24
// * Added numbering to the slave list
// * Password and task are now not HTML stripped before sorting, so null entries will show up first (or last)
// * Process list is sorted by IP
// * "Internet" links on processes list
// * fixed bug: page=internet alone sometimes has the logfile, and it isn't modified.
// * Always show textbox to enter password
// * Never * out the password (change input type=password to type=text).
// 0.3 - 2007-07-25
// * Show space used by visible programs in software list
// * Keep track of which programs we already have
// * Remove download links for active viruses, and for software we already have.
// * Remove delete links for active viruses
// * Parse time from top of screen
// * Display time since modified instead of modification date in external host file list
// * Display time since modified instead of modification date in software list
// * Autosubmit log change if we automatically removed our IP
// * Display time since last captcha
// * Upload files is on file list on external hosts instead of a seperate page
// * Upload files doesn't display files that are already on the host (can't upload anyway).
// * Fixed bug: 'page=software' is similar to 'page=softwareext' (software & external HDD)
// * Sort slave list by IP if the primary sort item is the same, so sort is deterministic
// * Remember last sort in slave list
// * Remove "Options" from menu
// * Added "change password" and "change layout' options to "My Computer"
// * Hide hide link if we can't hide it any further on external computers.
// * Turn captcha timer in header red if 19 or more minutes since last captcha
// * Only show files on upload menu if there is room to upload them.
// * Automatically resubmit failed password cracking
// 0.4 - 2007-07-27
// * Change process list to h:m:s format
// * Change auto-submit on process list to refresh process list instead.
// * On process list, show "Continue" button with time remaining displayed on it
// * Select last selected account in collect income on slave list
// * Fixed bug on upload menu where x.0 versions didn't show up on upload menu
// * Fixed bug on upload menu where Photo collection(ZZZ).rip didn't show up on upload menu
// 0.5 - 2007-07-28
// * Every page now gets "seconds remaining" replaced with h:m:s remaining on the continue button, not just process list
// * Changes h:m:s to h:mm:ss (leading 0 in seconds and minutes if less than 10)
// * Hilight current IP on process list
// * Lowlight (anti-hilight) files on external computer if player doesn't have a high enough seeker to see it.
// * Don't display 0.0 in level 0.0 hidden
// * Added "View Upload Page" option to upload menu on external file menu
// * Clicking on "Options" now displays our automation menu instead of the donation page.
// * Brute Force Scan IPs - At 10 IPs per second, it would take 13.6 years to cover the entire IP range, and we take 4 seconds per IP (40 times longer).
// 0.5 - 2007-07-29
// * Add numbering to process list
// * Remove unnecessary whitespace from process list
// * Completed tasks bubble up to the front of a particular IP's tasks
// * Slightly optimized their JS on the process list.
// * Trim unnecessary text in slaves list
// * MySlaves import list link added to slave list.
// * Process list has extra spacing processes with between different IPs
// 0.6 - 2007-10-10
// * Updates for new code
// * Disabled: Change javascript to hh:mm:ss format on every page
// * Disabled: Show "Continue" button with time remaining displayed on it
// * Temp Disabled: Autosubmit if we removed our IP
// 0.7 - 2007-10-29
// * Logfile auto-cleaner fixed (they intentionally broke it.)
// 0.8 - 2007-12-5
// * Self log camper
// * Mark NPCs in slaves list.
// 0.8.1 - 2007-12-6
// * Fixed a bug in NPC marking code
// * NPCs now get ratings too. (displayed in password field)
// 0.9 - 2007-12-9
// * NPCs go italic when passsword is unknown
// * Provide "crack" link in <font color=red>The slave 7.5.7.89 was removed from your list because you no longer have the admin password anymore and no virus is active.</font>
// * Mark NPCs in ...was removed from your list...
// 0.10 - 2008-07-07
// * Fixed bug where double newlines were completely removed instead of turning into single newlines in logfile.
// * Added NPC/VPC notification
// 0.11 - 2008-07-12
// * Added automatic connection speed analysis
// *******************************************
// ********** Continued by satori ************
// *******************************************
// This script may only work with the Theme: Black small Layout
// *******************************************
// 0.12 - 2009-02-06
// * Moddified to work with the Theme: Black small Layout
// * Link to Slave files next to Internet link in the menu
// * Show ones own highest app version beside slaves app version
// * Added file images to the upload form on the files page
// 0.13 - 2009-02-08
// * Added previous + next NPC link on Internet screen
// * Hilight own IP on process list (white)
// * Added IP logging/parsing of logfiles -> checks if known/slave/npc -> otherwise the IP will be saved into GM PotentialSlaves list
// * Added link to Internet screen which lets you go to next entry of PotentialSlaves and removes the IP from the list once visited
// * Added time needed to upload files on slave (~95% accurate)
// * Hide hide link on own Software page for files that can't hide any further
// 0.14 - 2009-02-10
// * Replace Textarea on Slaves with a DIV and added ip color highlighting
// * Fixed SlaveSort function, asc/desc is now safed and displayed correctly
// * Added: Display installed/active Virus(es) on Internet screen
// * Always select highest non deleteable(AV) spam virus in files/upload list
// * Automatically select highest spam virus that can't be deleted by the slaves AV
// * Highlight spam viruses in upload form in red if they can be deleted by the slaves AV
// 0.15 - 2009-02-13
// * Added: Save Slaves Connection/Apps/Viruses into GM AllSlaveApps and display it at the Internet screen
// * Save euros/h into GM AllSlaveApps and display it on Internet and Slaves screen
// * Connection (MBit) and Money (euros/h) now displayed on Slave page
// * Added highlighting of warez and ddos in upload form which can be deleted by the slaves AV
// * Fixed autoselection of highest not deletable virus on upload page, works now properly
// * Fixed MBit & money/h sort function on slave page
// 0.16 - 2009-02-16
// * Added GS detection, save GS name and show it on Slaves page
// * Highlight last connected slave on slaves page
// * Added: Show Slaves Apps and Viruses in a Tooltip on the Slaves page
// 0.17 - 2009-02-17
// * Switched to Base64 encoded images so they don't get loaded from the server all the time
// * Fixed Slave Info Virus display issue: Move Virus from apps to activ viruses in GM AllSlaveApps if it got activated
// * Added highlighting of highest app version on slave/files
// * Display € per (Mbit|Gb|Mhz) on hardware screen
// * Fixed a bug where viruses with .0 level werent highlighted as active on slaves/info tooltip
// * Fixed Own IP detection since the html code was changed
// * Fixed Bug that screwed up the slaves page
// 0.18 - 2009-02-19
// * Fixed: HDD format, IP/PW reset now showing up in process list
// * Fixed DDoS image display on slave page
// * Added Settings menu to turn on/off Autosubmit
// 0.19 - 2009-02-20
// * Fixed: Hopefully everything that was broken through the html change
// * Fixed: IP-link problem on process page
// * Fixed: Logfile on Internet page is now parsed properly
// 0.20- 2009-02-21
// * Added Auto Continue since this feature was disabled by the SH devs
// * Fixed another bunch of things caused by the html changes
// * Added: Remove annoying text over Logfile on Internet page
// * Added: Move ip's with a too high Firewall to crack to the end of the potential slave list
// * Fixed: Last Captcha displayed correctly
// * Fixed: Autorety on failed PW crack working again
// 0.21- 2009-02-22
// * Fixed: Timestamps in Logfiles shown correctly again
// * Fixed: Update of slave income working again
// Small changes (Anonymous)
// 0.22 - 2009-04-15
// * Added the new NPC IPs
// * Added the WHOIS/Buy a GS Links
// More anonymous changes
// 0.23 - 2009-04-22
// * Added the Launch DDoS and Collect All Links
// * Changed the direct slaves link to "Slaves List"
// * Added External HDD Link
// * Added Clear Log Link
// *******************************************
// ********** Continued by anonymous ************
// *******************************************
// 0.24 - 2009-10-24
// * Fixed some anti-SHU behaviour
// 0.25 - 2009-11-09
// * Fixed last captcha
// * Made last captcha timer more accurate
// * Last captcha timer updates in real time.
// * Added a few more NPC IPs from http://spreadsheets.google.com/pub?key=pHMQr9KOU6e0DY0G-c8Q_KA&gid=0
// * Fixed Clear Home Logs
// 0.26 - 2009-11-10
// * Made Clear Home Logs cleaner
// * Added reset PW link
// * Keep track of how many times we've been run, and some related items.
// 0.27 - 2010-06-09
// * Not detected again.
// 0.271 - 2010-06-09
// * added new NPC
// 0.28 - 2010-06-09
// * Read the code!
// 0.29 - 2010-06-17
// * Workaround for an SH bug
// 0.30 - 2010-06-20
// * Show real filetimes on hover
// *******************************************
// ********** Continued by acien ************
// *******************************************
// 0.31 - 2011-04-20 (well idk when i last edited it but this is the date i made the edits public)
// * Fully updated the npc list to the 5.7 fwl (last npc i think) with a dummy 0.0.0.0 npc to fix a bug of it skiping the first one in the list
////////////////////////////////////////
// Ideas:
// BUG: 0.29 GB free space on external file list is treated as 0.029GB
// Show outstanding processes for this IP & their status in page=internet ?
// Display Process timers on every page (ie. log edit timer)
// Check a list of IPs to see which are still valid.
// Add Income of all Slaves /h /day and display it somewhere
// Remove GM Slafe/Files if pressed DELETE on slave page
// Parse logfiles for bank transfers / account numbers and bank ip
// NPC on dropdown menus by type? (fwl, wwl, whois, banks, vspam)
//
// Automated hack&slave (checkbox to start and stop?)
////////////////////////////////////////
// Rejected Ideas:
// Display in-line finances? - What if someone hacks your bank account? Effort not worth the return.
// Simplify Uploads? - it's a POST form, so hard to do, and we simplified it enough having it be one page and removing unnecessary items
// Highlight self on hiscore list - No good way to get our username
// Preload log edit? - Often we care about CPU speed, so we don't always want to do this.
// BUG: We don't handle captchas on IP scanner (IP Scanner is totally useless) -> I will probably rewrite the function to check if PotentialSlaves are available
// Keep track of our GS? Why? For collecting software, consider software on GS part of the collection? -> with the possibility to view slave apps/viruses this is already possible
////////////////////////////////////////
// ==UserScript==
// @name SlaveHack Utilities
// @namespace http://slavehack.com
// @include http://*.slavehack.com/index2.php*
// @include http://slavehack.com/index2.php*
// ==/UserScript==
(function () { // function wrapper
var MyIP;
var SHTime = (new Date()).getTime(); // Default value, gets overwritten by value in the HTML later on.
var StartTime = (new Date()).getTime();
var isCaptcha = false;
var numPotSlaves = GM_getValue('PotentialSlaves', '').split('|').length;
var aSettings = new Array();
if (GM_getValue('MenuSettings', '') != '') {
var aSet = GM_getValue('MenuSettings', '').split('|');
for (var j=0; j < aSet.length; j++ ) {
var aTemp = aSet[j].split('#');
aSettings[aTemp[0]] = aTemp[1];
}
}
GM_setValue('RunTimes',GM_getValue('RunTimes',0)+1); // Keep track of how many times we've been executed.
var NPC_IP = ["0.0.0.0", "1.1.1.1", "127.0.0.1", "2.2.2.2", "243.12.1.213", "129.94.140.59", "246.185.15.208", "255.0.255.0", "124.191.123.222", "136.208.245.59", "56.195.92.143", "251.153.56.29", "57.195.92.143", "135.132.154.124", "184.182.224.6", "121.142.212.124", "19.84.229.163", "237.139.128.181", "244.2.133.183", "102.244.136.190", "254.151.123.253", "13.232.147.158", "94.87.45.87", "0.156.244.201", "242.133.164.81", "33.53.184.126", "162.51.129.169", "109.198.68.77", "71.136.63.190", "132.21.163.202", "96.128.231.240", "7.5.7.89", "16.1.233.10", "42.7.239.13", "234.86.95.202", "48.121.47.116", "142.229.199.91", "249.11.136.34", "120.92.153.170", "214.172.152.188", "119.209.47.58", "63.203.160.21", "222.65.67.51", "3.131.143.254", "17.18.111.145", "149.201.199.233", "229.31.45.38", "129.141.138.119", "91.126.151.61", "9.195.12.154", "112.43.79.120", "101.133.111.159", "206.146.24.93", "203.103.59.47", "189.23.124.7", "19.188.239.174", "255.33.234.33", "193.198.230.16", "105.133.13.108", "152.158.115.148", "81.73.86.255", "138.76.73.28", "159.229.197.164", "243.100.166.15", "66.241.98.226", "252.81.175.188", "83.230.105.121", "247.163.249.66", "29.132.103.224", "91.112.13.12", "73.137.85.78", "227.62.179.117", "173.122.175.88", "94.192.98.31", "106.71.208.142", "61.169.234.43", "144.92.41.3", "14.233.123.137", "208.193.85.97", "207.118.73.177", "160.88.2.49", "114.198.119.21", "2.158.124.111", "12.69.38.5", "118.41.15.227", "96.154.255.246", "80.77.237.134", "15.35.62.224", "238.176.102.3", "101.52.91.79", "215.119.128.38", "250.3.107.51", "49.218.89.175", "250.117.216.18", "187.161.10.38", "225.99.248.46", "69.144.46.76", "104.248.113.147", "85.148.218.87", "68.152.119.206", "220.204.61.152", "113.113.217.204", "64.223.252.221", "247.140.133.168", "67.247.218.237", "121.15.223.76", "34.170.166.53", "58.231.184.217", "140.243.173.181", "189.63.250.247", "82.82.41.237", "172.0.47.201", "236.155.42.129", "241.105.225.118", "200.60.183.92", "51.176.101.166", "239.152.83.74", "110.38.135.166", "127.115.164.138", "213.104.0.229", "171.3.251.17", "26.223.183.134", "137.0.218.12", "254.206.104.178", "103.13.127.196", "209.222.239.129", "249.85.70.54", "96.37.77.96", "160.7.44.55", "188.40.32.42", "21.26.30.22", "115.253.239.244", "21.18.35.25", "144.25.116.39", "120.101.174.253", "173.22.203.196", "11.125.146.145", "170.4.54.69", "45.68.137.16", "135.99.182.134", "9.224.178.70", "152.11.194.106", "81.58.195.224", "168.153.111.194", "165.57.86.101", "141.56.234.45", "5.81.186.49", "56.105.200.131", "54.27.17.137", "165.92.38.152", "160.204.113.34", "58.145.5.177", "6.155.226.111", "177.240.29.129", "6.100.142.172", "232.82.137.4", "164.221.47.125", "160.125.181.166", "85.71.100.215", "222.29.243.43", "135.154.119.144", "148.90.86.220", "174.58.255.90", "169.244.20.135", "34.72.193.206", "252.115.199.40", "221.83.199.24", "132.195.23.9", "35.200.115.198", "254.201.59.25", "214.192.44.89", "19.39.19.45", "67.81.5.102", "86.91.172.8", "78.95.108.51", "25.23.182.61", "64.48.99.10", "165.111.158.1"];
////////////////////////////////////////////////////////////////////////////////
// Base64 Encoded Images
////////////////////////////////////////////////////////////////////////////////
var aImages = new Array();
aImages['vspam'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAQABADAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAABQP/xAAmEAACAgEEAAUFAAAAAAAAAAABAgMEEQUGBxIACBMUQhYhIzEy/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEx/9oADAMBAAIRAxEAPwBviHhnj/Tdgw7tuUBrtoVzMxokX5JJ68pIlpuvQo/wCKFI+RJGRqonynwzxtqG2ItxRVfpyxqrZhiudatuOzalaxM7rI/55AowtfP8g9CP34lAPGnmHl0+pajaw+rVq0cUy15xVo+3o1Hb3EVanDlpLHoH1MhipAyeuG8WAjk/zJ6hq4U0IVrvplp4HoO8csE3bLxTGOWJbCSwFOjlGxkkBsH7sNf/2Q%3D%3D';
aImages['fc'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwUGB//EACgQAAEDAwQBAgcAAAAAAAAAAAECAwQFBhEAEhMhBxQVIjEyM1Fhgf/EABgBAAMBAQAAAAAAAAAAAAAAAAECBQME/8QAIhEAAAYBAwUAAAAAAAAAAAAAAAECAwQSESEiMTJBYXGh/9oADAMBAAIRAxEAPwDYPIdzXKzUEUa2nUe4qbBUgfdSVdhz4hxlISPluH7GMa45Dm6t0oP7gSJzz1yba57+gW3vIrkO20zLyAhPR+qhKb2qS1lexvnabKltLVlIwEkZPXWtDmNKXVB5IVUEsklfqxqGN5UiqJmRK9b1PEuvxgqKCdm30zmSoOcj8bICvpwSQT+M6EiMTng+ASbRe+Nwj3LAve9qkmRd7KKNHYiGMqG0ORqRvdS7hwsTio8am0lO5OP7pI0JLRY5DqVkf//Z';
aImages['rddos'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABgEC/8QAJBAAAQQBAwUBAQEAAAAAAAAAAwECBAUGBxESABMUISJBJDH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAMAwEAAhEDEQA/AEmrsrVLD6ONR45d+SJXTbMs05GCnLFYqEWIxxFcpHciKjOH1tsn50G9Oq7VDOMUk47leRPhLXHDISyrjNfOII4eYgEKJWo3gq/e6cl/zpQgzSomamyLKqWq8EmJWAViWCSGtlkJ6e7xyNa5Aoo13+kX3t66C4lGk6Wx6bHA0bJT78ks0iSKQ3vocSKX+gj0b3l7eyck/fzboP/Z';
////////////////////////////////////////////////////////////////////////////////
// Helper Functions
////////////////////////////////////////////////////////////////////////////////
////
// Let the script pause for x ms
function SleepTimer(ms){
var zeit=(new Date()).getTime();
var stoppZeit=zeit+ms;
while((new Date()).getTime()<stoppZeit){};
}
////
// Check if IP is a NPC
function checkIsNPC (sIp) {
for (var o = 0; o < NPC_IP.length; o++ ) {
if ( NPC_IP[o] == sIp ) {
return true;
}
}
return false;
}
////
// Parse IPs from string and sort out npcs, own ip, double ips and already known slaves
// Added highlighting of IP's
// Added highlighting of Date/Time
function ParseLog(sInput, type) {
var aTemp = new Array();
var aTemp2 = new Array();
var aTemp3 = new Array();
var check;
// Transform Date/Time into elapsed Time
if ( type=='highlight' ) {
var regExp = /(\d+)-(\d+)-(\d+) (\d+):(\d+)/gm;
var m = sInput.match(regExp);
if (m != null) {
for ( var k = 0; k <= 1; k++) {
if (k == 0) { // sort out double times
aTemp = m;
aTemp2 = new Array();
aTemp3 = new Array();
} else if (k == 1) { // highlight times
aTemp = aTemp3;
aTemp2 = new Array();
aTemp3 = new Array();
}
for ( var j = 0; j < aTemp.length; j++) {
check = 0;
for (i = 0; i < aTemp2.length; i++) {
if ( aTemp2[i] == aTemp[j] ) { check = 1; }
}
if ( check == 0 ) {
if ( k == 0) {
aTemp3[aTemp3.length] = aTemp[j];
aTemp2[aTemp2.length] = aTemp[j];
} else if ( k == 1 ) {
// ' + aTemp[j] + '
sInput = sInput.replace(new RegExp(aTemp[j], "gm" ) ,' <b>(' + DisplayTimeDiff(Math.floor(SHTime/60000)*60000-ParseTime(aTemp[j])) + ')</b> ago');
}
}
}
}
}
}
var regExp = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/gm;
var m = sInput.match(regExp);
if (m != null) {
for (var k = 0; k <= 3; k++) {
if (k == 0) { // sort out double ips
aTemp = m;
aTemp2 = new Array();
aTemp3 = new Array();
} else if (k == 1) { // sort out npcs and own ip
aTemp = aTemp3;
aTemp2 = NPC_IP;
aTemp2[aTemp2.length] = MyIP;
aTemp3 = new Array();
} else if (k == 2) { // sort out already known potential slaves
aTemp = aTemp3;
aTemp2 = GM_getValue('PotentialSlaves', '').split('|');
aTemp3 = new Array();
} else if (k == 3) { // sort out own slaves
aTemp = aTemp3;
aTemp2 = GM_getValue('AllSlaves', '').split('|');
aTemp3 = new Array();
}
for ( var j = 0; j < aTemp.length; j++) {
check = 0;
for ( var i = 0; i < aTemp2.length; i++) {
aTemp2[i] = ((k==3) ? aTemp2[i].split('#')[0] : aTemp2[i]);
if ( aTemp2[i] == aTemp[j] ) { check = 1; }
}
if ( type=='highlight' && k>0 && check==1 ) {
if ( k == 1 ) {
var hlc = ((aTemp[j] == MyIP) ? 'green' : '#FF33FF');
} else if ( k == 2 ) {
var hlc = 'red';
} else if ( k == 3 ) {
var hlc = 'blue';
}
sInput = sInput.replace(new RegExp(aTemp[j], "gm" ) ,' <a href="index2.php?page=internet&var2=' + aTemp[j] + '"><font style="color: ' + hlc + '; font-weight: bold;">' + aTemp[j] + '</font></a> ');
}
if ( check==0 ) {
aTemp3[aTemp3.length] = aTemp[j];
if (k == 0) { aTemp2[aTemp2.length] = aTemp[j]; }
}
}
}
}
if ( type=='highlight' ) {
return sInput;
} else if (type=='collect' && m != null) {
GM_setValue('PotentialSlaves', GM_getValue('PotentialSlaves', '') + ((GM_getValue('PotentialSlaves', '') == '' || aTemp3.length == 0) ? '' : '|') + aTemp3.join('|'));
if ( aTemp3.length > 0 ) {
GM_log('New Pot. Slaves: ' + aTemp3.join('|'));
}
}
}
////
// Function to keep track of our Slaves
function manageSlaves(sIp, aData, sAction, sTyp) {
if ( sTyp == 'slave' ) {
var aAllSlaves = GM_getValue('AllSlaves', '').split('|');
} else if ( sTyp == 'files' ) {
var aAllSlaves = GM_getValue('AllSlaveApps', '').split('|');
}
var aOut = new Array();
var found = false;
var delIP = '';
// check if ip is in list
for ( var j = 0; j < aAllSlaves.length; j++) {
var aTemp = aAllSlaves[j].split('#');
if ( aTemp[0] == sIp && (sAction == 'update' || sAction == 'get') ) {
found = j;
break;
}
if ( (aTemp[0] != sIp && sAction == 'delete' && aData == '') || (aTemp[6] != sIp && sAction == 'delete' && aData == 'id') ) {
aOut[aOut.length] = aAllSlaves[j];
} else if ( sAction == 'delete' ) {
GM_log('deleted: ' + aAllSlaves[j]); // debug show deleted entry
delIP = aTemp[0];
}
}
if ( sAction == 'update' ) {
if ( sTyp == 'slave' ) {
// 0: IP, 1: PW, 2: V1, 3: V2, 4: V3, 5: Typ
var regExp = / \d{1}\.\d{1}/;
if ( aData != '' ) {
aOut[0] = sIp;
aOut[1] = ((aData[2] == '<i>No Spam virus</i>' ) ? '0' : ((aData[2].match(regExp) != null) ? aData[2].match(regExp)[0].replace(' ', '') : '0'));
aOut[2] = ((aData[3] == '<i>No DDoS virus</i>' ) ? '0' : ((aData[3].match(regExp) != null) ? aData[3].match(regExp)[0].replace(' ', '') : '0'));
aOut[3] = ((aData[4] == '<i>No sharewarez virus</i>' ) ? '0' : ((aData[4].match(regExp) != null) ? aData[4].match(regExp)[0].replace(' ', '') : '0'));
aOut[4] = ((aData[5] == 'Spam relay ' ) ? 'S' : ((aData[5] == 'DDoS bot' ) ? 'D' : ((aData[5] == 'File Share' ) ? 'W' : 'N')));
aOut[5] = ((found == false) ? SHTime : ((aAllSlaves[j].split('#')[5] != 'undefined') ? aAllSlaves[j].split('#')[5] : SHTime));
aOut[6] = ((aData[7] != '' ) ? (aData[7].match(/DELETE=\d+/gm)[0].split('=')[1]) : (aAllSlaves[j].split('#')[6]));
} else {
aOut = new Array(sIp, '', '', '', '', SHTime, '');
//GM_log('updated: ' + aOut.join('#'));
}
//GM_log(aOut.join('#'));
if ( found != false) {
aAllSlaves[found] = aOut.join('#');
} else {
aAllSlaves[aAllSlaves.length] = aOut.join('#');
}
GM_setValue('AllSlaves', aAllSlaves.join('|'));
} else if ( sTyp == 'files' ) {
// 0: IP, 1: MBIT, 2: Money/h, 3: apps, 4: viruses, 5: last update, 6: GSname
// Move Virus app to Active Viruses if activated
if ( aData[0] == 'app2vir' ) {
//manageSlaves(ConnectedToIP, new Array('app2vir', aTemp[0], aTemp[1]), 'update', 'files');
if ( found != false ) {
var aTemp = aAllSlaves[found].split('#');
var aApp = ((aTemp[3] != '') ? aTemp[3].split('@') : '' );
var aVir = ((aTemp[4] != '') ? aTemp[4].split('@') : '' );
if ( aApp != '' ) {
if ( aTemp[3] != (aData[1] + ' ' + aData[2]) ) {
var aNew = new Array();
for (var j=0; j<aApp.length; j++) {
var aApps = aApp[j].split(' ');
if ( aApps[0] == aData[1] && aApps[1] == aData[2] ) {} else {
aNew[aNew.length] = aApp[j];
}
}
aTemp[3] = '';
aTemp[3] = aNew.join('@');
} else {
aTemp[3] = '';
}
if ( aVir != '' ) {
aTemp[4][aTemp[4].length] = aData[1] + ' ' + aData[2];
var aNew = new Array();
aNew['vspam'] = new Array();
aNew['vshare'] = new Array();
aNew['vddos'] = new Array();
var added = false;
for (var j=0; j<aVir.length; j++) {
var aVirs = aVir[j].split(' ');
aNew[aVirs[0]][aNew[aVirs[0]].length] = aVir[j];
}
aNew[aData[1]][aNew[aData[1]].length] = aData[1] + ' ' + aData[2];
aNew[aData[1]].sort();
aNew[aData[1]].reverse();
aTemp[4] = aNew['vspam'].join('@');
if ( aTemp[4] == '' ) {
aTemp[4] = aNew['vshare'].join('@');
} else if ( aNew['vshare'].join('@') != '' ) {
aTemp[4] = aTemp[4] + '@' + aNew['vshare'].join('@');
}
if ( aTemp[4] == '' ) {
aTemp[4] = aNew['vddos'].join('@');
} else if ( aNew['vddos'].join('@') != '' ) {
aTemp[4] = aTemp[4] + '@' + aNew['vddos'].join('@');
}
} else {
aTemp[4] = aData[1] + ' ' + aData[2];
}
aAllSlaves[found] = aTemp.join('#');
GM_setValue('AllSlaveApps', aAllSlaves.join('|'));
}
}
return '';
} else {
aOut[0] = sIp;
for ( var i = 1; i <= 6; i++) {
aOut[i] = ((aData[i] != '') ? aData[i] : ((found != false) ? (aAllSlaves[found].split('#')[i]) : '' ));
}
if ( found != false) {
aAllSlaves[found] = aOut.join('#');
} else {
aAllSlaves[aAllSlaves.length] = aOut.join('#');
}
GM_setValue('AllSlaveApps', aAllSlaves.join('|'));
}
}
}
if ( sAction == 'get' ) {
if ( found != false) {
return aAllSlaves[found];
} else {
return '';
}
}
if ( sAction == 'delete' ) {
if ( sTyp == 'slave' ) {
GM_setValue('AllSlaves', aOut.join('|'));
if ( aData == 'id' ) {
manageSlaves(delIP, '', 'delete', 'files');
}
} else if ( sTyp == 'files' ) {
GM_setValue('AllSlaveApps', aOut.join('|'));
}
}
}
////
// Calculate Up/Download time
// Accuracy ~95%
function getUpDownloadTime(iSize, iSpeed, sOutput) {
var iSec = parseInt(iSize.replace(/(0\.00|0\.0|0\.|\.)/gm, '')*(1000/iSpeed)*1.045+3);
if ( sOutput == 'sec' ) {
return iSec;
}
var iMin = 0;
var iHou = 0;
while ( iSec >= 60 ) {
iMin = iMin +1;
iSec = iSec - 60;
}
while ( iMin >= 60 ) {
iHou = iHou + 1;
iMin = iMin - 60;
}
return ((iHou>0) ? (iHou + 'h') : '') + ((iMin>0) ? (((iHou>0) ? ' ' : '') + iMin + 'm') : '') + ((iSec>0) ? (((iHou>0 || iMin>0) ? ' ' : '') + iSec + 's') : '');
}
////
// Parse human readable time into javascript format.
function ParseTime(str) {
// Time as shown is UTC+2, but since we're using the same ParseTime function,
// it shouldn't matter as we're just doing time differences
// As a side effect, returns current time if we can't parse the time.
// This is intentional, as it's the best "sane" value to default to. (but still not "good")
if ( str != '' && typeof str != 'undefined' ) {
var retval = new Date();
var reTime = /(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)\.(\d+)/;
if (str.match(reTime)) {
var match = reTime.exec(str);
retval.setMilliseconds(match[7]);
retval.setSeconds(match[6]);
retval.setMinutes(match[5]);
retval.setHours(match[4]);
retval.setDate(match[1]);
retval.setMonth(match[2]);
retval.setFullYear(match[3]);
return retval.getTime();
}
reTime = /(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+).(\d+)/;
if (str.match(reTime)) {
var match = reTime.exec(str);
retval.setMilliseconds(0);
retval.setSeconds(match[6]);
retval.setMinutes(match[5]);
retval.setHours(match[4]);
retval.setDate(match[1]);
retval.setMonth(match[2]);
retval.setFullYear(match[3]);
return retval.getTime();
}
reTime = /(\d+)-(\d+)-(\d+) (\d+):(\d+)/;
if (str.match(reTime)) {
var match = reTime.exec(str);
retval.setMilliseconds(0);
retval.setSeconds(0);
retval.setMinutes(match[5]);
retval.setHours(match[4]);
retval.setDate(match[1]);
retval.setMonth(match[2]);
retval.setFullYear(match[3]);
return retval.getTime();
}
return retval.getTime();
} else {
return '';
}
}
////
// Display Time diff in a human readable form
function DisplayTimeDiff(diff) {
var ret = '';
diff = Math.abs(diff);
// Milliseconds, if applicable
if (diff%1000 > 0) {
if (diff%1000 < 10) {
ret = '.00'+diff%1000;
} else if (diff%1000 < 100) {
ret = '.0'+diff%1000;
} else {
ret = '.'+diff%1000;
}
}
diff=Math.floor(diff/1000);
// Seconds
if ((diff%60 == 0) && (ret=='')) {
// Do nothing
} else if (diff%60 < 10) {
ret = ':0' + (diff%60) + ret;
} else {
ret = ':' + (diff%60) + ret;
}
diff=Math.floor(diff/60);
// Minutes
if (diff%60 < 10) {
ret = '0' + (diff%60) + ret;
} else {
ret = '' + (diff%60) + ret;
}
diff=Math.floor(diff/60);
// Hours
if (diff%24 < 10) {
ret = '0' + (diff%24) + ':' + ret;
} else {
ret = '' + (diff%24) + ':' + ret;
}
diff=Math.floor(diff/24);
// Days if applicable
if (diff == 1) {
ret = ''+diff+' day ' + ret;
} else if (diff > 1) {
ret = ''+diff+' days ' + ret;
}
return ret;
}
////////////////////////////////////////////////////////////////////////////////
// The Code
////////////////////////////////////////////////////////////////////////////////
////
// Place a Table beside slavehack logo to manage the settings
{
var regExp = /layout2_logo\.jpg/gm;
var allImg = document.getElementsByTagName('img');
var doOnce = 0;
for (var i = 0; i < allImg.length; i++) {
var m = allImg[i].src.match(regExp);
if (m != null) {
if ( doOnce == 0 ) {
var sTableRow1 = '<td width="50" align="center"><b>-SHU-</b></td><td width="20"></td><td>Auto Submit</td><td width="20"></td><td>Auto Continue</td>';
var sTableRow2 = '<td><b>Menu</b></td><td></td><td><div id="submit" style="font-weight:bold; color:' + ((aSettings['submit']==1) ? '#00FF00' : '#FF0000') + '">' + ((aSettings['submit']==1) ? 'On' : 'Off') + '</div><td></td><td><div id="continue" style="font-weight:bold; color:' + ((aSettings['continue']==1) ? '#00FF00' : '#FF0000') + '">' + ((aSettings['continue']==1) ? 'On' : 'Off') + '</div></td>';
var sTableRow = '<table cellpadding="0" border="0" cellspacing="0"><tr align="center"><td rowspan="2" valign="top"><img src="templates/layout2_logo.jpg"></td><td width=40></td>' + sTableRow1 + '</tr><tr align=center><td></td>' + sTableRow2 + '</tr></table>';
newElement = document.createElement('div');
newElement.innerHTML = sTableRow;
doOnce = 1;
allImg[i].parentNode.insertBefore(newElement, allImg[i]);
} else if ( doOnce == 1 ) {
doOnce = 2;
allImg[i].style.display = 'none';
}
}
}
}
////
// Switch settings on/off
function changeSettings(sTyp) {
var sSettings = GM_getValue('MenuSettings', '');
if ( sSettings.match(sTyp) ) {
var aSet = sSettings.split('|');
for (var i = 0; i < aSet.length; i++) {
var aTemp = aSet[i].split('#');
if ( aTemp[0] == sTyp ) {
aSet[i] = sTyp + '#' + ((aTemp[1] == 1) ? 0 : 1);
}
}
sSettings = aSet.join('|');
} else {
sSettings = sSettings + ((sSettings != '' ) ? '|' : '') + sTyp + '#1';
}
document.getElementById(sTyp).innerHTML = ((document.getElementById(sTyp).innerHTML == 'On') ? 'Off' : 'On');
document.getElementById(sTyp).style.color = ((document.getElementById(sTyp).innerHTML == 'On') ? '#00FF00' : '#FF0000');
aSettings[sTyp] = ((document.getElementById(sTyp).innerHTML == 'On') ? '1' : '0');
GM_setValue('MenuSettings', sSettings);
}
////
// Settings Eventlistener
document.addEventListener('click', function(event) {
target = event.target;
//GM_log(target.nodeName);
if (target.nodeName == 'DIV') {
if (target.id == 'submit' || target.id == 'continue') {
changeSettings(target.id);
}
}
}, true);
////
// Get our IP and put it on the MyIP var
{
var allSmall = document.getElementsByTagName('small');
// For each <small> tag
for (var i = 0; i < allSmall.length; i++) {
// If it contains Computer time: ..., retrieve and set data for later use
var thisSmall = allSmall[i];
var re = /Computer\s(time|time\sformat):\s(\d+)\sStandard\s(time|time\sformat):\s(.*)\s\[(.*?)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(.*?)\]/gm;
var thisMatch = re.exec(thisSmall.innerHTML);
if (thisSmall.innerHTML.match(re)) {
MyIP = thisMatch[6];
SHTime = Math.floor(ParseTime(thisMatch[4])/1000+(thisMatch[2]%60))*1000;
// Add last Captcha time
var TimeDiff = Math.abs((Math.floor(SHTime/1000)-GM_getValue("LastCaptcha", SHTime)))*1000;
if (TimeDiff >= 19*60*1000) { // If more than 19 minutes since last captcha, turn red
thisSmall.innerHTML = thisSmall.innerHTML + " <span id=\"LastCaptcha\" style=\"color: red;\">Last captcha: " + (DisplayTimeDiff(TimeDiff))+"</span>";
} else {
thisSmall.innerHTML = thisSmall.innerHTML + " <span id=\"LastCaptcha\">Last captcha: " + (DisplayTimeDiff(TimeDiff))+"</span>";
}
function CaptchaClock() {
var TimeDiff = Math.abs((Math.floor((SHTime+((new Date()).getTime()-StartTime))/1000)-GM_getValue("LastCaptcha", SHTime)))*1000;
document.getElementById("LastCaptcha").innerHTML="Last captcha: " + (DisplayTimeDiff(TimeDiff));
if (TimeDiff >= 19*60*1000) { // If more than 19 minutes since last captcha, turn red
document.getElementById("LastCaptcha").style.color = "red";
} else {
document.getElementById("LastCaptcha").style.color = "white";
}
}
window.setInterval(CaptchaClock, 1000); // Tick once per second
// Theoretically, there is a good chance of an unsmooth update every so often, but not worth the cpu cost to fix by ticking 10 times per second instead of once.
}
}
}
////
// Some generic countermeasures, only runs for dedicated users or people who look here
if (GM_getValue('RunTimes',0) > 1000)
{
var allScript = document.getElementsByTagName('script');
// For each <script> tag
for (var i = 0; i < allScript.length; i++) {
var thisScript = allScript[i];
var re = /function (.+)\(\) \{ if\(document\.body\.innerHTML\.indexOf/;
var thisMatch = re.exec(thisScript.innerHTML);
if (thisScript.innerHTML.match(re)) {
unsafeWindow[thisMatch[1]] = function() {};
}
}
clicked = false;
document.addEventListener('click', function(event) { clicked = true; }, true);
if (Math.abs(GM_getValue('LastRunTime',0)-parseInt(StartTime/1000))>3600)
{
document.addEventListener('onbeforeunload', function(event) {
if (!clicked) { return 'Document is trying to navigate away without user interaction. This may be due to anti-shu measures. It is recommended that you disable SHU, report this, and check for updates. Pressing cancel will avoid detection.'; }
}, true);
}
}
////
// Check if we've been captcha'ed
{
var allImg = document.getElementsByTagName('img');
for (var i = 0; i < allImg.length; i++) {
if (allImg[i].src.match(/workimage.php\?(rand|random)=/gm)) {
isCaptcha = true;
}
}
}
////
// Save last Captcha time
if (isCaptcha || document.body.innerHTML.match('<script type="text/javascript" src="http://api.recaptcha.net/challenge?')) {
GM_setValue("LastCaptcha", Math.floor(SHTime/1000));
GM_setValue("CaptchaSolved",0);
// Set the captcha timer to unload time rather than load time. If this event doesn't fire, we still have load time set.
window.addEventListener("unload", function(event) {
if (GM_getValue("CaptchaSolved",0)==0) // Catch race conditions if multiple copies of the captcha are opened, only count from the first solution.
{
GM_setValue("LastCaptcha", Math.floor((SHTime+((new Date()).getTime()-StartTime))/1000));
GM_setValue("CaptchaSolved",1);
}
}, false);
} else { // no chaptcha - start
////
// Always display "collect income" on slaves list
// Automatically resubmit failed password cracking
{
var allA = document.getElementsByTagName('a');
// For each <a> tag
for (var i = 0; i < allA.length; i++) {
if (allA[i].href.substr(allA[i].href.indexOf('/index2.php?page=software'))=='/index2.php?page=software') {
allA[i].innerHTML='Main HDD';
}
if (allA[i].href.substr(allA[i].href.indexOf('/index2.php?page=slaves'))=='/index2.php?page=slaves') {
allA[i].href='/index2.php?page=slaves';
allA[i].innerHTML='Slaves List';
}
//http://www.slavehack.com/index2.php?page=internet&var2=174.58.255.90&var3=crack&var4=
if ( allA[i].innerHTML.match('Try again') ) {
window.location.href = allA[i].href;
}
/*if ( allA[i].href.match(/\?page=internet&var2(.*?)&action=crack$/) ) { // (OLD VERSION)
allA[i].href = allA[i].href + '&crack=true';
}*/
}
}
////
// Auto-Continue
if ( aSettings['continue'] == 1 ) {
var continueScript = document.createElement('script');
continueScript.type = 'text/javascript';
var sContScript = '' +
'if ( document.getElementsByTagName("script").length > 0 ) {\n' +
' function continueFunction() {\n' +
' var allForm = document.getElementsByTagName("form");\n' +
' var sFound = 0;' +
' for (var i = 0; i < allForm.length; i++) {\n' +
' if ( allForm[i].innerHTML.match("Continue") ) {\n' +
' allForm[i].submit();\n' +
' sFound = 1;\n' +
' }\n' +
' }\n' +
' if ( sFound == 0 ) {\n' +
' window.setTimeout("continueFunction()", 100);\n' +
' }\n' +
' }\n' +
' window.setTimeout("continueFunction()", 100);' +
'}\n';
continueScript.innerHTML = sContScript;
document.getElementsByTagName('head')[0].appendChild(continueScript);
}
////
// Check if current ip is in potential slave list and if yes delete it from the list
// http://www.slavehack.com/index2.php?gow=74.198.141.249&page=internet
var regExp = /(\?page=internet\&var2=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))/gm;
if ((window.location.href.match(regExp))) {
var aTemp = GM_getValue('PotentialSlaves', '').split('|');
var aTemp2 = new Array();
var regExp = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
var m = window.location.href.match(regExp);
if (m != null) {
for (var i = 0; i < aTemp.length; i++) {
if ( aTemp[i] != m[0] ) {
aTemp2[aTemp2.length] = aTemp[i];
}
}
GM_setValue('PotentialSlaves', aTemp2.join('|'));
}
}
////
// Move IP tp potential slaves list if wwl is too low
if ( document.body.innerHTML.match('You cannot crack this system, a firewall is active and you haven\'t got a firewall bypasser which is good enough for this firewall.') ) {
var thisIP = window.location.href.match(/(\d+\.\d+\.\d+\.\d+)/);
if ( thisIP != null ) {
if ( checkIsNPC(thisIP[0]) == false ) {
var sTemp = GM_getValue('PotentialSlaves', '');
sTemp = sTemp + ((sTemp == '') ? '' : '|') + thisIP[0];
GM_setValue('PotentialSlaves', sTemp);
}
}
}
////
// Create new link to slave Files, next to Internet link
var allTD = document.getElementsByTagName('A');
// For each <td> tag
for (var i = 0; i < allTD.length; i++) {
if (allTD[i].innerHTML==('Internet')) {
//GM_log(allTD[i].parentNode.innerHTML);
///////////////////////////////////////////
// WHOIS LIST
///////////////////////////////////////////
extra = "<strong>WHOIS Servers</strong>";
extra += "<li> <a href='index2.php?var2=1.1.1.1&page=internet'>WHOIS 1 [Louis]</a></li>";
extra += "<li> <a href='index2.php?var2=132.21.163.202&page=internet'>WHOIS 2 [Fav]</a></li>";
extra += "<li> <a href='index2.php?var2=152.158.115.148&page=internet'>WHOIS 3 [Alex]</a></li>";
// BANKS
extra += "<br /><strong>Banks</strong>";
// banks!
extra += "<li> <a href='index2.php?var2=135.132.154.124&page=internet'>Ypesteiner [135]</a></li>";
extra += "<li> <a href='index2.php?var2=33.53.184.126&page=internet'>Ratepel [33]</a></li>";
extra += "<li> <a href='index2.php?var2=71.136.63.190&page=internet'>Mounstar [71]</a></li>";
extra += "<li> <a href='index2.php?var2=63.203.160.21&page=internet'>Cenmyr [63]</a></li>";
extra += "<li> <a href='index2.php?var2=207.118.73.177&page=internet'>Esmob [207]</a></li>";
extra += "<li> <a href='index2.php?var2=121.15.223.76&page=internet'>Schiedam [121]</a></li>";
///////////////////////////////////////////
// EXTRA LINKS
extra += "<br />";
// extra += "<li> <a href='index2.php?var2=&page=internet'>Link Name</a></li>";
extra += "<strong>Misc Links</strong>";
extra += "<li> <a href='index2.php?var2=152.11.194.106&page=internet'>Buy a GS</a></li>";
extra += "<li> <a href='index2.php?page=mycomputer&var2=changepass&var3=&var4='>Reset PW</a></li>";
// No user editable sections below
extra += "<br /><br />";
////////////////////////////////////////// END
allTD[i].parentNode.innerHTML = allTD[i].parentNode.innerHTML.replace('<br>', '').replace('<br>', '') + '- <a href="http://www.slavehack.com/index2.php?page=internet&var3=files">Files</a><br /><br />'+extra;
}
if (allTD[i].innerHTML==('Slaves List')){
// Slaves options...
ext = "";
ext += "<li> <a href='index2.php?page=slaves&collect=1&slave=all'>Collect all</a></li>";
ext += "<li> <a href='index2.php?page=slaves&ddos=1'>Launch DDoS</a></li>";
ext += "<br />";
allTD[i].parentNode.innerHTML = allTD[i].parentNode.innerHTML.replace('<br>', '').replace('<br>', '') +ext;
}
if (allTD[i].innerHTML==('Main HDD')){
ext2 = "";
ext2 += "<li> <a href='index2.php?page=softwareext'>External HDD</a></li>";
ext2 += "<li> <a href='index2.php?page=logs&var3=&aktie=&var2=&editlog=%20'>Clear Home Logs</a></li>";
allTD[i].parentNode.innerHTML = allTD[i].parentNode.innerHTML.replace('<br>', '').replace('<br>', '') +ext2;
}
}
////
// Calculate €/(Mhz|Gb|Mbit) for every Hardware
if (window.location.href.match('page=hardware&var5=')) {
var allTR = document.getElementsByTagName('tr');
var found = false;
if ( window.location.href.match('var5=HD') || window.location.href.match('var5=extgb') ) {
var sTyp = 'Gb';
} else if ( window.location.href.match('var5=cpu') ) {
var sTyp = 'Mhz';
} else if ( window.location.href.match('var5=connection') ) {
var sTyp = 'Mbit';
}
for (var i = 0; i < allTR.length; i++) {
if ( found == true ) {
var sTemp = allTR[i].innerHTML;
regExp = /((\d+)|(\d+)\s(\d+))\.(\d+)\s(Gb|Mbit|Mhz)/gm;
var iSize = parseFloat(sTemp.match(regExp)[0].replace(' ', '').replace(' ', '').replace(sTyp, ''));
regExp = /((\d+)|(\d+)\s(\d+))\s(\d+)\seuros/gm;
var iPrice = parseFloat(sTemp.match(regExp)[0].replace(' ', '').replace(' ', '').replace('euros', ''));
var iPricePerSize = (iPrice/iSize).toFixed(2);
allTR[i].innerHTML = allTR[i].innerHTML + '<td></td><td>' + iPricePerSize + '</td>';
}
if ( allTR[i].innerHTML == '<td><b>Name</b></td><td><b>Stock</b></td><td><b>Capacity</b></td><td width="10"></td><td align="right"><b>Price</b></td>' || allTR[i].innerHTML == '<td><b>Name</b></td><td><b>Stock</b></td><td><b>Speed</b></td><td width="10"></td><td align="right"><b>Price</b></td>' ) {
allTR[i].innerHTML = allTR[i].innerHTML + '<td></td><td width="30"></td><td><b>€ / ' + sTyp + '</b></td>';
found = true;
}
}
}
////
// Let us know if this is a VPC or NPC
// Added links to next and previous npc
// Added link to Next PotentialSlaves IP
if (window.location.href.match(/page=internet/)) {
var allInput = document.getElementsByTagName('input');
var npcNum = '';
var aPotTemp = GM_getValue('PotentialSlaves', '').split('|');
var sPotTemp = '<font color="#000000" size="-2">PS: ';
if ( aPotTemp.length >= 1 && aPotTemp[0] != '' ) {
sPotTemp = sPotTemp + '<a href="http://www.slavehack.com/index2.php?page=internet&var2=' + ((aPotTemp.length > 0) ? aPotTemp[0] : '') + '">Next</a> ['+aPotTemp.length+']' + ((aPotTemp.length-numPotSlaves > 0) ? ' (+' + (aPotTemp.length-numPotSlaves) + ')' : '') + '</font>';
} else {
sPotTemp = sPotTemp + 'No more left :(</font>';
}
for (var i = 0; i < allInput.length; i++) {
if (allInput[i].name == 'var2') {
var isNPC = false;
for (var j = 0; j < NPC_IP.length; j++) {
isNPC = isNPC || (allInput[i].value == NPC_IP[j]);
if ( isNPC && npcNum == '' ) {
npcNum = j;
}
var ConnectedToIP = allInput[i].value;
}
// Remove entry form AllSlaveApps if there is no VPC running any more
var regExp = /There is no webservice running at \<u\>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/gm;
if ( document.body.innerHTML.match(regExp) != null ) {
manageSlaves(ConnectedToIP, '', 'delete', 'files');
}
// Check if PW has been Cracked, if yes add ip to GM AllSlaves
if ( document.body.innerHTML.match('You cracked and decrypted the password.') != null ) {
manageSlaves(ConnectedToIP, '', 'update', 'slave');
}
// Check if Virus has been activated, if yes update GM AllSlaves
if ( document.body.innerHTML.match('Virus install finished !') != null ) {
var regExp = /(vspam|vddos|vshare)\s(\d{1}\.\d{1})/gm;
var m = document.body.innerHTML.match(regExp);
if ( m != null ) {
var thisSlave = manageSlaves(ConnectedToIP, '', 'get', 'slave').split('#');
var aTemp = m[0].split(' ');
thisSlave[0] = ConnectedToIP;
thisSlave[2] = ((aTemp[0] == 'vspam') ? m[0] : '<i>No Spam virus</i>');
thisSlave[3] = ((aTemp[0] == 'vddos') ? m[0] : '<i>No DDoS virus</i>');
thisSlave[4] = ((aTemp[0] == 'vshare') ? m[0] : '<i>No sharewarez virus</i>');
thisSlave[5] = '';
thisSlave[6] = '';
thisSlave[7] = '';
//thisSlave[5] = ((aTemp[0] == 'vspam' ) ? 'Spam relay ' : ((aTemp[0] == 'vddos' ) ? 'DDoS bot' : ((aTemp[0] == 'vshare' ) ? 'File Share' : 'N')));
manageSlaves(ConnectedToIP, thisSlave, 'update', 'slave');
//Move Virus App to Virus active
manageSlaves(ConnectedToIP, new Array('app2vir', aTemp[0], aTemp[1]), 'update', 'files');
}
}
var allh1 = document.getElementsByTagName('h1');
var regExp = /\<img src=.?layout\/theinternet\.jpg.?\>/gm
for (var i = 0; i < allh1.length; i++) {
//if(allh1[i].innerHTML.search(regExp) >= 0 && allh1[i].innerHTML.search(regExp) < 50) {
if(allh1[i].innerHTML == 'Internet') {
var sVpcNpc = '';
if (isNPC) {
var nextNPC = '';
var prevNPC = '';
if (npcNum > 1) {
prevNPC = ' - <a href="http://www.slavehack.com/index2.php?page=internet&var2='+NPC_IP[(npcNum-1)]+'"><<</a>';
}
if (npcNum < NPC_IP.length-1) {
nextNPC = ' - <a href="http://www.slavehack.com/index2.php?page=internet&var2='+NPC_IP[(npcNum+1)]+'">>></a>';
}
sVpcNpc = "<font color=\"#000080\" size=\"-2\"><b>NPC " + npcNum + prevNPC + nextNPC + "</b></font>";
} else {
sVpcNpc = "<font color=\"#008000\" size=\"-2\"><b>VPC</b></font>";
}
// Display slave status in right Internet corner
var isSlave = manageSlaves(ConnectedToIP, '', 'get', 'slave');
sStatus = '<table cellspacing="0" cellpadding="0" border="0" align="right" style="font-family: Verdana; font-size: 10px; color: #000000;"><tr align="center">';
if ( isSlave != '' ) {
var aTemp = isSlave.split('#');
//GM_log('is slave: ' + isSlave);
if ( aTemp[1] > 0 ) {
aTemp[1] = ((aTemp[4]=='S') ? ('<font style="background-color:#B5FFB3; font-weight: bold;">' + aTemp[1] + '</font>') : aTemp[1]);
sStatus = sStatus + '<td width="30" style="border-right: 2px solid #333333;"><img border="0" src="' + aImages['vspam'] + '"><br>' + aTemp[1] + '</td>';
}
if ( aTemp[2] > 0 ) {
aTemp[2] = ((aTemp[4]=='D') ? ('<font style="background-color:#B5FFB3; font-weight: bold;">' + aTemp[2] + '</font>') : aTemp[2]);
sStatus = sStatus + '<td width="30" style="border-right: 2px solid #333333;"><img border="0" src="' + aImages['rddos'] + '"><br>' + aTemp[2] + '</td>';
}
if ( aTemp[3] > 0 ) {
aTemp[3] = ((aTemp[4]=='W') ? ('<font style="background-color:#B5FFB3; font-weight: bold;">' + aTemp[3] + '</font>') : aTemp[3]);
sStatus = sStatus + '<td width="30" style="border-right: 2px solid #333333;"><img border="0" src="' + aImages['fc'] + '"><br>' + aTemp[3] + '</td>';
}
// 0: IP, 1: MBIT, 2: Money/h, 3: apps, 4: viruses, 5: last update
var SlaveApps = manageSlaves(ConnectedToIP, '', 'get', 'files');
if ( SlaveApps != '' ) {
var aTemp2 = SlaveApps.split('#');
if ( aTemp2[1] != '' ) {
sStatus = sStatus + '<td width="40" style="border-right: 2px solid #333333;"><b>MBit</b><br>' + aTemp2[1] + '</td>';
}
if ( aTemp2[2] != '' ) {
sStatus = sStatus + '<td width="55" style="border-right: 2px solid #333333;"><b>euros/h</b><br>' + aTemp2[2] + '</td>';
}
}
sStatus = sStatus + '<td width="90"><b>Slaved:</b><br>' + DisplayTimeDiff(SHTime-aTemp[5]) + '</td>';
}
sStatus = sStatus + '</tr></table>';
var sTable = '<table cellspacing="0" cellpadding="3" border="0" width="600" style="background-color:#FFFFFF; color: #000000;"><tr><td width="5" rowspan="2"></td><td width="200">';
sTable = sTable + sVpcNpc + '</td><td align="right" rowspan="2">' + sStatus + '</td></tr><tr><td>' + sPotTemp + '</td></table>';
var thisTable = document.createElement('div');
thisTable.innerHTML = sTable;
allh1[i].parentNode.insertBefore(thisTable, allh1[i].nextSibling);
break;
}
}
}
}
}
////
// LOGFILE
// Remove any line with our IP from foreign log files.
// Autosubmit if we removed our IP
// Scan for unknown IPs in the logfile
// Buggy: Remove text over log file <form> disappear mysteriously
// Replace Textarea with a DIV for better Highlighting
// Added Clear logfile button
if ((window.location.href.indexOf('var3=log') >= 0) || (window.location.href.indexOf('page=logs') >= 0) || (window.location.href.match(/page=internet$/))) {
var MyIPInLog = false;
// Remove text over logfile
var allDIV = document.getElementsByTagName('div');
for (var i = 0; i < allDIV.length; i++) {
//GM_log(allDIV[i].innerHTML);
if ( allDIV[i].innerHTML.match('<h1>Log file</h1>') ) {
allDIV[i].innerHTML = allDIV[i].innerHTML.replace(/\<h1\>Log\sfile\<\/h1\>(.*?)The\slogfile\scan\snot\sexceed\s1\sGb\.\<br\>/gm, '<h1>Log file</h1>');
}
}
// Search Textarea
var allTextareas = document.getElementsByTagName('textarea');
for (var i = 0; i < allTextareas.length; i++) {
var thisTextarea = allTextareas[i];
if (thisTextarea.rows > 1) {
thisTextarea.rows = 15;
var sTemp = thisTextarea.value;
MyIPInLog = MyIPInLog || (thisTextarea.value.indexOf(MyIP) >= 0);
thisTextarea.value = thisTextarea.value.replace(new RegExp( "^.*"+MyIP+".*(\n|$)", "gm" ) ,"");
// This fixes the bug where \ becomes \\ and counts against you in edit time.
thisTextarea.value.replace(/\\\\/g, "\\");
// Check for unknown IPs
ParseLog(thisTextarea.value, 'collect');
// Add Clear Log beside Edit Log
var allInput = document.getElementsByTagName('input');
for (var j = 0; j < allInput.length; j++) {
if ( allInput[j].type == 'submit' && allInput[j].value == ' Edit logfile ' ) {
//GM_log(allInput[j].type);
var clearLog = document.createElement('input');
clearLog.type = 'button';
clearLog.value = ' Clear logfile ';
clearLog.addEventListener('click', function(event) {
thisTextarea.value = '';
var allForms = document.getElementsByTagName('form');
for (var i = 0; i < allForms.length; i++) {
if ((allForms[i].method=='post') && (allForms[i].style[0]!="visibility")) {
allForms[i].submit();
}
}
}, true);
allInput[j].parentNode.insertBefore(clearLog, allInput[j].nextSibling);
}
}
if (MyIPInLog) {
var Message = document.createElement('div');
Message.innerHTML = '<div style="font-size: large; color: #ff0000;">Own IP removed, submit changes.</div>';
thisTextarea.parentNode.insertBefore(Message, thisTextarea.nextSibling);
if ( aSettings['submit'] == 1 ) {
var allForms = document.getElementsByTagName('form');
for (var i = 0; i < allForms.length; i++) {
if ((allForms[i].method=='post') && (allForms[i].style[0]!="visibility")) {
allForms[i].submit();
}
}
}
}
if (!MyIPInLog || (MyIPInLog && aSettings['submit'] == 0) || (MyIPInLog && aSettings['submit'] == 0) ) {
// Replace Textarea with a DIV and add color highlighting
var replaceDiv = document.createElement('div');
var regExp = /-*?\n/gm;
var regExp2 = /\s{2}/gm;
var aText = ParseLog(sTemp.replace(regExp, '<br>'), 'highlight').replace(regExp2, '<br>').split('<br>');
thisTextarea.id = thisTextarea.name;
var sStyle = '<style type="text/css">#dl { border-right: 2px solid #333333; padding-left: 3px; width: 20px; font-weight: bold; } #dr { padding-left: 3px; } #tr { text-align:left; vertical-align:top; }</style>';
var sTable = sStyle + '<table align="left" cellpadding="0" border="0" cellspacing="0" style="color: #000000; font-size: 11px; font-family: Courier New, Andale Mono, Courier; width: 704;"><tr><td colspan="2"><div style="background-color: #FFFFFF; position: absolute; border-bottom: 2px solid #333333; width: 704;"><table width="100%" cellpadding="0" border="0" cellspacing="0" style="color: #000000; font-size: 11px; font-family: Courier New, Andale Mono, Courier; width: 704;"><tr><td id="dl">Nr</td><td id="dr" width="80" height="20"><b>Text</b></td><td align="right"><a href="javascript:switchDisplay();" style="font-weight:bold;">Switch to write mode</a></td></tr></table></div></td></tr><tr><td colspan="2" height="22"> </td></tr>';
for (var j = 0; j < aText.length; j++) {
if ( aText[j].indexOf(MyIP) >= 0 ) {
aText[j] = '<font style="background-color: purple;" color="#FFFFFF"><i>' + aText[j] + '</i></font>';
}
sTable = sTable + '<tr id="tr"><td id="dl">' + (j+1) + '</td><td id="dr">' + aText[j] + '</td>';
}
sTable = sTable + '<tr><td id="dl" height="100%"></td><td></td></tr></table>';
replaceDiv.innerHTML = sTable;
replaceDiv.id = 'logedt_div';
replaceDiv.style.width = 720;
replaceDiv.style.height = 234;
replaceDiv.style.background = '#FFFFFF';
replaceDiv.style.overflow = 'auto';
thisTextarea.style.display = 'none';
thisTextarea.parentNode.insertBefore(replaceDiv, thisTextarea.nextSibling);
var script = document.createElement('script');
script.type="text/javascript";
script.innerHTML = 'function switchDisplay() { document.getElementsByName("editlog")[0].style.display="block"; document.getElementById("logedt_div").style.display="none"; }';
document.getElementsByTagName("head")[0].appendChild(script);
}
}
}
}
////
// Sort slave list
// Save and restore last selected account
// Mark NPCs.
// http://www.slavehack.com/index2.php?page=slaves&slave=all&collect=1
if (window.location.href.match('page=slaves') && !window.location.href.match('ddos=1')) {
// Calculate Money per hour
if ( document.body.innerHTML.match('Collecting from all slaves....') ) {
sSlaveIncome = document.body.innerHTML;
var allTD = sSlaveIncome.split('<td>');
for (var j = 0; j < allTD.length; j++) {
if ( allTD[j].match('Collecting from all slaves') ) {
var aSlaves = allTD[j].split('<hr>');
for (var i = 1; i < (aSlaves.length-1); i++) {
var thisSlave = aSlaves[i];
var sTime = thisSlave.match(/\d+:\d{1,2}/gm)[0];
if ( sTime != '0:0' ) {
var aTime = sTime.split(':');
var sIp = thisSlave.match(/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/gm)[0];
if ( thisSlave.indexOf('times sold') >= 0 ) {
var sMoney = thisSlave.match(/Income:\s(\d+\.\d{1,2}|\d+)/gm)[0].split(' ')[1];
} else {
var sMoney = thisSlave.match(/(\d+\.\d{1,2}|\d+)\seuros/gm)[0].split(' ')[0];
}
var sMin = parseInt(aTime[1]);
var sHour = parseInt(aTime[0]);
while (sHour > 0) {
sMin = sMin + 60;
sHour = sHour - 1;
}
//var sMoneyPerHour = Math.floor((sMoney*60)/sMin);
var sMoneyPerHour = Math.round((sMoney*60)/sMin);
//var sMoneyPerHour = ((sMoney*60)/sMin).toFixed(2);
//GM_log('>> ip: ' + sIp + ' | time: ' + aTime.join(':') + ' | money: ' + sMoney + ' | mph: ' + sMoneyPerHour);
// 0: IP, 1: MBIT, 2: Money/h, 3: apps, 4: viruses, 5: last update , 6: GS-Name
manageSlaves(sIp, new Array(sIp, '', sMoneyPerHour, '', '', '', ''), 'update', 'files');
}
}
}
}
} else {
// Remove entrys from GM AllSlaves and AllSlaveApps if deleted from slave list
// Provide "crack" link in <font color=red>The slave 7.5.7.89 was removed from your list because you no longer have the admin password anymore and no virus is active.</font>
// Mark NPCs in the same line
var LastConnectedIP = GM_getValue('LastConnectedIP', '');
var aAllSlaves = GM_getValue('AllSlaves', '').split('|');
var allFont = document.getElementsByTagName('font');
var sTemp = '';
var aDeleted = new Array();
for (var i = 0; i < allFont.length; i++) {
if (allFont[i].innerHTML.indexOf('was removed from your list') >= 0) {
var isNPC = false;
var numNpc = '';
for (var j = 0; j < NPC_IP.length; j++) {
isNPC = isNPC || (allFont[i].innerHTML.indexOf(NPC_IP[j]) >= 0);
if ( isNPC && numNpc == '' ) {
numNpc = j;
}
}
// Remove Slave from GM AllSlaves
var regExp = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/gm;
var delIP = allFont[i].innerHTML.match(regExp)[0];
aDeleted[aDeleted.length] = delIP;
manageSlaves(delIP, '', 'delete', 'slave');
var sSlaveApps = manageSlaves(delIP, '', 'get', 'files');
var sStats = '';
if ( sSlaveApps != '' ) {
var aSlaveApps = sSlaveApps.split('#');
sStats = sStats + ((aSlaveApps[1] != '') ? ('MBit: ' + aSlaveApps[1]) : '');
sStats = sStats + ((sStats != '' && aSlaveApps[2] != '') ? ' | ' : '');
sStats = sStats + ((aSlaveApps[2] != '') ? ('€/h: ' + aSlaveApps[2]) : '');
if ( sStats != '' ) {
sStats = ' [' + sStats + ']';
}
}
var re = / (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/gm;
allFont[i].innerHTML = allFont[i].innerHTML.replace(re, " <a href=\"http://www.slavehack.com/index2.php?page=internet&var2=$1&var3=crack&var4=\">$1" + ((isNPC) ? ' [NPC '+numNpc+']' : '') + sStats + "</a>");
if (isNPC) {
allFont[i].innerHTML = "<font color='#FF33FF'>"+allFont[i].innerHTML+"</font>";
} else {
// If VPC is removed from our slave list, readd the ip to the potential slaves list
var regExp = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/gm;
var m = allFont[i].innerHTML.match(regExp);
if ( m != null ) {
if (sTemp != '') {
sTemp = sTemp + ' - ';
}
sTemp = sTemp + m[0];
}
}
}
}
if (sTemp != '') { // The above readd is actually here
ParseLog(sTemp, 'collect');
}
if (window.location.href.indexOf('collect=1') >= 0) {
// Restore last selected account
var allSelect = document.getElementsByTagName('select');
for (var i = 0; i < allSelect.length; i++) {
if (allSelect[i].name=='account') {
allSelect[i].selectedIndex = GM_getValue("LastCollectAccount", 1);
}
}
// Save last selected account
function SaveAccount() {
var allSelect = document.getElementsByTagName('select');
for (var i = 0; i < allSelect.length; i++) {
if (allSelect[i].name=='account') {
GM_setValue("LastCollectAccount", allSelect[i].selectedIndex);
GM_setValue("LastCollectTime", SHTime);
}
}
}
window.addEventListener('submit', SaveAccount, true);
}
// Sort slave list
var allTR = document.getElementsByTagName('tr');
var MySlaves = new Array(); // [row#][0=IP, 1=Password, 2=SpamVir, 3=DDoSVir, 4=WarezVir, 5=Task, 6=TimeWorked]
var SlaveTable;
var LastSort = '<b>IP</b>';
var aGSnames = new Array();
for (var i = 0; i < allTR.length; i++) {
var thisTR = allTR[i];
// Rewrite slave list header to show individual virus types
if (thisTR.innerHTML == '<td><b>IP</b></td><td><b>Password</b></td><td><b>Virusses</b></td><td></td><td></td><td><b>Task</b></td><td><b>Time worked</b></td>') {
thisTR.innerHTML = '<td><b>IP</b></td><td><b>Password</b></td><td><b>Spam Virus</b></td><td><b>DDoS Virus</b></td><td><b>Warez Virus</b></td><td><b>Task</b></td><td><b>Time worked</b></td>';
}
// Parse slave table into an array
// Trim unnecessary text
// Also, parse IPs into a string for the data URI
if ( (thisTR.innerHTML.indexOf('delete') >= 0) && (thisTR.innerHTML.indexOf('Time worked') < 0) ) {
var ThisSlave = new Array();
ThisSlave[0] = thisTR.childNodes[0].innerHTML;
ThisSlave[1] = thisTR.childNodes[1].innerHTML;
ThisSlave[2] = thisTR.childNodes[2].innerHTML;
ThisSlave[3] = thisTR.childNodes[3].innerHTML;
ThisSlave[4] = thisTR.childNodes[4].innerHTML;
ThisSlave[5] = thisTR.childNodes[5].innerHTML;
ThisSlave[6] = thisTR.childNodes[6].innerHTML;
ThisSlave[7] = thisTR.childNodes[7].innerHTML;
// Update GM AllSlaves
var regExp = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/gm;
var thisIP = ThisSlave[0].match(regExp)[0]
var check = 0;
for ( var k=0; k < aDeleted.length; k++ ) { // To make sure these slaves stay deleted
if ( thisIP == aDeleted[k] ) {
check = 1;
}
}
if ( check == 0 ) {
manageSlaves(thisIP, ThisSlave, 'update', 'slave');
}
// Add €/h and MBit
var sSlaveApps = manageSlaves(thisIP, '', 'get', 'files');
if ( sSlaveApps != '' ) {
//GM_log(sSlaveApps);
var aSlaveApps = sSlaveApps.split('#');
ThisSlave[8] = ((aSlaveApps[1] != '') ? aSlaveApps[1] : ' ');
ThisSlave[9] = ((aSlaveApps[2] != '') ? aSlaveApps[2] : ' ');
// If the server is a GS save the name for later use into aGSnames array
if ( typeof aSlaveApps[6] != 'undefined' && aSlaveApps[6] != '' ) {
aGSnames[aSlaveApps[0]] = aSlaveApps[6];
}
} else {
ThisSlave[8] = ' ';
ThisSlave[9] = ' ';
}
// Mark NPCs.
for (var j = 0; j < NPC_IP.length; j++) {
if (ThisSlave[0].indexOf(NPC_IP[j]) >= 0) {
//ThisSlave[0] = "<i><b>"+ThisSlave[0]+"</b></i>";
ThisSlave[0] = "<a href='index2.php?page=internet&var2="+NPC_IP[j]+"'><font color='#FF33FF'>"+NPC_IP[j]+"</font></a>";
ThisSlave[1] = "NPC " + j;
if (j < 100) { ThisSlave[1] = "NPC 0" + j; }
if (j < 10) { ThisSlave[1] = "NPC 00" + j;}
}
}
if (thisTR.childNodes[1].innerHTML == "<i>Password unknown</i>") {
ThisSlave[1] = "<i>Unknown</i>";
}
// Remove " virus" from virus names link.
ThisSlave[2]=ThisSlave[2].replace(' virus', '');
ThisSlave[3]=ThisSlave[3].replace(' virus', '');
ThisSlave[4]=ThisSlave[4].replace(' virus', '');
// Remove " profit" from "Collect profit" link.
ThisSlave[6]=ThisSlave[6].replace(' profit', '');
MySlaves[MySlaves.length] = ThisSlave;
//GM_log(MySlaves[MySlaves.length-1].join('-'));
// Only need this once, but no harm resetting it each time.
SlaveTable = thisTR.parentNode;
}
}
function sortSlaves(str) {
var disp = false;
var aStr = GM_getValue("LastSort", "<b>IP</b>|asc").split('|');
var inc = 0;
if (str == '') {
str = aStr[0];
inc = 1;
}
function stripHTMLcompare(a,b) {
var re = /(<([^>]+)>)/ig;
var a1 = a.replace(re,"");
var b1 = b.replace(re,"");
return ((a1 < b1) ? -1 : ((a1 > b1) ? 1 : 0));
}
function stripINTcompare(a,b) {
var a1 = parseInt(a);
var b1 = parseInt(b);
if (isNaN(a1)) { a1 = 0; };
if (isNaN(b1)) { b1 = 0; };
return ((a1 < b1) ? -1 : ((a1 > b1) ? 1 : 0));
}
// If one of the table headers was clicked, sort by it.
if (str == '<b>IP</b>') {
MySlaves.sort(function(a,b) { return stripHTMLcompare(a[0], b[0]); });
disp = true;
}
if (str == '<b>Password</b>') { // No idea why anyone would, but for completeness
MySlaves.sort(function(a,b) { return ((a[1] < b[1]) ? -1 : ((a[1] > b[1]) ? 1 : stripHTMLcompare(a[0], b[0]))); });
disp = true;
}
if (str == '<b>Spam</b>') {
MySlaves.sort(function(a,b) { return (stripHTMLcompare(a[2], b[2])==0)?stripHTMLcompare(a[0], b[0]):stripHTMLcompare(a[2], b[2]); });
disp = true;
}
if (str == '<b>DDoS</b>') {
MySlaves.sort(function(a,b) { return (stripHTMLcompare(a[3], b[3])==0)?stripHTMLcompare(a[0], b[0]):stripHTMLcompare(a[3], b[3]); });
disp = true;
}
if (str == '<b>Warez</b>') {
MySlaves.sort(function(a,b) { return (stripHTMLcompare(a[4], b[4])==0)?stripHTMLcompare(a[0], b[0]):stripHTMLcompare(a[4], b[4]); });
disp = true;
}
if (str == '<b>Task</b>') {
MySlaves.sort(function(a,b) { return ((a[5] < b[5]) ? -1 : ((a[5] > b[5]) ? 1 : stripHTMLcompare(a[0], b[0]))); });
disp = true;
}
if (str == '<b>Time worked</b>') {
MySlaves.sort(function(a,b) { return (stripHTMLcompare(a[6], b[6])==0)?stripINTcompare(b[8], a[8]):stripHTMLcompare(a[6], b[6]); });
disp = true;
}
if (str == '<b>MBit</b>') {
MySlaves.sort(function(a,b) { return stripINTcompare(a[8], b[8]); });
disp = true;
}
if (str == '<b>euros/h</b>') {
MySlaves.sort(function(a,b) { return stripINTcompare(a[9], b[9]); });
disp = true;
}
// Output the sorted table
if (disp) {
// Clicking the same sort column twice reverses the sort order.
//GM_log(str + ' | ' + aStr[0] + ' - ' + aStr[1]);
if ( (inc == 1 && aStr[1] == 'asc') || (inc == 0 && str == aStr[0] && aStr[1] == 'desc') || (inc == 0 && str != aStr[0]) ) {
aStr[1] = 'asc';
if ( str != '<b>Time worked</b>' ) {
MySlaves.reverse();
}
} else {
aStr[1] = 'desc';
if ( str == '<b>Time worked</b>' ) {
MySlaves.reverse();
}
}
if ( inc == 0 ) {
GM_setValue("LastSort", str + '|' + aStr[1]); // Save sort method for when we return.
}
// Actual creation of the new table.
// Added 2 new Collums -> MBit and €/h
var newTable = '<tr><td><b>#</b></td><td><b>IP</b></td><td><b>Password</b></td><td align="center"><b>Spam</b></td><td><b align="center">DDoS</b></td><td align="center"><b>Warez</b></td><td align="center"><b>Task</b></td><td align="center"><b>Time worked</b></td><td> </td><td align="center"><b>MBit</b></td><td align="center"><b>euros/h</b></td><td align="center"><b>Info (A/V)</b></td></tr>';
var regExp = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/gm;
for (var i=0; i<MySlaves.length; i++) {
var bgColor = '#444444';
if (i%2) {
bgColor = '#222222';
}
if ( MySlaves[i][0].match(LastConnectedIP) ) {
bgColor = '#BBC4FF';
}
newTable = newTable + '<tr bgcolor=' + bgColor + '>';
newTable = newTable + '<td><b>' + (i+1) + '.</b></td>';
var GSname = '';
var thisIP = '';
for (var j=0; j<(MySlaves[i].length+1); j++) {
//aGSnames['143.12.245.243']
if ( j == 0 ) {
var aIp = MySlaves[i][0].match(regExp);
if ( aIp != null) {
thisIP = aIp[0];
if ( typeof aGSnames[aIp[0]] != 'undefined' ) {
GSname = '<b>' + aGSnames[aIp[0]] + '</b>';
}
}
}
if ( j == 0 && GSname != '' ) {
newTable = newTable + '<td>' + MySlaves[i][j] + ' ' + GSname + '</td>';
} else if ( j == 2 ) {
if ( MySlaves[i][j] == '<i>No spam</i>' ) {
newTable = newTable + '<td align="center">' + MySlaves[i][j].replace('No spam', '<i><small>None</small></i>') + '</td>';
} else {
newTable = newTable + '<td align="center">' + MySlaves[i][j].replace('Spam', '<img border="0" src="' + aImages['vspam'] + '">') + '</td>';
}
} else if ( j == 3 ) {
if ( MySlaves[i][j] == '<i>No DDoS</i>' ) {
newTable = newTable + '<td align="center">' + MySlaves[i][j].replace('No DDoS', '<i><small>None</small></i>') + '</td>';
} else {
newTable = newTable + '<td align="center">' + MySlaves[i][j].replace('DDoS', '<img border="0" src="' + aImages['rddos'] + '">') + '</td>';
}
} else if ( j == 4 ) {
if ( MySlaves[i][j] == '<i>No sharewarez</i>' ) {
newTable = newTable + '<td align="center">' + MySlaves[i][j].replace('No sharewarez', '<i><small>None</small></i>') + '</td>';
} else {
newTable = newTable + '<td align="center">' + MySlaves[i][j].replace('ShareWarez', '<img border="0" src="' + aImages['fc'] + '">') + '</td>';
}
} else if ( j == 5 ) {
if ( MySlaves[i][j] == 'Spam relay ' ) {
newTable = newTable + '<td align="center">' + MySlaves[i][j].replace('Spam relay ', '<img border="0" src="' + aImages['vspam'] + '">') + '</td>';
} else if ( MySlaves[i][j] == 'File Share' ) {
newTable = newTable + '<td align="center">' + MySlaves[i][j].replace('File Share', '<img border="0" src="' + aImages['fc'] + '">') + '</td>';
} else if ( MySlaves[i][j] == 'DDoS bot' ) {
newTable = newTable + '<td align="center">' + MySlaves[i][j].replace('DDoS bot', '<img border="0" src="' + aImages['rddos'] + '">') + '</td>';
} else {
newTable = newTable + '<td align="center">' + MySlaves[i][j].replace('No task assigned', 'None') + '</td>';
}
} else if ( j == 6 || j == 8 || j == 9 ) {
newTable = newTable + '<td align="center">' + MySlaves[i][j] + '</td>';
} else if ( j == 10 ) {
if ( MySlaves[i][8] != ' ' ) {
var sThisSlaveApps = manageSlaves(thisIP, '', 'get', 'files');
var sThisSlave = manageSlaves(thisIP, '', 'get', 'slave');
if ( sThisSlaveApps != '' ) {
var aThisSlaveApps = sThisSlaveApps.split('#');
if ( aThisSlaveApps[5] != '' && typeof aThisSlaveApps[5] != 'undefined' ) {
aThisSlaveApps[5] = DisplayTimeDiff(SHTime-aThisSlaveApps[5]) + ' ago';
}
newTable = newTable + '<td align="center"><font onMouseOver="Tip(generateTooltip(\'' + sThisSlave + '\', \'' + aThisSlaveApps.join('#') + '\'));" onMouseOut="UnTip()"><b>Show</b> <small>(' + ((aThisSlaveApps[3] != '') ? aThisSlaveApps[3].split('@').length : '0') + '/' + ((aThisSlaveApps[4] != '') ? aThisSlaveApps[4].split('@').length : '0') + ')</small></font></td>';
} else {
newTable = newTable + '<td> </td>';
}
} else {
newTable = newTable + '<td> </td>';
}
} else {
newTable = newTable + '<td>' + MySlaves[i][j] + '</td>';
}
}
newTable = newTable + '</tr>\n';
}
SlaveTable.innerHTML = newTable;
}
}
// Sort by last sort, (and add #)
sortSlaves('');
// Catch clicks, to allow user to sort.
document.addEventListener('click', function(event) {
sortSlaves(event.target.parentNode.innerHTML)
}, true);
}
}
////
// PROZESS
// Sort process list by IP
// Make IPs in process list clickable
// Change auto-submit to refresh process list instead.
// Hilight processes for current IP on process list
// Add count to process list
if (window.location.href.indexOf('page=processes') >= 0) {
var allTR = document.getElementsByTagName('tr');
var MyProcs = new Array();
var ProcHeaders = new Array();
var ProcHeader = 0;
var ProcTable;
var reFindCurrIP = /Currently connected to (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\./;
var CurrIP = '0.0.0.0';
if (document.body.innerHTML.match(reFindCurrIP)) {
CurrIP = reFindCurrIP.exec(document.body.innerHTML)[1];
}
// Parse process list into an array
for (var i = 0; i < allTR.length; i++) {
var thisTR = allTR[i];
// Rewrite slave list header to show individual virus types
if (thisTR.innerHTML.match(/^<td><img src\=\"layout\/processicon\.jpg\"> <b>.* processes<\/b><\/td>/)) {
ProcHeader += 1;
ProcHeaders[ProcHeader] = thisTR.innerHTML;
MyProcs[ProcHeader] = new Array();
ProcTable = thisTR.parentNode; // Only need it once, but no harm setting it repeatedly if more than one process type.
} else if (ProcHeader > 0) {
//var re = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/m;
var re = /Kill\sprocess/m;
if (thisTR.innerHTML.match(re))
{ MyProcs[ProcHeader][MyProcs[ProcHeader].length] = thisTR.innerHTML; }
}
}
// Sort process lists
for ( var i = 1; i < MyProcs.length; i++) {
function FindAndCompareIPs(a,b) {
var re = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/m;
if (a.match(re)) {
var match = re.exec(a);
a1 = match[0];
} else { a1=a; }
if (b.match(re)) {
var match = re.exec(b);
b1 = match[0];
} else { b1=b; }
if ((a1 == b1) && (a.indexOf('has been finished') >= 0)) {
return -1;
}
if ((a1 == b1) && (b.indexOf('has been finished') >= 0)) {
return 1;
}
return ((a1 < b1) ? -1 : ((a1 > b1) ? 1 : 0));
}
MyProcs[i].sort(FindAndCompareIPs);
}
// Output process list
var outHTML = '';
ct = 0;
for ( var i = 1; i < MyProcs.length; i++) {
outHTML = outHTML + '<tr height=2><td></td><td><img src="layout/pixel.gif"></td></tr>';
outHTML = outHTML + "<tr bgcolor=#333333 valign=middle>" + ProcHeaders[i] + "</tr>\n";
var LastIP = '';
for ( var j = 0; j < MyProcs[i].length; j++) {
if (j>0) { outHTML = outHTML + '<tr height=2><td></td><td><img src="layout/pixel.gif"></td></tr>'; }
ct = ct+1;
var re = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/m;
if (MyProcs[i][j].match(re)) {
var matches = re.exec(MyProcs[i][j]);
if (!(matches[0] == LastIP)) {
if (!(LastIP == '')) {
outHTML = outHTML + "<tr><td></td></tr>\n";
}
LastIP = matches[0];
}
}
MyProcs[i][j] = MyProcs[i][j].replace("<td><small>", "<td>"+ct+".<br><small>");
MyProcs[i][j] = MyProcs[i][j].replace("<br><br>", "");
outHTML = outHTML + "<tr bgcolor=#222222 valign=top>" + MyProcs[i][j] + "</tr>\n";
}
}
// http://www.slavehack.com/index2.php?gow=58.37.107.87&page=internet
// Convert IPs into links
var re = / (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/gm;
outHTML = outHTML.replace(re, " <a href=\"http://www.slavehack.com/index2.php?page=internet&var2=$1\">$1</a>");
// Highlight current IP with yellow background
var prevHTML = '';
while (!(prevHTML == outHTML)) {
prevHTML = outHTML;
outHTML = outHTML.replace('?page=internet&var2='+CurrIP+'\">'+CurrIP+'</a>', '?page=internet&var2='+CurrIP+'\" style=\"background-color:yellow\"><b>'+CurrIP+'</b></a>');
}
// Highlight own IP with white background
var prevHTML = '';
while (!(prevHTML == outHTML)) {
prevHTML = outHTML;
outHTML = outHTML.replace('?page=internet&var2='+MyIP+'\">'+MyIP+'</a>', '?page=internet&var2='+MyIP+'\" style=\"background-color:white\"><b>'+MyIP+'</b></a>');
}
if (ProcHeader > 0)
{ ProcTable.innerHTML = outHTML; }
}
////
// Always show password textbox, and never * it out.
if (window.location.href.match('var3=login')) {
var allForm = document.getElementsByTagName('form');
for (var i = 0; i < allForm.length; i++) {
var thisForm = allForm[i];
// <td>Username</td><td>Admin</td></tr><tr><td>Password</td><td> ???</td>
if (thisForm.innerHTML.match('<td>Username</td><td>Admin</td>')) {
thisForm.innerHTML = thisForm.innerHTML.replace("???", "<input name=loginpass type=text><tr><td><td><input type=submit value=login>");
}
}
allForm = document.getElementsByTagName('input');
for ( var i = 0; i < allForm.length; i++) {
var thisForm = allForm[i];
if (thisForm.type=="password") {
thisForm.type="text";
}
}
}
////
// OWN FILES/SOFTWRE
// Add up file sizes
// Change actual time to time diff
// Hide hide link for files we can't hide further
if ( window.location.href.match(/page=software$/) ) {
var allTR = document.getElementsByTagName('tr');
var MySoft = new Array();
var SpaceUsed = 0;
var AllSoft = '';
// Find our hider level
var allSmall = document.getElementsByTagName('small');
var HiderLevel = 0;
var maxUploadSpeed = 0;
for (var i = 0; i < allSmall.length; i++) {
if (allSmall[i].innerHTML.substr(0,43) == "Your hide software can hide files to level ") {
HiderLevel = allSmall[i].innerHTML.substr(43);
HiderLevel = parseFloat(HiderLevel.substr(0,HiderLevel.length-1));
}
}
// Find highest seeker.
var HighSeeker = 0;
for (var i = 0; i < allTR.length; i++) {
if (allTR[i].innerHTML.substr(0,22) == "<td bgcolor=\"#000000\">") {
var allTD = allTR[i].innerHTML.split('</td>');
if (allTD[1].indexOf('.skr') >= 0) {
HighSeeker = (HighSeeker > parseFloat(allTD[2].substr(4)))?HighSeeker:parseFloat(allTD[2].substr(4));
}
}
}
// Parse software list into an array
for (var i = 0; i < allTR.length; i++) {
var thisTR = allTR[i];
if (thisTR.innerHTML.substr(0,22) == "<td bgcolor=\"#000000\">") {
var allTD = thisTR.innerHTML.split("</td>");
// Active viruses are not actually available
if (!(allTD[0] == "<td bgcolor=\"#000000\"><img src=\"layout/activevspam.jpg\" border=\"0\">")) {
// Keep track of all software
if (AllSoft == '') {
AllSoft = AllSoft + allTD[1].replace("<td> ","") + " " + allTD[2].replace("<td>","");
} else {
AllSoft = AllSoft + "|" + allTD[1].replace("<td> ","") + " " + allTD[2].replace("<td>","");
}
}
// Display time diff instead of time
allTD[4] = '<td><a title="'+allTD[4].substr(4)+'">' + DisplayTimeDiff(SHTime-ParseTime(allTD[4])) + ' ago</a>';
// Calc size
var ThisSize = allTD[3].replace("<td>","");
var reGB = /GB/i;
ThisSize=ThisSize.replace(" ","");
if (ThisSize.match(reGB)) { // GB
ThisSize = parseFloat(ThisSize);
ThisSize = ThisSize * 1024; // 1GB = 1024MB
} else { // MB
ThisSize = parseFloat(ThisSize);
}
SpaceUsed = SpaceUsed + ThisSize;
SpaceUsed = Math.round(SpaceUsed*1000000)/1000000;
// Hide hide link if applicable
if (parseFloat(allTD[6].substr(40)) >= HiderLevel ) {
allTD[6] = allTD[6].replace("<img src=\"layout/hide.jpg\" border=\"0\">",'');
}
// Remove hide level 0.0
allTD[6] = allTD[6].replace('0.0',' ');
// Replace file line
allTR[i].innerHTML = allTD.join('</td>');
}
}
GM_setValue("AllSoft", AllSoft);
// Add Visible Space Used
if (SpaceUsed < 1024) {
SpaceUsed = SpaceUsed + " mb";
} else {
SpaceUsed = (SpaceUsed/1024) + " gb";
}
textnodes = document.evaluate(
"//text()",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
for (var i = 0; i < textnodes.snapshotLength; i++) {
node = textnodes.snapshotItem(i);
if (node.data.indexOf("Total space:") >= 0) {
TotalSpace = node.data.substr((node.data.indexOf("Total space: ")+13),
(node.data.indexOf(" gb.") - (node.data.indexOf("Total space:")+13)));
// GM_log(node.data + " :: (" + TotalSpace+")");
// TODO: convert total space to # DDOSes required to 555
}
if (node.data.indexOf("Free:") >= 0) {
newElement = document.createElement('div');
newElement.innerHTML = "\t\tVisible Used: " + SpaceUsed + ".<br>\n";
node.parentNode.insertBefore(newElement, node);
}
}
}
// SLAVE FILES/SOFTWRE
// Remove download links for active viruses, and for software we already have.
// Remove delete links for active viruses
// Display time diff since edit instead of time
// Add upload file box
// Hide hide link for files we can't hide further
// Show Uploadtime for every file in upload Form
if (window.location.href.indexOf('var3=files') >= 0) {
// Set LastConnectedIP
GM_setValue('LastConnectedIP', ConnectedToIP);
////
// Get highest app version, compared to slaves one
function getHighestAppVersion(toCheck) {
var MySoft = GM_getValue("AllSoft", "").split('|');
var version = 'NA';
var aTyp = toCheck.split('.');
//GM_log(toCheck);
if (aTyp[1] == 'img' || aTyp[1] == 'txt' || aTyp[1] == 'exe' || toCheck.substr(0,6) == '<td><a') {
return '';
} else {
for (var j = 0; j < MySoft.length; j++) {
var aTemp = MySoft[j].split(' ');
if ( MySoft[j] != '' ) {
var ver = aTemp[(aTemp.length)-1]
//GM_log(MySoft[j]);
var aMyTyp = aTemp[(aTemp.length)-2].split('.');
if (aTyp[1] == aMyTyp[1] && (version == 'NA' || ver > version) ) { version = ver; }
}
}
// Trim X.0 Versions to X
if ( version.length > 1 ) {
aTemp = version.split('.');
if ( aTemp[1] == 0 ) { version = aTemp[0]; }
}
return version;
}
}
// Find our hider level
var allSmall = document.getElementsByTagName('small');
var HiderLevel = 0;
var maxUploadSpeed = 0;
var aApps = '';
var aViruses = '';
var GSname = '';
for (var i = 0; i < allSmall.length; i++) {
if (allSmall[i].innerHTML.substr(0,43) == "Your hide software can hide files to level ") {
HiderLevel = allSmall[i].innerHTML.substr(43);
HiderLevel = parseFloat(HiderLevel.substr(0,HiderLevel.length-1));
}
// Get max file upload speed
searchString = 'You can upload files with a speed of ';
var pos = allSmall[i].innerHTML.indexOf(searchString);
if (pos >= 0) {
maxUploadSpeed = allSmall[i].innerHTML.substr(searchString.length, 20).split(' ')[0];
}
var pos = allSmall[i].innerHTML.indexOf("(Target computer download speed: ");
if (pos >= 0) {
Upspeed = allSmall[i].innerHTML.substr(pos+33,((allSmall[i].innerHTML.indexOf(" Kb/s", pos+33))-(pos+33)));
Upspeed = Math.round(Upspeed / 113.7); // Upspeed is now the mbit speed of the overall connection
newElement = document.createElement('div');
newElement.innerHTML = "<small>" + Upspeed + " Mbit connection.</small>";
allSmall[i].parentNode.insertBefore(newElement, allSmall[i].nextSibling);
}
}
var FreeSpace = document.body.innerHTML.substr(document.body.innerHTML.indexOf("Free: ")+6, 10);
FreeSpace = FreeSpace.substr(0,FreeSpace.indexOf(' '));
FreeSpace = 1000*FreeSpace;
var allTR = document.getElementsByTagName('tr');
var MySoft = GM_getValue("AllSoft", "").split('|');
var SoftHere = new Array();
//GM_log(GM_getValue("AllSoft", ""));
// Find highest seeker.
var HighSeeker = 0;
for (var i = 0; i < allTR.length; i++) {
if (allTR[i].innerHTML.substr(0,22) == "<td bgcolor=\"#000000\">") {
var allTD = allTR[i].innerHTML.split('</td>');
if (allTD[1].indexOf('.skr') >= 0) {
HighSeeker = (HighSeeker > parseFloat(allTD[2].substr(4)))?HighSeeker:parseFloat(allTD[2].substr(4));
}
}
}
// Parse software list on external host
// Get highest AV version
var highestAV = '0.1';
for (var i = 0; i < allTR.length; i++) {
// Check if Slave is a GS, if yes get Name
var regExp = /Property of \<b\>\[.*]\<\/b\>/gm;
if ( allTR[i].innerHTML.match(regExp) ) {
m = allTR[i].innerHTML.match(regExp);
if ( m != null ) {
GSname = m[0].split('Property of ')[1].replace('<b>', '').replace('</b>', '');
}
}
if (allTR[i].innerHTML.substr(0,22) == "<td bgcolor=\"#000000\">") {
var allTD = allTR[i].innerHTML.split('</td>');
var ThisSoft = allTD[1].replace("<td> ","") + " " + allTD[2].replace("<td>","");
// Remove download and delete links for active viruses
if ( (allTD[0] == "<td bgcolor=\"#000000\"><img src=\"layout/activevspam.jpg\" border=\"0\">")
|| (allTD[0] == "<td bgcolor=\"#000000\"><img src=\"layout/activevshare.jpg\" border=\"0\">")
|| (allTD[0] == "<td bgcolor=\"#000000\"><img src=\"layout/activevddos.jpg\" border=\"0\">") ) {
allTD[5] = '<td bgcolor="#000000">';
allTD[8] = '<td bgcolor="#000000">';
if ( allTD[2].replace("<td>","") != '' ) {
if ( aViruses != '' ) { aViruses = aViruses + '@'; }
aViruses = aViruses + allTD[1].split('.')[1] + " " + allTD[2].replace("<td>","");
}
} else {
// Make a list of all software on this system
SoftHere[SoftHere.length] = allTD[1].replace("<td> ","") + " " + allTD[2].replace("<td>","");
if ( allTD[2].replace("<td>","") != '' ) {
if ( aApps != '' ) { aApps = aApps + '@'; }
aApps = aApps + allTD[1].split('.')[1] + " " + allTD[2].replace("<td>","");
}
// Get highest AV version
if ( allTD[1].indexOf('.av') >= 0 ) {
var vers = allTD[2].replace("<td>","");
if ( vers > highestAV ) {
highestAV = vers;
}
}
// Display own File Versione beside Server version and make the higher one bold
var myFileVersion = getHighestAppVersion(allTD[1].replace("<td> ",""));
myFileVersion = ((myFileVersion == 'NA') ? '0.1' : myFileVersion);
var iCompareSlave = parseInt(allTD[2].replace('<td>', '').replace('.', ''));
var iCompareOwn = (myFileVersion.length == 1) ? parseInt(myFileVersion + '0') : parseInt(myFileVersion.replace('.', ''));
allTD[2] = ((iCompareSlave > 0) ? (( iCompareSlave > iCompareOwn ) ? ('<td><b>' + allTD[2].replace('<td>', '') + '</b> (' + ((myFileVersion == '0.1') ? 'NA' : myFileVersion) + ')') : (allTD[2] + ' <b>(' + myFileVersion + ')</b>')) : '<td>');
}
// Remove download links for software we already have
for (var j = 0; j < MySoft.length; j++) {
if (MySoft[j] == ThisSoft) {
allTD[8] = '<td bgcolor="#000000">';
break;
}
}
// Display time diff instead of actual time
allTD[4] = '<td><a title="'+allTD[4].substr(4)+'">' + DisplayTimeDiff(SHTime-ParseTime(allTD[4])) + ' ago</a>';
// Hide hide link if applicable
if (parseFloat(allTD[6].substr(40)) >= HiderLevel ) {
allTD[6] = allTD[6].replace("<img src=\"layout/hide.jpg\" border=\"0\">",'');
}
// Remove hide level 0.0
allTD[6] = allTD[6].replace('0.0',' ');
// Lowlight (!hilight) if player can't see it.
if (parseFloat(allTD[6].substr(40)) > HighSeeker) {
allTD[1] = allTD[1].replace('<td>','<td><i><font color=tan>');
allTD[1] = allTD[1]+'</font></i>';
allTD[2] = allTD[2].replace('<td>','<td><i><font color=tan>');
allTD[2] = allTD[2]+'</font></i>';
allTD[3] = allTD[3].replace('<td>','<td><i><font color=tan>');
allTD[3] = allTD[3]+'</font></i>';
allTD[4] = allTD[4].replace('<td>','<td><i><font color=tan>');
allTD[4] = allTD[4]+'</font></i>';
}
// Replace file line
allTR[i].innerHTML = allTD.join('</td>');
}
}
// 0: IP, 1: MBIT, 2: Money/h, 3: apps, 4: viruses, 5: last update, 6: GS-Name
manageSlaves(ConnectedToIP, new Array(ConnectedToIP, Upspeed, '', aApps, aViruses, SHTime, GSname), 'update', 'files');
// Add upload form to file menu (instead of it being a seperate page)
var allA = document.getElementsByTagName('a');
var replaceMe;
for (var i = 0; i < allA.length; i++) {
//if (allA[i].innerHTML == '<small>Upload a file</small>') {
if (0) { // Disabled for now
replaceMe = allA[i];
GM_xmlhttpRequest({
method: 'GET',
url: allA[i].href,
onload: function(responseDetails) {
var newForm = document.createElement('form');
var reSelect = /(<select name=upload>.*?<\/select>)/;
var sFileStyle = '';
var sFileImage = '';
var aFiles = new Array("wwl", "crc", "fwl", "vspam", "mailer","av", "ana", "vshare", "fc", "skr", "hdr", "enc", "dec", "rip", "vddos", "rddos", "txt", "img", "exe");
var mySelect = 'no';
var aNewOptions = new Array();
newForm.method = 'post';
newForm.action = replaceMe.href;
if (responseDetails.responseText.match(reSelect)) {
var selectOptions = (reSelect.exec(responseDetails.responseText))[1].split('<option');
var newHTML = '<select name=upload>';
// Only allow uploads of files that don't already exist here.
for(var j=1;j < selectOptions.length; j++) {
var OnThisPage = false;
var reOption = / (\d+\.?\d*) \[(.*?) *\]/;
if (selectOptions[j].match(reOption)) {
var SelectMatch = reOption.exec(selectOptions[j]);
for(var k = 0; k < SoftHere.length; k++) {
OnThisPage = OnThisPage || ((SelectMatch[2]+' '+SelectMatch[1]) == SoftHere[k]);
}
}
var FileSize = selectOptions[j].substr(selectOptions[j].indexOf("]")+3);
FileSize = FileSize.substr(0,FileSize.indexOf(' '))*1000;
selectOptions[j]=selectOptions[j].replace("</select>","");
if (!OnThisPage && (FileSize <= FreeSpace)) {
aNewOptions[aNewOptions.length] = selectOptions[j];
}
}
for(var j=0;j < aNewOptions.length; j++) {
var fileSize = aNewOptions[j].match(/\d{1}\.\d{3}/gm)[0];
var selected = '';
var deleteable = '';
for(var k=0; k < aFiles.length; k++) {
if (aNewOptions[j].indexOf(aFiles[k]) > 0) {
sFileImage = aFiles[k];
// Red out deletable virus
if ( aFiles[k] == 'vshare' || aFiles[k] == 'vddos' || aFiles[k] == 'vspam') {
var regExp = /(vshare|vddos|vspam)\s((\d{1}\.\d{1})|(\d{1}))/gm;
var m = aNewOptions[j].match(regExp);
if ( m != null ) {
if ( m[0].split(' ')[1] <= highestAV ) {
deleteable = ' background-color: #FFD5D5;';
}
}
}
if (aFiles[k] == 'rip') {
sFileImage = 'warez';
} else if (aFiles[k] == 'vshare') {
sFileImage = 'fc';
} else if (aFiles[k] == 'vspam') {
//GM_log('-' + highestAV + '-');
if ( mySelect == 'no' ) {
selected = 'selected ';
mySelect = 'ok';
if ( getUpDownloadTime(fileSize, maxUploadSpeed, 'sec') > 120 ) {
if ( aNewOptions.length > (j+1) ) {
var m2 = aNewOptions[(j+1)].match(/vspam\s((\d{1}\.\d{1})|(\d{1}))/gm);
if ( m2 != null ) {
if ( m2[0].split(' ')[0] == 'vspam' ) {
if ( m2[0].split(' ')[1] > highestAV ) {
selected = '';
mySelect = 'no';
}
}
}
}
}
}
}
sFileStyle = 'style="padding-left: 20;' + deleteable + ' background-image: url(\'./layout/' + sFileImage + '.jpg\'); background-repeat: no-repeat;" ';
}
}
// Calculate upload time for each file
var uploadTime = getUpDownloadTime(fileSize, maxUploadSpeed, '');
newHTML = newHTML + "<option " + selected + sFileStyle + aNewOptions[j].replace(' ]', ']') + ' [' + uploadTime + "]\n";
}
newHTML = newHTML + '<option value=\'\'>View Upload Page';
newHTML = newHTML + '</select>';
newHTML = newHTML + "<input type=submit value=\"Upload File\" class=form>";
newForm.innerHTML = newHTML;
replaceMe.parentNode.insertBefore(newForm, replaceMe);
replaceMe.parentNode.removeChild(replaceMe);
}
}
});
}
}
}
if ( window.location.href.match('page=slaves') ) {
//////////////////////////////////////////////////////
//////////// ADD AND CONFIGURE TOOLTIP ///////////////
//////////////////////////////////////////////////////
// BASE64 Encoded Images // URL to encoder: http://www.greywyvern.com/code/php/binary2base64
var sImages = "var bas64Images = new Array();\n" +
"bas64Images['wwl'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABgQI/8QAJBAAAgEDAwQDAQAAAAAAAAAAAQIEAxESAAUhBhQxQSJRcYH/xAAXAQADAQAAAAAAAAAAAAAAAAACAwUE/8QAKBEAAQMDAgMJAAAAAAAAAAAAAgABEQMEIQUSEzHRFSJBQoGhseHw/9oADAMBAAIRAxEAPwDPu29Czmpd3upMOGtiygZViDbjEXxuDbnkH1omFSaurBO2n3i9vv8AZTXpijtsfcJMOJt6xFVAzEMTXa5Hlzd8DiDiGtf1rUduVON3mUTUuJwxIj3PPp0nPOJVm7dzJgPGjLhWqOqgki3DjEW/R96S6RaCLVWnOPlC5vXgoyasuCq1NwroqVJGJWkALNwrfI+WB8f3T7q9Ks7O/NmhX+ymMWEsAPh1X//Z';\n" +
"bas64Images['crc'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAABgf/xAAlEAABBAEEAgEFAAAAAAAAAAACAQMEBQYHERIhCBMiABQjMUH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AX4RQ6dRtPcVcmYfRTJUimiSpD8xiMMiWZN7mEZCYcKTI+PY8kXcg7+XQR3ycwt2lu2Z64/Hp4X4YVfLiGCtTAZaLkZMJ22QB6g24jsqL2acVQKhQ5ZS2mlunsepycKO0pQbN6eUN+UrRBWyYBIDJN+twkdf/AKvHZFVF/SKBjy7zPG8hoceap5f3JMSnycT1ut7IrY7bewR+g//Z';\n" +
"bas64Images['fwl'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwQGCP/EACUQAAIBAwIGAwEAAAAAAAAAAAECAwQRIQASBQYTFDGRFVGB4f/EABcBAQEBAQAAAAAAAAAAAAAAAAMFBAb/xAAoEQABAwMCAwkAAAAAAAAAAAACAAERAwQhEjEFE9EVIkFRgaGx4fD/2gAMAwEAAhEDEQA/AM1UnAZmXq1R6MIyVGXIx68/zRvU8t1XpcJONVTuj7/X7Cq/gpODiDdTrTd3EZo13XlMe6wLN52ta4AOsg3A1Jh50q3wzl8whENLR69YxtMIMymVRBCu6WRlVb4BJOAPr3pmT3ZG9J2bGfhK8y8+zcVmhmKR9zDTpTLJEGVNiWYXD3LHLA4H7oraxGizs2zvK5/tVwJyDJl49F//2Q%3D%3D';\n" +
"bas64Images['vspam'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAQABADAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAABQP/xAAmEAACAgEEAAUFAAAAAAAAAAABAgMEEQUGBxIACBMUQhYhIzEy/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEx/9oADAMBAAIRAxEAPwBviHhnj/Tdgw7tuUBrtoVzMxokX5JJ68pIlpuvQo/wCKFI+RJGRqonynwzxtqG2ItxRVfpyxqrZhiudatuOzalaxM7rI/55AowtfP8g9CP34lAPGnmHl0+pajaw+rVq0cUy15xVo+3o1Hb3EVanDlpLHoH1MhipAyeuG8WAjk/zJ6hq4U0IVrvplp4HoO8csE3bLxTGOWJbCSwFOjlGxkkBsH7sNf/2Q%3D%3D';\n" +
"bas64Images['mailer'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABgQH/8QAJhAAAQMCBgICAwAAAAAAAAAAAgEDEQQFAAYHEhMxCCEiUSMyYf/EABgBAAMBAQAAAAAAAAAAAAAAAAECBAMG/8QAHhEAAgICAgMAAAAAAAAAAAAAAQIABAMRBRJRYbH/2gAMAwEAAhEDEQA/AElp8c9HKoQaqLS43W8QvcY1lQQm2SJDgKh9T+6L7Ff4oljn2u5fPyU9BM21s0q09y9k5+65ZtjjQtuA21cHH3nUdXkEDUBU1HYkxuVPkvSJE4qqWXdtExHUASyo8ocpVVE1SVeXHKkGvYk4iKUxHsubdEIiRPUfWAePb1CMghrVbXqyZ2yq7Z6e2O0LxE2TfxFGvxmK9I4ULsGJRPpOsb16hRtxGfc//9k%3D';\n" +
"bas64Images['av'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABQQG/8QAIhAAAgICAQQDAQAAAAAAAAAAAQMCBAUSBgcREyEAFCIW/8QAGQEAAgMBAAAAAAAAAAAAAAAAAAMBAgQF/8QAIBEAAgIBBAMBAAAAAAAAAAAAAQMAAgQRITFBEiIyUf/aAAwDAQACEQMRAD8AN4jib9bjyW5bLNViv5tNiwtUG2zCrdrxrq1S6H1GEyOpgZegfitwdZ2g1TU1VUAN/ZF1nx+WhiOVPZk52KhXUsRQz7CyVXLKGIl45wgoS7R7yhE/g/Cotrr1FZGSopFAPccmCdBebZS/naXHZZmziry6dpGPyA8loawTOUT4GSkvZKwREeo6AAdpRG9zXeZa5ACSsjnuZvrLzu5kuR5rEKtvsVhdmLDWTZESK5/pYTt4wCwbSHYjaI19DvIAkPyPOtQB8if/2Q%3D%3D';\n" +
"bas64Images['ana'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABAUG/8QAIhAAAwABBAICAwAAAAAAAAAAAQIDBAUGERIAEyEiFDFB/8QAFwEAAwEAAAAAAAAAAAAAAAAAAQIEAP/EACERAAEEAQQDAQAAAAAAAAAAAAEAAgMRIQQSImFBkeGx/9oADAMBAAIRAxEAPwDAbm3brcdw58VzkVUVGAf0duThCpLF4UYkv9iSx58Dz+pZDXsJmy90a5bUbc5o7JGzTaXqV14uiAq04xYfUkfB8KZU9b2uq6xarHvkBhPMgcqkkXrD8d+AkKfZODxw3Un58klZKbotAxWM4+qCaOZxNOa0YrFnH1N0La/fPWWn2fIyaQeMoUqW7H2CxILJNQeoP7P882nZMDz210m0sc4dz211flf/2Q%3D%3D';\n" +
"bas64Images['vshare'] = bas64Images['vspam'];\n" +
"bas64Images['fc'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwUGB//EACgQAAEDAwQBAgcAAAAAAAAAAAECAwQFBhEAEhMhBxQVIjEyM1Fhgf/EABgBAAMBAQAAAAAAAAAAAAAAAAECBQME/8QAIhEAAAYBAwUAAAAAAAAAAAAAAAECAwQSESEiMTJBYXGh/9oADAMBAAIRAxEAPwDYPIdzXKzUEUa2nUe4qbBUgfdSVdhz4hxlISPluH7GMa45Dm6t0oP7gSJzz1yba57+gW3vIrkO20zLyAhPR+qhKb2qS1lexvnabKltLVlIwEkZPXWtDmNKXVB5IVUEsklfqxqGN5UiqJmRK9b1PEuvxgqKCdm30zmSoOcj8bICvpwSQT+M6EiMTng+ASbRe+Nwj3LAve9qkmRd7KKNHYiGMqG0ORqRvdS7hwsTio8am0lO5OP7pI0JLRY5DqVkf//Z';\n" +
"bas64Images['skr'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAABAUGB//EACUQAAEDAgUEAwAAAAAAAAAAAAIBAwQGEQAFBxIhCBMVMTJBUf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oADAMBAAIRAxEAPwDPqj0bpHJ2kkD5yTEIlEHtsZq+0hHgSTcvLg+vV0vbFkS0DC0ppCe0TkadOacQEdGJJ7YOEClt3AogYkl/zEqw0q7qdk1Q0ITqYigo2sQPEvI+lsQEnF8DEo7rBIezLyD+Xq4720ZRvvijSAPxQWxaQRt9WwH/2Q%3D%3D';\n" +
"bas64Images['hdr'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABQMG/8QAJBAAAQMEAQQDAQAAAAAAAAAAAQIDBAUGBxEAEhMUMSEiQSP/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AJYzwrRY8GPGdpcCrXE9BjVCa7VS840PNClsRorLBHpCNuPKJ0fzgH5dxJZ1Tx/Dve0acmhVD6+dTErKo6wXewspJ2AUOeiPhQ4COPMw46ua2KbTbwjLYuKixRE8tHfSl+KgaH9I2l61raFfH6OBjMj5Jt+iUCbZ1nzZUuNIlJdSJKSGoMdBCxGY6/u5tY31KHrlH//Z';\n" +
"bas64Images['enc'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABgQH/8QAJBAAAQQABQQDAAAAAAAAAAAAAgEDBAUABgcREhMUITEiUqH/xAAYAQACAwAAAAAAAAAAAAAAAAACAwEEBf/EACARAAEEAgMAAwAAAAAAAAAAAAEAAgQRA0EFElETMfH/2gAMAwEAAhEDEQA/AMj0ryAxc5eubyTQu3/bkkeDCaeJjd1EQjXmBCvgTH3jPm5y0hod0vf6m427q1BqrlWupxp5sCodo+9aMJda64T6Nvsqm/F0lJS5IW+CgyfksWHdd+qcuPrqrSTRbXGoyDluxqJ0CRJcmSFfbeY4bIhAAKioSj66X7ihy/FvkkdSBXqOPla37tGtVdRK/OL0Q4bL7QsK4RddBRfnx8JxI/rguF4t0RpDiDfifOljLVaX/9k%3D';\n" +
"bas64Images['dec'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAABwj/xAAmEAABBAAFAwUBAAAAAAAAAAABAgMEBQAGBxESEyIxFCEjUWGB/8QAGAEAAgMAAAAAAAAAAAAAAAAABAYBAgP/xAAjEQACAgEEAAcAAAAAAAAAAAABAgADMQQFEiERIjJCYYHh/9oADAMBAAIRAxEAPwCaq/K99NejBuvkdGQUcX+kvp8FnbnzI48f3fbFGcCSBES4gaSJtLTLZrTUvxW2jFvvVuupWsFBX8SlFHelR+/5gCprun8eQb29dfc1bjjESMsa9adQtO6WlflONWcOGyxICo7itltNJbPclKgRun2/ML26bTqrbWKDyn5/YdpLq19RgFqJexLzNkuxhuF2O4G0ocIKd+CAnwoAjxhl22hqqFVsiCaywPYSMT//2Q%3D%3D';\n" +
"bas64Images['rip'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAABQL/xAAjEAACAQMEAwEBAQAAAAAAAAACAwEEBQYHERITABQiIUJS/8QAGAEAAgMAAAAAAAAAAAAAAAAAAgMAAQT/xAAkEQABAwIFBQEAAAAAAAAAAAABAAIRAwQSITFBYRMUIiNCUf/aAAwDAQACEQMRAD8AP0wxDT/FsRpbxlVnpL7cbyqW05FwcS1En2euU3CaSlXAJVLCfy/kxg/0PFtuKb8vsbLO26puMNMvGvCJ1twjDa2xlleJWtFjilbKblSb7NawWDTMH1kdtIrqcMj8kAlsUxz+Z8HvKc4PvfhWLukIDj5u0CvSvWDATxlNj1BfUpZbI2tlUgGISAiIgs+y29dV7HVyDf8AzExJ/ZeMp29JmYEOOvKcGtbECDuULrBq1jNys8YzhneNplknW94cgKeQN3S6o51XI2fTpLjyMZL95z4BtKGLqFvs/VAwEAOE4dF//9k%3D';\n" +
"bas64Images['warez'] = bas64Images['rip'];\n" +
"bas64Images['vddos'] = bas64Images['vspam'];\n" +
"bas64Images['rddos'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABgEC/8QAJBAAAQQBAwUBAQEAAAAAAAAAAwECBAUGBxESABMUISJBJDH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAMAwEAAhEDEQA/AEmrsrVLD6ONR45d+SJXTbMs05GCnLFYqEWIxxFcpHciKjOH1tsn50G9Oq7VDOMUk47leRPhLXHDISyrjNfOII4eYgEKJWo3gq/e6cl/zpQgzSomamyLKqWq8EmJWAViWCSGtlkJ6e7xyNa5Aoo13+kX3t66C4lGk6Wx6bHA0bJT78ks0iSKQ3vocSKX+gj0b3l7eyck/fzboP/Z';\n" +
"bas64Images['txt'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAQABADAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAABAb/xAAhEAABBAMAAwADAAAAAAAAAAACAQMEBQYSEwcRFAghIv/EABYBAQEBAAAAAAAAAAAAAAAAAAIDBP/EAB0RAAIDAAIDAAAAAAAAAAAAAAABAgMRBBIhcfD/2gAMAwEAAhEDEQA/ABeP8HoBxzGOuKxpQXNa7ZOWAONS5JJE1GWYRZFfNMnhJ5owYE1AlbRE16Og5sq40J1uXbGgAvyOw7BarA4FpjdacInrX51+iuKtdEUZdPUBONEdMNSbDY9kXmi++iukeNxwZQ4bnNaHjvG6sMlp24oVCxLGon2USOPV7s2Smy9VWREog4K+uuiqnogVNt61KOb5X3smiO85WGHt+No9NQ21XOJu/OSLdc5C3KOUbmDzjUGHWtCRaf0mh6/pOip6RDZLsUP/2Q%3D%3D';\n" +
"bas64Images['img'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAPAA8DAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAEFB//EACcQAAICAQIFAwUAAAAAAAAAAAECAwQFABEGEhMxQQchI0JDUXGR/8QAFgEBAQEAAAAAAAAAAAAAAAAABAMB/8QAHxEAAgEEAwEBAAAAAAAAAAAAAQIAAwQRIRIxkRVR/9oADAMBAAIRAxEAPwDBsBwCuYxcWRindOnzG7VKfL0l+9B4kQfUO6/r30atchcgbMXQtC++l/Y83geGaZYRGQVQQI7Dt8rD8soLJufIGo21w79xVa0pJS5bDZg3qNMK8Ar1OhPXAETxyFVUjsQAPGtWywSc55e+yf0DwCY0JM4izVTNVq9xgle/Gqwy14upyvt3m2beNN+3Kv8ANMC4gHct3P/Z';\n" +
"bas64Images['exe'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAQABADAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAABQP/xAAmEAACAgEEAAUFAAAAAAAAAAABAgMEEQUGBxIACBMUQhYhIzEy/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEx/9oADAMBAAIRAxEAPwBviHhnj/Tdgw7tuUBrtoVzMxokX5JJ68pIlpuvQo/wCKFI+RJGRqonynwzxtqG2ItxRVfpyxqrZhiudatuOzalaxM7rI/55AowtfP8g9CP34lAPGnmHl0+pajaw+rVq0cUy15xVo+3o1Hb3EVanDlpLHoH1MhipAyeuG8WAjk/zJ6hq4U0IVrvplp4HoO8csE3bLxTGOWJbCSwFOjlGxkkBsH7sNf/2Q%3D%3D';\n" +
"bas64Images['activespam'] = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHCAgICAgICAgICD/2wBDAQcHBw0MDRgQEBgaFREVGiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD/wAARCAAQABADAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAkEAACAwAABAcBAAAAAAAAAAACAwEEBQAREhMGFBYhIiMyFf/EABcBAAMBAAAAAAAAAAAAAAAAAAABBQb/xAAhEQACAQUAAgMBAAAAAAAAAAABAhEAAwQFEhNBFDFhIv/aAAwDAQACEQMRAD8AiMIbOq/0FhWM/cVtWYuaOoupaXsZK19grKfMugEgoDEljK5OCjq/MnEcTSqJZDcgmB6rUbDaZIzLq+a4FFxoHbfXR/abgW8l/oLesZ2KrFseezdY6lpuvrqb3yrK80jrSajJgrKTkIH4/romODm21ktyAYPqlr9pktmWl81wg3Fn+2+uh+1WYnjgcvGuap6Do1F1FUa9mFRZtBCfqQlNUumOwjn1comIKeZzMlPPiq74vwlAZS/IkSJqbstVnPsbx8N0objweGiOj7imv45HTwaepF9/9QqjqNh8rCtbIXfU5Tao9Ydh3sUj7wM/MZiRieBGxvhMCyhwpgSKet1Wcmxsnw3QguJJKNEdD3Ff/9k%3D';\n";
// Function to generate Apps/Viruses Info for Slaves
var sAppsTable = 'function generateTooltip(sSlave, sFiles) {\n' + sImages +
' var aFiles = new Array();\n' +
' aFiles["wwl"] = "Waterwall";\n' +
' aFiles["crc"] = "Password";\n' +
' aFiles["fwl"] = "Firewall";\n' +
' aFiles["vspam"] = "SpamVirus";\n' +
' aFiles["mailer"] = "MarketingMailer";\n' +
' aFiles["av"] = "AntiVirus";\n' +
' aFiles["ana"] = "Analyse";\n' +
' aFiles["vshare"] = "ShareWarez";\n' +
' aFiles["fc"] = "FtpCash";\n' +
' aFiles["skr"] = "Seeker";\n' +
' aFiles["hdr"] = "Hider";\n' +
' aFiles["enc"] = "Encryptor";\n' +
' aFiles["dec"] = "Decrypter";\n' +
' aFiles["rip"] = "Warez";\n' +
' aFiles["vddos"] = "DDoSVirus";\n' +
' aFiles["rddos"] = "RemoteDestruction";\n' +
' aFiles["txt"] = "TextFile";\n' +
' aFiles["img"] = "ImageFile";\n' +
' aFiles["exe"] = "Forum";\n' +
' aSlave = sSlave.split("#");\n' +
' aFile = sFiles.split("#");\n' +
' var aMark = new Array();\n' +
' aMark["vspam"] = "";\n' +
' aMark["vddos"] = "";\n' +
' aMark["vshare"] = "";\n' +
' var sTable = "<table><tr><td colspan=\\\"2\\\"><table><tr><td>Last Updated: </td><td>" + aFile[5] + "</td></tr></table></td></tr><tr><td valign=\\\"top\\\"><table><tr bgcolor=\\\"#222222\\\"><td width=\\\"16\\\"></td><td><b>Files</b></td><td width=\\\"10\\\"><b>Level</b></td></tr>";\n' +
' for (var i=0; i<=1; i++) {\n' +
' if ( i == 1 ) {\n' +
' sTable = sTable + "</table></td>";\n' +
' sTable = sTable + "<td valign=\\\"top\\\"><table><tr bgcolor=\\\"#222222\\\"><td width=\\\"16\\\"></td><td><b>Viruses</b></td><td width=\\\"10\\\"><b>Level</b></td></tr>";\n' +
' }\n' +
' if ( (aFile[3] != "" && i == 0) || (aFile[4] != "" && i == 1) ) {\n' +
' var aApps = aFile[((i==0) ? 3 : 4)].split("@");\n' +
' for (var j=0; j < aApps.length; j++) {\n' +
' var aApp = aApps[j].split(" ");\n' +
' //alert(aApp[0] + " == vddos && " + aMark["vspam"] + " == && " + aApp[1].replace(".0", "") + " == " + aSlave[2].replace(".0", "") );\n' +
' var color = "#000000";\n' +
' if ( i == 1 && aApp[0] == "vspam" && aMark["vspam"] == "" && aApp[1].replace(".0", "") == aSlave[1].replace(".0", "") ) {\n' +
' aMark["vspam"] = "found"\n' +
' var bgColor = ((aSlave[4] == "S") ? "#B5FFB3" : "#FFD5D5");\n' +
' } else if ( i == 1 && aApp[0] == "vddos" && aMark["vddos"] == "" && aApp[1].replace(".0", "") == aSlave[2].replace(".0", "") ) {\n' +
' aMark["vddos"] = "found"\n' +
' var bgColor = ((aSlave[4] == "D") ? "#B5FFB3" : "#FFD5D5");\n' +
' } else if ( i == 1 && aApp[0] == "vshare" && aMark["vshare"] == "" && aApp[1].replace(".0", "") == aSlave[3].replace(".0", "") ) {\n' +
' aMark["vshare"] = "found"\n' +
' var bgColor = ((aSlave[4] == "W") ? "#B5FFB3" : "#FFD5D5");\n' +
' } else {\n' +
' var bgColor = "#444444";\n' +
' var color = "#FFFFFF";\n' +
' if (j%2) {\n' +
' bgColor = "#222222";\n' +
' }\n' +
' }\n' +
' if ( i == 0 ) {\n' +
' sTable = sTable + "<tr bgcolor=\\\"" + bgColor + "\\\"><td bgcolor=\\\"#000000\\\"><img border=\\\"0\\\" src=\\\"" + bas64Images[((aApp[0] == \'rip\') ? \'warez\' : aApp[0])] + "\\\"></td><td>" + aFiles[aApp[0]] + "." + aApp[0] + "</td><td><b>" + aApp[1] + "</b></td></tr>";\n' +
' } else if ( i == 1 ) {\n' +
' sTable = sTable + "<tr bgcolor=\\\"" + bgColor + "\\\"><td bgcolor=\\\"#000000\\\"><img border=\\\"0\\\" src=\\\"" + bas64Images["activespam"] + "\\\"></td><td><font color=\\\"" + color + "\\\">" + aFiles[aApp[0]] + "." + aApp[0] + "</font></td><td><font color=\\\"" + color + "\\\"><b>" + aApp[1] + "</b></font></td></tr>";\n' +
' }\n' +
' }\n' +
' }\n' +
' }\n' +
' sTable = sTable + "</table></td></tr></table>";\n' +
' return sTable;\n' +
'}';
var sTooltip = 'var config = new Object(); var tt_Debug = true; var tt_Enabled = true; var TagsToTip = true; config. Above = false; config. BgColor = "#E2E7FF"; config. BgImg = ""; config. BorderColor = "#003099"; config. BorderStyle = "solid"; config. BorderWidth = 1; config. CenterMouse = false; config. ClickClose = false; config. ClickSticky = false; config. CloseBtn = false; config. CloseBtnColors = ["#990000", "#FFFFFF", "#DD3333", "#FFFFFF"]; config. CloseBtnText = " X "; config. CopyContent = true; config. Delay = 0; config. Duration = 0; config. Exclusive = false; config. FadeIn = 100; config. FadeOut = 100; config. FadeInterval = 30; config. Fix = null; config. FollowMouse = true; config. FontColor = "#000044"; config. FontFace = "Verdana,Geneva,sans-serif"; config. FontSize = "8pt"; config. FontWeight = "normal"; config. Height = 0; config. JumpHorz = false; config. JumpVert = true; config. Left = false; config. OffsetX = 14; config. OffsetY = 8; config. Opacity = 100; config. Padding = 3; config. Shadow = false; config. ShadowColor = "#C0C0C0"; config. ShadowWidth = 5; config. Sticky = false; config. TextAlign = "left"; config. Title = ""; config. TitleAlign = "left"; config. TitleBgColor = ""; config. TitleFontColor = "#FFFFFF"; config. TitleFontFace = ""; config. TitleFontSize = ""; config. TitlePadding = 2; config. Width = 0;\n' +
'function Tip() { tt_Tip(arguments, null); }\n' +
'function TagToTip() { var t2t = tt_GetElt(arguments[0]); if(t2t) { tt_Tip(arguments, t2t); } }\n' +
'function UnTip() { tt_OpReHref(); if(tt_aV[DURATION] < 0 && (tt_iState & 0x2)) { tt_tDurt.Timer("tt_HideInit()", -tt_aV[DURATION], true); } else if(!(tt_aV[STICKY] && (tt_iState & 0x2))) { tt_HideInit(); } }\n' +
'var tt_aElt = new Array(10); var tt_aV = new Array(); var tt_sContent; var tt_t2t; var tt_t2tDad; var tt_musX; var tt_musY; var tt_over; var tt_x; var tt_y; var tt_w; var tt_h;\n' +
'function tt_Extension() { tt_ExtCmdEnum(); tt_aExt[tt_aExt.length] = this; return this; }\n' +
'function tt_SetTipPos(x, y) { var css = tt_aElt[0].style; tt_x = x; tt_y = y; css.left = x + "px"; css.top = y + "px"; if(tt_ie56) { var ifrm = tt_aElt[tt_aElt.length - 1]; if(ifrm) { ifrm.style.left = css.left; ifrm.style.top = css.top; } } }\n' +
'function tt_HideInit() { if(tt_iState) { tt_ExtCallFncs(0, "HideInit"); tt_iState &= ~(0x4 | 0x8); if(tt_flagOpa && tt_aV[FADEOUT]) { tt_tFade.EndTimer(); if(tt_opa) { var n = Math.round(tt_aV[FADEOUT] / (tt_aV[FADEINTERVAL] * (tt_aV[OPACITY] / tt_opa))); tt_Fade(tt_opa, tt_opa, 0, n); return; } } tt_tHide.Timer("tt_Hide();", 1, false); } }\n' +
'function tt_Hide() { if(tt_db && tt_iState) { tt_OpReHref(); if(tt_iState & 0x2) { tt_aElt[0].style.visibility = "hidden"; tt_ExtCallFncs(0, "Hide"); } tt_tShow.EndTimer(); tt_tHide.EndTimer(); tt_tDurt.EndTimer(); tt_tFade.EndTimer(); if(!tt_op && !tt_ie) { tt_tWaitMov.EndTimer(); tt_bWait = false; } if(tt_aV[CLICKCLOSE] || tt_aV[CLICKSTICKY]) { tt_RemEvtFnc(document, "mouseup", tt_OnLClick); } tt_ExtCallFncs(0, "Kill"); if(tt_t2t && !tt_aV[COPYCONTENT]) { tt_UnEl2Tip(); } tt_iState = 0; tt_over = null; tt_ResetMainDiv(); if(tt_aElt[tt_aElt.length - 1]) { tt_aElt[tt_aElt.length - 1].style.display = "none"; } } }\n' +
'function tt_GetElt(id) { return(document.getElementById ? document.getElementById(id) : document.all ? document.all[id] : null); }\n' +
'function tt_GetDivW(el) { return(el ? (el.offsetWidth || el.style.pixelWidth || 0) : 0); }\n' +
'function tt_GetDivH(el) { return(el ? (el.offsetHeight || el.style.pixelHeight || 0) : 0); }\n' +
'function tt_GetScrollX() { return(window.pageXOffset || (tt_db ? (tt_db.scrollLeft || 0) : 0)); }\n' +
'function tt_GetScrollY() { return(window.pageYOffset || (tt_db ? (tt_db.scrollTop || 0) : 0)); }\n' +
'function tt_GetClientW() { return tt_GetWndCliSiz("Width"); }\n' +
'function tt_GetClientH() { return tt_GetWndCliSiz("Height"); }\n' +
'function tt_GetEvtX(e) { return (e ? ((typeof(e.pageX) != tt_u) ? e.pageX : (e.clientX + tt_GetScrollX())) : 0); }\n' +
'function tt_GetEvtY(e) { return (e ? ((typeof(e.pageY) != tt_u) ? e.pageY : (e.clientY + tt_GetScrollY())) : 0); }\n' +
'function tt_AddEvtFnc(el, sEvt, PFnc) { if(el) { if(el.addEventListener) { el.addEventListener(sEvt, PFnc, false); } else { el.attachEvent("on" + sEvt, PFnc); } } }\n' +
'function tt_RemEvtFnc(el, sEvt, PFnc) { if(el) { if(el.removeEventListener) { el.removeEventListener(sEvt, PFnc, false); } else { el.detachEvent("on" + sEvt, PFnc); } } }\n' +
'function tt_GetDad(el) { return(el.parentNode || el.parentElement || el.offsetParent); }\n' +
'function tt_MovDomNode(el, dadFrom, dadTo) { if(dadFrom) { dadFrom.removeChild(el); } if(dadTo) { dadTo.appendChild(el); } }\n' +
'var tt_aExt = new Array(); var tt_db; var tt_op; var tt_ie; var tt_ie56; var tt_bBoxOld; var tt_body; var tt_ovr_; var tt_flagOpa; var tt_maxPosX; var tt_maxPosY; var tt_iState = 0; var tt_opa; var tt_bJmpVert; var tt_bJmpHorz; var tt_elDeHref; var tt_tShow = new Number(0); var tt_tHide = new Number(0); var tt_tDurt = new Number(0); var tt_tFade = new Number(0); var tt_tWaitMov = new Number(0); var tt_bWait = false; var tt_u = "undefined";\n' +
'function tt_Init() { tt_MkCmdEnum(); if(!tt_Browser() || !tt_MkMainDiv()) { return; } tt_IsW3cBox(); tt_OpaSupport(); tt_AddEvtFnc(document, "mousemove", tt_Move); if(TagsToTip || tt_Debug) { tt_SetOnloadFnc(); } tt_AddEvtFnc(window, "unload", tt_Hide); }\n' +
'function tt_MkCmdEnum() { var n = 0; for(var i in config) { eval("window." + i.toString().toUpperCase() + " = " + n++); } tt_aV.length = n; }\n' +
'function tt_Browser() { var n; var nv; var n6; var w3c; n = navigator.userAgent.toLowerCase(); nv = navigator.appVersion; tt_op = (document.defaultView && typeof(eval("w" + "indow" + "." + "o" + "p" + "er" + "a")) != tt_u); tt_ie = n.indexOf("msie") != -1 && document.all && !tt_op; if(tt_ie) { var ieOld = (!document.compatMode || document.compatMode == "BackCompat"); tt_db = !ieOld ? document.documentElement : (document.body || null); if(tt_db) { tt_ie56 = parseFloat(nv.substring(nv.indexOf("MSIE") + 5)) >= 5.5 && typeof document.body.style.maxHeight == tt_u; } } else { tt_db = document.documentElement || document.body || (document.getElementsByTagName ? document.getElementsByTagName("body")[0] : null); if(!tt_op) { n6 = document.defaultView && typeof document.defaultView.getComputedStyle != tt_u; w3c = !n6 && document.getElementById; } } tt_body = (document.getElementsByTagName ? document.getElementsByTagName("body")[0] : (document.body || null)); if(tt_ie || n6 || tt_op || w3c) { if(tt_body && tt_db) { if(document.attachEvent || document.addEventListener) { return true; } } else { tt_Err("wz_tooltip.js must be included INSIDE the body section, immediately after the opening <body> tag.", false); } } tt_db = null; return false; }\n' +
'function tt_MkMainDiv() { if(tt_body.insertAdjacentHTML) { tt_body.insertAdjacentHTML("afterBegin", tt_MkMainDivHtm()); } else if(typeof tt_body.innerHTML != tt_u && document.createElement && tt_body.appendChild) { tt_body.appendChild(tt_MkMainDivDom()); } if(window.tt_GetMainDivRefs && tt_GetMainDivRefs()) { return true; } tt_db = null; return false; }\n' +
'function tt_MkMainDivHtm() { return( \'<div id="WzTtDiV"></div>\' + (tt_ie56 ? (\'<iframe id="WzTtIfRm" src="javascript:false" scrolling="no" frameborder="0" style="filter:Alpha(opacity=0);position:absolute;top:0px;left:0px;display:none;"></iframe>\') : "") ); }\n' +
'function tt_MkMainDivDom() { var el = document.createElement("div"); if(el) { el.id = "WzTtDiV"; } return el; }\n' +
'function tt_GetMainDivRefs() { tt_aElt[0] = tt_GetElt("WzTtDiV"); if(tt_ie56 && tt_aElt[0]) { tt_aElt[tt_aElt.length - 1] = tt_GetElt("WzTtIfRm"); if(!tt_aElt[tt_aElt.length - 1]) { tt_aElt[0] = null; } } if(tt_aElt[0]) { var css = tt_aElt[0].style; css.visibility = "hidden"; css.position = "absolute"; css.overflow = "hidden"; return true; } return false; }\n' +
'function tt_ResetMainDiv() { tt_SetTipPos(0, 0); tt_aElt[0].innerHTML = ""; tt_aElt[0].style.width = "0px"; tt_h = 0; }\n' +
'function tt_IsW3cBox() { var css = tt_aElt[0].style; css.padding = "10px"; css.width = "40px"; tt_bBoxOld = (tt_GetDivW(tt_aElt[0]) == 40); css.padding = "0px"; tt_ResetMainDiv(); }\n' +
'function tt_OpaSupport() { var css = tt_body.style; tt_flagOpa = (typeof(css.KhtmlOpacity) != tt_u) ? 2 : (typeof(css.KHTMLOpacity) != tt_u) ? 3 : (typeof(css.MozOpacity) != tt_u) ? 4 : (typeof(css.opacity) != tt_u) ? 5 : (typeof(css.filter) != tt_u) ? 1 : 0; }\n' +
'function tt_SetOnloadFnc() { tt_AddEvtFnc(document, "DOMContentLoaded", tt_HideSrcTags); tt_AddEvtFnc(window, "load", tt_HideSrcTags); if(tt_body.attachEvent) { tt_body.attachEvent("onreadystatechange", function() { if(tt_body.readyState == "complete") { tt_HideSrcTags(); } } ); } if(/WebKit|KHTML/i.test(navigator.userAgent)) { var t = setInterval(function() { if(/loaded|complete/.test(document.readyState)) { clearInterval(t); tt_HideSrcTags(); } }, 10); } }\n' +
'function tt_HideSrcTags() { if(!window.tt_HideSrcTags || window.tt_HideSrcTags.done) { return; } window.tt_HideSrcTags.done = true; if(!tt_HideSrcTagsRecurs(tt_body)) { tt_Err("There are HTML elements to be converted to tooltips. If you want these HTML elements to be automatically hidden, you must edit wz_tooltip.js, and set TagsToTip in the global tooltip configuration to true.", true); } }\n' +
'function tt_HideSrcTagsRecurs(dad) { var ovr; var asT2t; var a = dad.childNodes || dad.children || null; for(var i = a ? a.length : 0; i;) { --i; if(!tt_HideSrcTagsRecurs(a[i])) { return false; } ovr = a[i].getAttribute ? (a[i].getAttribute("onmouseover") || a[i].getAttribute("onclick")) : (typeof a[i].onmouseover == "function") ? (a[i].onmouseover || a[i].onclick) : null; if(ovr) { asT2t = ovr.toString().match(/TagToTip\\\s*\\\(\\\s*\\\'[^\\\'.]+\'\\\s*[\\\),]/); if(asT2t && asT2t.length) { if(!tt_HideSrcTag(asT2t[0])) { return false; } } } } return true; }\n' +
'function tt_HideSrcTag(sT2t) { var id; var el; id = sT2t.replace(/.+\'([^\'.]+)\'.+/, "$1"); el = tt_GetElt(id); if(el) { if(tt_Debug && !TagsToTip) { return false; } else { el.style.display = "none"; } } else { tt_Err("Invalid ID" + id + "passed to TagToTip(). There exists no HTML element with that ID.", true); } return true; }\n' +
'function tt_Tip(arg, t2t) { if(!tt_db || (tt_iState & 0x8)) { return; } if(tt_iState) { tt_Hide(); } if(!tt_Enabled) { return; } tt_t2t = t2t; if(!tt_ReadCmds(arg)) { return; } tt_iState = 0x1 | 0x4; tt_AdaptConfig1(); tt_MkTipContent(arg); tt_MkTipSubDivs(); tt_FormatTip(); tt_bJmpVert = false; tt_bJmpHorz = false; tt_maxPosX = tt_GetClientW() + tt_GetScrollX() - tt_w - 1; tt_maxPosY = tt_GetClientH() + tt_GetScrollY() - tt_h - 1; tt_AdaptConfig2(); tt_OverInit(); tt_ShowInit(); tt_Move(); }\n' +
'function tt_ReadCmds(a) { var i; i = 0; for(var j in config) { tt_aV[i++] = config[j]; } if(a.length & 1) { for(i = a.length - 1; i > 0; i -= 2) { tt_aV[a[i - 1]] = a[i]; } return true; } tt_Err("Incorrect call of Tip() or TagToTip(). Each command must be followed by a value.", true); return false; }\n' +
'function tt_AdaptConfig1() { tt_ExtCallFncs(0, "LoadConfig"); if(!tt_aV[TITLEBGCOLOR].length) { tt_aV[TITLEBGCOLOR] = tt_aV[BORDERCOLOR]; } if(!tt_aV[TITLEFONTCOLOR].length) { tt_aV[TITLEFONTCOLOR] = tt_aV[BGCOLOR]; } if(!tt_aV[TITLEFONTFACE].length) { tt_aV[TITLEFONTFACE] = tt_aV[FONTFACE]; } if(!tt_aV[TITLEFONTSIZE].length) { tt_aV[TITLEFONTSIZE] = tt_aV[FONTSIZE]; } if(tt_aV[CLOSEBTN]) { if(!tt_aV[CLOSEBTNCOLORS]) { tt_aV[CLOSEBTNCOLORS] = new Array("", "", "", ""); } for(var i = 4; i;) {--i; if(!tt_aV[CLOSEBTNCOLORS][i].length) { tt_aV[CLOSEBTNCOLORS][i] = (i & 1) ? tt_aV[TITLEFONTCOLOR] : tt_aV[TITLEBGCOLOR]; }} if(!tt_aV[TITLE].length) { tt_aV[TITLE] = " "; } } if(tt_aV[OPACITY] == 100 && typeof tt_aElt[0].style.MozOpacity != tt_u && !Array.every) { tt_aV[OPACITY] = 99; } if(tt_aV[FADEIN] && tt_flagOpa && tt_aV[DELAY] > 100) { tt_aV[DELAY] = Math.max(tt_aV[DELAY] - tt_aV[FADEIN], 100); } }\n' +
'function tt_AdaptConfig2() { if(tt_aV[CENTERMOUSE]) { tt_aV[OFFSETX] -= ((tt_w - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0)) >> 1); tt_aV[JUMPHORZ] = false; } }\n' +
'function tt_MkTipContent(a) { if(tt_t2t) { if(tt_aV[COPYCONTENT]) { tt_sContent = tt_t2t.innerHTML; } else { tt_sContent = ""; } } else { tt_sContent = a[0]; } tt_ExtCallFncs(0, "CreateContentString"); }\n' +
'function tt_MkTipSubDivs() { var sCss = "position:relative;margin:0px;padding:0px;border-width:0px;left:0px;top:0px;line-height:normal;width:auto;"; var sTbTrTd = \' cellspacing="0" cellpadding="0" border="0" style="\' + sCss + \'"><tbody style="\' + sCss + \'"><tr><td \'; tt_aElt[0].style.width = tt_GetClientW() + "px"; tt_aElt[0].innerHTML = ("" + (tt_aV[TITLE].length ? (\'<div id="WzTiTl" style="position:relative;z-index:1;">\' + \'<table id="WzTiTlTb"\' + sTbTrTd + \'id="WzTiTlI" style="\' + sCss + \'">\' + tt_aV[TITLE] + "</td>" + (tt_aV[CLOSEBTN] ? (\'<td align="right" style="\' + sCss + \'text-align:right;">\' + \'<span id="WzClOsE" style="position:relative;left:2px;padding-left:2px;padding-right:2px;\' + \'cursor:\' + (tt_ie ? \'hand\' : \'pointer\') + \';" onmouseover="tt_OnCloseBtnOver(1)" onmouseout="tt_OnCloseBtnOver(0)" onclick="tt_HideInit()">\' + tt_aV[CLOSEBTNTEXT] + \'</span></td>\') : "") + "</tr></tbody></table></div>") : "") + \'<div id="WzBoDy" style="position:relative;z-index:0;">\' + "<table" + sTbTrTd + \'id="WzBoDyI" style="\' + sCss + \'">\' + tt_sContent + "</td></tr></tbody></table></div>" + (tt_aV[SHADOW] ? (\'<div id="WzTtShDwR" style="position:absolute;overflow:hidden;"></div><div id="WzTtShDwB" style="position:relative;overflow:hidden;"></div>\') : "") ); tt_GetSubDivRefs(); if(tt_t2t && !tt_aV[COPYCONTENT]) { tt_El2Tip(); } tt_ExtCallFncs(0, "SubDivsCreated"); }\n' +
'function tt_GetSubDivRefs() { var aId = new Array("WzTiTl", "WzTiTlTb", "WzTiTlI", "WzClOsE", "WzBoDy", "WzBoDyI", "WzTtShDwB", "WzTtShDwR"); for(var i = aId.length; i; --i) { tt_aElt[i] = tt_GetElt(aId[i - 1]); } }\n' +
'function tt_FormatTip() { var css; var w; var h; var pad = tt_aV[PADDING]; var padT; var wBrd = tt_aV[BORDERWIDTH]; var iOffY; var iOffSh; var iAdd = (pad + wBrd) << 1; if(tt_aV[TITLE].length) { padT = tt_aV[TITLEPADDING]; css = tt_aElt[1].style; css.background = tt_aV[TITLEBGCOLOR]; css.paddingTop = css.paddingBottom = padT + "px"; css.paddingLeft = css.paddingRight = (padT + 2) + "px"; css = tt_aElt[3].style; css.color = tt_aV[TITLEFONTCOLOR]; if(tt_aV[WIDTH] == -1) { css.whiteSpace = "nowrap"; } css.fontFamily = tt_aV[TITLEFONTFACE]; css.fontSize = tt_aV[TITLEFONTSIZE]; css.fontWeight = "bold"; css.textAlign = tt_aV[TITLEALIGN]; if(tt_aElt[4]) { css = tt_aElt[4].style; css.background = tt_aV[CLOSEBTNCOLORS][0]; css.color = tt_aV[CLOSEBTNCOLORS][1]; css.fontFamily = tt_aV[TITLEFONTFACE]; css.fontSize = tt_aV[TITLEFONTSIZE]; css.fontWeight = "bold"; } if(tt_aV[WIDTH] > 0) { tt_w = tt_aV[WIDTH]; } else { tt_w = tt_GetDivW(tt_aElt[3]) + tt_GetDivW(tt_aElt[4]); if(tt_aElt[4]) { tt_w += pad; } if(tt_aV[WIDTH] < -1 && tt_w > -tt_aV[WIDTH]) { tt_w = -tt_aV[WIDTH]; } } iOffY = -wBrd; } else { tt_w = 0; iOffY = 0; } css = tt_aElt[5].style; css.top = iOffY + "px"; if(wBrd) { css.borderColor = tt_aV[BORDERCOLOR]; css.borderStyle = tt_aV[BORDERSTYLE]; css.borderWidth = wBrd + "px"; } if(tt_aV[BGCOLOR].length) { css.background = tt_aV[BGCOLOR]; } if(tt_aV[BGIMG].length) { css.backgroundImage = "url(" + tt_aV[BGIMG] + ")"; } css.padding = pad + "px"; css.textAlign = tt_aV[TEXTALIGN]; if(tt_aV[HEIGHT]) { css.overflow = "auto"; if(tt_aV[HEIGHT] > 0) { css.height = (tt_aV[HEIGHT] + iAdd) + "px"; } else { tt_h = iAdd - tt_aV[HEIGHT]; } } css = tt_aElt[6].style; css.color = tt_aV[FONTCOLOR]; css.fontFamily = tt_aV[FONTFACE]; css.fontSize = tt_aV[FONTSIZE]; css.fontWeight = tt_aV[FONTWEIGHT]; css.textAlign = tt_aV[TEXTALIGN]; if(tt_aV[WIDTH] > 0) { w = tt_aV[WIDTH]; } else if(tt_aV[WIDTH] == -1 && tt_w) { w = tt_w; } else { w = tt_GetDivW(tt_aElt[6]); if(tt_aV[WIDTH] < -1 && w > -tt_aV[WIDTH]) { w = -tt_aV[WIDTH]; } } if(w > tt_w) { tt_w = w; } tt_w += iAdd; if(tt_aV[SHADOW]) { tt_w += tt_aV[SHADOWWIDTH]; iOffSh = Math.floor((tt_aV[SHADOWWIDTH] * 4) / 3); css = tt_aElt[7].style; css.top = iOffY + "px"; css.left = iOffSh + "px"; css.width = (tt_w - iOffSh - tt_aV[SHADOWWIDTH]) + "px"; css.height = tt_aV[SHADOWWIDTH] + "px"; css.background = tt_aV[SHADOWCOLOR]; css = tt_aElt[8].style; css.top = iOffSh + "px"; css.left = (tt_w - tt_aV[SHADOWWIDTH]) + "px"; css.width = tt_aV[SHADOWWIDTH] + "px"; css.background = tt_aV[SHADOWCOLOR]; } else { iOffSh = 0; } tt_SetTipOpa(tt_aV[FADEIN] ? 0 : tt_aV[OPACITY]); tt_FixSize(iOffY, iOffSh); }\n' +
'function tt_FixSize(iOffY, iOffSh) { var wIn; var wOut; var h; var add; var pad = tt_aV[PADDING]; var wBrd = tt_aV[BORDERWIDTH]; var i; tt_aElt[0].style.width = tt_w + "px"; tt_aElt[0].style.pixelWidth = tt_w; wOut = tt_w - ((tt_aV[SHADOW]) ? tt_aV[SHADOWWIDTH] : 0); wIn = wOut; if(!tt_bBoxOld) { wIn -= (pad + wBrd) << 1; } tt_aElt[5].style.width = wIn + "px"; if(tt_aElt[1]) { wIn = wOut - ((tt_aV[TITLEPADDING] + 2) << 1); if(!tt_bBoxOld) { wOut = wIn; } tt_aElt[1].style.width = wOut + "px"; tt_aElt[2].style.width = wIn + "px"; } if(tt_h) { h = tt_GetDivH(tt_aElt[5]); if(h > tt_h) { if(!tt_bBoxOld) { tt_h -= (pad + wBrd) << 1; } tt_aElt[5].style.height = tt_h + "px"; } } tt_h = tt_GetDivH(tt_aElt[0]) + iOffY; if(tt_aElt[8]) { tt_aElt[8].style.height = (tt_h - iOffSh) + "px"; } i = tt_aElt.length - 1; if(tt_aElt[i]) { tt_aElt[i].style.width = tt_w + "px"; tt_aElt[i].style.height = tt_h + "px"; } }\n' +
'function tt_DeAlt(el) { var aKid; if(el) { if(el.alt) { el.alt = ""; } if(el.title) { el.title = ""; } aKid = el.childNodes || el.children || null; if(aKid) { for(var i = aKid.length; i;) { tt_DeAlt(aKid[--i]); } } } }\n' +
'function tt_OpDeHref(el) { if(!tt_op) { return; } if(tt_elDeHref) { tt_OpReHref(); } while(el) { if(el.hasAttribute && el.hasAttribute("href")) { el.t_href = el.getAttribute("href"); el.t_stats = window.status; el.removeAttribute("href"); el.style.cursor = "hand"; tt_AddEvtFnc(el, "mousedown", tt_OpReHref); window.status = el.t_href; tt_elDeHref = el; break; } el = tt_GetDad(el); } }\n' +
'function tt_OpReHref() { if(tt_elDeHref) { tt_elDeHref.setAttribute("href", tt_elDeHref.t_href); tt_RemEvtFnc(tt_elDeHref, "mousedown", tt_OpReHref); window.status = tt_elDeHref.t_stats; tt_elDeHref = null; } }\n' +
'function tt_El2Tip() { var css = tt_t2t.style; tt_t2t.t_cp = css.position; tt_t2t.t_cl = css.left; tt_t2t.t_ct = css.top; tt_t2t.t_cd = css.display; tt_t2tDad = tt_GetDad(tt_t2t); tt_MovDomNode(tt_t2t, tt_t2tDad, tt_aElt[6]); css.display = "block"; css.position = "static"; css.left = css.top = css.marginLeft = css.marginTop = "0px"; }\n' +
'function tt_UnEl2Tip() { var css = tt_t2t.style; css.display = tt_t2t.t_cd; tt_MovDomNode(tt_t2t, tt_GetDad(tt_t2t), tt_t2tDad); css.position = tt_t2t.t_cp; css.left = tt_t2t.t_cl; css.top = tt_t2t.t_ct; tt_t2tDad = null; }\n' +
'function tt_OverInit() { if(window.event) { tt_over = window.event.target || window.event.srcElement; } else { tt_over = tt_ovr_; } tt_DeAlt(tt_over); tt_OpDeHref(tt_over); }\n' +
'function tt_ShowInit() { tt_tShow.Timer("tt_Show()", tt_aV[DELAY], true); if(tt_aV[CLICKCLOSE] || tt_aV[CLICKSTICKY]) { tt_AddEvtFnc(document, "mouseup", tt_OnLClick); } }\n' +
'function tt_Show() { var css = tt_aElt[0].style; css.zIndex = Math.max((window.dd && dd.z) ? (dd.z + 2) : 0, 1010); if(tt_aV[STICKY] || !tt_aV[FOLLOWMOUSE]) { tt_iState &= ~0x4; } if(tt_aV[EXCLUSIVE]) { tt_iState |= 0x8; } if(tt_aV[DURATION] > 0) { tt_tDurt.Timer("tt_HideInit()", tt_aV[DURATION], true); } tt_ExtCallFncs(0, "Show"); css.visibility = "visible"; tt_iState |= 0x2; if(tt_aV[FADEIN]) { tt_Fade(0, 0, tt_aV[OPACITY], Math.round(tt_aV[FADEIN] / tt_aV[FADEINTERVAL])); } tt_ShowIfrm(); }\n' +
'function tt_ShowIfrm() { if(tt_ie56) { var ifrm = tt_aElt[tt_aElt.length - 1]; if(ifrm) { var css = ifrm.style; css.zIndex = tt_aElt[0].style.zIndex - 1; css.display = "block"; } } }\n' +
'function tt_Move(e) { if(e) { tt_ovr_ = e.target || e.srcElement; } e = e || window.event; if(e) { tt_musX = tt_GetEvtX(e); tt_musY = tt_GetEvtY(e); } if(tt_iState & 0x4) { if(!tt_op && !tt_ie) { if(tt_bWait) { return; } tt_bWait = true; tt_tWaitMov.Timer("tt_bWait = false;", 1, true); } if(tt_aV[FIX]) { tt_iState &= ~0x4; tt_PosFix(); } else if(!tt_ExtCallFncs(e, "MoveBefore")) { tt_SetTipPos(tt_Pos(0), tt_Pos(1)); } tt_ExtCallFncs([tt_musX, tt_musY], "MoveAfter") } }\n' +
'function tt_Pos(iDim) { var iX; var bJmpMod; var cmdAlt; var cmdOff; var cx; var iMax; var iScrl; var iMus; var bJmp; if(iDim) { bJmpMod = tt_aV[JUMPVERT]; cmdAlt = ABOVE; cmdOff = OFFSETY; cx = tt_h; iMax = tt_maxPosY; iScrl = tt_GetScrollY(); iMus = tt_musY; bJmp = tt_bJmpVert; } else { bJmpMod = tt_aV[JUMPHORZ]; cmdAlt = LEFT; cmdOff = OFFSETX; cx = tt_w; iMax = tt_maxPosX; iScrl = tt_GetScrollX(); iMus = tt_musX; bJmp = tt_bJmpHorz; } if(bJmpMod) { if(tt_aV[cmdAlt] && (!bJmp || tt_CalcPosAlt(iDim) >= iScrl + 16)) { iX = tt_PosAlt(iDim); } else if(!tt_aV[cmdAlt] && bJmp && tt_CalcPosDef(iDim) > iMax - 16) { iX = tt_PosAlt(iDim); } else { iX = tt_PosDef(iDim); } } else { iX = iMus; if(tt_aV[cmdAlt]) { iX -= cx + tt_aV[cmdOff] - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0); } else { iX += tt_aV[cmdOff]; } } if(iX > iMax) { iX = bJmpMod ? tt_PosAlt(iDim) : iMax; } if(iX < iScrl) { iX = bJmpMod ? tt_PosDef(iDim) : iScrl; } return iX; }\n' +
'function tt_PosDef(iDim) { if(iDim) { tt_bJmpVert = tt_aV[ABOVE]; } else { tt_bJmpHorz = tt_aV[LEFT]; } return tt_CalcPosDef(iDim); }\n' +
'function tt_PosAlt(iDim) { if(iDim) { tt_bJmpVert = !tt_aV[ABOVE]; } else { tt_bJmpHorz = !tt_aV[LEFT]; } return tt_CalcPosAlt(iDim); } function tt_CalcPosDef(iDim) { return iDim ? (tt_musY + tt_aV[OFFSETY]) : (tt_musX + tt_aV[OFFSETX]); } function tt_CalcPosAlt(iDim) { var cmdOff = iDim ? OFFSETY : OFFSETX; var dx = tt_aV[cmdOff] - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0); if(tt_aV[cmdOff] > 0 && dx <= 0) { dx = 1; } return((iDim ? (tt_musY - tt_h) : (tt_musX - tt_w)) - dx); }\n' +
'function tt_PosFix() { var iX; var iY; if(typeof(tt_aV[FIX][0]) == "number") { iX = tt_aV[FIX][0]; iY = tt_aV[FIX][1]; } else { if(typeof(tt_aV[FIX][0]) == "string") { el = tt_GetElt(tt_aV[FIX][0]); } else { el = tt_aV[FIX][0]; } iX = tt_aV[FIX][1]; iY = tt_aV[FIX][2]; if(!tt_aV[ABOVE] && el) { iY += tt_GetDivH(el); } for(; el; el = el.offsetParent) { iX += el.offsetLeft || 0; iY += el.offsetTop || 0; } } if(tt_aV[ABOVE]) { iY -= tt_h; } tt_SetTipPos(iX, iY); }\n' +
'function tt_Fade(a, now, z, n) { if(n) { now += Math.round((z - now) / n); if((z > a) ? (now >= z) : (now <= z)) { now = z; } else { tt_tFade.Timer( "tt_Fade(" + a + "," + now + "," + z + "," + (n - 1) + ")", tt_aV[FADEINTERVAL], true ); } } now ? tt_SetTipOpa(now) : tt_Hide(); }\n' +
'function tt_SetTipOpa(opa) { tt_SetOpa(tt_aElt[5], opa); if(tt_aElt[1]) { tt_SetOpa(tt_aElt[1], opa); } if(tt_aV[SHADOW]) { opa = Math.round(opa * 0.8); tt_SetOpa(tt_aElt[7], opa); tt_SetOpa(tt_aElt[8], opa); } }\n' +
'function tt_OnCloseBtnOver(iOver) { var css = tt_aElt[4].style; iOver <<= 1; css.background = tt_aV[CLOSEBTNCOLORS][iOver]; css.color = tt_aV[CLOSEBTNCOLORS][iOver + 1]; }\n' +
'function tt_OnLClick(e) { e = e || window.event; if(!((e.button && e.button & 2) || (e.which && e.which == 3))) { if(tt_aV[CLICKSTICKY] && (tt_iState & 0x4)) { tt_aV[STICKY] = true; tt_iState &= ~0x4; } else if(tt_aV[CLICKCLOSE]) tt_HideInit(); } }\n' +
'function tt_Int(x) { var y; return(isNaN(y = parseInt(x)) ? 0 : y); }\n' +
'Number.prototype.Timer = function(s, iT, bUrge) { if(!this.value || bUrge) { this.value = window.setTimeout(s, iT); } }\n' +
'Number.prototype.EndTimer = function() { if(this.value) { window.clearTimeout(this.value); this.value = 0; } }\n' +
'function tt_GetWndCliSiz(s) { var db; var y = window["inner" + s]; var sC = "client" + s; var sN = "number"; if(typeof y == sN) { var y2; return( ((db = document.body) && typeof(y2 = db[sC]) == sN && y2 && y2 <= y) ? y2 : ((db = document.documentElement) && typeof(y2 = db[sC]) == sN && y2 && y2 <= y) ? y2 : y ); } return( ((db = document.documentElement) && (y = db[sC])) ? y : document.body[sC] ); } function tt_SetOpa(el, opa) { var css = el.style; tt_opa = opa; if(tt_flagOpa == 1) { if(opa < 100) { if(typeof(el.filtNo) == tt_u) { el.filtNo = css.filter; } var bVis = css.visibility != "hidden"; css.zoom = "100%"; if(!bVis) { css.visibility = "visible"; } css.filter = "alpha(opacity=" + opa + ")"; if(!bVis) css.visibility = "hidden"; } else if(typeof(el.filtNo) != tt_u) css.filter = el.filtNo; } else { opa /= 100.0; switch(tt_flagOpa) { case 2: css.KhtmlOpacity = opa; break; case 3: css.KHTMLOpacity = opa; break; case 4: css.MozOpacity = opa; break; case 5: css.opacity = opa; break; } } } function tt_Err(sErr, bIfDebug) { if(tt_Debug || !bIfDebug) alert("Tooltip Script Error Message:" + sErr); } function tt_ExtCmdEnum() { var s; for(var i in config) { s = "window." + i.toString().toUpperCase(); if(eval("typeof(" + s + ") == tt_u")) { eval(s + " = " + tt_aV.length); tt_aV[tt_aV.length] = null; } } } function tt_ExtCallFncs(arg, sFnc) { var b = false; for(var i = tt_aExt.length; i;) {--i; var fnc = tt_aExt[i]["On" + sFnc]; if(fnc && fnc(arg)) { b = true; } } return b; } tt_Init();\n';
var script = document.createElement('script');
script.type="text/javascript";
script.innerHTML = sTooltip;
document.getElementsByTagName('head')[0].appendChild(script);
var script = document.createElement('script');
script.type="text/javascript";
script.innerHTML = '\nconfig. Delay = 0;\nconfig. Left = true;\nconfig. ShadowWidth = 1;\nconfig. ShadowColor = "#FFFFFF";\nconfig. BgColor = "#000000";\nconfig. BorderWidth = 2;\nconfig. BorderColor = "#FFFFFF";\n' + sAppsTable;
document.getElementsByTagName('head')[0].appendChild(script);
}
} // no chaptcha - end
GM_setValue('LastRunTime',parseInt(StartTime/1000));
})(); // function wrapper
Donate for the site OpenUserJS
Are you sure you want to go to an external site to donate a monetary value?
WARNING: Some countries laws may supersede the payment processors policy such as the GDPR and PayPal. While it is highly appreciated to donate, please check with your countries privacy and identity laws regarding privacy of information first. Use at your utmost discretion.