From: "Saved by Internet Explorer 11" Subject: Linksys SPA Configuration Date: Thu, 14 Sep 2017 11:53:18 +1000 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_000E_01D32D50.0E6B4120" X-MimeOLE: Produced By Microsoft MimeOLE V6.1.7601.23651 This is a multi-part message in MIME format. ------=_NextPart_000_000E_01D32D50.0E6B4120 Content-Type: text/html; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Content-Location: http://192.100.100.11/admin/advanced =20 Linksys SPA Configuration =20 =20
3D"Cisco-Linksys,
Router 3D"" 3D"" Voice=20 3D"" 3D""  

Status

Wan=20 Setup

Lan=20 Setup

Application

PBX=20 Status
User Login   =20 basic  | advanced


 
Product=20 Information=20
Product Name: SPA9000 Serial Number: FM700J101569=20
Software Version: 6.1.5 Hardware Version: 1.2.5(a)=20
MAC Address: 000E08145D9F Client Certificate: Installed=20
Customization: Open Licenses: None=20
 
System=20 Status=20
Current Time: 9/14/2017 11:53:16 Elapsed Time: 05:38:19=20
Wan Connection Type: Static IP Current IP: 192.100.100.11=20
Host Name: spa9000 Domain: =20
Current Netmask: 255.255.255.0 Current Gateway: 192.100.100.111=20
Primary DNS:
Secondary DNS: =20
LAN IP Address: 0.0.0.0 Broadcast Pkts Sent: 0=20
Broadcast Bytes Sent: 0 Broadcast Pkts Recv: 61839=20
Broadcast Bytes Recv: 4828785 Broadcast Pkts Dropped: 0=20
Broadcast Bytes Dropped: 0

 
Internet=20 Connection Settings=20
Connection Type: =20
 
= Static IP=20 Settings=20
Static IP: NetMask: =20
Gateway:
 
= PPPoE=20 Settings=20
PPPOE Login Name: PPPOE Login Password: =20
PPPOE Service Name: =20
 
= Optional=20 Settings=20
HostName: Domain: =20
Primary DNS: Secondary DNS: =20
DNS Server Order: DNS Query Mode: =20
Primary NTP Server: Secondary NTP Server: =20
DHCP IP Revalidate Timer: Minutes
 
MAC = Clone=20 Settings=20
Enable MAC Clone Service: =20 Cloned MAC Address: =20
 
Remote=20 Management=20
Enable WAN Web Server: =20 WAN Web Server Port: =20
 
QOS=20 Settings=20
QOS Policy: =20
QOS QDisc: Maximum Uplink Speed: (Kbps)=20
 
VLAN=20 Settings=20
Enable VLAN: =20 VLAN ID: [0x000-0xFFF]

Networking Service: =20
 
LAN = Network=20 Settings=20
LAN IP Address: LAN Subnet Mask: =20
 
=20
Enable DHCP Server: =20 DHCP Lease Time: =20 Hours=20
DHCP Client Starting IP Address: 0.0.0. Number of Client IP Addresses: =20
 
Static DHCP Lease=20 Settings=20
Enable Host Mac Address Host IP Address  
=20 0.0.0. =20  
=20 0.0.0. =20  
=20 0.0.0. =20  
=20 0.0.0. =20  
=20 0.0.0. =20  
=20 0.0.0. =20  
=20 0.0.0. =20  
=20 0.0.0. =20  
=20 0.0.0. =20  
=20 0.0.0. =20 =  

 
Port = Forwarding=20 Settings=20
Enable Service Name Starting Port Ending Port Protocol Server IP Address
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
=20 =20 =20 =20 0.0.0. =20
 
DMZ=20 Settings=20
Enable DMZ: =20
DMZ Host IP Address: 0.0.0.
 
Miscellaneous=20 Settings=20
Multicast Passthru:
 
System Reserved=20 Ports Range=20
Starting Port: (+10000) Num of Ports Reserved: =20
 
 
 =20
PBX=20 Status
User Login   =20 basic  | advanced=20



Copyright =A9 1992-2006 Cisco Systems, = Inc. All=20 Rights Reserved.

------=_NextPart_000_000E_01D32D50.0E6B4120 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://192.100.100.11/spabanner.jpg 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 ------=_NextPart_000_000E_01D32D50.0E6B4120 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://ie.kis.v2.scr.kaspersky-labs.com/C40AC964-6429-7C45-9169-A939E0676DB8/main.js (function(){=0A= var KasperskyLab =3D (function (context) { function GetClass(obj) { if (typeof obj =3D=3D=3D "undefined") return "undefined"; if (obj =3D=3D=3D null) return "null"; return Object.prototype.toString.call(obj) .match(/^\[object\s(.*)\]$/)[1]; } var exports =3D {}, undef; function ObjectToJson(object) { if (object =3D=3D=3D null || object =3D=3D Infinity || object = =3D=3D -Infinity || object =3D=3D=3D undef) return "null"; var className =3D GetClass(object); if (className =3D=3D "Boolean") { return "" + object; } else if (className =3D=3D "Number") { return window.isNaN(object) ? "null" : "" + object; } else if (className =3D=3D "String") { var escapedStr =3D "" + object; return "\"" + escapedStr.replace(/\\/g, = "\\\\").replace(/\"/g, "\\\"") + "\""; } if (typeof object =3D=3D "object") { if (!ObjectToJson.check) ObjectToJson.check =3D []; for (var i=3D0, chkLen=3DObjectToJson.check.length ; = i 0); } function MutationChangeObserver(observeTag) { var m_observer; var m_callback; var m_functionCheckInteresting =3D observeTag ? function(node){return = IsNodeContainsElementWithTag(node, observeTag);} : IsElementNode; function ProcessNodeList(nodeList) { for (var i =3D 0; i < nodeList.length; ++i) { if (m_functionCheckInteresting(nodeList[i])) return true; } return false; } function ProcessDomChange(records) { if (!m_callback) return; for (var i =3D 0; i < records.length; ++i) { var record =3D records[i]; if ((record.addedNodes.length && ProcessNodeList(record.addedNodes)) = || (record.removedNodes.length && = ProcessNodeList(record.removedNodes))) { m_callback(); return; } } } this.Start =3D function(callback) { m_callback =3D callback; m_observer =3D new MutationObserver(ProcessDomChange); m_observer.observe(document, { childList: true, subtree: true }); }; this.Stop =3D function() { m_observer.disconnect(); m_callback =3D null; }; } function DomEventsChangeObserver(observeTag) { var m_callback; var m_functionCheckInteresting =3D observeTag ? function(node){return = IsNodeContainsElementWithTag(node, observeTag);} : IsElementNode; function ProcessEvent(event) { if (!m_callback) return; if (m_functionCheckInteresting(event.target)) m_callback(); } this.Start =3D function(callback) { window.addEventListener("DOMNodeInserted", ProcessEvent); window.addEventListener("DOMNodeRemoved", ProcessEvent); m_callback =3D callback; } this.Stop =3D function() { window.removeEventListener("DOMNodeInserted", ProcessEvent); window.removeEventListener("DOMNodeRemoved", ProcessEvent); m_callback =3D null; } } function TimeoutChangeObserver(observeTag) { var m_interval; var m_callback; var m_tagCount; var m_attribute =3D 'klot_' + ns.GetCurrentTime(); function IsChangesOccure(nodeList) { for (var i =3D 0; i < nodeList.length; ++i) if (!nodeList[i][m_attribute]) return true; return false; } function FillTagInfo(nodeList) { m_tagCount =3D nodeList.length; for (var i =3D 0; i < m_tagCount; ++i) nodeList[i][m_attribute] =3D true; } function TimeoutProcess() { if (!m_callback) return; var nodeList =3D observeTag ? = document.getElementsByTagName(observeTag) : = document.getElementsByTagName("*"); if (nodeList.length !=3D=3D m_tagCount || IsChangesOccure(nodeList)) { FillTagInfo(nodeList); m_callback(); } } this.Start =3D function(callback) { m_callback =3D callback; FillTagInfo(document.getElementsByTagName(observeTag)); m_interval =3D setInterval(TimeoutProcess, 10 * 1000); if (document.readyState !=3D=3D "complete") ns.AddEventListener(window, "load", TimeoutProcess); } this.Stop =3D function() { clearInterval(m_interval); m_callback =3D null; } } ns.GetDomChangeObserver =3D function(observeTag) { var observeTagLowerCase =3D observeTag ? observeTag.toLowerCase() : = observeTag; if (window.MutationObserver && document.documentMode !=3D=3D 11)=09 return new MutationChangeObserver(observeTagLowerCase); if (window.addEventListener) return new DomEventsChangeObserver(observeTagLowerCase); return new TimeoutChangeObserver(observeTagLowerCase); } return ns; }) (KasperskyLab || {}); (function (ns) { function md5cycle(x, k) { var a =3D x[0], b =3D x[1], c =3D x[2], d =3D x[3]; a =3D ff(a, b, c, d, k[0], 7, -680876936); d =3D ff(d, a, b, c, k[1], 12, -389564586); c =3D ff(c, d, a, b, k[2], 17, 606105819); b =3D ff(b, c, d, a, k[3], 22, -1044525330); a =3D ff(a, b, c, d, k[4], 7, -176418897); d =3D ff(d, a, b, c, k[5], 12, 1200080426); c =3D ff(c, d, a, b, k[6], 17, -1473231341); b =3D ff(b, c, d, a, k[7], 22, -45705983); a =3D ff(a, b, c, d, k[8], 7, 1770035416); d =3D ff(d, a, b, c, k[9], 12, -1958414417); c =3D ff(c, d, a, b, k[10], 17, -42063); b =3D ff(b, c, d, a, k[11], 22, -1990404162); a =3D ff(a, b, c, d, k[12], 7, 1804603682); d =3D ff(d, a, b, c, k[13], 12, -40341101); c =3D ff(c, d, a, b, k[14], 17, -1502002290); b =3D ff(b, c, d, a, k[15], 22, 1236535329); a =3D gg(a, b, c, d, k[1], 5, -165796510); d =3D gg(d, a, b, c, k[6], 9, -1069501632); c =3D gg(c, d, a, b, k[11], 14, 643717713); b =3D gg(b, c, d, a, k[0], 20, -373897302); a =3D gg(a, b, c, d, k[5], 5, -701558691); d =3D gg(d, a, b, c, k[10], 9, 38016083); c =3D gg(c, d, a, b, k[15], 14, -660478335); b =3D gg(b, c, d, a, k[4], 20, -405537848); a =3D gg(a, b, c, d, k[9], 5, 568446438); d =3D gg(d, a, b, c, k[14], 9, -1019803690); c =3D gg(c, d, a, b, k[3], 14, -187363961); b =3D gg(b, c, d, a, k[8], 20, 1163531501); a =3D gg(a, b, c, d, k[13], 5, -1444681467); d =3D gg(d, a, b, c, k[2], 9, -51403784); c =3D gg(c, d, a, b, k[7], 14, 1735328473); b =3D gg(b, c, d, a, k[12], 20, -1926607734); a =3D hh(a, b, c, d, k[5], 4, -378558); d =3D hh(d, a, b, c, k[8], 11, -2022574463); c =3D hh(c, d, a, b, k[11], 16, 1839030562); b =3D hh(b, c, d, a, k[14], 23, -35309556); a =3D hh(a, b, c, d, k[1], 4, -1530992060); d =3D hh(d, a, b, c, k[4], 11, 1272893353); c =3D hh(c, d, a, b, k[7], 16, -155497632); b =3D hh(b, c, d, a, k[10], 23, -1094730640); a =3D hh(a, b, c, d, k[13], 4, 681279174); d =3D hh(d, a, b, c, k[0], 11, -358537222); c =3D hh(c, d, a, b, k[3], 16, -722521979); b =3D hh(b, c, d, a, k[6], 23, 76029189); a =3D hh(a, b, c, d, k[9], 4, -640364487); d =3D hh(d, a, b, c, k[12], 11, -421815835); c =3D hh(c, d, a, b, k[15], 16, 530742520); b =3D hh(b, c, d, a, k[2], 23, -995338651); a =3D ii(a, b, c, d, k[0], 6, -198630844); d =3D ii(d, a, b, c, k[7], 10, 1126891415); c =3D ii(c, d, a, b, k[14], 15, -1416354905); b =3D ii(b, c, d, a, k[5], 21, -57434055); a =3D ii(a, b, c, d, k[12], 6, 1700485571); d =3D ii(d, a, b, c, k[3], 10, -1894986606); c =3D ii(c, d, a, b, k[10], 15, -1051523); b =3D ii(b, c, d, a, k[1], 21, -2054922799); a =3D ii(a, b, c, d, k[8], 6, 1873313359); d =3D ii(d, a, b, c, k[15], 10, -30611744); c =3D ii(c, d, a, b, k[6], 15, -1560198380); b =3D ii(b, c, d, a, k[13], 21, 1309151649); a =3D ii(a, b, c, d, k[4], 6, -145523070); d =3D ii(d, a, b, c, k[11], 10, -1120210379); c =3D ii(c, d, a, b, k[2], 15, 718787259); b =3D ii(b, c, d, a, k[9], 21, -343485551); x[0] =3D add32(a, x[0]); x[1] =3D add32(b, x[1]); x[2] =3D add32(c, x[2]); x[3] =3D add32(d, x[3]); } function cmn(q, a, b, x, s, t) { a =3D add32(add32(a, q), add32(x, t)); return add32((a << s) | (a >>> (32 - s)), b); } function ff(a, b, c, d, x, s, t) { return cmn((b & c) | ((~b) & d), a, b, x, s, t); } function gg(a, b, c, d, x, s, t) { return cmn((b & d) | (c & (~d)), a, b, x, s, t); } function hh(a, b, c, d, x, s, t) { return cmn(b^c^d, a, b, x, s, t); } function ii(a, b, c, d, x, s, t) { return cmn(c^(b | (~d)), a, b, x, s, t); } function md51(s) { var n =3D s.length, state =3D [1732584193, -271733879, -1732584194, 271733878], i; for (i =3D 64; i <=3D s.length; i +=3D 64) { md5cycle(state, md5blk(s.substring(i - 64, i))); } s =3D s.substring(i - 64); var tail =3D [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; for (i =3D 0; i < s.length; i++) tail[i >> 2] |=3D s.charCodeAt(i) << ((i % 4) << 3); tail[i >> 2] |=3D 0x80 << ((i % 4) << 3); if (i > 55) { md5cycle(state, tail); for (i =3D 0; i < 16; i++) tail[i] =3D 0; } tail[14] =3D n * 8; md5cycle(state, tail); return state; } function md5blk(s) { var md5blks =3D [], i; for (i =3D 0; i < 64; i +=3D 4) { md5blks[i >> 2] =3D s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); } return md5blks; } var hex_chr =3D '0123456789abcdef'.split(''); function rhex(n) { var s =3D '', j =3D 0; for (; j < 4; j++) s +=3D hex_chr[(n >> (j * 8 + 4)) & 0x0F]+hex_chr[(n >> (j * 8)) & = 0x0F]; return s; } function hex(x) { for (var i =3D 0; i < x.length; i++) x[i] =3D rhex(x[i]); return x.join(''); } ns.md5 =3D function (s) { return hex(md51(s)); }; function add32(a, b) { return (a + b) & 0xFFFFFFFF; } if (ns.md5('hello') !=3D '5d41402abc4b2a76b9719d911017c592') { add32 =3D function(x, y) { var lsw =3D (x & 0xFFFF) + (y & 0xFFFF), msw =3D (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); } } })(KasperskyLab || {}); var KasperskyLab =3D (function (ns) { ns.Balloon =3D function (balloonName, position, createCallback, = clickCallback) { var self =3D this; var IECompatMode =3D 5;=20 var m_balloon =3D null; var m_timeout =3D null; var m_balloonDivName =3D 'balloon_parent_div_' + balloonName; function AddStyles() { ns.AddStyles([ '.kisb * { position: relative; display:block; overflow-x:hidden; = width: auto; margin:0; padding:0; font-family: Verdana; line-height: = 150%; text-indent:0; border:0; text-align:left; box-sizing:content-box; = letter-spacing: normal;}', '.kisb { z-index:2147483647; width: 280px; cursor:default; = display:block;}', '.kisb a { text-decoration: underline; display:inline-block; }', '.kisb a:hover { text-decoration: none; }', '.kisb a, .kisb a:link, .kisb a:hover, .kisb a:visited { color: = #008ccc;}']); } function ClearTimeoutInternal() { if (m_timeout) clearTimeout(m_timeout); m_timeout =3D 0; } function MouseIsOver() { ClearTimeoutInternal.call(self); } function MouseLeaveBalloon() { if (!m_timeout) { ClearTimeoutInternal(); m_timeout =3D setTimeout(function () { HideBalloon(); }, = 200); } } function MouseClick(mouseArgs) { if (clickCallback && clickCallback(mouseArgs || = window.event)) { HideBalloon.call(self); } } function CreateBalloon(showDuring) { AddStyles(); var balloonDiv =3D document.createElement('div'); balloonDiv.className =3D 'kisb'; balloonDiv.id =3D m_balloonDivName; if (showDuring) { ns.AddEventListener(balloonDiv, 'mouseout', MouseLeaveBalloon); ns.AddEventListener(balloonDiv, 'mouseover', MouseIsOver); } ns.AddEventListener(balloonDiv, 'click', MouseClick); createCallback(balloonDiv); balloonDiv.style.visibility =3D 'hidden'; document.body.appendChild(balloonDiv); return balloonDiv; } function GetElementSize(element) { var fixIECompatMode =3D document.attachEvent && document.documentMode = && document.documentMode =3D=3D IECompatMode; var rect =3D fixIECompatMode ? {width:element.clientWidth || = element.scrollWidth, height:element.clientHeight || = element.scrollHeight} : element.getBoundingClientRect(); var width =3D rect.width ? rect.width : rect.right - = rect.left; var height =3D rect.height ? rect.height : rect.bottom - = rect.top; return { width: width, height: height }; } function HideBalloon() { if (!!m_balloon) m_balloon.style.visibility =3D 'hidden'; } function ShowBalloonInternal(clientX, clientY, showDuring) { m_balloon =3D document.getElementById(m_balloonDivName); if (!m_balloon) m_balloon =3D CreateBalloon(showDuring); if (m_balloon.style.visibility =3D=3D 'visible') return; var x =3D 0; var y =3D 0; var balloonSize =3D GetElementSize(m_balloon); if (position =3D=3D 1) { x =3D clientX; y =3D clientY - (balloonSize.height ? balloonSize.height = : 20); } else if (position =3D=3D 2) { var clientWidth =3D ns.GetPageWidth(); var halfWidth =3D balloonSize.width / 2; if (halfWidth > clientX) x =3D 0; else if (halfWidth + clientX > clientWidth) x =3D clientWidth - balloonSize.width; else x =3D clientX - halfWidth; y =3D (clientY + balloonSize.height > = ns.GetPageHeight()) ? clientY - balloonSize.height : clientY; } else { x =3D clientX; y =3D clientY; } if (y < 0) y =3D 0; var scroll =3D ns.GetPageScroll(); y +=3D scroll.top; x +=3D scroll.left; m_balloon.style.position =3D 'absolute'; m_balloon.style.left =3D Math.round(x).toString() + 'px'; m_balloon.style.top =3D Math.round(y).toString() + 'px'; m_balloon.style.visibility =3D 'visible'; ClearTimeoutInternal(); if (showDuring) m_timeout =3D setTimeout(function () { HideBalloon(); }, = showDuring); } this.ShowBalloon =3D function (getCoord, showAfter, showDuring) = { ClearTimeoutInternal(); if (!showAfter) { var coord =3D getCoord(); ShowBalloonInternal(coord.x, coord.y, showDuring); } else { m_timeout =3D setTimeout(function () { var coord =3D getCoord(); if (coord.isNeed) { ShowBalloonInternal(coord.x, coord.y, = showDuring); } else { HideBalloon(); } }, showAfter); } } this.ShowImmediately =3D function(coord) { ClearTimeoutInternal(); ShowBalloonInternal(coord.x, coord.y, 0); } this.Hide =3D function() { HideBalloon(); } }; return ns; }) (KasperskyLab || {}); (function(){=0A= KasperskyLab.WORK_IDENTIFIERS=3D"DFB379F2-436D-F845,6F6FD999-9973-F943,81= 21203D-7DEB-C748";=0A= var kaspersyLabSessionInstance =3D null; (function ( ns) { var prefix =3D ns.PREFIX || "http://ie.kis.v2.scr.kaspersky-labs.com/"; var signature =3D ns.SIGNATURE || = "C40AC964-6429-7C45-9169-A939E0676DB8"; var workIdentifiersString =3D ns.WORK_IDENTIFIERS || ""; var cspNonce =3D ns.CSP_NONCE || "697BE2A5098F04438205A38AF36A796D" if (workIdentifiersString) { var workIdentifiers =3D workIdentifiersString.split(","); (function ( signature) { var pattern =3D signature.toLowerCase(); for (var i =3D 0, scriptsCount =3D document.scripts.length; i < = scriptsCount; ++i) { var tag =3D document.scripts[i]; if (typeof tag.src =3D=3D=3D 'string' && tag.src.length > 76 && tag.src.toLowerCase().indexOf(pattern) > 0 && = /\/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F= ]{12}\/main.js/.test(tag.src)) { for (var i =3D 0; i < workIdentifiers.length; ++i) window[workIdentifiers[i]] =3D true; tag.parentElement.removeChild(tag); return;=20 } } })(signature); } function IsDefined(variable) { return "undefined" !=3D=3D typeof(variable); } var m_syncCallSupported =3D true; var ajaxRequest =3D (function () { var oldOpen =3D window.XMLHttpRequest && = window.XMLHttpRequest.prototype.open; var oldSend =3D window.XMLHttpRequest && = window.XMLHttpRequest.prototype.send; var oldXHR =3D window.XMLHttpRequest; var oldXDR =3D window.XDomainRequest; return { GetAsyncRequest: function () { var xmlhttp =3D oldXDR ? new oldXDR() : new oldXHR(); if (!oldXDR) { xmlhttp.open =3D oldOpen; xmlhttp.send =3D oldSend; } xmlhttp.onprogress =3D function () {}; return xmlhttp; }, GetSyncRequest: function () { var xmlhttp =3D new oldXHR(); xmlhttp.open =3D oldOpen; xmlhttp.send =3D oldSend; xmlhttp.onprogress =3D function () {}; return xmlhttp; } }; })();=09 var PingPongCallReceiver =3D function(caller) { var m_caller =3D caller; var m_isProductConnected =3D false; var m_pingWaitResponse =3D false; var m_requestDelay =3D ns.MaxRequestDelay; var m_requestTimer =3D null; var m_callCallback =3D function(){}; var m_errorCallback =3D function(){}; var m_updateCallback =3D function(){}; function SendRequest() { try=20 { m_caller.Call( "from", null, null, true, function(result, parameters, method) { m_pingWaitResponse =3D false; m_isProductConnected =3D true; if (parameters =3D=3D=3D "undefined" || method =3D=3D=3D = "undefined")=20 { m_errorCallback('AJAX pong is not received. Product is = deactivated'); return; } if (method) { setTimeout(function () { SendRequest(); }, 0); m_callCallback(method, parameters); } }, function(error) { m_pingWaitResponse =3D false; m_isProductConnected =3D false; PostponeInit(); m_errorCallback(error); }); m_pingWaitResponse =3D true; } catch (e) { m_errorCallback('Ajax send ping exception: ' + = (e.message || e)); } } this.StartReceive =3D function(callCallback, errorCallback, = updateCallback) { m_callCallback =3D callCallback; m_errorCallback =3D errorCallback; m_updateCallback =3D updateCallback; m_requestDelay =3D m_updateCallback(); m_requestTimer =3D setTimeout(function ping() { try=20 { if (m_pingWaitResponse) { m_requestTimer =3D setTimeout(ping, 100); return; } m_requestDelay =3D m_updateCallback(); SendRequest(); m_requestTimer =3D setTimeout(ping, m_requestDelay); } catch (e) { m_errorCallback('Send ping request: ' + (e.message || e)); } }, m_requestDelay); }; this.StopReceive =3D function() { clearTimeout(m_requestTimer); m_requestTimer =3D null; m_callCallback =3D function(){}; m_errorCallback =3D function(){}; m_updateCallback =3D function(){}; }; this.IsStarted =3D function() { return m_requestTimer !=3D=3D null; } this.IsProductConnected =3D function() { return m_isProductConnected; }; }; var AjaxCaller =3D function() { var m_path =3D prefix + signature; function NoCacheParameter()=20 { return "&nocache=3D" + Math.floor((1 + Math.random()) * = 0x10000).toString(16); } function GetSpecialPlugins(predefined)=20 { return (predefined) ? "&plugins=3D" + encodeURIComponent(predefined) = : ""; =09 } function PrepareRequestObject(command, commandAttribute, isPost, = isAsync) { var request =3D isAsync ? ajaxRequest.GetAsyncRequest() : = ajaxRequest.GetSyncRequest(); if (request) { var urlPath =3D m_path + "/" + command; if (commandAttribute) urlPath +=3D "/" + commandAttribute; if (isPost) { request.open("POST", urlPath); } else=20 { if (urlPath.indexOf("?") =3D=3D=3D -1) urlPath +=3D "?get"; urlPath +=3D NoCacheParameter(); request.open("GET", urlPath, isAsync); } } return request; } function AsyncCall(command, commandAttribute, data, = callbackResult, callbackError) { try { var request =3D PrepareRequestObject(command, = commandAttribute, data ? true : false, true); if (!request)=20 { callbackError && callbackError("Cannot create AJAX = request!"); return; } var timeout =3D setTimeout(function () { callbackError && callbackError("Cannot send AJAX = request for calling " + command + "/" + commandAttribute); request.abort(); }, 120000); request.onerror =3D function () { clearTimeout(timeout); request.onerror =3D function () { }; request.onload =3D function () { }; callbackError && callbackError("AJAX request error = for calling " + command + "/" + commandAttribute); }; request.onload =3D function () { clearTimeout(timeout); timeout =3D null; request.onload =3D function () { }; request.onerror =3D function () { }; if (request.responseText) { if (callbackResult) callbackResult(request.responseText); request =3D null; return; } request =3D null; if (callbackError) { callbackError("AJAX request with unsupported url = type!");=20 } }; request.send(data); ns.Log("Call native function " + command + "/" + = commandAttribute); } catch (e) { if (callbackError) { callbackError("AJAX request " + command + "/" + = commandAttribute + " exception: " + (e.message || e)); } } }; function SyncCall(command, commandAttribute, data, callbackResult, = callbackError) { try { if (!m_syncCallSupported) return false; var request =3D PrepareRequestObject(command, commandAttribute, data = ? true : false, false); if (!request) { callbackError && callbackError("Cannot create AJAX = request!"); return false; } ns.Log("SyncCall native function " + command); request.send(data); if (request.status =3D=3D=3D 200) { if (callbackResult && request.responseText) callbackResult(request.responseText); request =3D null; return true; } } catch (e) { if (callbackError) callbackError("AJAX request " + command + " = exception: " + (e.message || e)); } return false; } this.Start =3D function(callbackSuccess) { callbackSuccess(); } this.SendLog =3D function(message) { AsyncCall("log?" + encodeURIComponent(message)); } this.Call =3D function(command, commandAttribute, data, isAsync, = callbackResult, callbackError)=20 { var callFunction =3D (isAsync || !IsDefined(isAsync)) ? AsyncCall : = SyncCall; return callFunction( command, commandAttribute, data, function(responseText) { var commandResponse =3D ns.JSONParse(responseText); if (commandResponse.result =3D=3D=3D -1610612735) { callFunction( command, commandAttribute, data, function(responseText) { if (!callbackResult) return; commandResponse =3D ns.JSONParse(responseText); callbackResult(commandResponse.result, = commandResponse.parameters, commandResponse.method); }, callbackError); } else { if (callbackResult) callbackResult(commandResponse.result, = commandResponse.parameters, commandResponse.method); } =09 }, callbackError); } this.InitCall =3D function(pluginsInitData, callbackResult, = callbackError) { var specialPlugins =3D IsDefined(ns.PLUGINS_LIST) ? = GetSpecialPlugins(ns.PLUGINS_LIST) : GetSpecialPlugins(""); var serializedInitData =3D (pluginsInitData.length) ? "&data=3D" + = encodeURIComponent(ns.JSONStringify({data : pluginsInitData})) : ""; if (document.location.href =3D=3D "data:text/html,chromewebdata") return callbackError(); AsyncCall( "init?url=3D" + encodeURIComponent(document.location.href) + = specialPlugins + serializedInitData, null, null, function(responseText) { var initSettings =3D ns.JSONParse(responseText); m_path =3D (prefix || '/') + initSettings.ajaxId + '/' + = initSettings.sessionId; callbackResult(initSettings); }, callbackError); } }; var m_webSocketSupported =3D IsDefined(window.WebSocket); var WebSocketWrapper =3D function() { var WebSocketObject =3D WebSocket; var WebSocketSend =3D WebSocket.prototype.send; var WebSocketClose =3D WebSocket.prototype.close; this.GetWebSocket =3D function(path) { var webSocket =3D new WebSocketObject(path); webSocket.send =3D WebSocketSend; webSocket.close =3D WebSocketClose; return webSocket; } } var m_webSocketWrapper =3D m_webSocketSupported ? new WebSocketWrapper = : null; var WebSocketCaller =3D function() { var m_socket; var m_waitResponse =3D {}; var m_callReceiver =3D function(){}; var m_errorCallback =3D function(){}; var m_callReceiverEnabled =3D false; var m_connected =3D false; var m_initialized =3D false; var m_deferredCalls =3D []; var m_wasCallbackErrorCalled =3D false; function GetWebSocket(callbackSuccess, callbackError) { var url =3D (prefix =3D=3D=3D "/")=20 ? document.location.protocol + "//" + document.location.host + = prefix=20 : prefix; var webSocketPath =3D (url.indexOf("http:") =3D=3D=3D 0)=20 ? "ws" + url.substr(4)=20 : "wss" + url.substr(5); webSocketPath +=3D signature + "/websocket?url=3D" + = encodeURIComponent(document.location.href) + "&nocache=3D" + (new = Date().getTime()); var webSocket; try { webSocket =3D m_webSocketWrapper.GetWebSocket(webSocketPath); } catch (e) { m_webSocketSupported =3D false; throw e; } webSocket.onmessage =3D function(arg) { ProcessMessage(arg, callbackError); }; webSocket.onerror =3D function() { m_webSocketSupported =3D false; if (!m_wasCallbackErrorCalled && callbackError) callbackError(); m_wasCallbackErrorCalled =3D true; } webSocket.onopen =3D function() { m_wasCallbackErrorCalled =3D false; m_connected =3D true; if (callbackSuccess) callbackSuccess(); } webSocket.onclose =3D function(closeEvent) { m_connected =3D false; if (closeEvent && closeEvent.code =3D=3D 1006) webSocket.onerror(closeEvent); m_errorCallback("websocket closed"); }; return webSocket; } function ProcessMessage(arg, errorCallback) { m_wasCallbackErrorCalled =3D false; var response =3D ns.JSONParse(arg.data); if (m_waitResponse[response.callId]) { var callWaiter =3D m_waitResponse[response.callId]; delete m_waitResponse[response.callId]; clearTimeout(callWaiter.timeout); if (callWaiter.callbackResult) callWaiter.callbackResult(response.commandData); return; } if (!m_initialized) { m_deferredCalls.push(arg); return; } if (response.command =3D=3D=3D "from") { var command =3D ns.JSONParse(response.commandData); m_callReceiver(command.method, command.parameters); } else if (response.command =3D=3D=3D "reconnect") { m_socket.onmessage =3D function(){}; m_socket.onerror =3D function(){}; m_socket.onopen =3D function(){}; m_socket.onclose =3D function(){}; m_socket.close(); m_socket =3D GetWebSocket(function() { CallImpl("restore", "", response.commandData); }, errorCallback); } } function CallImpl(command, commandAttribute, data, callbackResult, = callbackError) { try { var callId =3D 0; if (callbackResult || callbackError) { callId =3D Math.floor((1 + Math.random()) * 0x10000); var timeout =3D setTimeout(function() { delete m_waitResponse[callId]; if (callbackError) callbackError("websocket call timeout for " + command + "/" + = commandAttribute); }, 120000); var callWaiter =3D=20 { callId: callId, callbackResult: callbackResult, timeout: timeout }; m_waitResponse[callId] =3D callWaiter; } m_socket.send(ns.JSONStringify( { callId: callId, command: command, commandAttribute: commandAttribute || "", commandData: data || "" })); } catch (e) { if (callbackError) callbackError("websocket call " + command + "/" + commandAttribute = + " exception: " + (e.message || e)); } } this.Start =3D function(callbackSuccess, callbackError) { try { m_socket =3D GetWebSocket(callbackSuccess, callbackError); } catch (e) { if (callbackError) callbackError("websocket start exception: " + (e.message || e)); } } this.SendLog =3D function(message) { CallImpl("log", null, message); } this.Call =3D function(command, commandAttribute, data, isAsync, = callbackResult, callbackError)=20 { if (IsDefined(isAsync) && !isAsync) return false; CallImpl( command,=20 commandAttribute,=20 data, callbackResult=20 ? function(responseText) { if (callbackResult) { var command =3D ns.JSONParse(responseText); callbackResult(command.result, command.parameters, = command.method); } } : null, callbackError); } this.InitCall =3D function(pluginsInitData, callbackResult, = callbackError) { var initData =3D=20 { url: document.location.href, plugins: (IsDefined(ns.PLUGINS_LIST)) ? ns.PLUGINS_LIST : "", data: { data : pluginsInitData } }; if (document.location.href =3D=3D "data:text/html,chromewebdata") return callbackError(); CallImpl("init", null, ns.JSONStringify(initData), function(responseText) { m_initialized =3D true; var initSettings =3D ns.JSONParse(responseText); callbackResult(initSettings); for (var i =3D 0; i < m_deferredCalls.length; ++i) ProcessMessage(m_deferredCalls[i], callbackError); m_deferredCalls =3D []; }, callbackError); } this.StartReceive =3D function(callMethod, errorCallback) { m_callReceiverEnabled =3D true; m_callReceiver =3D callMethod; m_errorCallback =3D errorCallback; } this.StopReceive =3D function() { m_callReceiverEnabled =3D false; m_callReceiver =3D function(){}; m_errorCallback =3D function(){}; if (m_socket) { m_connected =3D false; m_socket.onmessage =3D function(){}; m_socket.onerror =3D function(){}; m_socket.onopen =3D function(){}; m_socket.onclose =3D function(){}; m_socket.close(); m_socket =3D null; } } this.IsStarted =3D function() { return m_callReceiverEnabled; } this.IsProductConnected =3D function() { return m_connected; } } var CallReceiver =3D function (caller) { var m_plugins =3D {}; var m_receiver =3D m_webSocketSupported ? caller : new = PingPongCallReceiver(caller); var m_caller =3D caller; this.RegisterMethod =3D function (methodName, callback) { var pluginId =3D GetPluginIdFromMethodName(methodName); if (pluginId) { var methods =3D GetPluginMethods(pluginId); if (methods) { if (methods[methodName]) { throw 'Already registered method ' + methodName; } methods[methodName] =3D callback; } else { throw 'Cannot registered ' + methodName; } } }; this.RegisterPlugin =3D function (pluginId, callbackPing, = callbackError) { if (m_plugins[pluginId]) { throw 'Already started plugin ' + pluginId; } var plugin =3D { onError: callbackError, onPing: callbackPing, methods: {} }; m_plugins[pluginId] =3D plugin; if (!m_receiver.IsStarted()) m_receiver.StartReceive(CallMethod, ReportError, UpdateDelay); }; this.UnregisterPlugin =3D function (pluginId) { delete m_plugins[pluginId]; if (IsPluginListEmpty()) m_receiver.StopReceive(); }; this.UnregisterAll =3D function () { if (IsPluginListEmpty()) return; m_receiver.StopReceive(); m_plugins =3D {}; }; this.IsEmpty =3D IsPluginListEmpty; function IsPluginListEmpty() { for (var key in m_plugins) { if (m_plugins.hasOwnProperty(key)) return false; } return true; } this.IsProductConnected =3D function() { return m_receiver.IsProductConnected(); } function UpdateDelay() { var newDelay =3D ns.MaxRequestDelay; var currentTime =3D ns.GetCurrentTime(); for (var pluginId in m_plugins) { try { var onPing =3D m_plugins[pluginId].onPing; if (onPing) { var delay =3D onPing(currentTime); if (delay < newDelay && delay > 0 && delay < = ns.MaxRequestDelay) { newDelay =3D delay; } } } catch (e) { ReportPluginError(pluginId, 'UpdateDelay: ' + = (e.message || e)); } } return newDelay; } function ReportPluginError(pluginId, status) { var onError =3D m_plugins[pluginId].onError; if (onError) onError(status); } function ReportError(status) { for (var pluginId in m_plugins) ReportPluginError(pluginId, status); } function GetPluginIdFromMethodName(methodName) { if (methodName) { var names =3D methodName.split('.', 2); if (names.length =3D=3D=3D 2) { return names[0]; } } return null; } function GetPluginMethods(pluginId) { var plugin =3D m_plugins[pluginId]; return plugin ? plugin.methods : null; } function CallPluginMethod(pluginId, methodName, args) { var methods =3D GetPluginMethods(pluginId); if (methods) { var callback =3D methods[methodName]; if (callback) { try { callback(args); m_caller.SendLog(methodName + " executed."); return true; } catch (e) { m_caller.SendLog("Call " + methodName + " in plugin " + pluginId + = " error: " + (e.message || e)); } } } m_caller.SendLog("Cannot call " + methodName + " for plugin = " + pluginId); return false; } function CallMethod(methodName, args) { ns.Log("Try to find js callback " + methodName); var pluginId =3D GetPluginIdFromMethodName(methodName); if (pluginId) CallPluginMethod(pluginId, methodName, args); } }; var KasperskyLabSessionClass =3D function (caller) { var self =3D this; var m_caller =3D caller; var m_callReceiver =3D new CallReceiver(caller); function CallImpl(methodName, arrayOfArgs, callbackResult, = callbackError, isAsync) { var data =3D (arrayOfArgs && arrayOfArgs.length)=20 ? ns.JSONStringify( { result: 0, method: methodName, parameters: arrayOfArgs }) : null; return m_caller.Call("to", methodName, data, isAsync, callbackResult, = callbackError); } function Call(methodName, arrayOfArgs, callbackResult, = callbackError) { CallImpl(methodName, arrayOfArgs, callbackResult, callbackError, = true); } function SyncCall(methodName, arrayOfArgs, callbackResult, = callbackError) { return CallImpl(methodName, arrayOfArgs, callbackResult, = callbackError, false); } function Stop() { try { m_callReceiver.UnregisterAll(); ns.Log("session stopped"); if (m_callReceiver.IsProductConnected()) { if (!m_caller.Call("shutdown", null, null, false)) m_caller.Call("shutdown"); } } catch (e) { } } function DeactivatePlugin(pluginId) { ns.Log('DeactivatePlugin ' + pluginId); m_callReceiver.UnregisterPlugin(pluginId); if (m_callReceiver.IsEmpty()) { Stop(); } } function ActivatePlugin(pluginId, callbackPing, callbackError) { ns.Log('ActivatePlugin ' + pluginId); m_callReceiver.RegisterPlugin(pluginId, callbackPing, = function (e) { callbackError && callbackError(e); m_callReceiver.UnregisterPlugin(pluginId); if (m_callReceiver.IsEmpty()) { Stop(); } }); } function RegisterMethod(methodName, callback) { ns.Log('RegisterMethod ' + methodName); m_callReceiver.RegisterMethod(methodName, callback); } this.Log =3D function (msg) { =20 msg && msg.length <=3D 2048 ? m_caller.SendLog(msg) : = m_caller.SendLog(msg.substring(0, 2048) + '<...>'); }; this.InitializePlugin =3D function (init) { init( function () { ActivatePlugin.apply(self, arguments); }, function () { RegisterMethod.apply(self, arguments); }, function () { Call.apply(self, arguments); }, function () { DeactivatePlugin.apply(self, arguments); }, function () { return SyncCall.apply(self, arguments); } ); }; ns.AddEventListener(window, "unload", function()=20 { if (!m_callReceiver.IsEmpty()) Stop(); }); }; var runners =3D {}; var pluginsInitData =3D []; ns.AddRunner =3D function(pluginName, runnerFunc, initParameters) { runners[pluginName] =3D runnerFunc; if (initParameters) { pluginsInitData.push({plugin: pluginName, parameters: = initParameters}); } }; ns.ContentSecurityPolicyNonceAttribute =3D cspNonce; function GetSupportedCaller() { return m_webSocketSupported=20 ? new WebSocketCaller() : new AjaxCaller; } function Init() { var caller =3D GetSupportedCaller(); caller.Start( function()=20 { caller.InitCall( pluginsInitData, function(initSettings) { ns.IsRtl =3D initSettings.rtl; kaspersyLabSessionInstance =3D new = KasperskyLabSessionClass(caller); var plugins =3D initSettings.plugins; for (var i =3D 0, pluginsCount =3D plugins.length; i < = pluginsCount; ++i) { var plugin =3D plugins[i]; var pluginRunnerFunction =3D runners[plugin.name]; if (pluginRunnerFunction) pluginRunnerFunction(KasperskyLab, kaspersyLabSessionInstance, = plugin.settings, plugin.localization); } }, function() { PostponeInit(); }); }, function()=20 { setTimeout(function () { Init(); }, 0); }); } var postponedInitTimeout =3D null; function PostponeInit() { clearTimeout(postponedInitTimeout) postponedInitTimeout =3D setTimeout(function () { Init(); }, 60 * = 1000); } setTimeout(function () { Init(); }, 0);=09 })(KasperskyLab); (function (ns)=20 { ns.waitForApiInjection =3D function(isApiInjected, eventName, callback) { if (isApiInjected()) { callback(); return; } var subscription =3D createSubscription(eventName, onApiInjected) function onApiInjected() { if (isApiInjected()) { subscription.unsubscribe(); callback(); } } } function createSubscription(eventName, callback) { var windowEventsSupported =3D document.createEvent || = window.addEventListener; return new (windowEventsSupported ? ModernSubscription : = IeLegacySubscription)(eventName, callback); } function ModernSubscription(eventName, callback) { ns.AddRemovableEventListener(window, eventName, callback); this.unsubscribe =3D function() { ns.RemoveEventListener(window, eventName, callback); } } function IeLegacySubscription(eventName, callback) { ns.AddRemovableEventListener(document.documentElement, = 'propertychange', onPropertyChange); this.unsubscribe =3D function() { ns.RemoveEventListener(document.documentElement, = 'propertychange', onPropertyChange); } function onPropertyChange(event) { if (event.propertyName =3D=3D eventName) callback(); } } })(KasperskyLab || {}); var tabIdPropertyName =3D KasperskyLab.LIGHT_PLUGIN_API_KEY || = 'klTabId_kis'; var scriptPluginId =3D Math.floor((1 + Math.random()) * = 0x10000).toString(16); function isApiInjected() { return !!window[tabIdPropertyName]; } function makeTopLevelArgument() { return window =3D=3D window.top ? 'true' : 'false'; } function removeTabIdProperty() { try { delete window[tabIdPropertyName]; } catch (e) { window[tabIdPropertyName] =3D undefined; }=09 } var documentInitParameters =3D isApiInjected() ? = [String(window[tabIdPropertyName]), makeTopLevelArgument(), = scriptPluginId] : null; KasperskyLab.AddRunner("light_doc", function (ns, session) { session.InitializePlugin(function(activatePlugin, _, callFunction) { activatePlugin('light_doc'); =09 if (documentInitParameters) { removeTabIdProperty(); return; } =09 ns.waitForApiInjection(isApiInjected, tabIdPropertyName, function() { var tabId =3D String(window[tabIdPropertyName]); removeTabIdProperty(); callFunction("light_doc.registerDocument", [ tabId,=20 document.URL, makeTopLevelArgument(), scriptPluginId ]); });=09 }); }, documentInitParameters); (function (ns) { ns.IsPositionEqual =3D function(prevPos, currentPos) { return prevPos && currentPos && prevPos.top =3D=3D=3D currentPos.top && = prevPos.left =3D=3D=3D currentPos.left; }; ns.GetAbsoluteElementPosition =3D function(element) { var box =3D element.getBoundingClientRect(); var scroll =3D ns.GetPageScroll(); return { left: box.left + scroll.left, top: box.top + scroll.top, right: box.right + scroll.left, bottom: box.bottom + scroll.top }; }; })(KasperskyLab || {}); (function (ns)=20 { ns.ProtectableElementDetector =3D function(protectMode) { var m_typesForbidden =3D ['hidden', 'submit', 'radio', 'checkbox', = 'button', 'image']; var m_protectMode =3D protectMode; this.Test =3D function(element) { if (m_protectMode < 2 || m_protectMode > 3) return false; var elementType =3D element.getAttribute('type'); elementType =3D elementType && elementType.toLowerCase(); if (m_protectMode =3D=3D=3D 2) { if (elementType !=3D 'password') return false; } else if (Includes(m_typesForbidden, elementType)) { return false; } if (GetComputedStyle(element, 'display') =3D=3D=3D 'none') return false; var maxLength =3D parseInt(element.getAttribute('maxlength'), 10); return typeof maxLength =3D=3D=3D 'number' && maxLength <=3D 3 ? false = : !element.readOnly; }; function Includes(list, text) { var i =3D 0, count =3D list.length; for (; i < count; ++i) if (list[i] =3D=3D=3D text) return true; return false; } function GetComputedStyle(element, property) { var value; if (element.currentStyle) { value =3D element.currentStyle[property]; } else { var styles =3D window.getComputedStyle(element, ''); if (styles) value =3D styles.getPropertyValue(property); } return typeof value !=3D=3D 'string' ? '' : value.toLowerCase(); } } })(KasperskyLab || {}); (function (ns) { ns.SecureInputTooltip =3D function(locales) { var m_tooltip, m_curPosition, m_top, m_bottom, m_pointer, m_needRestoreFocus, that =3D this; function CreateDivWithStyle(cssText) { var div =3D document.createElement('div'); div.style.cssText =3D cssText; return div; } function CreateTooltip() { var balloonDiv =3D = CreateDivWithStyle("position:absolute;display:block;width:auto;height:aut= o;padding:0;margin:0;text-align:left;border:none;border-radius:0;backgrou= nd:#transparent;z-index:2147483646;font-size:0px"); var iconDiv =3D = CreateDivWithStyle("position:relative;display:block;height:auto;width:aut= o;padding:35px 10px 11px;margin:0;text-align:left;border:1px solid = #B2B2B2;border-radius:5px;background:#fff url(" + = KasperskyLab.GetResourceSrc('/vk/VkTooltipBanner.png') + ") 10px 9px = no-repeat;z-index:2147483646;"); var close =3D = CreateDivWithStyle("position:absolute;right:10px;top:6px;display:inline-b= lock;height:16px;width:8px;padding:0;margin:0;text-align:left;background:= url(" + KasperskyLab.GetResourceSrc('/vk/close_icon.png') + ") right = center = no-repeat;cursor:pointer;border:none;border-radius:0;white-space:nowrap;z= -index:2147483646;"); var contentText =3D = CreateDivWithStyle("position:static;display:block;width:auto;height:auto;= padding:0;margin:0;font:11px/1 = Arial,Helvetica,sans-serif;text-align:left;color:#000;border:none;border-= radius:0;background:#transparent;white-space:nowrap;z-index:2147483646;")= ; m_top =3D = CreateDivWithStyle("position:relative;display:block;width:32px;height:12p= x;padding:0;margin:0 0 = -1px;text-align:left;border:none;border-radius:0;background:#transparent;= z-index:2147483647;"); m_bottom =3D = CreateDivWithStyle("position:relative;display:block;width:32px;height:12p= x;padding:0;margin:-1px 0 = 0;text-align:left;border:none;border-radius:0;background:#transparent;z-i= ndex:2147483647;"); m_pointer =3D = CreateDivWithStyle("position:static;display:block;padding:0;margin:0;heig= ht:12px;width:100%;z-index:2147483647;"); balloonDiv.appendChild(m_top); balloonDiv.appendChild(iconDiv); balloonDiv.appendChild(m_bottom); iconDiv.appendChild(close); iconDiv.appendChild(contentText); = contentText.appendChild(document.createTextNode(locales["VkTooltipText"])= ); close.onmouseover =3D function(){m_needRestoreFocus =3D true;}; close.onmouseout =3D function(){m_needRestoreFocus =3D false;}; m_tooltip =3D balloonDiv; } function PositionTooltipPointer(position) { if (m_pointer.parentNode) m_pointer.parentNode.removeChild(m_pointer); var destinationDiv, pointerBackgroundImage; if (position =3D=3D=3D "top") { pointerBackgroundImage =3D "url(" + = ns.GetResourceSrc('/vk/pointer_top.png') + ") no-repeat right bottom"; destinationDiv =3D m_top; }=20 else if (position =3D=3D=3D "bottom")=20 { pointerBackgroundImage =3D "url(" + = ns.GetResourceSrc('/vk/pointer_bottom.png') + ") no-repeat right top"; destinationDiv =3D m_bottom; } m_pointer.style.background =3D pointerBackgroundImage; destinationDiv.appendChild(m_pointer); } function PositionTooltip(element) { var inputPosition =3D ns.GetAbsoluteElementPosition(element); if (!ns.IsPositionEqual(m_curPosition, inputPosition)) { m_tooltip.style.left =3D inputPosition.left + "px"; var tooltipHeight =3D m_tooltip.offsetHeight; var inputTopRelative =3D inputPosition.top - ns.GetPageScroll().top; var clientHeightUnderInput =3D ns.GetPageHeight() - inputTopRelative = - element.offsetHeight; if ((clientHeightUnderInput > tooltipHeight - 1) ||=20 (inputPosition.top - tooltipHeight + 1 < 0)) { m_tooltip.style.top =3D (inputPosition.top + = element.offsetHeight - 1) + "px"; PositionTooltipPointer("top"); } else { m_tooltip.style.top =3D (inputPosition.top - = tooltipHeight + 1) + "px"; PositionTooltipPointer("bottom"); } m_curPosition =3D inputPosition; } } this.Show =3D function(element) { if (!m_tooltip) CreateTooltip(); document.body.appendChild(m_tooltip); PositionTooltip(element); var timer =3D setInterval(function() { PositionTooltip(element); }, = 100); this.Hide =3D function() { clearInterval(timer); document.body.removeChild(m_tooltip); if (m_needRestoreFocus) setTimeout(function(){element.focus();}, 0); m_tooltip =3D null; this.Show =3D function(){}; this.Hide =3D function(){}; }; setTimeout(function() { that.Hide(); }, 3000); }; this.Hide =3D function(){};=09 }; })(KasperskyLab || {}); (function (ns) { ns.VirtualKeyboardInputIcon =3D function(clickCallback) { var m_curPosition, m_iconDiv, m_element, m_positionTimer, m_visible =3D false; function CreateDivWithStyle(cssText) { var div =3D document.createElement('div'); div.style.cssText =3D cssText; return div; } function ControlIconDisplaying(e) { var eventArg =3D e || window.event; if (eventArg.keyCode =3D=3D=3D 9 || eventArg.keyCode =3D=3D=3D 16) return; if (m_element.value =3D=3D=3D "") ShowInternal(); else HideInternal(); } function HideInternal() { if (!m_visible) return; clearInterval(m_positionTimer); document.body.removeChild(m_iconDiv); m_visible =3D false; } function ShowInternal() { if (m_visible) return; document.body.appendChild(m_iconDiv); PositionIcon(); m_positionTimer =3D setInterval(PositionIcon, 100); m_visible =3D true; } function PositionIcon() { var iconStyle =3D m_iconDiv.style, inputPosition =3D ns.GetAbsoluteElementPosition(m_element); if (!ns.IsPositionEqual(m_curPosition, inputPosition)) { iconStyle.left =3D inputPosition.left + m_element.offsetWidth - 20 + = 'px'; iconStyle.top =3D inputPosition.top + (m_element.offsetHeight - 16) / = 2 + 'px'; m_curPosition =3D inputPosition; } } function CreateIcon() { m_iconDiv =3D = CreateDivWithStyle('position:absolute;display:block;width:16px;height:16p= x;background:url(' + ns.GetResourceSrc('/vk/VkInputFieldIcon.png') + ') = no-repeat center = center;cursor:pointer;z-index:2147483647;font-size:0px'); ns.AddEventListener(m_iconDiv, 'mouseover', function () { m_iconDiv.style.filter =3D 'alpha(opacity=3D60)';=09 m_iconDiv.style.opacity =3D 0.6; }); ns.AddEventListener(m_iconDiv, 'mouseout', function() { m_iconDiv.style.filter =3D 'alpha(opacity=3D100)';=09 m_iconDiv.style.opacity =3D 1; }); ns.AddEventListener(m_iconDiv, 'click', clickCallback); } CreateIcon(); this.Show =3D function(element) { this.Hide(); m_element =3D element; ShowInternal(); ns.AddRemovableEventListener(m_element, "keyup", = ControlIconDisplaying) this.Hide =3D function() { HideInternal(); this.Hide =3D function(){}; ns.RemoveEventListener(m_element, "keyup", ControlIconDisplaying); }; }; this.Hide =3D function(){}; }; })(KasperskyLab || {}); KasperskyLab.AddRunner("vk", function (ns, session, settings, locales) { var VirtualKeyboard =3D function() { var m_callFunction, m_syncCallFunction; var m_virtualKeyboardIconShowMode =3D 0; var m_secureInputProtectMode =3D 0; var m_activeElement =3D null; var m_lastFocusedElement =3D null; var m_protectedState =3D 0; var m_enabledSecureInput =3D false; var m_protectChangeTimeout; var m_protectableVirtualKeyboardChecker =3D new = ns.ProtectableElementDetector(settings.vkProtectMode); var m_protectableSecureInputChecker =3D null; var m_protectableVirtualKeyboardIconChecker =3D null; var m_attributeName =3D "vk_" + Math.floor((1 + Math.random()) * = 0x10000).toString(16); function ShowVirtualKeyboard() { if (m_lastFocusedElement) m_lastFocusedElement.focus(); m_callFunction("vk.showKeyboard"); } var m_tooltip =3D new ns.SecureInputTooltip(locales); var m_icon =3D new ns.VirtualKeyboardInputIcon(ShowVirtualKeyboard); var m_iconHideTimer; var m_postponeStart; var m_shutdown =3D false; session.InitializePlugin(function (activatePlugin, registerMethod, = callFunction, deactivatePlugin, syncCallFunction) { m_callFunction =3D callFunction; m_syncCallFunction =3D syncCallFunction; activatePlugin('vk', OnPing); registerMethod('vk.settings', SetSettings); }); function OnPing() { return (m_protectedState =3D=3D 1 || m_protectedState =3D=3D 2) ? 500 = : ns.MaxRequestDelay; } function SetSettings(argumentList) { var newVirtualKeyboardIconShowMode =3D parseInt(argumentList[0], 10); var newSecureInputProtectMode =3D parseInt(argumentList[1], 10); SetSettingsImpl(newVirtualKeyboardIconShowMode, = newSecureInputProtectMode); } function SetSettingsImpl(newVirtualKeyboardIconShowMode, = newSecureInputProtectMode) { if (newSecureInputProtectMode !=3D m_secureInputProtectMode) m_protectableSecureInputChecker =3D new = ns.ProtectableElementDetector(newSecureInputProtectMode); if (newVirtualKeyboardIconShowMode !=3D m_virtualKeyboardIconShowMode) m_protectableVirtualKeyboardIconChecker =3D new = ns.ProtectableElementDetector(newVirtualKeyboardIconShowMode); var needToUpdate =3D (newSecureInputProtectMode > = m_secureInputProtectMode || newVirtualKeyboardIconShowMode > = m_virtualKeyboardIconShowMode); m_secureInputProtectMode =3D newSecureInputProtectMode; m_virtualKeyboardIconShowMode =3D newVirtualKeyboardIconShowMode; if (needToUpdate && m_observer) m_observer.settingsChanged(); } function NeedProtectElement(element) { return m_protectableSecureInputChecker.Test(element) || = m_protectableVirtualKeyboardChecker.Test(element); } function HandleStartProtectCallback(result, args, needSecureInputCall) { if (m_protectedState =3D=3D=3D 3)=09 { if (result =3D=3D=3D 0) StopProtect(); else m_protectedState =3D 0;=09 return; } if (result =3D=3D=3D 0) { if (!args || args.length < 1) { session.Log("ERR VK - unexpected arguments"); return; } m_enabledSecureInput =3D args[0] =3D=3D=3D "true"; m_protectedState =3D 2;=09 var needSecureInput =3D = m_protectableSecureInputChecker.Test(m_activeElement); if (needSecureInput =3D=3D=3D needSecureInputCall) ShowBalloons(); else CheckProtectModeAndShowBalloons(); return; } else if (result =3D=3D=3D 1) { m_postponeStart =3D setTimeout(function() = {OnElementFocus(m_activeElement);}, 100); } m_protectedState =3D 0;=09 } function OnError(e) { session.Log('ERR VK - ' + (e.message || e)); } function StartProtect() { var needSecureInput =3D = m_protectableSecureInputChecker.Test(m_activeElement); m_protectedState =3D 1;=09 m_callFunction("vk.startProtect", [needSecureInput.toString()], = function(result, args) { HandleStartProtectCallback(result, args, = needSecureInput);}, OnError); } function ChangeMode() { var needSecureInput =3D = m_protectableSecureInputChecker.Test(m_activeElement); m_protectedState =3D 1;=09 m_callFunction("vk.changeMode", [needSecureInput.toString()], = function(result, args) { HandleStartProtectCallback(result, args, = needSecureInput);}, OnError); } function StopProtect() { m_protectedState =3D 3;=09 m_callFunction("vk.stopProtect", [], function (result) { if (m_protectedState =3D=3D=3D 1 && result =3D=3D=3D 0)=09 { StartProtect(); return; } m_protectedState =3D 0; =09 m_activeElement =3D null; }, OnError); } function ShowBalloons() { if (m_enabledSecureInput) m_tooltip.Show(m_activeElement); if (m_protectableVirtualKeyboardIconChecker.Test(m_activeElement)) m_icon.Show(m_activeElement); } function CheckProtectModeAndShowBalloons() { var needSecureInput =3D = m_protectableSecureInputChecker.Test(m_activeElement); if (needSecureInput !=3D m_enabledSecureInput) ChangeMode(); else ShowBalloons(); } function OnElementFocus(element) { if (m_shutdown) return; if (m_iconHideTimer) { clearTimeout(m_iconHideTimer); m_iconHideTimer =3D null; m_icon.Hide(); } if (!NeedProtectElement(element)) { m_activeElement =3D null; return; } m_activeElement =3D element; m_lastFocusedElement =3D element; clearTimeout(m_postponeStart); clearTimeout(m_protectChangeTimeout); m_protectChangeTimeout =3D setTimeout(function () { ProcessFocus(); }, = 0); } function OnElementBlur(element) { if (m_shutdown) return; clearTimeout(m_postponeStart); m_iconHideTimer =3D setTimeout(function() {m_icon.Hide();}, 500); m_tooltip.Hide(); clearTimeout(m_protectChangeTimeout); m_protectChangeTimeout =3D setTimeout(function () { ProcessBlur(); }, = 0); } function OnSettingsChanged(element) { var needProtectElement =3D NeedProtectElement(element); if ((m_activeElement !=3D=3D element) ^ needProtectElement) return; if (needProtectElement) OnElementFocus(element); else OnElementBlur(element); } function ProcessFocus() { if (m_protectedState =3D=3D=3D 0) =09 StartProtect(); else if (m_protectedState =3D=3D=3D 2) =09 CheckProtectModeAndShowBalloons(); else if (m_protectedState =3D=3D=3D 3)=09 m_protectedState =3D 1; =09 } function ProcessBlur() { if (m_protectedState =3D=3D=3D 2)=09 StopProtect(); else if (m_protectedState =3D=3D=3D 1)=09 m_protectedState =3D 3;=09 } SetSettingsImpl(settings.vkMode, settings.skMode); ns.AddEventListener(window, 'unload', function () { clearTimeout(m_protectChangeTimeout); clearTimeout(m_postponeStart); m_shutdown =3D true; m_observer.unbind(); }); var m_observer =3D new FocusChangeObserver(OnElementFocus, = OnElementBlur, OnSettingsChanged); }; function FocusChangeObserver(focusHandler, blurHandler, = settingsChangedHandler) { var m_targetPropertyName; if (document.addEventListener) { document.addEventListener('focus', onFocus, true); document.addEventListener('blur', onBlur, true); m_targetPropertyName =3D 'target'; } else { document.attachEvent('onfocusin', onFocus); document.attachEvent('onfocusout', onBlur); m_targetPropertyName =3D 'srcElement'; } var m_focusedElement =3D tryToGetFocusedInput(); this.settingsChanged =3D function () { if (m_focusedElement) settingsChangedHandler(m_focusedElement); } this.unbind =3D function () { if (document.removeEventListener) { document.removeEventListener('focus', onFocus, true); document.removeEventListener('blur', onBlur, true); } else { document.detachEvent('onfocusin', onFocus); document.detachEvent('onfocusout', onBlur); } if (m_focusedElement) { blurHandler(m_focusedElement); m_focusedElement =3D null; } } if (m_focusedElement) focusHandler(m_focusedElement); function tryToGetActiveElement() { try { return document.activeElement; } catch (e) {} return null; } function tryToGetFocusedInput() { var element =3D tryToGetActiveElement(); return (document.hasFocus() && isInputElement(element)) ? = element : null; } function isInputElement(element) { return element && element.tagName && element.tagName.toLowerCase() =3D=3D=3D 'input'; } function onBlur(event) { if (m_focusedElement) { var element =3D m_focusedElement; m_focusedElement =3D null; blurHandler(element); } } function onFocus(event) { var element =3D event[m_targetPropertyName]; if (isInputElement(element)) { m_focusedElement =3D element; focusHandler(element); } } } var instance =3D null; function RunVirtualKeyboard() { try { if (!instance) instance =3D new VirtualKeyboard(); } catch(e) { session.Log("Virtual keyboard exception " + (e.message || e)); } } if (document.readyState =3D=3D=3D "loading") { if (document.addEventListener) { document.addEventListener("DOMContentLoaded", RunVirtualKeyboard, = true); } else if (document.all) { document.attachEvent("onreadystatechange", function() { if (document.readyState !=3D=3D "loading") RunVirtualKeyboard(); }); } else { document.attachEvent("onload", function() { RunVirtualKeyboard(); }); } } else { RunVirtualKeyboard(); } }); KasperskyLab.AddRunner("cb", function (ns, session, settings, locales) { var ContentBlocker =3D function () { var m_idleStartTime =3D ns.GetCurrentTime(); var m_signRequest =3D []; var m_callFunction; var m_deactivateFunction; session.InitializePlugin(function (activatePlugin, = registerMethod, callFunction, deactivatePlugin) { m_deactivateFunction =3D deactivatePlugin; m_callFunction =3D callFunction; activatePlugin('cb', OnPing, OnError); registerMethod('cb.reloadUrl', ReloadUrl); registerMethod('cb.signReady', SignReady); registerMethod('cb.shutdown', function () { deactivatePlugin('cb'); } ); callFunction('cb.connect', [], function (result) { if (result !=3D 0) { deactivatePlugin('cb'); } }, function (e) { OnError(e); deactivatePlugin('cb'); }); }); function OnError(e) { session.Log('ERR CB - ' + (e.message || e)); } function OnPing(currentTime) { var idleTime =3D (currentTime >=3D m_idleStartTime) ? = currentTime - m_idleStartTime : 0; return idleTime <=3D 10000 ? 500 : ns.MaxRequestDelay; } function ReloadUrl() { session.Log("Start reload url " + document.readyState); m_idleStartTime =3D ns.GetCurrentTime(); window.location.reload(true); } function SignReady(args) { m_idleStartTime =3D ns.GetCurrentTime(); if (args.length !=3D=3D 2) { session.Log('ContentBlocker error: invalid parameter = count ' + args.length); return; } if (!m_signRequest[args[0]]) { session.Log('ContentBlocker error: invalid challenge'); return; } m_signRequest[args[0]](args[1]); } if (settings.isProductInfoRequired) { window.KasperskyLab =3D (function (object) { var thisProductId =3D locales["ProductName"] + " " + = locales["ProductVersion"]; var thisProduct =3D { 'productName': locales["ProductName"], 'productVersion': locales["ProductVersion"], 'productPPCSID': locales["ProductPPCSID"], 'features': { 'isSafeMoneyInstalled': = locales["IsSafeMoneyInstalled"], 'isSafeMoneyProtectionEnabled': = settings.isSafeMoneyProtectionEnabled } }; if (locales["DeviceId"]) thisProduct['deviceId'] =3D locales["DeviceId"]; object._products =3D object._products || {}; object._products[thisProductId] =3D thisProduct; object.getInstalledProducts =3D function () { var products =3D []; for (var productId in object._products) { products.push(object._products[productId]); } return products; }; object.initProductInfoProvider =3D function = (signedProductInfoProvider) { delete object.initProductInfoProvider; object._products2 =3D object._products2 || {}; object._products2[thisProductId] =3D = signedProductInfoProvider; object.getInstalledProducts2 =3D function = (challenge, timeoutMs, callback) { for (var productId in object._products2) { object._products2[productId](challenge, = timeoutMs, callback); } }; }; return object; })(window.KasperskyLab || {}); window.KasperskyLab.initProductInfoProvider(function = (challenge, timeoutMs, callback) { m_signRequest[challenge] =3D callback; m_callFunction('cb.signedProductInfo', [challenge, = timeoutMs], function (result) { if (result !=3D 0) { m_signRequest[challenge] =3D null; } }, function (e) { OnError(e); m_deactivateFunction('cb'); }); }); } }; try { new ContentBlocker(); if (window.dispatchEvent && typeof(window.CustomEvent) =3D=3D = "function") { window.dispatchEvent(new CustomEvent("cb.ready")); } } catch (e) { session.Log('ContentBlocker exception ' + (e.message || e)); } }); (function (ns) { ns.UrlAdvisorBalloon =3D function (locales, infoUrl, termsUrl) { var threatTypes =3D [ {name:'Unknown', bit:-1}, {name:locales["PhishingName"], bit:62}, {name:locales["MalwareName"], bit:63} ]; var ratingIds =3D [ {headerClass:'kl_header green', = headerNode:locales["UrlAdvisorBalloonHeaderGood"], textNode : = locales["UrlAdvisorSetLocalContentOnlineGood"], marker:'kl_marker = allow'}, {headerClass:'kl_header grey', = headerNode:locales["UrlAdvisorBalloonHeaderSuspicious"], = textNode:locales["UrlAdvisorSetLocalContentOnlineSuspicious"], = marker:'kl_marker unknown'}, {headerClass:'kl_header red', = headerNode:locales["UrlAdvisorBalloonHeaderDanger"], = textNode:locales["UrlAdvisorSetLocalContentOnlineDanger"], = marker:'kl_marker disallow'} ]; var m_termsLink =3D ''; var m_externalLink =3D ''; function GetImageSrc(imageName) { return ns.GetResourceSrc('/ua/' + imageName); } function AddStyles() { ns.AddStyles([ '.kisb * { position: relative; display:block; overflow-x:hidden; = width: auto; margin:0; padding:0; font-family: Verdana; line-height: = 150%; text-indent:0; border:0; box-sizing:content-box; color:#000000; = letter-spacing: normal; ' + locales["RtlStyle"] + '}', '.kisb { z-index:2147483647; width: 280px; cursor:default; = display:block;}', '.kisb .kl_header { padding:27px 26px 10px 26px; }', '.kisb .kl_header.red { background-image:url(' + = GetImageSrc('header_red.png') + ');}', '.kisb .kl_header.grey { background-image:url(' + = GetImageSrc('header_grey.png') + ');}', '.kisb .kl_header.green { background-image:url(' + = GetImageSrc('header_green.png') + ');}', '.kisb .kl_content { background: url(' + GetImageSrc('content.png') + = ') repeat-y top left; padding:10px 26px 10px 26px;}', '.kisb .kl_content .block { width: 228px!important; }', '.kisb .kl_marker { margin-top: 5px; margin-bottom:10px; = padding-top:2px; padding-left:25px; background-position-x: 0; = background-position-y: 0; background-repeat: no-repeat; word-wrap: = break-word;}', '.kisb .kl_marker.allow { background-image: url( ' + = GetImageSrc('allow.png') + ')}', '.kisb .kl_marker.disallow { background-image: url(' + = GetImageSrc('disallow.png') + ')}', '.kisb .kl_marker.unknown { background-image: url(' + = GetImageSrc('unknown.png') + ')}', '.kisb .kl_tag { display:inline-block; background: left top url(' + = GetImageSrc('tag.png') + ') no-repeat; padding-left:12px; = padding-right:5px; margin-right:5px; margin-bottom:5px; font-size: = 7.5pt;}', '.kisb .kl_external { margin-top: 15px; padding-top:2px; = padding-left:20px; background-position-x: left; background-position-y: = top; background-repeat: no-repeat;}', '.kisb .kl_external { background-image: url(' + = GetImageSrc('external.png') + ')}', '.kisb .kl_footer { background: url(' + GetImageSrc('footer.png') + = ') no-repeat bottom left; padding:6px 26px 22px 26px;}', '.kisb .kl_content * { font-size:8pt; }', '.kisb a { text-decoration: underline; display:inline-block; }', '.kisb a:hover { text-decoration: none; }', '.kisb a, .kisb a:link, .kisb a:hover, .kisb a:visited { color: = #008ccc;}', '.kisb .kl_header { font-size:12pt; color: #ffffff; }', '.kisb .kl_footer a { font-size:8pt; color: #4d4d4d; = text-decoration:underline; }' ]); } function FixBigInt(bigInt) { if (bigInt.low >=3D 10000000000) { var addedHigh =3D Math.floor(bigInt.low / 10000000000); bigInt.low =3D bigInt.low % 10000000000; bigInt.high +=3D addedHigh; } } function BigIntToString(bigInt) { var result =3D ''; if (bigInt.high) { result +=3D bigInt.high; for (var i =3D bigInt.low.toString().length; i < 10; ++i) result +=3D '0'; } result +=3D bigInt.low; return result; } function GetMask(bit) { if (bit < 0 || bit >=3D 64) return {high: 0, low: 0}; var mask =3D { high: 0, low: Math.pow(2, Math.min(50, bit)) }; FixBigInt(mask); if (bit > 50) { mask.low *=3D Math.pow(2, bit - 50); mask.high *=3D Math.pow(2, bit - 50); FixBigInt(mask); } return mask; } function GetCategoriesMask(threats, categories) { var mask =3D {high: 0, low: 0}; var bits =3D []; var i, count; if (threats) for (i =3D 0, count =3D threats.length; i < count; ++i) bits.push(threatTypes[threats[i]].bit); if (categories) for (i =3D 0, count =3D categories.length; i < count; ++i) bits.push(categories[i] - 1); for (i =3D 0, count =3D bits.length; i < count; ++i) { var addingMask =3D GetMask(bits[i]); mask.high +=3D addingMask.high; mask.low +=3D addingMask.low; FixBigInt(mask); } return BigIntToString(mask); } function ConvertThreat(threat) { return threatTypes[threat].name; } function ConvertCategory(category) { return locales["CAT_" + category]; } function AddTagsFromList(parentElement, list, converter) { if (!list) return; for (var i =3D 0, count =3D list.length; i < count; ++i) { var spanElement =3D document.createElement('span'); spanElement.className =3D 'kl_tag'; spanElement.appendChild(document.createTextNode(converter(list[i]))); parentElement.appendChild(spanElement); } } function AddVerdictTags(parentElement, verdict) { if ((!verdict.categories || verdict.categories.length =3D=3D 0) && = (!verdict.threats || verdict.threats.length =3D=3D 0)) return; parentElement.appendChild(document.createElement('br')); parentElement.appendChild(document.createElement('br')); = parentElement.appendChild(document.createTextNode(locales["UrlAdvisorDesc= ribeCategories"] + ": ")); var divElement =3D = parentElement.appendChild(document.createElement('div')); AddTagsFromList(divElement, verdict.categories, ConvertCategory); AddTagsFromList(divElement, verdict.threats, ConvertThreat); } function RemoveAllChilds(element) { while (element.childNodes.length > 0) element.removeChild(element.childNodes[0]); } function UpdateBalloon(verdict) { var headerElement =3D document.getElementById('balloon_header'); var contentElement =3D document.getElementById('balloon_content'); var markerElement =3D document.getElementById('balloon_marker'); var tagElement =3D document.getElementById('balloon_tags'); RemoveAllChilds(headerElement); RemoveAllChilds(contentElement); RemoveAllChilds(markerElement); RemoveAllChilds(tagElement); headerElement.className =3D ratingIds[verdict.rating-1].headerClass; = headerElement.appendChild(document.createTextNode(ratingIds[verdict.ratin= g-1].headerNode)); contentElement .appendChild(document.createElement('b')) = .appendChild(document.createTextNode(ratingIds[verdict.rating-1].textNode= )); markerElement.className =3D ratingIds[verdict.rating-1].marker; markerElement.appendChild(document.createTextNode(verdict.url)); AddVerdictTags(tagElement, verdict); var additionalInfoLink =3D locales["UrlAdvisorAdditionalInfoLinkMask"] = || infoUrl; if (additionalInfoLink.indexOf("&rpe") =3D=3D=3D -1) { additionalInfoLink +=3D = "&act-exturl=3D%VerdictUrl%&act-threat-cat=3D%VerdictRating%&act-content-= cat=3D%ContentCategory%&rpe=3D1"; } additionalInfoLink =3D additionalInfoLink.replace("%VerdictUrl%", = encodeURIComponent(verdict.url)); additionalInfoLink =3D additionalInfoLink.replace("%VerdictRating%", = verdict.rating - 1); additionalInfoLink =3D additionalInfoLink.replace("%ContentCategory%", = GetCategoriesMask(verdict.threats, verdict.categories)); m_externalLink =3D additionalInfoLink; m_termsLink =3D locales["UrlAdvisorTermLink"] || termsUrl; } function CheckMouseOverBalloon(mouseArgs) { if (m_balloon) { var args =3D mouseArgs || window.event; var rect =3D m_balloon.getBoundingClientRect(); if (args.clientX > rect.left && args.clientX < rect.right && args.clientY > rect.top && args.clientY < rect.bottom) { return; } HideBalloon(); } } function CreateHeaderDiv(balloonDiv) { var headerDiv =3D document.createElement('div'); headerDiv.id =3D 'balloon_header'; balloonDiv.appendChild(headerDiv); } function OnExternalLinkClick(evt) { try { ns.StopProcessingEvent(evt); ns.WindowOpen(m_externalLink); } catch (e) { session.Log("OnExternalLinkClick error: " + (e.message || e)); } } function CreateContentDiv(balloonDiv) { var contentDiv =3D document.createElement('div'); contentDiv.className =3D 'kl_content'; var blockDiv =3D document.createElement('div'); blockDiv.className =3D 'block'; contentDiv.appendChild(blockDiv); var contentTypeDiv =3D document.createElement('div'); contentTypeDiv.className =3D 'block'; contentTypeDiv.id =3D 'balloon_content'; blockDiv.appendChild(contentTypeDiv); var markerDiv =3D document.createElement('div'); markerDiv.className =3D 'kl_marker allow'; markerDiv.id =3D 'balloon_marker'; blockDiv.appendChild(markerDiv); var tagsDiv =3D document.createElement('div'); tagsDiv.id =3D 'balloon_tags'; blockDiv.appendChild(tagsDiv); var infoLink =3D document.createElement('a'); infoLink.href =3D '#'; infoLink.id =3D 'balloon_external'; infoLink.className =3D 'kl_external'; infoLink.target =3D '_blank'; = infoLink.appendChild(document.createTextNode(locales["UrlAdvisorSetLocalC= ontentGotoForInfo"])); ns.AddEventListener(infoLink, "click", OnExternalLinkClick); blockDiv.appendChild(infoLink); balloonDiv.appendChild(contentDiv); } function OnTermsLinkClick(evt) { try { ns.StopProcessingEvent(evt); ns.WindowOpen(m_termsLink); } catch (e) { session.Log("OnTermsLinkClick error: " + (e.message || e)); } } function CreateFooterDiv(balloonDiv) { var footerDiv =3D document.createElement('div'); footerDiv.className =3D 'kl_footer'; footerDiv.id =3D 'balloon_footer'; var termsLink =3D document.createElement('a'); termsLink.id =3D 'balloon_terms'; termsLink.target =3D '_blank'; = termsLink.appendChild(document.createTextNode(locales["UrlAdvisorSetLocal= ContentTermsOfUsage"])); termsLink.href =3D '#'; =09 ns.AddEventListener(termsLink, "click", OnTermsLinkClick); footerDiv.appendChild(termsLink); balloonDiv.appendChild(footerDiv); } function CreateBalloon() { AddStyles(); var balloonDiv =3D document.createElement('div'); balloonDiv.className =3D 'kisb'; balloonDiv.id =3D 'balloon_parent_div'; balloonDiv.onmouseout =3D CheckMouseOverBalloon; CreateHeaderDiv(balloonDiv); CreateContentDiv(balloonDiv); CreateFooterDiv(balloonDiv); balloonDiv.style.visibility =3D 'hidden'; document.body.appendChild(balloonDiv); return balloonDiv; } var m_balloon =3D null; function GetElementSize(element) { var rect =3D element.getBoundingClientRect(); var width =3D rect.width ? rect.width : rect.right - rect.left; var height =3D rect.height ? rect.height : rect.bottom - rect.top; return {width: width, height: height}; } this.ShowBalloon =3D function(clientX, clientY, verdict) { m_balloon =3D document.getElementById('balloon_parent_div'); if (!m_balloon) m_balloon =3D CreateBalloon(); UpdateBalloon(verdict); var clientWidth =3D ns.GetPageWidth(); var balloonSize =3D GetElementSize(m_balloon); var halfWidth =3D balloonSize.width / 2; var x; if (halfWidth > clientX) x =3D 0; else if (halfWidth + clientX > clientWidth) x =3D clientWidth - balloonSize.width; else x =3D clientX - halfWidth; var clientHeight =3D ns.GetPageHeight(); var y =3D (clientY + balloonSize.height > clientHeight) ? clientY - = balloonSize.height : clientY; if (y < 0) y =3D 0; var scroll =3D ns.GetPageScroll(); y +=3D scroll.top; x +=3D scroll.left; m_balloon.style.position =3D 'absolute'; m_balloon.style.top =3D Math.round(y).toString() + 'px'; m_balloon.style.left =3D Math.round(x).toString() + 'px'; m_balloon.style.visibility =3D 'visible'; } function HideBalloon() { if (m_balloon) m_balloon.style.visibility =3D 'hidden'; } }; }) (KasperskyLab || {}); var CheckedAtributeName =3D 'kl_' + KasperskyLab.GetCurrentTime(); var IconName =3D 'kl_' + KasperskyLab.GetCurrentTime(); KasperskyLab.AddRunner("ua", function (ns, session, settings, locales) { var UrlAdvisor =3D function() { var m_urlAdvisorBalloon =3D new ns.UrlAdvisorBalloon(locales, = settings.infoUrl, settings.termsUrl);=09 var m_settingsEnabled =3D settings.enable; var m_enabled =3D m_settingsEnabled && (settings.state =3D=3D=3D = 'Enabled'); var m_checkOnlySearchResults =3D settings.mode; var m_postponeCategorizeStarted =3D false; var m_urlCategorizeRequestTime =3D 0; var m_observer; var m_state =3D settings.state, m_callFunction; session.InitializePlugin(function(activatePlugin, registerMethod, = callFunction){ m_callFunction =3D callFunction; activatePlugin('ua', OnPing, OnError); registerMethod('ua.verdict', SetVerdict); registerMethod('ua.settings', SetSettings); registerMethod('ua.state', SetState); }); Run(); function OnPing(currentTime) { var timeFormRequest =3D (currentTime >=3D m_urlCategorizeRequestTime) = ? currentTime - m_urlCategorizeRequestTime : 0; return timeFormRequest <=3D 10000 ? 500 : ns.MaxRequestDelay; } function OnError(e) { session.Log('ERR UA - ' + (e.message || e)); } function GetHref(link) { try { return link.href; } catch(e){} try { return link.getAttribute('href'); } catch(e){} return ''; } function IsLinkHighlighted(linkElement) { var nextElement =3D linkElement.nextSibling; return nextElement !=3D=3D null && nextElement.name =3D=3D IconName; } function GetLinkIcon(linkElement) { if (!IsLinkHighlighted(linkElement)) { var icon =3D document.createElement('img'); icon.name =3D IconName; icon.width =3D 12; icon.height =3D 12; icon.style.cssText=3D"width:12px;height:12px"; linkElement.parentNode.insertBefore(icon, linkElement.nextSibling); } return linkElement.nextSibling; } function UpdateIconImage(icon, verdict) { if (verdict.rating =3D=3D=3D 1) { icon.src =3D ns.GetResourceSrc('/ua/UrlAdvisorGoodImage.png'); icon['kis_status'] =3D 16; } else if (verdict.rating =3D=3D=3D 2) { icon.src =3D ns.GetResourceSrc('/ua/UrlAdvisorSuspiciousImage.png'); icon['kis_status'] =3D 8; } else if (verdict.rating =3D=3D=3D 3) { icon.src =3D ns.GetResourceSrc('/ua/UrlAdvisorDangerImage.png'); icon['kis_status'] =3D 4; } } function SubscribeIconOnMouseEvents(icon, verdict) { var balloonTimerId =3D 0; icon.onmouseout =3D function() { if (balloonTimerId) { window.clearTimeout(balloonTimerId); balloonTimerId =3D 0; } }; icon.onmouseover =3D function(mouseArgs) { if (!balloonTimerId) { var args =3D mouseArgs || window.event; balloonTimerId =3D window.setTimeout(function(clientX, clientY) { return function() { m_urlAdvisorBalloon.ShowBalloon(clientX, clientY, verdict); } }(args.clientX, args.clientY), 300); } }; } function SetVerdict(argumentsList) { for (var currentVerdict =3D 0; currentVerdict < argumentsList.length; = currentVerdict++) { var verdict =3D ns.JSONParse(argumentsList[currentVerdict]); for (var currentLinkIndex =3D 0; currentLinkIndex < = document.links.length; currentLinkIndex++) { var linkElement =3D document.links[currentLinkIndex]; if (verdict.url =3D=3D=3D GetHref(linkElement) && = (!m_checkOnlySearchResults || ns.IsLinkSearchResult(linkElement))) { var icon =3D GetLinkIcon(linkElement); if (!!icon) { UpdateIconImage(icon, verdict); SubscribeIconOnMouseEvents(icon, verdict); } } } } } function SetSettingsImpl(argumentList) { if (argumentList.length > 0) { m_settingsEnabled =3D (argumentList[0] !=3D '0'); m_enabled =3D m_settingsEnabled && (m_state =3D=3D 'Enabled'); } if (!m_enabled) return; m_checkOnlySearchResults =3D !!(argumentList.length > 1 && = argumentList[1] =3D=3D 1); } function ClearImages() { var images =3D document.getElementsByName(IconName); while (images.length > 0) images[0].parentNode.removeChild(images[0]); } function ClearAttributes() { for (var i =3D 0; i < document.links.length; ++i) if (document.links[i][CheckedAtributeName]) document.links[i][CheckedAtributeName] =3D false; } function SetSettings(argumentList) { ClearImages(); ClearAttributes(); SetSettingsImpl(argumentList); CategorizeUrl(); } function SetState(argumentList) { if (argumentList.length > 0) { ClearImages(); ClearAttributes(); m_state =3D argumentList[0]; m_enabled =3D m_settingsEnabled && (m_state =3D=3D 'Enabled'); CategorizeUrl(); } } function IsNeedCategorizeLink(linkElement) { try { return !linkElement.isContentEditable && !!linkElement.parentNode && = !IsLinkHighlighted(linkElement) && !linkElement[CheckedAtributeName] && (!m_checkOnlySearchResults || ns.IsLinkSearchResult(linkElement)) && linkElement.id !=3D=3D 'balloon_external' && linkElement.id !=3D=3D 'balloon_terms'; } catch(e) { session.Log('check link exception: ' + (e.message || e)); return false; } } function ProcessDomChange() { try { if (!m_postponeCategorizeStarted) { setTimeout(CategorizeUrl, 500); m_postponeCategorizeStarted =3D true; } var images =3D document.getElementsByName(IconName); for (var i =3D 0; i < images.length; ++i) { var linkNode =3D images[i].previousSibling; if (!linkNode || !linkNode.nodeName || = linkNode.nodeName.toLowerCase() !=3D=3D "a") { var imageNode =3D images[i]; imageNode.parentNode.removeChild(imageNode); } } } catch (e) { session.Log("ua dom change handling exception: " + (e.message || e)); } } function CategorizeUrl() { try { if (!m_enabled) { session.Log("skip categorize links because UA disabled"); return; } m_postponeCategorizeStarted =3D false; var linksForCategorize =3D []; for (var i =3D 0; i < document.links.length; i++) { var link =3D document.links[i]; if (IsNeedCategorizeLink(link)) { link[CheckedAtributeName] =3D true;=20 var href =3D GetHref(link); if (!!href) { linksForCategorize.push(href);=20 } else { ns.Log("access to href blocked by browser");=20 } } } if (linksForCategorize.length) { m_callFunction("ua.categorize", linksForCategorize, null, OnError); m_urlCategorizeRequestTime =3D ns.GetCurrentTime(); } else { session.Log("UA not found links for categorization"); } } catch (e) { session.Log("ua categorize exception: " + (e.message || e)); } } function Run() { CategorizeUrl(); m_observer =3D ns.GetDomChangeObserver("a"); m_observer.Start(ProcessDomChange); ns.AddEventListener(window, "unload",=20 function() { if (m_observer) m_observer.Stop(); }); }; }; var instance =3D null; function RunUrlAdvisor() { try { if (!instance) { instance =3D new UrlAdvisor(); } } catch(e) { session.Log('UrlAdvisor exception ' + (e.message || e)); } } if (document.readyState =3D=3D=3D "loading") { if (document.addEventListener) { document.addEventListener("DOMContentLoaded", RunUrlAdvisor, true); } else if (document.all) { document.attachEvent("onreadystatechange", function() { if (document.readyState !=3D=3D "loading") RunUrlAdvisor(); }); } } else { RunUrlAdvisor(); } }); =0A= })();=0A= =0A= })();=0A= ------=_NextPart_000_000E_01D32D50.0E6B4120--