Skip to content

Instantly share code, notes, and snippets.

@dharb
Created April 18, 2018 13:44
Show Gist options
  • Save dharb/b4fc6e1e803b364ebdaf8873b754f515 to your computer and use it in GitHub Desktop.
Save dharb/b4fc6e1e803b364ebdaf8873b754f515 to your computer and use it in GitHub Desktop.
(function(f) {
var d, e, p = function() {
d = (new (window.UAParser || exports.UAParser)).getResult();
e = new Detector;
return this
};
p.prototype = {
getSoftwareVersion: function() {
return "0.1.11"
},
getBrowserData: function() {
return d
},
getFingerprint: function() {
var b = d.ua
, c = this.getScreenPrint()
, a = this.getPlugins()
, g = this.getFonts()
, n = this.isLocalStorage()
, f = this.isSessionStorage()
, h = this.getTimeZone()
, u = this.getLanguage()
, m = this.getSystemLanguage()
, e = this.isCookie()
, C = this.getCanvasPrint();
return murmurhash3_32_gc(b + "|" + c + "|" + a + "|" + g + "|" + n + "|" + f + "|" + h + "|" + u + "|" + m + "|" + e + "|" + C, 256)
},
getCustomFingerprint: function() {
for (var b = "", c = 0; c < arguments.length; c++)
b += arguments[c] + "|";
return murmurhash3_32_gc(b, 256)
},
getUserAgent: function() {
return d.ua
},
getUserAgentLowerCase: function() {
return d.ua.toLowerCase()
},
getBrowser: function() {
return d.browser.name
},
getBrowserVersion: function() {
return d.browser.version
},
getBrowserMajorVersion: function() {
return d.browser.major
},
isIE: function() {
return /IE/i.test(d.browser.name)
},
isChrome: function() {
return /Chrome/i.test(d.browser.name)
},
isFirefox: function() {
return /Firefox/i.test(d.browser.name)
},
isSafari: function() {
return /Safari/i.test(d.browser.name)
},
isMobileSafari: function() {
return /Mobile\sSafari/i.test(d.browser.name)
},
isOpera: function() {
return /Opera/i.test(d.browser.name)
},
getEngine: function() {
return d.engine.name
},
getEngineVersion: function() {
return d.engine.version
},
getOS: function() {
return d.os.name
},
getOSVersion: function() {
return d.os.version
},
isWindows: function() {
return /Windows/i.test(d.os.name)
},
isMac: function() {
return /Mac/i.test(d.os.name)
},
isLinux: function() {
return /Linux/i.test(d.os.name)
},
isUbuntu: function() {
return /Ubuntu/i.test(d.os.name)
},
isSolaris: function() {
return /Solaris/i.test(d.os.name)
},
getDevice: function() {
return d.device.model
},
getDeviceType: function() {
return d.device.type
},
getDeviceVendor: function() {
return d.device.vendor
},
getCPU: function() {
return d.cpu.architecture
},
isMobile: function() {
var b = d.ua || navigator.vendor || window.opera;
return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(b) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(b.substr(0, 4))
},
isMobileMajor: function() {
return this.isMobileAndroid() || this.isMobileBlackBerry() || this.isMobileIOS() || this.isMobileOpera() || this.isMobileWindows()
},
isMobileAndroid: function() {
return d.ua.match(/Android/i) ? !0 : !1
},
isMobileOpera: function() {
return d.ua.match(/Opera Mini/i) ? !0 : !1
},
isMobileWindows: function() {
return d.ua.match(/IEMobile/i) ? !0 : !1
},
isMobileBlackBerry: function() {
return d.ua.match(/BlackBerry/i) ? !0 : !1
},
isMobileIOS: function() {
return d.ua.match(/iPhone|iPad|iPod/i) ? !0 : !1
},
isIphone: function() {
return d.ua.match(/iPhone/i) ? !0 : !1
},
isIpad: function() {
return d.ua.match(/iPad/i) ? !0 : !1
},
isIpod: function() {
return d.ua.match(/iPod/i) ? !0 : !1
},
getScreenPrint: function() {
return "Current Resolution: " + this.getCurrentResolution() + ", Available Resolution: " + this.getAvailableResolution() + ", Color Depth: " + this.getColorDepth() + ", Device XDPI: " + this.getDeviceXDPI() + ", Device YDPI: " + this.getDeviceYDPI()
},
getColorDepth: function() {
return screen.colorDepth
},
getCurrentResolution: function() {
return screen.width + "x" + screen.height
},
getAvailableResolution: function() {
return screen.availWidth + "x" + screen.availHeight
},
getDeviceXDPI: function() {
return screen.deviceXDPI
},
getDeviceYDPI: function() {
return screen.deviceYDPI
},
getPlugins: function() {
for (var b = "", c = 0; c < navigator.plugins.length; c++)
b = c == navigator.plugins.length - 1 ? b + navigator.plugins[c].name : b + (navigator.plugins[c].name + ", ");
return b
},
isJava: function() {
return navigator.javaEnabled()
},
getJavaVersion: function() {
return deployJava.getJREs().toString()
},
isFlash: function() {
return navigator.plugins["Shockwave Flash"] ? !0 : !1
},
getFlashVersion: function() {
return this.isFlash() ? (objPlayerVersion = swfobject.getFlashPlayerVersion(),
objPlayerVersion.major + "." + objPlayerVersion.minor + "." + objPlayerVersion.release) : ""
},
isSilverlight: function() {
return navigator.plugins["Silverlight Plug-In"] ? !0 : !1
},
getSilverlightVersion: function() {
return this.isSilverlight() ? navigator.plugins["Silverlight Plug-In"].description : ""
},
isMimeTypes: function() {
return navigator.mimeTypes.length ? !0 : !1
},
getMimeTypes: function() {
for (var b = "", c = 0; c < navigator.mimeTypes.length; c++)
b = c == navigator.mimeTypes.length - 1 ? b + navigator.mimeTypes[c].description : b + (navigator.mimeTypes[c].description + ", ");
return b
},
isFont: function(b) {
return e.detect(b)
},
getFonts: function() {
for (var b = "Abadi MT Condensed Light;Adobe Fangsong Std;Adobe Hebrew;Adobe Ming Std;Agency FB;Aharoni;Andalus;Angsana New;AngsanaUPC;Aparajita;Arab;Arabic Transparent;Arabic Typesetting;Arial Baltic;Arial Black;Arial CE;Arial CYR;Arial Greek;Arial TUR;Arial;Batang;BatangChe;Bauhaus 93;Bell MT;Bitstream Vera Serif;Bodoni MT;Bookman Old Style;Braggadocio;Broadway;Browallia New;BrowalliaUPC;Calibri Light;Calibri;Californian FB;Cambria Math;Cambria;Candara;Castellar;Casual;Centaur;Century Gothic;Chalkduster;Colonna MT;Comic Sans MS;Consolas;Constantia;Copperplate Gothic Light;Corbel;Cordia New;CordiaUPC;Courier New Baltic;Courier New CE;Courier New CYR;Courier New Greek;Courier New TUR;Courier New;DFKai-SB;DaunPenh;David;DejaVu LGC Sans Mono;Desdemona;DilleniaUPC;DokChampa;Dotum;DotumChe;Ebrima;Engravers MT;Eras Bold ITC;Estrangelo Edessa;EucrosiaUPC;Euphemia;Eurostile;FangSong;Forte;FrankRuehl;Franklin Gothic Heavy;Franklin Gothic Medium;FreesiaUPC;French Script MT;Gabriola;Gautami;Georgia;Gigi;Gisha;Goudy Old Style;Gulim;GulimChe;GungSeo;Gungsuh;GungsuhChe;Haettenschweiler;Harrington;Hei S;HeiT;Heisei Kaku Gothic;Hiragino Sans GB;Impact;Informal Roman;IrisUPC;Iskoola Pota;JasmineUPC;KacstOne;KaiTi;Kalinga;Kartika;Khmer UI;Kino MT;KodchiangUPC;Kokila;Kozuka Gothic Pr6N;Lao UI;Latha;Leelawadee;Levenim MT;LilyUPC;Lohit Gujarati;Loma;Lucida Bright;Lucida Console;Lucida Fax;Lucida Sans Unicode;MS Gothic;MS Mincho;MS PGothic;MS PMincho;MS Reference Sans Serif;MS UI Gothic;MV Boli;Magneto;Malgun Gothic;Mangal;Marlett;Matura MT Script Capitals;Meiryo UI;Meiryo;Menlo;Microsoft Himalaya;Microsoft JhengHei;Microsoft New Tai Lue;Microsoft PhagsPa;Microsoft Sans Serif;Microsoft Tai Le;Microsoft Uighur;Microsoft YaHei;Microsoft Yi Baiti;MingLiU;MingLiU-ExtB;MingLiU_HKSCS;MingLiU_HKSCS-ExtB;Miriam Fixed;Miriam;Mongolian Baiti;MoolBoran;NSimSun;Narkisim;News Gothic MT;Niagara Solid;Nyala;PMingLiU;PMingLiU-ExtB;Palace Script MT;Palatino Linotype;Papyrus;Perpetua;Plantagenet Cherokee;Playbill;Prelude Bold;Prelude Condensed Bold;Prelude Condensed Medium;Prelude Medium;PreludeCompressedWGL Black;PreludeCompressedWGL Bold;PreludeCompressedWGL Light;PreludeCompressedWGL Medium;PreludeCondensedWGL Black;PreludeCondensedWGL Bold;PreludeCondensedWGL Light;PreludeCondensedWGL Medium;PreludeWGL Black;PreludeWGL Bold;PreludeWGL Light;PreludeWGL Medium;Raavi;Rachana;Rockwell;Rod;Sakkal Majalla;Sawasdee;Script MT Bold;Segoe Print;Segoe Script;Segoe UI Light;Segoe UI Semibold;Segoe UI Symbol;Segoe UI;Shonar Bangla;Showcard Gothic;Shruti;SimHei;SimSun;SimSun-ExtB;Simplified Arabic Fixed;Simplified Arabic;Snap ITC;Sylfaen;Symbol;Tahoma;Times New Roman Baltic;Times New Roman CE;Times New Roman CYR;Times New Roman Greek;Times New Roman TUR;Times New Roman;TlwgMono;Traditional Arabic;Trebuchet MS;Tunga;Tw Cen MT Condensed Extra Bold;Ubuntu;Umpush;Univers;Utopia;Utsaah;Vani;Verdana;Vijaya;Vladimir Script;Vrinda;Webdings;Wide Latin;Wingdings".split(";"), c = "", a = 0; a < b.length; a++)
e.detect(b[a]) && (c = a == b.length - 1 ? c + b[a] : c + (b[a] + ", "));
return c
},
isLocalStorage: function() {
try {
return !!f.localStorage
} catch (b) {
return !0
}
},
isSessionStorage: function() {
try {
return !!f.sessionStorage
} catch (b) {
return !0
}
},
isCookie: function() {
return navigator.cookieEnabled
},
getTimeZone: function() {
return String(String(new Date).split("(")[1]).split(")")[0]
},
getLanguage: function() {
return navigator.language
},
getSystemLanguage: function() {
return navigator.systemLanguage
},
isCanvas: function() {
var b = document.createElement("canvas");
try {
return !(!b.getContext || !b.getContext("2d"))
} catch (c) {
return !1
}
},
getCanvasPrint: function() {
var b = document.createElement("canvas"), c;
try {
c = b.getContext("2d")
} catch (a) {
return ""
}
c.textBaseline = "top";
c.font = "14px 'Arial'";
c.textBaseline = "alphabetic";
c.fillStyle = "#f60";
c.fillRect(125, 1, 62, 20);
c.fillStyle = "#069";
c.fillText("ClientJS,org <canvas> 1.0", 2, 15);
c.fillStyle = "rgba(102, 204, 0, 0.7)";
c.fillText("ClientJS,org <canvas> 1.0", 4, 17);
return b.toDataURL()
}
};
"object" === typeof module && "undefined" !== typeof exports && (module.exports = p);
f.ClientJS = p
}
)(window);
var deployJava = function() {
function f(a) {
c.debug && (console.log ? console.log(a) : alert(a))
}
function d(a) {
if (null == a || 0 == a.length)
return "http://java.com/dt-redirect";
"&" == a.charAt(0) && (a = a.substring(1, a.length));
return "http://java.com/dt-redirect?" + a
}
var e = ["id", "class", "title", "style"];
"classid codebase codetype data type archive declare standby height width usemap name tabindex align border hspace vspace".split(" ").concat(e, ["lang", "dir"], "onclick ondblclick onmousedown onmouseup onmouseover onmousemove onmouseout onkeypress onkeydown onkeyup".split(" "));
var p = "codebase code name archive object width height alt align hspace vspace".split(" ").concat(e), b;
try {
b = -1 != document.location.protocol.indexOf("http") ? "//java.com/js/webstart.png" : "http://java.com/js/webstart.png"
} catch (a) {
b = "http://java.com/js/webstart.png"
}
var c = {
debug: null,
version: "20120801",
firefoxJavaVersion: null,
myInterval: null,
preInstallJREList: null,
returnPage: null,
brand: null,
locale: null,
installType: null,
EAInstallEnabled: !1,
EarlyAccessURL: null,
oldMimeType: "application/npruntime-scriptable-plugin;DeploymentToolkit",
mimeType: "application/java-deployment-toolkit",
launchButtonPNG: b,
browserName: null,
browserName2: null,
getJREs: function() {
var a = [];
if (this.isPluginInstalled())
for (var g = this.getPlugin().jvms, b = 0; b < g.getLength(); b++)
a[b] = g.get(b).version;
else
g = this.getBrowser(),
"MSIE" == g ? this.testUsingActiveX("1.7.0") ? a[0] = "1.7.0" : this.testUsingActiveX("1.6.0") ? a[0] = "1.6.0" : this.testUsingActiveX("1.5.0") ? a[0] = "1.5.0" : this.testUsingActiveX("1.4.2") ? a[0] = "1.4.2" : this.testForMSVM() && (a[0] = "1.1") : "Netscape Family" == g && (this.getJPIVersionUsingMimeType(),
null != this.firefoxJavaVersion ? a[0] = this.firefoxJavaVersion : this.testUsingMimeTypes("1.7") ? a[0] = "1.7.0" : this.testUsingMimeTypes("1.6") ? a[0] = "1.6.0" : this.testUsingMimeTypes("1.5") ? a[0] = "1.5.0" : this.testUsingMimeTypes("1.4.2") ? a[0] = "1.4.2" : "Safari" == this.browserName2 && (this.testUsingPluginsArray("1.7.0") ? a[0] = "1.7.0" : this.testUsingPluginsArray("1.6") ? a[0] = "1.6.0" : this.testUsingPluginsArray("1.5") ? a[0] = "1.5.0" : this.testUsingPluginsArray("1.4.2") && (a[0] = "1.4.2")));
if (this.debug)
for (b = 0; b < a.length; ++b)
f("[getJREs()] We claim to have detected Java SE " + a[b]);
return a
},
installJRE: function(a, g) {
if (this.isPluginInstalled() && this.isAutoInstallEnabled(a)) {
var b = !1;
if (b = this.isCallbackSupported() ? this.getPlugin().installJRE(a, g) : this.getPlugin().installJRE(a))
this.refresh(),
null != this.returnPage && (document.location = this.returnPage);
return b
}
return this.installLatestJRE()
},
isAutoInstallEnabled: function(a) {
if (!this.isPluginInstalled())
return !1;
"undefined" == typeof a && (a = null);
if ("MSIE" != deployJava.browserName || deployJava.compareVersionToPattern(deployJava.getPlugin().version, ["10", "0", "0"], !1, !0))
a = !0;
else if (null == a)
a = !1;
else {
var g = "1.6.0_33+";
if (null == g || 0 == g.length)
a = !0;
else {
var b = g.charAt(g.length - 1);
"+" != b && "*" != b && -1 != g.indexOf("_") && "_" != b && (g += "*",
b = "*");
g = g.substring(0, g.length - 1);
if (0 < g.length) {
var c = g.charAt(g.length - 1);
if ("." == c || "_" == c)
g = g.substring(0, g.length - 1)
}
a = "*" == b ? 0 == a.indexOf(g) : "+" == b ? g <= a : !1
}
a = !a
}
return a
},
isCallbackSupported: function() {
return this.isPluginInstalled() && this.compareVersionToPattern(this.getPlugin().version, ["10", "2", "0"], !1, !0)
},
installLatestJRE: function(a) {
if (this.isPluginInstalled() && this.isAutoInstallEnabled()) {
var g = !1;
if (g = this.isCallbackSupported() ? this.getPlugin().installLatestJRE(a) : this.getPlugin().installLatestJRE())
this.refresh(),
null != this.returnPage && (document.location = this.returnPage);
return g
}
a = this.getBrowser();
g = navigator.platform.toLowerCase();
if ("true" == this.EAInstallEnabled && -1 != g.indexOf("win") && null != this.EarlyAccessURL)
this.preInstallJREList = this.getJREs(),
null != this.returnPage && (this.myInterval = setInterval("deployJava.poll()", 3E3)),
location.href = this.EarlyAccessURL;
else {
if ("MSIE" == a)
return this.IEInstall();
if ("Netscape Family" == a && -1 != g.indexOf("win32"))
return this.FFInstall();
location.href = d((null != this.returnPage ? "&returnPage=" + this.returnPage : "") + (null != this.locale ? "&locale=" + this.locale : "") + (null != this.brand ? "&brand=" + this.brand : ""))
}
return !1
},
runApplet: function(a, g, b) {
if ("undefined" == b || null == b)
b = "1.1";
var c = b.match("^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$");
null == this.returnPage && (this.returnPage = document.location);
null != c ? "?" != this.getBrowser() ? this.versionCheck(b + "+") ? this.writeAppletTag(a, g) : this.installJRE(b + "+") && (this.refresh(),
location.href = document.location,
this.writeAppletTag(a, g)) : this.writeAppletTag(a, g) : f("[runApplet()] Invalid minimumVersion argument to runApplet():" + b)
},
writeAppletTag: function(a, g) {
var b = "<applet "
, c = ""
, h = !0;
if (null == g || "object" != typeof g)
g = {};
for (var d in a) {
var m;
a: {
m = d.toLowerCase();
for (var f = p.length, e = 0; e < f; e++)
if (p[e] === m) {
m = !0;
break a
}
m = !1
}
m ? (b += " " + d + '="' + a[d] + '"',
"code" == d && (h = !1)) : g[d] = a[d]
}
d = !1;
for (var q in g) {
"codebase_lookup" == q && (d = !0);
if ("object" == q || "java_object" == q || "java_code" == q)
h = !1;
c += '<param name="' + q + '" value="' + g[q] + '"/>'
}
d || (c += '<param name="codebase_lookup" value="false"/>');
h && (b += ' code="dummy"');
document.write(b + ">\n" + c + "\n</applet>")
},
versionCheck: function(a) {
var g = 0
, b = a.match("^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?(\\*|\\+)?$");
if (null != b) {
for (var c = a = !1, h = [], d = 1; d < b.length; ++d)
"string" == typeof b[d] && "" != b[d] && (h[g] = b[d],
g++);
"+" == h[h.length - 1] ? (c = !0,
a = !1,
h.length--) : "*" == h[h.length - 1] ? (c = !1,
a = !0,
h.length--) : 4 > h.length && (c = !1,
a = !0);
g = this.getJREs();
for (d = 0; d < g.length; ++d)
if (this.compareVersionToPattern(g[d], h, a, c))
return !0
} else
g = "Invalid versionPattern passed to versionCheck: " + a,
f("[versionCheck()] " + g),
alert(g);
return !1
},
isWebStartInstalled: function(a) {
if ("?" == this.getBrowser())
return !0;
if ("undefined" == a || null == a)
a = "1.4.2";
var b = !1;
null != a.match("^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$") ? b = this.versionCheck(a + "+") : (f("[isWebStartInstaller()] Invalid minimumVersion argument to isWebStartInstalled(): " + a),
b = this.versionCheck("1.4.2+"));
return b
},
getJPIVersionUsingMimeType: function() {
for (var a = 0; a < navigator.mimeTypes.length; ++a) {
var b = navigator.mimeTypes[a].type.match(/^application\/x-java-applet;jpi-version=(.*)$/);
if (null != b && (this.firefoxJavaVersion = b[1],
"Opera" != this.browserName2))
break
}
},
launchWebStartApplication: function(a) {
navigator.userAgent.toLowerCase();
this.getJPIVersionUsingMimeType();
if (0 == this.isWebStartInstalled("1.7.0") && (0 == this.installJRE("1.7.0+") || 0 == this.isWebStartInstalled("1.7.0")))
return !1;
var b = null;
document.documentURI && (b = document.documentURI);
null == b && (b = document.URL);
var c = this.getBrowser(), d;
"MSIE" == c ? d = '<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="0" height="0"><PARAM name="launchjnlp" value="' + a + '"><PARAM name="docbase" value="' + b + '"></object>' : "Netscape Family" == c && (d = '<embed type="application/x-java-applet;jpi-version=' + this.firefoxJavaVersion + '" width="0" height="0" launchjnlp="' + a + '"docbase="' + b + '" />');
"undefined" == document.body || null == document.body ? (document.write(d),
document.location = b) : (a = document.createElement("div"),
a.id = "div1",
a.style.position = "relative",
a.style.left = "-10000px",
a.style.margin = "0px auto",
a.className = "dynamicDiv",
a.innerHTML = d,
document.body.appendChild(a))
},
createWebStartLaunchButtonEx: function(a, b) {
null == this.returnPage && (this.returnPage = a);
document.write('<a href="' + ("javascript:deployJava.launchWebStartApplication('" + a + "');") + '" onMouseOver="window.status=\'\'; return true;"><img src="' + this.launchButtonPNG + '" border="0" /></a>')
},
createWebStartLaunchButton: function(a, b) {
null == this.returnPage && (this.returnPage = a);
document.write('<a href="' + ("javascript:if (!deployJava.isWebStartInstalled(&quot;" + b + "&quot;)) {if (deployJava.installLatestJRE()) {if (deployJava.launch(&quot;" + a + "&quot;)) {}}} else {if (deployJava.launch(&quot;" + a + "&quot;)) {}}") + '" onMouseOver="window.status=\'\'; return true;"><img src="' + this.launchButtonPNG + '" border="0" /></a>')
},
launch: function(a) {
document.location = a;
return !0
},
isPluginInstalled: function() {
var a = this.getPlugin();
return a && a.jvms ? !0 : !1
},
isAutoUpdateEnabled: function() {
return this.isPluginInstalled() ? this.getPlugin().isAutoUpdateEnabled() : !1
},
setAutoUpdateEnabled: function() {
return this.isPluginInstalled() ? this.getPlugin().setAutoUpdateEnabled() : !1
},
setInstallerType: function(a) {
this.installType = a;
return this.isPluginInstalled() ? this.getPlugin().setInstallerType(a) : !1
},
setAdditionalPackages: function(a) {
return this.isPluginInstalled() ? this.getPlugin().setAdditionalPackages(a) : !1
},
setEarlyAccess: function(a) {
this.EAInstallEnabled = a
},
isPlugin2: function() {
if (this.isPluginInstalled() && this.versionCheck("1.6.0_10+"))
try {
return this.getPlugin().isPlugin2()
} catch (a) {}
return !1
},
allowPlugin: function() {
this.getBrowser();
return "Safari" != this.browserName2 && "Opera" != this.browserName2
},
getPlugin: function() {
this.refresh();
var a = null;
this.allowPlugin() && (a = document.getElementById("deployJavaPlugin"));
return a
},
compareVersionToPattern: function(a, b, c, d) {
if (void 0 == a || void 0 == b)
return !1;
var h = a.match("^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$");
if (null != h) {
var f = 0;
a = [];
for (var m = 1; m < h.length; ++m)
"string" == typeof h[m] && "" != h[m] && (a[f] = h[m],
f++);
h = Math.min(a.length, b.length);
if (d) {
for (m = 0; m < h; ++m) {
if (a[m] < b[m])
return !1;
if (a[m] > b[m])
break
}
return !0
}
for (m = 0; m < h; ++m)
if (a[m] != b[m])
return !1;
return c ? !0 : a.length == b.length
}
return !1
},
getBrowser: function() {
if (null == this.browserName) {
var a = navigator.userAgent.toLowerCase();
f("[getBrowser()] navigator.userAgent.toLowerCase() -> " + a);
-1 != a.indexOf("msie") && -1 == a.indexOf("opera") ? this.browserName2 = this.browserName = "MSIE" : -1 != a.indexOf("iphone") ? (this.browserName = "Netscape Family",
this.browserName2 = "iPhone") : -1 != a.indexOf("firefox") && -1 == a.indexOf("opera") ? (this.browserName = "Netscape Family",
this.browserName2 = "Firefox") : -1 != a.indexOf("chrome") ? (this.browserName = "Netscape Family",
this.browserName2 = "Chrome") : -1 != a.indexOf("safari") ? (this.browserName = "Netscape Family",
this.browserName2 = "Safari") : -1 != a.indexOf("mozilla") && -1 == a.indexOf("opera") ? (this.browserName = "Netscape Family",
this.browserName2 = "Other") : -1 != a.indexOf("opera") ? (this.browserName = "Netscape Family",
this.browserName2 = "Opera") : (this.browserName = "?",
this.browserName2 = "unknown");
f("[getBrowser()] Detected browser name:" + this.browserName + ", " + this.browserName2)
}
return this.browserName
},
testUsingActiveX: function(a) {
a = "JavaWebStart.isInstalled." + a + ".0";
if ("undefined" == typeof ActiveXObject || !ActiveXObject)
return f("[testUsingActiveX()] Browser claims to be IE, but no ActiveXObject object?"),
!1;
try {
return null != new ActiveXObject(a)
} catch (b) {
return !1
}
},
testForMSVM: function() {
if ("undefined" != typeof oClientCaps) {
var a = oClientCaps.getComponentVersion("{08B0E5C0-4FCB-11CF-AAA5-00401C608500}", "ComponentID");
return "" == a || "5,0,5000,0" == a ? !1 : !0
}
return !1
},
testUsingMimeTypes: function(a) {
if (!navigator.mimeTypes)
return f("[testUsingMimeTypes()] Browser claims to be Netscape family, but no mimeTypes[] array?"),
!1;
for (var b = 0; b < navigator.mimeTypes.length; ++b) {
s = navigator.mimeTypes[b].type;
var c = s.match(/^application\/x-java-applet\x3Bversion=(1\.8|1\.7|1\.6|1\.5|1\.4\.2)$/);
if (null != c && this.compareVersions(c[1], a))
return !0
}
return !1
},
testUsingPluginsArray: function(a) {
if (!navigator.plugins || !navigator.plugins.length)
return !1;
for (var b = navigator.platform.toLowerCase(), c = 0; c < navigator.plugins.length; ++c)
if (s = navigator.plugins[c].description,
-1 != s.search(/^Java Switchable Plug-in (Cocoa)/)) {
if (this.compareVersions("1.5.0", a))
return !0
} else if (-1 != s.search(/^Java/) && -1 != b.indexOf("win") && (this.compareVersions("1.5.0", a) || this.compareVersions("1.6.0", a)))
return !0;
return this.compareVersions("1.5.0", a) ? !0 : !1
},
IEInstall: function() {
location.href = d((null != this.returnPage ? "&returnPage=" + this.returnPage : "") + (null != this.locale ? "&locale=" + this.locale : "") + (null != this.brand ? "&brand=" + this.brand : ""));
return !1
},
done: function(a, b) {},
FFInstall: function() {
location.href = d((null != this.returnPage ? "&returnPage=" + this.returnPage : "") + (null != this.locale ? "&locale=" + this.locale : "") + (null != this.brand ? "&brand=" + this.brand : "") + (null != this.installType ? "&type=" + this.installType : ""));
return !1
},
compareVersions: function(a, b) {
for (var c = a.split("."), d = b.split("."), h = 0; h < c.length; ++h)
c[h] = Number(c[h]);
for (h = 0; h < d.length; ++h)
d[h] = Number(d[h]);
2 == c.length && (c[2] = 0);
return c[0] > d[0] ? !0 : c[0] < d[0] ? !1 : c[1] > d[1] ? !0 : c[1] < d[1] ? !1 : c[2] > d[2] ? !0 : c[2] < d[2] ? !1 : !0
},
enableAlerts: function() {
this.browserName = null;
this.debug = !0
},
poll: function() {
this.refresh();
var a = this.getJREs();
0 == this.preInstallJREList.length && 0 != a.length && (clearInterval(this.myInterval),
null != this.returnPage && (location.href = this.returnPage));
0 != this.preInstallJREList.length && 0 != a.length && this.preInstallJREList[0] != a[0] && (clearInterval(this.myInterval),
null != this.returnPage && (location.href = this.returnPage))
},
writePluginTag: function() {
var a = this.getBrowser();
"MSIE" == a ? document.write('<object classid="clsid:CAFEEFAC-DEC7-0000-0001-ABCDEFFEDCBA" id="deployJavaPlugin" width="0" height="0"></object>') : "Netscape Family" == a && this.allowPlugin() && this.writeEmbedTag()
},
refresh: function() {
navigator.plugins.refresh(!1);
"Netscape Family" == this.getBrowser() && this.allowPlugin() && null == document.getElementById("deployJavaPlugin") && this.writeEmbedTag()
},
writeEmbedTag: function() {
var a = !1;
if (null != navigator.mimeTypes) {
for (var b = 0; b < navigator.mimeTypes.length; b++)
navigator.mimeTypes[b].type == this.mimeType && navigator.mimeTypes[b].enabledPlugin && (document.write('<embed id="deployJavaPlugin" type="' + this.mimeType + '" hidden="true" />'),
a = !0);
if (!a)
for (b = 0; b < navigator.mimeTypes.length; b++)
navigator.mimeTypes[b].type == this.oldMimeType && navigator.mimeTypes[b].enabledPlugin && document.write('<embed id="deployJavaPlugin" type="' + this.oldMimeType + '" hidden="true" />')
}
}
};
c.writePluginTag();
if (null == c.locale) {
e = null;
if (null == e)
try {
e = navigator.userLanguage
} catch (a) {}
if (null == e)
try {
e = navigator.systemLanguage
} catch (a) {}
if (null == e)
try {
e = navigator.language
} catch (a) {}
null != e && (e.replace("-", "_"),
c.locale = e)
}
return c
}();
var Detector = function() {
var f = ["monospace", "sans-serif", "serif"]
, d = document.getElementsByTagName("body")[0]
, e = document.createElement("span");
e.style.fontSize = "72px";
e.innerHTML = "mmmmmmmmmmlli";
var p = {}, b = {}, c;
for (c in f)
e.style.fontFamily = f[c],
d.appendChild(e),
p[f[c]] = e.offsetWidth,
b[f[c]] = e.offsetHeight,
d.removeChild(e);
this.detect = function(a) {
var c = !1, n;
for (n in f) {
e.style.fontFamily = a + "," + f[n];
d.appendChild(e);
var v = e.offsetWidth != p[f[n]] || e.offsetHeight != b[f[n]];
d.removeChild(e);
c = c || v
}
return c
}
};
function murmurhash3_32_gc(f, d) {
var e, p, b, c, a;
e = f.length & 3;
p = f.length - e;
b = d;
for (a = 0; a < p; )
c = f.charCodeAt(a) & 255 | (f.charCodeAt(++a) & 255) << 8 | (f.charCodeAt(++a) & 255) << 16 | (f.charCodeAt(++a) & 255) << 24,
++a,
c = 3432918353 * (c & 65535) + ((3432918353 * (c >>> 16) & 65535) << 16) & 4294967295,
c = c << 15 | c >>> 17,
c = 461845907 * (c & 65535) + ((461845907 * (c >>> 16) & 65535) << 16) & 4294967295,
b ^= c,
b = b << 13 | b >>> 19,
b = 5 * (b & 65535) + ((5 * (b >>> 16) & 65535) << 16) & 4294967295,
b = (b & 65535) + 27492 + (((b >>> 16) + 58964 & 65535) << 16);
c = 0;
switch (e) {
case 3:
c ^= (f.charCodeAt(a + 2) & 255) << 16;
case 2:
c ^= (f.charCodeAt(a + 1) & 255) << 8;
case 1:
c ^= f.charCodeAt(a) & 255,
c = 3432918353 * (c & 65535) + ((3432918353 * (c >>> 16) & 65535) << 16) & 4294967295,
c = c << 15 | c >>> 17,
b ^= 461845907 * (c & 65535) + ((461845907 * (c >>> 16) & 65535) << 16) & 4294967295
}
b ^= f.length;
b ^= b >>> 16;
b = 2246822507 * (b & 65535) + ((2246822507 * (b >>> 16) & 65535) << 16) & 4294967295;
b ^= b >>> 13;
b = 3266489909 * (b & 65535) + ((3266489909 * (b >>> 16) & 65535) << 16) & 4294967295;
return (b ^ b >>> 16) >>> 0
}
;var swfobject = function() {
function f() {
if (!y) {
try {
var a = l.getElementsByTagName("body")[0].appendChild(l.createElement("span"));
a.parentNode.removeChild(a)
} catch (b) {
return
}
y = !0;
for (var a = F.length, c = 0; c < a; c++)
F[c]()
}
}
function d(a) {
y ? a() : F[F.length] = a
}
function e(a) {
if ("undefined" != typeof r.addEventListener)
r.addEventListener("load", a, !1);
else if ("undefined" != typeof l.addEventListener)
l.addEventListener("load", a, !1);
else if ("undefined" != typeof r.attachEvent)
B(r, "onload", a);
else if ("function" == typeof r.onload) {
var b = r.onload;
r.onload = function() {
b();
a()
}
} else
r.onload = a
}
function p() {
var a = l.getElementsByTagName("body")[0]
, c = l.createElement("object");
c.setAttribute("type", "application/x-shockwave-flash");
var d = a.appendChild(c);
if (d) {
var g = 0;
(function() {
if ("undefined" != typeof d.GetVariable) {
var h = d.GetVariable("$version");
h && (h = h.split(" ")[1].split(","),
k.pv = [parseInt(h[0], 10), parseInt(h[1], 10), parseInt(h[2], 10)])
} else if (10 > g) {
g++;
setTimeout(arguments.callee, 10);
return
}
a.removeChild(c);
d = null;
b()
}
)()
} else
b()
}
function b() {
var b = x.length;
if (0 < b)
for (var z = 0; z < b; z++) {
var d = x[z].id
, h = x[z].callbackFn
, f = {
success: !1,
id: d
};
if (0 < k.pv[0]) {
var e = m(d);
if (e)
if (!C(x[z].swfVersion) || k.wk && 312 > k.wk)
if (x[z].expressInstall && a()) {
f = {};
f.data = x[z].expressInstall;
f.width = e.getAttribute("width") || "0";
f.height = e.getAttribute("height") || "0";
e.getAttribute("class") && (f.styleclass = e.getAttribute("class"));
e.getAttribute("align") && (f.align = e.getAttribute("align"));
for (var l = {}, e = e.getElementsByTagName("param"), q = e.length, u = 0; u < q; u++)
"movie" != e[u].getAttribute("name").toLowerCase() && (l[e[u].getAttribute("name")] = e[u].getAttribute("value"));
g(f, l, d, h)
} else
n(e),
h && h(f);
else
A(d, !0),
h && (f.success = !0,
f.ref = c(d),
h(f))
} else
A(d, !0),
h && ((d = c(d)) && "undefined" != typeof d.SetVariable && (f.success = !0,
f.ref = d),
h(f))
}
}
function c(a) {
var b = null;
(a = m(a)) && "OBJECT" == a.nodeName && ("undefined" != typeof a.SetVariable ? b = a : (a = a.getElementsByTagName("object")[0]) && (b = a));
return b
}
function a() {
return !G && C("6.0.65") && (k.win || k.mac) && !(k.wk && 312 > k.wk)
}
function g(a, b, c, d) {
G = !0;
J = d || null;
L = {
success: !1,
id: c
};
var g = m(c);
if (g) {
"OBJECT" == g.nodeName ? (E = v(g),
H = null) : (E = g,
H = c);
a.id = "SWFObjectExprInst";
if ("undefined" == typeof a.width || !/%$/.test(a.width) && 310 > parseInt(a.width, 10))
a.width = "310";
if ("undefined" == typeof a.height || !/%$/.test(a.height) && 137 > parseInt(a.height, 10))
a.height = "137";
l.title = l.title.slice(0, 47) + " - Flash Player Installation";
d = k.ie && k.win ? "ActiveX" : "PlugIn";
d = "MMredirectURL=" + r.location.toString().replace(/&/g, "%26") + "&MMplayerType=" + d + "&MMdoctitle=" + l.title;
b.flashvars = "undefined" != typeof b.flashvars ? b.flashvars + ("&" + d) : d;
k.ie && k.win && 4 != g.readyState && (d = l.createElement("div"),
c += "SWFObjectNew",
d.setAttribute("id", c),
g.parentNode.insertBefore(d, g),
g.style.display = "none",
function() {
4 == g.readyState ? g.parentNode.removeChild(g) : setTimeout(arguments.callee, 10)
}());
h(a, b, c)
}
}
function n(a) {
if (k.ie && k.win && 4 != a.readyState) {
var b = l.createElement("div");
a.parentNode.insertBefore(b, a);
b.parentNode.replaceChild(v(a), b);
a.style.display = "none";
(function() {
4 == a.readyState ? a.parentNode.removeChild(a) : setTimeout(arguments.callee, 10)
}
)()
} else
a.parentNode.replaceChild(v(a), a)
}
function v(a) {
var b = l.createElement("div");
if (k.win && k.ie)
b.innerHTML = a.innerHTML;
else if (a = a.getElementsByTagName("object")[0])
if (a = a.childNodes)
for (var c = a.length, d = 0; d < c; d++)
1 == a[d].nodeType && "PARAM" == a[d].nodeName || 8 == a[d].nodeType || b.appendChild(a[d].cloneNode(!0));
return b
}
function h(a, b, c) {
var d, g = m(c);
if (k.wk && 312 > k.wk)
return d;
if (g)
if ("undefined" == typeof a.id && (a.id = c),
k.ie && k.win) {
var h = "", f;
for (f in a)
a[f] != Object.prototype[f] && ("data" == f.toLowerCase() ? b.movie = a[f] : "styleclass" == f.toLowerCase() ? h += ' class="' + a[f] + '"' : "classid" != f.toLowerCase() && (h += " " + f + '="' + a[f] + '"'));
f = "";
for (var e in b)
b[e] != Object.prototype[e] && (f += '<param name="' + e + '" value="' + b[e] + '" />');
g.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + h + ">" + f + "</object>";
I[I.length] = a.id;
d = m(a.id)
} else {
e = l.createElement("object");
e.setAttribute("type", "application/x-shockwave-flash");
for (var q in a)
a[q] != Object.prototype[q] && ("styleclass" == q.toLowerCase() ? e.setAttribute("class", a[q]) : "classid" != q.toLowerCase() && e.setAttribute(q, a[q]));
for (h in b)
b[h] != Object.prototype[h] && "movie" != h.toLowerCase() && (a = e,
f = h,
q = b[h],
c = l.createElement("param"),
c.setAttribute("name", f),
c.setAttribute("value", q),
a.appendChild(c));
g.parentNode.replaceChild(e, g);
d = e
}
return d
}
function u(a) {
var b = m(a);
b && "OBJECT" == b.nodeName && (k.ie && k.win ? (b.style.display = "none",
function() {
if (4 == b.readyState) {
var c = m(a);
if (c) {
for (var d in c)
"function" == typeof c[d] && (c[d] = null);
c.parentNode.removeChild(c)
}
} else
setTimeout(arguments.callee, 10)
}()) : b.parentNode.removeChild(b))
}
function m(a) {
var b = null;
try {
b = l.getElementById(a)
} catch (c) {}
return b
}
function B(a, b, c) {
a.attachEvent(b, c);
D[D.length] = [a, b, c]
}
function C(a) {
var b = k.pv;
a = a.split(".");
a[0] = parseInt(a[0], 10);
a[1] = parseInt(a[1], 10) || 0;
a[2] = parseInt(a[2], 10) || 0;
return b[0] > a[0] || b[0] == a[0] && b[1] > a[1] || b[0] == a[0] && b[1] == a[1] && b[2] >= a[2] ? !0 : !1
}
function q(a, b, c, d) {
if (!k.ie || !k.mac) {
var h = l.getElementsByTagName("head")[0];
h && (c = c && "string" == typeof c ? c : "screen",
d && (K = w = null),
w && K == c || (d = l.createElement("style"),
d.setAttribute("type", "text/css"),
d.setAttribute("media", c),
w = h.appendChild(d),
k.ie && k.win && "undefined" != typeof l.styleSheets && 0 < l.styleSheets.length && (w = l.styleSheets[l.styleSheets.length - 1]),
K = c),
k.ie && k.win ? w && "object" == typeof w.addRule && w.addRule(a, b) : w && "undefined" != typeof l.createTextNode && w.appendChild(l.createTextNode(a + " {" + b + "}")))
}
}
function A(a, b) {
if (M) {
var c = b ? "visible" : "hidden";
y && m(a) ? m(a).style.visibility = c : q("#" + a, "visibility:" + c)
}
}
function N(a) {
return null != /[\\\"<>\.;]/.exec(a) && "undefined" != typeof encodeURIComponent ? encodeURIComponent(a) : a
}
var r = window, l = document, t = navigator, O = !1, F = [function() {
O ? p() : b()
}
], x = [], I = [], D = [], E, H, J, L, y = !1, G = !1, w, K, M = !0, k = function() {
var a = "undefined" != typeof l.getElementById && "undefined" != typeof l.getElementsByTagName && "undefined" != typeof l.createElement
, b = t.userAgent.toLowerCase()
, c = t.platform.toLowerCase()
, d = c ? /win/.test(c) : /win/.test(b)
, c = c ? /mac/.test(c) : /mac/.test(b)
, b = /webkit/.test(b) ? parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : !1
, h = !+"\v1"
, g = [0, 0, 0]
, f = null;
if ("undefined" != typeof t.plugins && "object" == typeof t.plugins["Shockwave Flash"])
!(f = t.plugins["Shockwave Flash"].description) || "undefined" != typeof t.mimeTypes && t.mimeTypes["application/x-shockwave-flash"] && !t.mimeTypes["application/x-shockwave-flash"].enabledPlugin || (O = !0,
h = !1,
f = f.replace(/^.*\s+(\S+\s+\S+$)/, "$1"),
g[0] = parseInt(f.replace(/^(.*)\..*$/, "$1"), 10),
g[1] = parseInt(f.replace(/^.*\.(.*)\s.*$/, "$1"), 10),
g[2] = /[a-zA-Z]/.test(f) ? parseInt(f.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0);
else if ("undefined" != typeof r.ActiveXObject)
try {
var e = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
e && (f = e.GetVariable("$version")) && (h = !0,
f = f.split(" ")[1].split(","),
g = [parseInt(f[0], 10), parseInt(f[1], 10), parseInt(f[2], 10)])
} catch (m) {}
return {
w3: a,
pv: g,
wk: b,
ie: h,
win: d,
mac: c
}
}();
(function() {
k.w3 && (("undefined" != typeof l.readyState && "complete" == l.readyState || "undefined" == typeof l.readyState && (l.getElementsByTagName("body")[0] || l.body)) && f(),
y || ("undefined" != typeof l.addEventListener && l.addEventListener("DOMContentLoaded", f, !1),
k.ie && k.win && (l.attachEvent("onreadystatechange", function() {
"complete" == l.readyState && (l.detachEvent("onreadystatechange", arguments.callee),
f())
}),
r == top && function() {
if (!y) {
try {
l.documentElement.doScroll("left")
} catch (a) {
setTimeout(arguments.callee, 0);
return
}
f()
}
}()),
k.wk && function() {
y || (/loaded|complete/.test(l.readyState) ? f() : setTimeout(arguments.callee, 0))
}(),
e(f)))
}
)();
(function() {
k.ie && k.win && window.attachEvent("onunload", function() {
for (var a = D.length, b = 0; b < a; b++)
D[b][0].detachEvent(D[b][1], D[b][2]);
a = I.length;
for (b = 0; b < a; b++)
u(I[b]);
for (var c in k)
k[c] = null;
k = null;
for (var d in swfobject)
swfobject[d] = null;
swfobject = null
})
}
)();
return {
registerObject: function(a, b, c, d) {
if (k.w3 && a && b) {
var h = {};
h.id = a;
h.swfVersion = b;
h.expressInstall = c;
h.callbackFn = d;
x[x.length] = h;
A(a, !1)
} else
d && d({
success: !1,
id: a
})
},
getObjectById: function(a) {
if (k.w3)
return c(a)
},
embedSWF: function(b, c, f, e, m, q, l, u, p, r) {
var n = {
success: !1,
id: c
};
k.w3 && !(k.wk && 312 > k.wk) && b && c && f && e && m ? (A(c, !1),
d(function() {
f += "";
e += "";
var d = {};
if (p && "object" === typeof p)
for (var k in p)
d[k] = p[k];
d.data = b;
d.width = f;
d.height = e;
k = {};
if (u && "object" === typeof u)
for (var B in u)
k[B] = u[B];
if (l && "object" === typeof l)
for (var t in l)
k.flashvars = "undefined" != typeof k.flashvars ? k.flashvars + ("&" + t + "=" + l[t]) : t + "=" + l[t];
if (C(m))
B = h(d, k, c),
d.id == c && A(c, !0),
n.success = !0,
n.ref = B;
else {
if (q && a()) {
d.data = q;
g(d, k, c, r);
return
}
A(c, !0)
}
r && r(n)
})) : r && r(n)
},
switchOffAutoHideShow: function() {
M = !1
},
ua: k,
getFlashPlayerVersion: function() {
return {
major: k.pv[0],
minor: k.pv[1],
release: k.pv[2]
}
},
hasFlashPlayerVersion: C,
createSWF: function(a, b, c) {
if (k.w3)
return h(a, b, c)
},
showExpressInstall: function(b, c, d, h) {
k.w3 && a() && g(b, c, d, h)
},
removeSWF: function(a) {
k.w3 && u(a)
},
createCSS: function(a, b, c, d) {
k.w3 && q(a, b, c, d)
},
addDomLoadEvent: d,
addLoadEvent: e,
getQueryParamValue: function(a) {
var b = l.location.search || l.location.hash;
if (b) {
/\?/.test(b) && (b = b.split("?")[1]);
if (null == a)
return N(b);
for (var b = b.split("&"), c = 0; c < b.length; c++)
if (b[c].substring(0, b[c].indexOf("=")) == a)
return N(b[c].substring(b[c].indexOf("=") + 1))
}
return ""
},
expressInstallCallback: function() {
if (G) {
var a = m("SWFObjectExprInst");
a && E && (a.parentNode.replaceChild(E, a),
H && (A(H, !0),
k.ie && k.win && (E.style.display = "block")),
J && J(L));
G = !1
}
}
}
}();
(function(f, d) {
var e = {
extend: function(a, b) {
for (var c in b)
-1 !== "browser cpu device engine os".indexOf(c) && 0 === b[c].length % 2 && (a[c] = b[c].concat(a[c]));
return a
},
has: function(a, b) {
return "string" === typeof a ? -1 !== b.toLowerCase().indexOf(a.toLowerCase()) : !1
},
lowerize: function(a) {
return a.toLowerCase()
},
major: function(a) {
return "string" === typeof a ? a.split(".")[0] : d
}
}
, p = function() {
for (var a, b = 0, c, f, g, e, p, n, r = arguments; b < r.length && !p; ) {
var l = r[b]
, t = r[b + 1];
if ("undefined" === typeof a)
for (g in a = {},
t)
t.hasOwnProperty(g) && (e = t[g],
"object" === typeof e ? a[e[0]] = d : a[e] = d);
for (c = f = 0; c < l.length && !p; )
if (p = l[c++].exec(this.getUA()))
for (g = 0; g < t.length; g++)
n = p[++f],
e = t[g],
"object" === typeof e && 0 < e.length ? 2 == e.length ? a[e[0]] = "function" == typeof e[1] ? e[1].call(this, n) : e[1] : 3 == e.length ? a[e[0]] = "function" !== typeof e[1] || e[1].exec && e[1].test ? n ? n.replace(e[1], e[2]) : d : n ? e[1].call(this, n, e[2]) : d : 4 == e.length && (a[e[0]] = n ? e[3].call(this, n.replace(e[1], e[2])) : d) : a[e] = n ? n : d;
b += 2
}
return a
}
, b = function(a, b) {
for (var c in b)
if ("object" === typeof b[c] && 0 < b[c].length)
for (var f = 0; f < b[c].length; f++) {
if (e.has(b[c][f], a))
return "?" === c ? d : c
}
else if (e.has(b[c], a))
return "?" === c ? d : c;
return a
}
, c = {
ME: "4.90",
"NT 3.11": "NT3.51",
"NT 4.0": "NT4.0",
2E3: "NT 5.0",
XP: ["NT 5.1", "NT 5.2"],
Vista: "NT 6.0",
7: "NT 6.1",
8: "NT 6.2",
"8.1": "NT 6.3",
10: ["NT 6.4", "NT 10.0"],
RT: "ARM"
}
, a = {
browser: [[/(opera\smini)\/([\w\.-]+)/i, /(opera\s[mobiletab]+).+version\/([\w\.-]+)/i, /(opera).+version\/([\w\.]+)/i, /(opera)[\/\s]+([\w\.]+)/i], ["name", "version"], [/\s(opr)\/([\w\.]+)/i], [["name", "Opera"], "version"], [/(kindle)\/([\w\.]+)/i, /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i, /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i, /(?:ms|\()(ie)\s([\w\.]+)/i, /(rekonq)\/([\w\.]+)*/i, /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs)\/([\w\.-]+)/i], ["name", "version"], [/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i], [["name", "IE"], "version"], [/(edge)\/((\d+)?[\w\.]+)/i], ["name", "version"], [/(yabrowser)\/([\w\.]+)/i], [["name", "Yandex"], "version"], [/(comodo_dragon)\/([\w\.]+)/i], [["name", /_/g, " "], "version"], [/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i, /(qqbrowser)[\/\s]?([\w\.]+)/i], ["name", "version"], [/(uc\s?browser)[\/\s]?([\w\.]+)/i, /ucweb.+(ucbrowser)[\/\s]?([\w\.]+)/i, /JUC.+(ucweb)[\/\s]?([\w\.]+)/i], [["name", "UCBrowser"], "version"], [/(dolfin)\/([\w\.]+)/i], [["name", "Dolphin"], "version"], [/((?:android.+)crmo|crios)\/([\w\.]+)/i], [["name", "Chrome"], "version"], [/XiaoMi\/MiuiBrowser\/([\w\.]+)/i], ["version", ["name", "MIUI Browser"]], [/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)/i], ["version", ["name", "Android Browser"]], [/FBAV\/([\w\.]+);/i], ["version", ["name", "Facebook"]], [/fxios\/([\w\.-]+)/i], ["version", ["name", "Firefox"]], [/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i], ["version", ["name", "Mobile Safari"]], [/version\/([\w\.]+).+?(mobile\s?safari|safari)/i], ["version", "name"], [/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i], ["name", ["version", b, {
"1.0": "/8",
"1.2": "/1",
"1.3": "/3",
"2.0": "/412",
"2.0.2": "/416",
"2.0.3": "/417",
"2.0.4": "/419",
"?": "/"
}]], [/(konqueror)\/([\w\.]+)/i, /(webkit|khtml)\/([\w\.]+)/i], ["name", "version"], [/(navigator|netscape)\/([\w\.-]+)/i], [["name", "Netscape"], "version"], [/(swiftfox)/i, /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i, /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i, /(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i, /(links)\s\(([\w\.]+)/i, /(gobrowser)\/?([\w\.]+)*/i, /(ice\s?browser)\/v?([\w\._]+)/i, /(mosaic)[\/\s]([\w\.]+)/i], ["name", "version"]],
cpu: [[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i], [["architecture", "amd64"]], [/(ia32(?=;))/i], [["architecture", e.lowerize]], [/((?:i[346]|x)86)[;\)]/i], [["architecture", "ia32"]], [/windows\s(ce|mobile);\sppc;/i], [["architecture", "arm"]], [/((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i], [["architecture", /ower/, "", e.lowerize]], [/(sun4\w)[;\)]/i], [["architecture", "sparc"]], [/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+;))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i], [["architecture", e.lowerize]]],
device: [[/\((ipad|playbook);[\w\s\);-]+(rim|apple)/i], ["model", "vendor", ["type", "tablet"]], [/applecoremedia\/[\w\.]+ \((ipad)/], ["model", ["vendor", "Apple"], ["type", "tablet"]], [/(apple\s{0,1}tv)/i], [["model", "Apple TV"], ["vendor", "Apple"]], [/(archos)\s(gamepad2?)/i, /(hp).+(touchpad)/i, /(kindle)\/([\w\.]+)/i, /\s(nook)[\w\s]+build\/(\w+)/i, /(dell)\s(strea[kpr\s\d]*[\dko])/i], ["vendor", "model", ["type", "tablet"]], [/(kf[A-z]+)\sbuild\/[\w\.]+.*silk\//i], ["model", ["vendor", "Amazon"], ["type", "tablet"]], [/(sd|kf)[0349hijorstuw]+\sbuild\/[\w\.]+.*silk\//i], [["model", b, {
"Fire Phone": ["SD", "KF"]
}], ["vendor", "Amazon"], ["type", "mobile"]], [/\((ip[honed|\s\w*]+);.+(apple)/i], ["model", "vendor", ["type", "mobile"]], [/\((ip[honed|\s\w*]+);/i], ["model", ["vendor", "Apple"], ["type", "mobile"]], [/(blackberry)[\s-]?(\w+)/i, /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|huawei|meizu|motorola|polytron)[\s_-]?([\w-]+)*/i, /(hp)\s([\w\s]+\w)/i, /(asus)-?(\w+)/i], ["vendor", "model", ["type", "mobile"]], [/\(bb10;\s(\w+)/i], ["model", ["vendor", "BlackBerry"], ["type", "mobile"]], [/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7)/i], ["model", ["vendor", "Asus"], ["type", "tablet"]], [/(sony)\s(tablet\s[ps])\sbuild\//i, /(sony)?(?:sgp.+)\sbuild\//i], [["vendor", "Sony"], ["model", "Xperia Tablet"], ["type", "tablet"]], [/(?:sony)?(?:(?:(?:c|d)\d{4})|(?:so[-l].+))\sbuild\//i], [["vendor", "Sony"], ["model", "Xperia Phone"], ["type", "mobile"]], [/\s(ouya)\s/i, /(nintendo)\s([wids3u]+)/i], ["vendor", "model", ["type", "console"]], [/android.+;\s(shield)\sbuild/i], ["model", ["vendor", "Nvidia"], ["type", "console"]], [/(playstation\s[34portablevi]+)/i], ["model", ["vendor", "Sony"], ["type", "console"]], [/(sprint\s(\w+))/i], [["vendor", b, {
HTC: "APA",
Sprint: "Sprint"
}], ["model", b, {
"Evo Shift 4G": "7373KT"
}], ["type", "mobile"]], [/(lenovo)\s?(S(?:5000|6000)+(?:[-][\w+]))/i], ["vendor", "model", ["type", "tablet"]], [/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i, /(zte)-(\w+)*/i, /(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i], ["vendor", ["model", /_/g, " "], ["type", "mobile"]], [/(nexus\s9)/i], ["model", ["vendor", "HTC"], ["type", "tablet"]], [/[\s\(;](xbox(?:\sone)?)[\s\);]/i], ["model", ["vendor", "Microsoft"], ["type", "console"]], [/(kin\.[onetw]{3})/i], [["model", /\./g, " "], ["vendor", "Microsoft"], ["type", "mobile"]], [/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?(:?\s4g)?)[\w\s]+build\//i, /mot[\s-]?(\w+)*/i, /(XT\d{3,4}) build\//i, /(nexus\s[6])/i], ["model", ["vendor", "Motorola"], ["type", "mobile"]], [/android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i], ["model", ["vendor", "Motorola"], ["type", "tablet"]], [/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n8000|sgh-t8[56]9|nexus 10))/i, /((SM-T\w+))/i], [["vendor", "Samsung"], "model", ["type", "tablet"]], [/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-n900))/i, /(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i, /sec-((sgh\w+))/i], [["vendor", "Samsung"], "model", ["type", "mobile"]], [/(samsung);smarttv/i], ["vendor", "model", ["type", "smarttv"]], [/\(dtv[\);].+(aquos)/i], ["model", ["vendor", "Sharp"], ["type", "smarttv"]], [/sie-(\w+)*/i], ["model", ["vendor", "Siemens"], ["type", "mobile"]], [/(maemo|nokia).*(n900|lumia\s\d+)/i, /(nokia)[\s_-]?([\w-]+)*/i], [["vendor", "Nokia"], "model", ["type", "mobile"]], [/android\s3\.[\s\w;-]{10}(a\d{3})/i], ["model", ["vendor", "Acer"], ["type", "tablet"]], [/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i], [["vendor", "LG"], "model", ["type", "tablet"]], [/(lg) netcast\.tv/i], ["vendor", "model", ["type", "smarttv"]], [/(nexus\s[45])/i, /lg[e;\s\/-]+(\w+)*/i], ["model", ["vendor", "LG"], ["type", "mobile"]], [/android.+(ideatab[a-z0-9\-\s]+)/i], ["model", ["vendor", "Lenovo"], ["type", "tablet"]], [/linux;.+((jolla));/i], ["vendor", "model", ["type", "mobile"]], [/((pebble))app\/[\d\.]+\s/i], ["vendor", "model", ["type", "wearable"]], [/android.+;\s(glass)\s\d/i], ["model", ["vendor", "Google"], ["type", "wearable"]], [/android.+(\w+)\s+build\/hm\1/i, /android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, /android.+(mi[\s\-_]*(?:one|one[\s_]plus)?[\s_]*(?:\d\w)?)\s+build/i], [["model", /_/g, " "], ["vendor", "Xiaomi"], ["type", "mobile"]], [/\s(tablet)[;\/\s]/i, /\s(mobile)[;\/\s]/i], [["type", e.lowerize], "vendor", "model"]],
engine: [[/windows.+\sedge\/([\w\.]+)/i], ["version", ["name", "EdgeHTML"]], [/(presto)\/([\w\.]+)/i, /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i, /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, /(icab)[\/\s]([23]\.[\d\.]+)/i], ["name", "version"], [/rv\:([\w\.]+).*(gecko)/i], ["version", "name"]],
os: [[/microsoft\s(windows)\s(vista|xp)/i], ["name", "version"], [/(windows)\snt\s6\.2;\s(arm)/i, /(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i], ["name", ["version", b, c]], [/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i], [["name", "Windows"], ["version", b, c]], [/\((bb)(10);/i], [["name", "BlackBerry"], "version"], [/(blackberry)\w*\/?([\w\.]+)*/i, /(tizen)[\/\s]([\w\.]+)/i, /(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i, /linux;.+(sailfish);/i], ["name", "version"], [/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i], [["name", "Symbian"], "version"], [/\((series40);/i], ["name"], [/mozilla.+\(mobile;.+gecko.+firefox/i], [["name", "Firefox OS"], "version"], [/(nintendo|playstation)\s([wids34portablevu]+)/i, /(mint)[\/\s\(]?(\w+)*/i, /(mageia|vectorlinux)[;\s]/i, /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?([\w\.-]+)*/i, /(hurd|linux)\s?([\w\.]+)*/i, /(gnu)\s?([\w\.]+)*/i], ["name", "version"], [/(cros)\s[\w]+\s([\w\.]+\w)/i], [["name", "Chromium OS"], "version"], [/(sunos)\s?([\w\.]+\d)*/i], [["name", "Solaris"], "version"], [/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i], ["name", "version"], [/(ip[honead]+)(?:.*os\s([\w]+)*\slike\smac|;\sopera)/i], [["name", "iOS"], ["version", /_/g, "."]], [/(mac\sos\sx)\s?([\w\s\.]+\w)*/i, /(macintosh|mac(?=_powerpc)\s)/i], [["name", "Mac OS"], ["version", /_/g, "."]], [/((?:open)?solaris)[\/\s-]?([\w\.]+)*/i, /(haiku)\s(\w+)/i, /(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i, /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i, /(unix)\s?([\w\.]+)*/i], ["name", "version"]]
}
, g = function(b, c) {
if (!(this instanceof g))
return (new g(b,c)).getResult();
var d = b || (f && f.navigator && f.navigator.userAgent ? f.navigator.userAgent : "")
, n = c ? e.extend(a, c) : a;
this.getBrowser = function() {
var a = p.apply(this, n.browser);
a.major = e.major(a.version);
return a
}
;
this.getCPU = function() {
return p.apply(this, n.cpu)
}
;
this.getDevice = function() {
return p.apply(this, n.device)
}
;
this.getEngine = function() {
return p.apply(this, n.engine)
}
;
this.getOS = function() {
return p.apply(this, n.os)
}
;
this.getResult = function() {
return {
ua: this.getUA(),
browser: this.getBrowser(),
engine: this.getEngine(),
os: this.getOS(),
device: this.getDevice(),
cpu: this.getCPU()
}
}
;
this.getUA = function() {
return d
}
;
this.setUA = function(a) {
d = a;
return this
}
;
this.setUA(d);
return this
};
g.VERSION = "0.7.10";
g.BROWSER = {
NAME: "name",
MAJOR: "major",
VERSION: "version"
};
g.CPU = {
ARCHITECTURE: "architecture"
};
g.DEVICE = {
MODEL: "model",
VENDOR: "vendor",
TYPE: "type",
CONSOLE: "console",
MOBILE: "mobile",
SMARTTV: "smarttv",
TABLET: "tablet",
WEARABLE: "wearable",
EMBEDDED: "embedded"
};
g.ENGINE = {
NAME: "name",
VERSION: "version"
};
g.OS = {
NAME: "name",
VERSION: "version"
};
"undefined" !== typeof exports ? ("undefined" !== typeof module && module.exports && (exports = module.exports = g),
exports.UAParser = g) : "function" === typeof define && define.amd ? define(function() {
return g
}) : f.UAParser = g;
var n = f.jQuery || f.Zepto;
if ("undefined" !== typeof n) {
var v = new g;
n.ua = v.getResult();
n.ua.get = function() {
return v.getUA()
}
;
n.ua.set = function(a) {
v.setUA(a);
a = v.getResult();
for (var b in a)
n.ua[b] = a[b]
}
}
}
)("object" === typeof window ? window : this);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment