{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./src/client.base.js","webpack:///./node_modules/globalthis/polyfill.js","webpack:///./node_modules/globalthis/implementation.browser.js","webpack:///./node_modules/murmurhash-js/murmurhash3_gc.js","webpack:///./node_modules/ua-parser-js/src/ua-parser.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./src/vendor/fontdetect.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./src/modules/java-detection.js","webpack:///./src/vendor/deployJava.js","webpack:///./src/modules/flash-detection.js","webpack:///./src/vendor/swfobject.js","webpack:///./src/client.js"],"names":["root","factory","exports","module","define","amd","a","i","this","installedModules","__webpack_require__","moduleId","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","browserData","fontDetective","globalThis","murmurhash3_32_gc","UAParser","Detector","ClientJS","parser","getResult","getSoftwareVersion","getBrowserData","getFingerprint","bar","userAgent","ua","screenPrint","getScreenPrint","pluginList","getPlugins","fontList","getFonts","localStorage","isLocalStorage","sessionStorage","isSessionStorage","timeZone","getTimeZone","language","getLanguage","systemLanguage","getSystemLanguage","cookies","isCookie","canvasPrint","getCanvasPrint","getCustomFingerprint","arguments","length","getUserAgent","getUserAgentLowerCase","toLowerCase","getBrowser","browser","getBrowserVersion","version","getBrowserMajorVersion","major","isIE","test","isChrome","isFirefox","isSafari","isMobileSafari","isOpera","getEngine","engine","getEngineVersion","getOS","os","getOSVersion","isWindows","isMac","isLinux","isUbuntu","isSolaris","getDevice","device","model","getDeviceType","type","getDeviceVendor","vendor","getCPU","cpu","architecture","isMobile","dataString","navigator","window","opera","substr","isMobileMajor","isMobileAndroid","isMobileBlackBerry","isMobileIOS","isMobileOpera","isMobileWindows","match","isIphone","isIpad","isIpod","getCurrentResolution","getAvailableResolution","getColorDepth","getDeviceXDPI","getDeviceYDPI","screen","colorDepth","width","height","availWidth","availHeight","deviceXDPI","deviceYDPI","pluginsList","plugins","isJava","javaEnabled","getJavaVersion","Error","isFlash","getFlashVersion","isSilverlight","getSilverlightVersion","description","isMimeTypes","mimeTypes","getMimeTypes","mimeTypeList","isFont","font","detect","fontArray","fontString","e","cookieEnabled","rightNow","myNumber","Date","String","getTimezoneOffset","slice","isCanvas","elem","document","createElement","getContext","ctx","canvas","txt","textBaseline","fillStyle","fillRect","fillText","toDataURL","implementation","global","Math","Array","self","Function","seed","remainder","bytes","h1","h1b","c1","c2","k1","charCodeAt","undefined","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SONY","XIAOMI","ZEBRA","FACEBOOK","enumerize","arr","enums","toUpperCase","has","str1","str2","lowerize","indexOf","str","trim","len","replace","substring","rgxMapper","arrays","j","k","q","matches","regex","props","exec","strMapper","map","windowsVersionMap","regexes","CHROME","EDGE","extensions","_ua","_rgxmap","mergedRegexes","concat","extend","_browser","split","_cpu","_device","_engine","_os","getUA","setUA","BROWSER","CPU","DEVICE","ENGINE","OS","$","jQuery","Zepto","set","result","prop","__webpack_amd_options__","baseFonts","h","getElementsByTagName","style","fontSize","innerHTML","defaultWidth","defaultHeight","index","fontFamily","appendChild","offsetWidth","offsetHeight","removeChild","detected","matched","ctor","superCtor","super_","constructor","writable","configurable","TempCtor","deployJava","getJREs","toString","version_regex_base","version_regex_strict","version_regex_with_family_modifier","hattrs","core","applet","applet_valid_attrs","log","message","debug","console","alert","doVersionCheck","versionPattern","noplugin","matchData","familyMatch","minMatch","patternArray","list","compareVersionToPattern","msg","launchWithJnlpProtocol","jnlp","location","absoluteUrl","url","protocols","startsWith","isAbsoluteUrl","href","pos","lastIndexOf","getAbsoluteUrl","isNoPluginWebBrowser","browserName2","constructGetJavaURL","query","getJavaURL","charAt","searchString","position","firefoxJavaVersion","useStaticMimeType","myInterval","preInstallJREList","brand","locale","installType","EAInstallEnabled","EarlyAccessURL","oldMimeType","mimeType","launchButtonPNG","imageUrl","protocol","err","getWebStartLaunchIconURL","browserName","isPluginInstalled","VMs","getPlugin","jvms","getLength","testUsingActiveX","testForMSVM","getJPIVersionUsingMimeType","testUsingMimeTypes","testUsingPluginsArray","installJRE","requestVersion","versionCheck","installLatestJRE","isAutoInstallEnabled","requestedJREVersion","z","versionCheckEx","enableWithoutCertMisMatchWorkaround","isCallbackSupported","platform","IEInstall","FFInstall","runApplet","attributes","parameters","minimumVersion","readyStateCheck","setInterval","divTag","readyState","clearInterval","id","setAttribute","body","writeAppletTag","startApplet","params","addCodeAttribute","attribute","ar","attr","arHas","codebaseParam","parameter","write","isWebStartInstalled","retval","compareVersions","launchWebStartApplication","jnlpDocbase","documentURI","URL","launchTag","encodeURIComponent","left","margin","className","createWebStartLaunchButtonEx","createWebStartLaunchButton","launch","launchEx","plugin","isAutoUpdateEnabled","setAutoUpdateEnabled","setInstallerType","_type","setAdditionalPackages","_packageList","setEarlyAccess","enabled","isPlugin2","allowPlugin","refresh","ret","getElementById","min","resultTemp","parseInt","patternArrayTemp","ActiveXObject","objectName","exception","oClientCaps","v","getComponentVersion","search","done","_name","_result","installed","required","b","Number","enableAlerts","poll","postInstallJREList","writePluginTag","writeEmbedTag","written","enabledPlugin","loc","userLanguage","swfobject","objPlayerVersion","getFlashPlayerVersion","minor","release","storedFbContent","storedFbContentId","storedCallbackFn","storedCallbackObj","dynamicStylesheet","dynamicStylesheetMedia","UNDEF","OBJECT","SHOCKWAVE_FLASH","FLASH_MIME_TYPE","EXPRESS_INSTALL_ID","ON_READY_STATE_CHANGE","win","doc","nav","domLoadFnArr","regObjArr","objIdArr","listenersArr","isDomLoaded","isExpressInstallActive","autoHideShow","encodeURIEnabled","w3cdom","u","windows","mac","webkit","parseFloat","ie","appName","playerVersion","toInt","GetVariable","w3","pv","wk","callDomLoadFunctions","span","display","parentNode","dl","addDomLoadEvent","fn","matchVersions","rl","cb","callbackFn","cbObj","success","obj","hasPlayerVersion","swfVersion","expressInstall","canExpressInstall","att","data","getAttribute","styleclass","align","par","pl","showExpressInstall","displayFbContent","setVisibility","ref","getObjectById","SetVariable","objectIdStr","nodeName","replaceElemIdStr","getId","abstractFbContent","pt","fv","title","flashvars","newObj","insertBefore","removeSWF","createSWF","el","replaceChild","ac","nestedObj","childNodes","cl","nodeType","cloneNode","attObj","parObj","paramStr","div","attrLower","param","createObjParam","firstChild","pName","pValue","removeSWFInIE","setTimeout","isElement","thing","rv","createCSS","sel","decl","media","newStyle","styleSheets","addRule","createTextNode","isVisible","visibility","urlEncodeIfNecessary","addEventListener","attachEvent","detach","detachEvent","top","checkDomLoadedIE","documentElement","doScroll","checkDomLoadedWK","counter","checkGetVariable","testPlayerVersion","ll","il","registerObject","swfVersionStr","xiSwfUrlStr","regObj","embedSWF","swfUrlStr","widthStr","heightStr","flashvarsObj","callbackObj","switchOffAutoHideShow","enableUriEncoding","bool","hasFlashPlayerVersion","objElemIdStr","selStr","declStr","mediaStr","newStyleBoolean","addLoadEvent","target","eventType","addListener","onload","fnOld","getQueryParamValue","hash","pairs","expressInstallCallback","inherits","ClientJSFull","apply"],"mappings":"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","file":"client.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 12);\n","//\n// ClientJS. An easy to use, simple, and flexible client information library written in JavaScript.\n//\n// Version: 0.1.11\n//\n// Original Author: Jack Spirou\n// Original Data: 5 Nov 2013\n\n// ClientJS. Return a JavaScript object containing information collected about a client.\n// Return browser/device fingerprint as a 32 bit integer hash ID.\n\n// BUILT UPON:\n// - https://github.com/Valve/fingerprintjs\n// - http://darkwavetech.com/device_fingerprint.html\n// - detectmobilebrowsers.com JavaScript Mobile Detection Script\n\n// Dependencies Include:\n// - ua-parser.js\n// - fontdetect.js\n// - swfobject.js\n// - murmurhash3.js\n\n// BROWSER FINGERPRINT DATA POINTS\n// - userAgent\n// - screenPrint\n// - colordepth\n// - currentResolution\n// - availableResolution\n// - deviceXDPI\n// - deviceYDPI\n// - plugin list\n// - font list\n// - localStorage\n// - sessionStorage\n// - timezone\n// - language\n// - systemLanguage\n// - cookies\n// - canvasPrint\n\n// METHOD Naming CONVENTION\n// is[MethodName] = return boolean\n// get[MethodName] = return int|string|object\n\n// METHODS\n//\n// var client = new ClientJS();\n//\n// client.getSoftwareVersion();\n// client.getBrowserData();\n// client.getFingerprint();\n// client.getCustomFingerprint(...);\n//\n// client.getUserAgent();\n// client.getUserAgentLowerCase();\n//\n// client.getBrowser();\n// client.getBrowserVersion();\n// client.getBrowserMajorVersion();\n// client.isIE();\n// client.isChrome();\n// client.isFirefox();\n// client.isSafari();\n// client.isMobileSafari();\n// client.isOpera();\n//\n// client.getEngine();\n// client.getEngineVersion();\n//\n// client.getOS();\n// client.getOSVersion();\n// client.isWindows();\n// client.isMac();\n// client.isLinux();\n// client.isUbuntu();\n// client.isSolaris();\n//\n// client.getDevice();\n// client.getDeviceType();\n// client.getDeviceVendor();\n//\n// client.getCPU();\n//\n// client.isMobile();\n// client.isMobileMajor();\n// client.isMobileAndroid();\n// client.isMobileOpera();\n// client.isMobileWindows();\n// client.isMobileBlackBerry();\n//\n// client.isMobileIOS();\n// client.isIphone();\n// client.isIpad();\n// client.isIpod();\n//\n// client.getScreenPrint();\n// client.getColorDepth();\n// client.getCurrentResolution();\n// client.getAvailableResolution();\n// client.getDeviceXDPI();\n// client.getDeviceYDPI();\n//\n// client.getPlugins();\n// client.isJava();\n// client.getJavaVersion();\n// client.isFlash();\n// client.getFlashVersion();\n// client.isSilverlight();\n// client.getSilverlightVersion();\n//\n// client.getMimeTypes();\n// client.isMimeTypes();\n//\n// client.isFont();\n// client.getFonts();\n//\n// client.isLocalStorage();\n// client.isSessionStorage();\n// client.isCookie();\n//\n// client.getTimeZone();\n//\n// client.getLanguage();\n// client.getSystemLanguage();\n//\n// client.isCanvas();\n// client.getCanvasPrint();\n\n'use strict';\n\nvar globalThis = require('globalthis/polyfill')();\nvar murmurhash3_32_gc = require('murmurhash-js/murmurhash3_gc');\nvar UAParser = require('ua-parser-js');\nvar Detector = require('./vendor/fontdetect');\n\nvar browserData; // Global user agent browser object.\nvar fontDetective; // Global font detective object.\n\n// ClientJS constructor which sets the browserData object and returs the client object.\nvar ClientJS = function() {\n var parser = new UAParser;\n browserData = parser.getResult();\n fontDetective = new Detector();\n return this;\n};\n\n// ClientJS prototype which contains all methods.\nClientJS.prototype = {\n\n //\n // MAIN METHODS\n //\n\n // Get Software Version. Return a string containing this software version number.\n getSoftwareVersion: function() {\n var version = \"0.1.11\";\n return version;\n },\n\n // Get Browser Data. Return an object containing browser user agent.\n getBrowserData: function() {\n return browserData;\n },\n\n // Get Fingerprint. Return a 32-bit integer representing the browsers fingerprint.\n getFingerprint: function() {\n var bar = '|';\n\n var userAgent = browserData.ua;\n var screenPrint = this.getScreenPrint();\n var pluginList = this.getPlugins();\n var fontList = this.getFonts();\n var localStorage = this.isLocalStorage();\n var sessionStorage = this.isSessionStorage();\n var timeZone = this.getTimeZone();\n var language = this.getLanguage();\n var systemLanguage = this.getSystemLanguage();\n var cookies = this.isCookie();\n var canvasPrint = this.getCanvasPrint();\n\n var key = userAgent + bar + screenPrint + bar + pluginList + bar + fontList + bar + localStorage + bar + sessionStorage + bar + timeZone + bar + language + bar + systemLanguage + bar + cookies + bar + canvasPrint;\n var seed = 256;\n\n return murmurhash3_32_gc(key, seed);\n },\n\n // Get Custom Fingerprint. Take a string of datapoints and eturn a 32-bit integer representing the browsers fingerprint.\n getCustomFingerprint: function() {\n var bar = '|';\n var key = \"\";\n for (var i = 0; i < arguments.length; i++) {\n key += arguments[i] + bar;\n }\n return murmurhash3_32_gc(key, 256);\n },\n\n //\n // USER AGENT METHODS\n //\n\n // Get User Agent. Return a string containing unparsed user agent.\n getUserAgent: function() {\n return browserData.ua;\n },\n\n // Get User Agent Lower Case. Return a lowercase string containing the user agent.\n getUserAgentLowerCase: function() {\n return browserData.ua.toLowerCase();\n },\n\n //\n // BROWSER METHODS\n //\n\n // Get Browser. Return a string containing the browser name.\n getBrowser: function() {\n return browserData.browser.name;\n },\n\n // Get Browser Version. Return a string containing the browser version.\n getBrowserVersion: function() {\n return browserData.browser.version;\n },\n\n // Get Browser Major Version. Return a string containing the major browser version.\n getBrowserMajorVersion: function() {\n return browserData.browser.major;\n },\n\n // Is IE. Check if the browser is IE.\n isIE: function() {\n return (/IE/i.test(browserData.browser.name));\n },\n\n // Is Chrome. Check if the browser is Chrome.\n isChrome: function() {\n return (/Chrome/i.test(browserData.browser.name));\n },\n\n // Is Firefox. Check if the browser is Firefox.\n isFirefox: function() {\n return (/Firefox/i.test(browserData.browser.name));\n },\n\n // Is Safari. Check if the browser is Safari.\n isSafari: function() {\n return (/Safari/i.test(browserData.browser.name));\n },\n\n // Is Mobile Safari. Check if the browser is Safari.\n isMobileSafari: function() {\n return (/Mobile\\sSafari/i.test(browserData.browser.name));\n },\n\n // Is Opera. Check if the browser is Opera.\n isOpera: function() {\n return (/Opera/i.test(browserData.browser.name));\n },\n\n //\n // ENGINE METHODS\n //\n\n // Get Engine. Return a string containing the browser engine.\n getEngine: function() {\n return browserData.engine.name;\n },\n\n // Get Engine Version. Return a string containing the browser engine version.\n getEngineVersion: function() {\n return browserData.engine.version;\n },\n\n //\n // OS METHODS\n //\n\n // Get OS. Return a string containing the OS.\n getOS: function() {\n return browserData.os.name;\n },\n\n // Get OS Version. Return a string containing the OS Version.\n getOSVersion: function() {\n return browserData.os.version;\n },\n\n // Is Windows. Check if the OS is Windows.\n isWindows: function() {\n return (/Windows/i.test(browserData.os.name));\n },\n\n // Is Mac. Check if the OS is Mac.\n isMac: function() {\n return (/Mac/i.test(browserData.os.name));\n },\n\n // Is Linux. Check if the OS is Linux.\n isLinux: function() {\n return (/Linux/i.test(browserData.os.name));\n },\n\n // Is Ubuntu. Check if the OS is Ubuntu.\n isUbuntu: function() {\n return (/Ubuntu/i.test(browserData.os.name));\n },\n\n // Is Solaris. Check if the OS is Solaris.\n isSolaris: function() {\n return (/Solaris/i.test(browserData.os.name));\n },\n\n //\n // DEVICE METHODS\n //\n\n // Get Device. Return a string containing the device.\n getDevice: function() {\n return browserData.device.model;\n },\n\n // Get Device Type. Return a string containing the device type.\n getDeviceType: function() {\n return browserData.device.type;\n },\n\n // Get Device Vendor. Return a string containing the device vendor.\n getDeviceVendor: function() {\n return browserData.device.vendor;\n },\n\n //\n // CPU METHODS\n //\n\n // Get CPU. Return a string containing the CPU architecture.\n getCPU: function() {\n return browserData.cpu.architecture;\n },\n\n //\n // MOBILE METHODS\n //\n\n // Is Mobile. Check if the browser is on a mobile device.\n isMobile: function() {\n // detectmobilebrowsers.com JavaScript Mobile Detection Script\n var dataString = browserData.ua || navigator.vendor || window.opera;\n // eslint-disable-next-line no-useless-escape\n 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(dataString) || /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(dataString.substr(0, 4)));\n },\n\n // Is Mobile Major. Check if the browser is on a major mobile device.\n isMobileMajor: function() {\n return (this.isMobileAndroid() || this.isMobileBlackBerry() || this.isMobileIOS() || this.isMobileOpera() || this.isMobileWindows());\n },\n\n // Is Mobile. Check if the browser is on an android mobile device.\n isMobileAndroid: function() {\n if (browserData.ua.match(/Android/i)) {\n return true;\n }\n return false;\n },\n\n // Is Mobile Opera. Check if the browser is on an opera mobile device.\n isMobileOpera: function() {\n if (browserData.ua.match(/Opera Mini/i)) {\n return true;\n }\n return false;\n },\n\n // Is Mobile Windows. Check if the browser is on a windows mobile device.\n isMobileWindows: function() {\n if (browserData.ua.match(/IEMobile/i)) {\n return true;\n }\n return false;\n },\n\n // Is Mobile BlackBerry. Check if the browser is on a blackberry mobile device.\n isMobileBlackBerry: function() {\n if (browserData.ua.match(/BlackBerry/i)) {\n return true;\n }\n return false;\n },\n\n //\n // MOBILE APPLE METHODS\n //\n\n // Is Mobile iOS. Check if the browser is on an Apple iOS device.\n isMobileIOS: function() {\n if (browserData.ua.match(/iPhone|iPad|iPod/i)) {\n return true;\n }\n return false;\n },\n\n // Is Iphone. Check if the browser is on an Apple iPhone.\n isIphone: function() {\n if (browserData.ua.match(/iPhone/i)) {\n return true;\n }\n return false;\n },\n\n // Is Ipad. Check if the browser is on an Apple iPad.\n isIpad: function() {\n if (browserData.ua.match(/iPad/i)) {\n return true;\n }\n return false;\n },\n\n // Is Ipod. Check if the browser is on an Apple iPod.\n isIpod: function() {\n if (browserData.ua.match(/iPod/i)) {\n return true;\n }\n return false;\n },\n\n //\n // SCREEN METHODS\n //\n\n // Get Screen Print. Return a string containing screen information.\n getScreenPrint: function() {\n return \"Current Resolution: \" + this.getCurrentResolution() + \", Available Resolution: \" + this.getAvailableResolution() + \", Color Depth: \" + this.getColorDepth() + \", Device XDPI: \" + this.getDeviceXDPI() + \", Device YDPI: \" + this.getDeviceYDPI();\n },\n\n // Get Color Depth. Return a string containing the color depth.\n getColorDepth: function() {\n return screen.colorDepth;\n },\n\n // Get Current Resolution. Return a string containing the current resolution.\n getCurrentResolution: function() {\n return screen.width + \"x\" + screen.height;\n },\n\n // Get Available Resolution. Return a string containing the available resolution.\n getAvailableResolution: function() {\n return screen.availWidth + \"x\" + screen.availHeight;\n },\n\n // Get Device XPDI. Return a string containing the device XPDI.\n getDeviceXDPI: function() {\n return screen.deviceXDPI;\n },\n\n // Get Device YDPI. Return a string containing the device YDPI.\n getDeviceYDPI: function() {\n return screen.deviceYDPI;\n },\n\n //\n // PLUGIN METHODS\n //\n\n // Get Plugins. Return a string containing a list of installed plugins.\n getPlugins: function() {\n var pluginsList = \"\";\n\n for (var i = 0; i < navigator.plugins.length; i++) {\n if (i == navigator.plugins.length - 1) {\n pluginsList += navigator.plugins[i].name;\n } else {\n pluginsList += navigator.plugins[i].name + \", \";\n }\n }\n return pluginsList;\n },\n\n // Is Java. Check if Java is installed.\n isJava: function() {\n return navigator.javaEnabled();\n },\n\n // Get Java Version. Return a string containing the Java Version.\n getJavaVersion: function() {\n throw new Error('Please use client.java.js or client.js if you need this functionality!');\n },\n\n // Is Flash. Check if Flash is installed.\n isFlash: function() {\n var objPlugin = navigator.plugins[\"Shockwave Flash\"];\n if (objPlugin) {\n return true;\n }\n return false;\n },\n\n // Get Flash Version. Return a string containing the Flash Version.\n getFlashVersion: function() {\n throw new Error('Please use client.flash.js or client.js if you need this functionality!');\n },\n\n // Is Silverlight. Check if Silverlight is installed.\n isSilverlight: function() {\n var objPlugin = navigator.plugins[\"Silverlight Plug-In\"];\n if (objPlugin) {\n return true;\n }\n return false;\n },\n\n // Get Silverlight Version. Return a string containing the Silverlight Version.\n getSilverlightVersion: function() {\n if (this.isSilverlight()) {\n var objPlugin = navigator.plugins[\"Silverlight Plug-In\"];\n return objPlugin.description;\n }\n return \"\";\n },\n\n //\n // MIME TYPE METHODS\n //\n\n // Is Mime Types. Check if a mime type is installed.\n isMimeTypes: function() {\n if (navigator.mimeTypes && navigator.mimeTypes.length) {\n return true;\n }\n return false;\n },\n\n // Get Mime Types. Return a string containing a list of installed mime types.\n getMimeTypes: function() {\n var mimeTypeList = \"\";\n\n if(navigator.mimeTypes) {\n for (var i = 0; i < navigator.mimeTypes.length; i++) {\n if (i == navigator.mimeTypes.length - 1) {\n mimeTypeList += navigator.mimeTypes[i].description;\n } else {\n mimeTypeList += navigator.mimeTypes[i].description + \", \";\n }\n }\n }\n return mimeTypeList;\n },\n\n //\n // FONT METHODS\n //\n\n // Is Font. Check if a font is installed.\n isFont: function(font) {\n return fontDetective.detect(font);\n },\n\n // Get Fonts. Return a string containing a list of installed fonts.\n getFonts: function() {\n var fontArray = [\"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\"];\n var fontString = \"\";\n\n for (var i = 0; i < fontArray.length; i++) {\n if (fontDetective.detect(fontArray[i])) {\n if (i == fontArray.length - 1) {\n fontString += fontArray[i];\n } else {\n fontString += fontArray[i] + \", \";\n }\n }\n }\n\n return fontString;\n },\n\n //\n // STORAGE METHODS\n //\n\n // Is Local Storage. Check if local storage is enabled.\n isLocalStorage: function() {\n try {\n return !!globalThis.localStorage;\n } catch (e) {\n return true; // SecurityError when referencing it means it exists\n }\n },\n\n // Is Session Storage. Check if session storage is enabled.\n isSessionStorage: function() {\n try {\n return !!globalThis.sessionStorage;\n } catch (e) {\n return true; // SecurityError when referencing it means it exists\n }\n },\n\n // Is Cookie. Check if cookies are enabled.\n isCookie: function() {\n return navigator.cookieEnabled;\n },\n\n //\n // TIME METHODS\n //\n\n // Get Time Zone. Return a string containing the time zone.\n getTimeZone: function() {\n var rightNow, myNumber, formattedNumber, result;\n rightNow = new Date();\n myNumber = String(-(rightNow.getTimezoneOffset() / 60));\n if (myNumber < 0) {\n myNumber = myNumber * -1;\n formattedNumber = (\"0\" + myNumber).slice(-2);\n result = \"-\" + formattedNumber;\n } else {\n formattedNumber = (\"0\" + myNumber).slice(-2);\n result = \"+\" + formattedNumber;\n }\n return result;\n },\n\n //\n // LANGUAGE METHODS\n //\n\n // Get Language. Return a string containing the user language.\n getLanguage: function() {\n return navigator.language;\n },\n\n // Get System Language. Return a string containing the system language.\n getSystemLanguage: function() {\n return navigator.systemLanguage || window.navigator.language;\n },\n\n //\n // CANVAS METHODS\n //\n\n // Is Canvas. Check if the canvas element is enabled.\n isCanvas: function() {\n\n // create a canvas element\n var elem = document.createElement('canvas');\n\n // try/catch for older browsers that don't support the canvas element\n try {\n\n // check if context and context 2d exists\n return !!(elem.getContext && elem.getContext('2d'));\n\n } catch (e) {\n\n // catch if older browser\n return false;\n }\n },\n\n // Get Canvas Print. Return a string containing the canvas URI data.\n getCanvasPrint: function() {\n\n // create a canvas element\n var canvas = document.createElement('canvas');\n\n // define a context var that will be used for browsers with canvas support\n var ctx;\n\n // try/catch for older browsers that don't support the canvas element\n try {\n\n // attempt to give ctx a 2d canvas context value\n ctx = canvas.getContext('2d');\n\n } catch (e) {\n\n // return empty string if canvas element not supported\n return \"\";\n }\n\n // https://www.browserleaks.com/canvas#how-does-it-work\n // Text with lowercase/uppercase/punctuation symbols\n var txt = 'ClientJS,org 1.0';\n ctx.textBaseline = \"top\";\n // The most common type\n ctx.font = \"14px 'Arial'\";\n ctx.textBaseline = \"alphabetic\";\n ctx.fillStyle = \"#f60\";\n ctx.fillRect(125, 1, 62, 20);\n // Some tricks for color mixing to increase the difference in rendering\n ctx.fillStyle = \"#069\";\n ctx.fillText(txt, 2, 15);\n ctx.fillStyle = \"rgba(102, 204, 0, 0.7)\";\n ctx.fillText(txt, 4, 17);\n return canvas.toDataURL();\n }\n};\n\nexports.ClientJS = ClientJS;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (typeof global !== 'object' || !global || global.Math !== Math || global.Array !== Array) {\n\t\treturn implementation;\n\t}\n\treturn global;\n};\n","/* eslint no-negated-condition: 0, no-new-func: 0 */\n\n'use strict';\n\nif (typeof self !== 'undefined') {\n\tmodule.exports = self;\n} else if (typeof window !== 'undefined') {\n\tmodule.exports = window;\n} else {\n\tmodule.exports = Function('return this')();\n}\n","/**\n * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n * \n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n * \n * @param {string} key ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash \n */\n\nfunction murmurhash3_32_gc(key, seed) {\n\tvar remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;\n\t\n\tremainder = key.length & 3; // key.length % 4\n\tbytes = key.length - remainder;\n\th1 = seed;\n\tc1 = 0xcc9e2d51;\n\tc2 = 0x1b873593;\n\ti = 0;\n\t\n\twhile (i < bytes) {\n\t \tk1 = \n\t \t ((key.charCodeAt(i) & 0xff)) |\n\t \t ((key.charCodeAt(++i) & 0xff) << 8) |\n\t \t ((key.charCodeAt(++i) & 0xff) << 16) |\n\t \t ((key.charCodeAt(++i) & 0xff) << 24);\n\t\t++i;\n\t\t\n\t\tk1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n\t\tk1 = (k1 << 15) | (k1 >>> 17);\n\t\tk1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n\t\th1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n\t\th1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n\t\th1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n\t}\n\t\n\tk1 = 0;\n\t\n\tswitch (remainder) {\n\t\tcase 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\n\t\tcase 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\n\t\tcase 1: k1 ^= (key.charCodeAt(i) & 0xff);\n\t\t\n\t\tk1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n\t\tk1 = (k1 << 15) | (k1 >>> 17);\n\t\tk1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n\t\th1 ^= k1;\n\t}\n\t\n\th1 ^= key.length;\n\n\th1 ^= h1 >>> 16;\n\th1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n\th1 ^= h1 >>> 13;\n\th1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n\th1 ^= h1 >>> 16;\n\n\treturn h1 >>> 0;\n}\n\nif(typeof module !== \"undefined\") {\n module.exports = murmurhash3_32_gc\n}","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v0.7.28\n Copyright © 2012-2021 Faisal Salman \n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.30',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 255;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i in arr) {\n enums[arr[i].toUpperCase()] = arr[i];\n }\n return enums;\n },\n has = function (str1, str2) {\n return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n },\n lowerize = function (str) {\n return str.toLowerCase();\n },\n majorize = function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split('.')[0] : undefined;\n },\n trim = function (str, len) {\n if (typeof(str) === STR_TYPE) {\n str = str.replace(/^\\s\\s*/, EMPTY).replace(/\\s\\s*$/, EMPTY);\n return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n }\n };\n\n ///////////////\n // Map helper\n //////////////\n\n var rgxMapper = function (ua, arrays) {\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /\\bqbcore\\/([\\w\\.]+)/i // WeChat Desktop for Windows Built-in Browser\n ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /yabrowser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 '+BROWSER]], [\n /(oculus|samsung|sailfish)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [ // Oculus/Samsung/Sailfish Browser\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n ], [NAME, VERSION], [\n /(metasr)[\\/ ]?([\\w\\.]+)/i, // SouGouBrowser\n /(lbbrowser)/i // LieBao Browser\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w\\.]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i // Links\n ], [NAME, VERSION]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n // Ordered by popularity\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[pt]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /\\((ip(?:hone|od)[\\w ]*);/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}-[atu]?[ln][01259x][012359][an]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+)(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ ([c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi)( bui|\\))/i, // Kindle Fire without Silk\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w ]*; *(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows) nt 6\\.2; (arm)/i, // Windows RT\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i, // Windows Phone\n /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86)/i // Android-x86\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+ ([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _ua = ua || ((typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser.major = majorize(_browser.version);\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","/* eslint-disable strict */\n\n/**\n * JavaScript code to detect available availability of a\n * particular font in a browser using JavaScript and CSS.\n *\n * Author : Lalit Patel\n * Website: http://www.lalit.org/lab/javascript-css-font-detect/\n * License: Apache Software License 2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n * Version: 0.15 (21 Sep 2009)\n * Changed comparision font to default from sans-default-default,\n * as in FF3.0 font of child element didn't fallback\n * to parent element if the font is missing.\n * Version: 0.2 (04 Mar 2012)\n * Comparing font against all the 3 generic font families ie,\n * 'monospace', 'sans-serif' and 'sans'. If it doesn't match all 3\n * then that font is 100% not available in the system\n * Version: 0.3 (24 Mar 2012)\n * Replaced sans with serif in the list of baseFonts\n */\n\n/**\n * Usage: d = new Detector();\n * d.detect('font name');\n */\nmodule.exports = function Detector() {\n // a font will be compared against all the three default fonts.\n // and if it doesn't match all 3 then that font is not available.\n var baseFonts = ['monospace', 'sans-serif', 'serif'];\n\n //we use m or w because these two characters take up the maximum width.\n // And we use a LLi so that the same matching fonts can get separated\n var testString = \"mmmmmmmmmmlli\";\n\n //we test using 72px font size, we may use any size. I guess larger the better.\n var testSize = '72px';\n\n var h = document.getElementsByTagName(\"body\")[0];\n\n // create a SPAN in the document to get the width of the text we use to test\n var s = document.createElement(\"span\");\n s.style.fontSize = testSize;\n s.innerHTML = testString;\n var defaultWidth = {};\n var defaultHeight = {};\n for (var index in baseFonts) {\n //get the default width for the three base fonts\n s.style.fontFamily = baseFonts[index];\n h.appendChild(s);\n defaultWidth[baseFonts[index]] = s.offsetWidth; //width for the default font\n defaultHeight[baseFonts[index]] = s.offsetHeight; //height for the defualt font\n h.removeChild(s);\n }\n\n function detect(font) {\n var detected = false;\n for (var index in baseFonts) {\n s.style.fontFamily = font + ',' + baseFonts[index]; // name of the font along with the base font for fallback.\n h.appendChild(s);\n var matched = (s.offsetWidth != defaultWidth[baseFonts[index]] || s.offsetHeight != defaultHeight[baseFonts[index]]);\n h.removeChild(s);\n detected = detected || matched;\n }\n return detected;\n }\n\n this.detect = detect;\n};\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar deployJava = require('../vendor/deployJava');\n\n// Get Java Version. Return a string containing the Java Version.\nmodule.exports = function getJavaVersion() {\n return deployJava.getJREs().toString();\n};\n","/* globals ActiveXObject:readonly, oClientCaps:readonly */\n/* eslint-disable strict */\n\n/*\n * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.\n * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * - Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of Oracle nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n * IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * deployJava.js\n *\n * This file is part of the Deployment Toolkit. It provides functions for web\n * pages to detect the presence of a JRE and easily run\n * applets or Web Start programs. More Information on usage of the\n * Deployment Toolkit can be found in the Deployment Guide at:\n * https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/\n *\n * The \"live\" copy of this file may be found at :\n * http://java.com/js/deployJava.js.\n * For web pages provisioned using https, you may want to access the copy at:\n * https://java.com/js/deployJava.js.\n *\n * You are encouraged to link directly to the live copies.\n * The above files are stripped of comments and whitespace for performance,\n * You can access this file w/o the whitespace and comments removed at:\n * https://java.com/js/deployJava.txt.\n *\n */\n\n/* The following regular expression is used as the base for the parsing\n * of the version string. The version string could be either in the old format\n * (1.7.0_65, 1.7.0, 1.7) or in the new format (9.1.2.3, 9.1.2, 9.1, 9)\n * and must include only VNUM parts of the version string (the full\n * version string format is $VNUM(-$PRE)?(\\+$BUILD)?(-$OPT)?, see JEP 223 for more details)\n *\n * ^ - Beginning of the string\n * ( - Capturing group 1\n * \\\\d+ - Match any digit one or more times\n * ) - Match once\n * (?: - Non capturing group\n * \\\\. - Match '.' character\n * ( - Capturing group 2\n * \\\\d+ - Match any digit one or more times\n * ) - Match once\n * (?: - Non capturing group\n * \\\\. - Match '.' character\n * ( - Capturing group 3\n * \\\\d+ - Match any digit one or more times\n * ) - Match once\n * (?: - Non capturing group\n *\t [_\\\\.] - Math '_' (old version format) or '.' (new version format)\n * ( - Capturing group 4\n * \\\\d+ - Match any digit one or more times\n * ) - Match once\n * )? - Match zero or one time\n * )? - Match zero or one time\n * )? - Match zero or one time\n *\n *\n *\n */\n\n'use strict';\n\nvar version_regex_base = '^(\\\\d+)(?:\\\\.(\\\\d+)(?:\\\\.(\\\\d+)(?:[_\\\\.](\\\\d+))?)?)?';\n\n/*\n * version_regex_base - see version_regex_base comment above\n * $ - End of the string\n *\n */\n\nvar version_regex_strict = version_regex_base + '$';\n\n/*\n * version_regex_base - see version_regex_base comment above\n * ( - Capturing group 5\n * \\\\* - Match '*'\n * | - OR\n * \\\\+ - Match '+'\n * )? - Match zero or one time\n * $ - End of string\n *\n */\nvar version_regex_with_family_modifier = version_regex_base + '(\\\\*|\\\\+)?$';\n\n/** HTML attribute filter implementation */\nvar hattrs = {\n core: ['id', 'class', 'title', 'style'],\n applet: [\n 'codebase',\n 'code',\n 'name',\n 'archive',\n 'object',\n 'width',\n 'height',\n 'alt',\n 'align',\n 'hspace',\n 'vspace',\n ],\n};\n\nvar applet_valid_attrs = hattrs.applet.concat(hattrs.core);\n\n// startsWith() is not supported by IE\nif (typeof String.prototype.startsWith !== 'function') {\n String.prototype.startsWith = function (searchString, position) {\n position = position || 0;\n return this.indexOf(searchString, position) === position;\n };\n}\n\n// generic log function, use console.log unless it isn't available\n// then revert to alert()\nfunction log(message) {\n if (!deployJava.debug) {\n return;\n }\n\n if (console.log) {\n console.log(message);\n } else {\n alert(message);\n }\n}\n\nfunction showMessageBox() {\n var message =\n 'Java Plug-in is not supported by this browser. More info';\n var mbStyle =\n 'background-color: #ffffce;text-align: left;border: solid 1px #f0c000; padding: 1.65em 1.65em .75em 0.5em; font-family: Helvetica, Arial, sans-serif; font-size: 75%; bottom:0; left:0; right:0; position:fixed; margin:auto; opacity:0.9; width:400px;';\n var messageStyle = 'border: .85px; margin:-2.2em 0 0.55em 2.5em;';\n var closeButtonStyle =\n 'margin-left:10px;font-weight:bold;float:right;font-size:22px;line-height:20px;cursor:pointer;color:red;';\n var messageBox =\n '×

' +\n message +\n '

';\n\n var divTag = document.createElement('div');\n divTag.id = 'messagebox';\n divTag.setAttribute('style', mbStyle);\n divTag.innerHTML = messageBox;\n document.body.appendChild(divTag);\n}\n\n//checks where given version string matches query\n//\n//NB: assume format is correct. Can add format check later if needed\n// from dtjava.js\nfunction versionCheckEx(query, version) {\n if (query == null || query.length == 0) return true;\n\n var c = query.charAt(query.length - 1);\n\n //if it is not explicit pattern but does not have update version then need to append *\n if (c != '+' && c != '*' && query.indexOf('_') != -1 && c != '_') {\n query = query + '*';\n c = '*';\n }\n\n query = query.substring(0, query.length - 1);\n //if query ends with \".\", \"_\" then we want to strip it to allow match of \"1.6.*\" to shorter form such as \"1.6\"\n //TODO: add support for match of \"1.7.0*\" to \"1.7\"?\n if (query.length > 0) {\n var z = query.charAt(query.length - 1);\n if (z == '.' || z == '_') {\n query = query.substring(0, query.length - 1);\n }\n }\n if (c == '*') {\n //it is match if version starts from it\n return version.indexOf(query) == 0;\n } else if (c == '+') {\n //match if query string is lexicographically smaller\n return query <= version;\n }\n return false;\n}\n\nfunction doVersionCheck(versionPattern, noplugin) {\n var index = 0;\n\n var matchData = versionPattern.match(version_regex_with_family_modifier);\n if (matchData != null) {\n if (noplugin) {\n return true;\n }\n // default is exact version match\n // examples:\n // local machine has 1.7.0_04 only installed\n // exact match request is \"1.7.0_05\": return false\n // family match request is \"1.7.0*\": return true\n // minimum match request is \"1.6+\": return true\n var familyMatch = false;\n var minMatch = false;\n\n var patternArray = new Array();\n\n for (var i = 1; i < matchData.length; ++i) {\n // browser dependency here.\n // Fx sets 'undefined', IE sets '' string for unmatched groups\n if (typeof matchData[i] == 'string' && matchData[i] != '') {\n patternArray[index] = matchData[i];\n index++;\n }\n }\n\n if (patternArray[patternArray.length - 1] == '+') {\n // + specified in request - doing a minimum match\n minMatch = true;\n familyMatch = false;\n patternArray.length--;\n } else if (patternArray[patternArray.length - 1] == '*') {\n // * specified in request - doing a family match\n minMatch = false;\n familyMatch = true;\n patternArray.length--;\n } else if (patternArray.length < 4) {\n // versionPattern does not include all four version components\n // and does not end with a star or plus, it will be treated as\n // if it ended with a star. (family match)\n minMatch = false;\n familyMatch = true;\n }\n\n var list = deployJava.getJREs();\n for (var j = 0; j < list.length; ++j) {\n if (deployJava.compareVersionToPattern(list[j], patternArray, familyMatch, minMatch)) {\n return true;\n }\n }\n\n return false;\n } else {\n var msg = 'Invalid versionPattern passed to versionCheck: ' + versionPattern;\n log('[versionCheck()] ' + msg);\n alert(msg);\n return false;\n }\n}\n\nfunction isWebStartFound() {\n return doVersionCheck('1.7.0+', false);\n}\n\nfunction isAbsoluteUrl(url) {\n var protocols = ['http://', 'https://', 'file://'];\n for (var i = 0; i < protocols.length; i++) {\n if (url.toLowerCase().startsWith(protocols[i])) {\n return true;\n }\n }\n return false;\n}\n\nfunction getAbsoluteUrl(jnlp) {\n var absoluteUrl;\n if (isAbsoluteUrl(jnlp)) {\n absoluteUrl = jnlp;\n } else {\n var location = window.location.href;\n var pos = location.lastIndexOf('/');\n var docbase = pos > -1 ? location.substring(0, pos + 1) : location + '/';\n absoluteUrl = docbase + jnlp;\n }\n return absoluteUrl;\n}\n\nfunction launchWithJnlpProtocol(jnlp) {\n document.location = 'jnlp:' + getAbsoluteUrl(jnlp);\n}\n\nfunction isNoPluginWebBrowser() {\n var browser = deployJava.getBrowser();\n if (\n browser == 'Edge' ||\n deployJava.browserName2 == 'Chrome' ||\n (deployJava.browserName2 == 'FirefoxNoPlugin' && !doVersionCheck('1.8*', false)) ||\n deployJava.browserName2 == 'NoActiveX'\n ) {\n return true;\n }\n return false;\n}\n\nfunction getWebStartLaunchIconURL() {\n var imageUrl = '//java.com/js/webstart.png';\n try {\n // for http/https; use protocol less url; use http for all other protocol\n return document.location.protocol.indexOf('http') != -1 ? imageUrl : 'https:' + imageUrl;\n } catch (err) {\n return 'https:' + imageUrl;\n }\n}\n\n// GetJava page\nfunction constructGetJavaURL(query) {\n var getJavaURL = 'https://java.com/dt-redirect';\n\n if (query == null || query.length == 0) return getJavaURL;\n if (query.charAt(0) == '&') {\n query = query.substring(1, query.length);\n }\n return getJavaURL + '?' + query;\n}\n\nfunction arHas(ar, attr) {\n var len = ar.length;\n for (var i = 0; i < len; i++) {\n if (ar[i] === attr) return true;\n }\n return false;\n}\n\nfunction isValidAppletAttr(attr) {\n return arHas(applet_valid_attrs, attr.toLowerCase());\n}\n\n/**\n * returns true if we can enable DT plugin auto-install without chance of\n * deadlock on cert mismatch dialog\n *\n * requestedJREVersion param is optional - if null, it will be\n * treated as installing any JRE version\n *\n * DT plugin for 6uX only knows about JRE installer signed by SUN cert.\n * If it encounter Oracle signed JRE installer, it will have chance of\n * deadlock when running with IE. This function is to guard against this.\n */\nfunction enableWithoutCertMisMatchWorkaround(requestedJREVersion) {\n // Non-IE browser are okay\n if ('MSIE' != deployJava.browserName) return true;\n\n // if DT plugin is 10.0.0 or above, return true\n // This is because they are aware of both SUN and Oracle signature and\n // will not show cert mismatch dialog that might cause deadlock\n if (\n deployJava.compareVersionToPattern(\n deployJava.getPlugin().version,\n ['10', '0', '0'],\n false,\n true\n )\n ) {\n return true;\n }\n\n // If we got there, DT plugin is 6uX\n\n if (requestedJREVersion == null) {\n // if requestedJREVersion is not defined - it means ANY.\n // can not guarantee it is safe to install ANY version because 6uX\n // DT does not know about Oracle certificates and may deadlock\n return false;\n }\n\n // 6u32 or earlier JRE installer used Sun certificate\n // 6u33+ uses Oracle's certificate\n // DT in JRE6 does not know about Oracle certificate => can only\n // install 6u32 or earlier without risk of deadlock\n return !versionCheckEx('1.6.0_33+', requestedJREVersion);\n}\n\n/* HTML attribute filters */\n\nvar deployJava = {\n debug: null,\n\n /* version of deployJava.js */\n version: '20120801',\n\n firefoxJavaVersion: null,\n useStaticMimeType: false,\n\n myInterval: null,\n preInstallJREList: null,\n brand: null,\n locale: null,\n installType: null,\n\n EAInstallEnabled: false,\n EarlyAccessURL: null,\n\n // mime-type of the DeployToolkit plugin object\n oldMimeType: 'application/npruntime-scriptable-plugin;DeploymentToolkit',\n mimeType: 'application/java-deployment-toolkit',\n\n /* location of the Java Web Start launch button graphic is right next to\n * deployJava.js at:\n * https://java.com/js/webstart.png\n *\n * Use protocol less url here for http/https support\n */\n launchButtonPNG: getWebStartLaunchIconURL(),\n\n browserName: null,\n browserName2: null,\n\n /**\n * Returns an array of currently-installed JRE version strings.\n * Version strings are of the form #.#[.#[_#]], with the function returning\n * as much version information as it can determine, from just family\n * versions (\"1.4.2\", \"1.5\") through the full version (\"1.5.0_06\").\n *\n * Detection is done on a best-effort basis. Under some circumstances\n * only the highest installed JRE version will be detected, and\n * JREs older than 1.4.2 will not always be detected.\n */\n getJREs: function () {\n var list = new Array();\n if (this.isPluginInstalled()) {\n var plugin = this.getPlugin();\n var VMs = plugin.jvms;\n for (var i = 0; i < VMs.getLength(); i++) {\n list[i] = VMs.get(i).version;\n }\n } else {\n var browser = this.getBrowser();\n\n if (browser == 'MSIE') {\n if (this.testUsingActiveX('9')) {\n list[0] = '9';\n } else if (this.testUsingActiveX('1.8.0')) {\n list[0] = '1.8.0';\n } else if (this.testUsingActiveX('1.7.0')) {\n list[0] = '1.7.0';\n } else if (this.testUsingActiveX('1.6.0')) {\n list[0] = '1.6.0';\n } else if (this.testUsingActiveX('1.5.0')) {\n list[0] = '1.5.0';\n } else if (this.testUsingActiveX('1.4.2')) {\n list[0] = '1.4.2';\n } else if (this.testForMSVM()) {\n list[0] = '1.1';\n }\n } else if (browser == 'Netscape Family') {\n this.getJPIVersionUsingMimeType();\n if (this.firefoxJavaVersion != null) {\n list[0] = this.firefoxJavaVersion;\n } else if (this.testUsingMimeTypes('9')) {\n list[0] = '9';\n } else if (this.testUsingMimeTypes('1.8')) {\n list[0] = '1.8.0';\n } else if (this.testUsingMimeTypes('1.7')) {\n list[0] = '1.7.0';\n } else if (this.testUsingMimeTypes('1.6')) {\n list[0] = '1.6.0';\n } else if (this.testUsingMimeTypes('1.5')) {\n list[0] = '1.5.0';\n } else if (this.testUsingMimeTypes('1.4.2')) {\n list[0] = '1.4.2';\n } else if (this.browserName2 == 'Safari') {\n if (this.testUsingPluginsArray('9')) {\n list[0] = '9';\n } else if (this.testUsingPluginsArray('1.8')) {\n list[0] = '1.8.0';\n } else if (this.testUsingPluginsArray('1.7')) {\n list[0] = '1.7.0';\n } else if (this.testUsingPluginsArray('1.6')) {\n list[0] = '1.6.0';\n } else if (this.testUsingPluginsArray('1.5')) {\n list[0] = '1.5.0';\n } else if (this.testUsingPluginsArray('1.4.2')) {\n list[0] = '1.4.2';\n }\n }\n }\n }\n\n if (this.debug) {\n for (var j = 0; j < list.length; ++j) {\n log('[getJREs()] We claim to have detected Java SE ' + list[j]);\n }\n }\n\n return list;\n },\n\n /**\n * Calls this.installLatestJRE() if the requested version of JRE is not installed.\n *\n * The requestVersion string is of the form #[.#[.#[_#]]][+|*],\n * which includes strings such as \"1.4\", \"1.5.0*\", and \"1.6.0_02+\".\n * A star (*) means \"any version starting within this family\" and\n * a plus (+) means \"any version greater or equal to this\".\n * \"1.5.0*\" * matches 1.5.0_06 but not 1.6.0_01, whereas\n * \"1.5.0+\" matches both.\n *\n */\n installJRE: function (requestVersion) {\n log(\n 'The Deployment Toolkit installJRE() method no longer installs JRE. It just checks ' +\n 'if the requested version of JRE is installed and calls installLatestJRE() otherwise. ' +\n 'More Information on usage of the Deployment Toolkit can be found in the ' +\n 'Deployment Guide at https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/'\n );\n if (requestVersion == 'undefined' || requestVersion == null) {\n requestVersion = '1.1';\n }\n\n var matchData = requestVersion.match(version_regex_with_family_modifier);\n\n if (matchData == null) {\n log('Invalid requestVersion argument to installJRE(): ' + requestVersion);\n requestVersion = '1.6';\n }\n if (!this.versionCheck(requestVersion)) {\n return this.installLatestJRE();\n }\n\n return true;\n },\n\n /**\n * returns true if jre auto install for the requestedJREVersion is enabled\n * for the local system; false otherwise\n *\n * requestedJREVersion param is optional - if not specified, it will be\n * treated as installing any JRE version\n *\n * DT plugin for 6uX only knows about JRE installer signed by SUN cert.\n * If it encounter Oracle signed JRE installer, it will have chance of\n * deadlock when running with IE. This function is to guard against this.\n */\n isAutoInstallEnabled: function (requestedJREVersion) {\n // if no DT plugin, return false\n if (!this.isPluginInstalled()) return false;\n\n if (typeof requestedJREVersion == 'undefined') {\n requestedJREVersion = null;\n }\n\n return enableWithoutCertMisMatchWorkaround(requestedJREVersion);\n },\n\n /**\n * returns true if jre install callback is supported\n * callback support is added since dt plugin version 10.2.0 or above\n */\n isCallbackSupported: function () {\n return (\n this.isPluginInstalled() &&\n this.compareVersionToPattern(this.getPlugin().version, ['10', '2', '0'], false, true)\n );\n },\n\n /**\n * Redirects the browser window to the java.com JRE installation page,\n * and (if possible) redirects back to the current URL upon successful\n * installation, if the installed version of JRE is below the security\n * baseline or Deployment Toolkit plugin is not installed or disabled.\n *\n */\n installLatestJRE: function () {\n log(\n \"The Deployment Toolkit installLatestJRE() method no longer installs JRE. If user's version of \" +\n 'Java is below the security baseline it redirects user to java.com to get an updated JRE. ' +\n 'More Information on usage of the Deployment Toolkit can be found in the Deployment Guide at ' +\n '://docs.oracle.com/javase/8/docs/technotes/guides/deploy/'\n );\n\n if (!this.isPluginInstalled() || !this.getPlugin().installLatestJRE()) {\n var browser = this.getBrowser();\n var platform = navigator.platform.toLowerCase();\n if (browser == 'MSIE') {\n return this.IEInstall();\n } else if (browser == 'Netscape Family' && platform.indexOf('win32') != -1) {\n return this.FFInstall();\n } else {\n location.href = constructGetJavaURL(\n (this.locale != null ? '&locale=' + this.locale : '') +\n (this.brand != null ? '&brand=' + this.brand : '')\n );\n }\n // we have to return false although there may be an install\n // in progress now, when complete it may go to return page\n return false;\n }\n return true;\n },\n\n /**\n * Ensures that an appropriate JRE is installed and then runs an applet.\n * minimumVersion is of the form #[.#[.#[_#]]], and is the minimum\n * JRE version necessary to run this applet. minimumVersion is optional,\n * defaulting to the value \"1.1\" (which matches any JRE).\n * If an equal or greater JRE is detected, runApplet() will call\n * writeAppletTag(attributes, parameters) to output the applet tag,\n * otherwise it will call installJRE(minimumVersion + '+').\n *\n * After installJRE() is called, the script will attempt to detect that the\n * JRE installation has completed and begin running the applet, but there\n * are circumstances (such as when the JRE installation requires a browser\n * restart) when this cannot be fulfilled.\n *\n * As with writeAppletTag(), this function should only be called prior to\n * the web page being completely rendered. Note that version wildcards\n * (star (*) and plus (+)) are not supported, and including them in the\n * minimumVersion will result in an error message.\n */\n runApplet: function (attributes, parameters, minimumVersion) {\n if (minimumVersion == 'undefined' || minimumVersion == null) {\n minimumVersion = '1.1';\n }\n\n var matchData = minimumVersion.match(version_regex_strict);\n\n if (matchData != null) {\n var browser = this.getBrowser();\n if (browser != '?') {\n if (isNoPluginWebBrowser()) {\n var readyStateCheck = setInterval(function () {\n if (document.readyState == 'complete') {\n clearInterval(readyStateCheck);\n showMessageBox();\n }\n }, 15);\n log('[runApplet()] Java Plug-in is not supported by this browser');\n return;\n }\n\n if (this.versionCheck(minimumVersion + '+')) {\n this.writeAppletTag(attributes, parameters);\n } else if (this.installJRE(minimumVersion + '+')) {\n this.writeAppletTag(attributes, parameters);\n }\n } else {\n // for unknown or Safari - just try to show applet\n this.writeAppletTag(attributes, parameters);\n }\n } else {\n log('[runApplet()] Invalid minimumVersion argument to runApplet():' + minimumVersion);\n }\n },\n\n /**\n * Outputs an applet tag with the specified attributes and parameters, where\n * both attributes and parameters are associative arrays. Each key/value\n * pair in attributes becomes an attribute of the applet tag itself, while\n * key/value pairs in parameters become tags. No version checking\n * or other special behaviors are performed; the tag is simply written to\n * the page using document.writeln().\n *\n * As document.writeln() is generally only safe to use while the page is\n * being rendered, you should never call this function after the page\n * has been completed.\n */\n writeAppletTag: function (attributes, parameters) {\n var startApplet = '<' + 'applet ';\n var params = '';\n var endApplet = '<' + '/' + 'applet' + '>';\n var addCodeAttribute = true;\n\n if (null == parameters || typeof parameters != 'object') {\n parameters = new Object();\n }\n\n for (var attribute in attributes) {\n if (!isValidAppletAttr(attribute)) {\n parameters[attribute] = attributes[attribute];\n } else {\n startApplet += ' ' + attribute + '=\"' + attributes[attribute] + '\"';\n if (attribute == 'code') {\n addCodeAttribute = false;\n }\n }\n }\n\n var codebaseParam = false;\n for (var parameter in parameters) {\n if (parameter == 'codebase_lookup') {\n codebaseParam = true;\n }\n // Originally, parameter 'object' was used for serialized\n // applets, later, to avoid confusion with object tag in IE\n // the 'java_object' was added. Plugin supports both.\n if (parameter == 'object' || parameter == 'java_object' || parameter == 'java_code') {\n addCodeAttribute = false;\n }\n params += '';\n }\n if (!codebaseParam) {\n params += '';\n }\n\n if (addCodeAttribute) {\n startApplet += ' code=\"dummy\"';\n }\n startApplet += '>';\n\n document.write(startApplet + '\\n' + params + '\\n' + endApplet);\n },\n\n /**\n * Returns true if there is a matching JRE version currently installed\n * (among those detected by getJREs()). The versionPattern string is\n * of the form #[.#[.#[_#]]][+|*], which includes strings such as \"1.4\",\n * \"1.5.0*\", and \"1.6.0_02+\".\n * A star (*) means \"any version within this family\" and a plus (+) means\n * \"any version greater or equal to the specified version\". \"1.5.0*\"\n * matches 1.5.0_06 but not 1.6.0_01, whereas \"1.5.0+\" matches both.\n *\n * If the versionPattern does not include all four version components\n * but does not end with a star or plus, it will be treated as if it\n * ended with a star. \"1.5\" is exactly equivalent to \"1.5*\", and will\n * match any version number beginning with \"1.5\".\n *\n * If getJREs() is unable to detect the precise version number, a match\n * could be ambiguous. For example if getJREs() detects \"1.5\", there is\n * no way to know whether the JRE matches \"1.5.0_06+\". versionCheck()\n * compares only as much of the version information as could be detected,\n * so versionCheck(\"1.5.0_06+\") would return true in in this case.\n *\n * Invalid versionPattern will result in a JavaScript error alert.\n * versionPatterns which are valid but do not match any existing JRE\n * release (e.g. \"32.65+\") will always return false.\n */\n versionCheck: function (versionPattern) {\n return doVersionCheck(versionPattern, isNoPluginWebBrowser());\n },\n\n /**\n * Returns true if an installation of Java Web Start of the specified\n * minimumVersion can be detected. minimumVersion is optional, and\n * if not specified, '1.4.2' will be used.\n * (Versions earlier than 1.4.2 may not be detected.)\n */\n isWebStartInstalled: function (minimumVersion) {\n if (isNoPluginWebBrowser()) {\n return true;\n }\n var browser = this.getBrowser();\n if (browser == '?') {\n // we really don't know - better to try to use it than reinstall\n return true;\n }\n\n if (minimumVersion == 'undefined' || minimumVersion == null) {\n minimumVersion = '1.4.2';\n }\n\n var retval = false;\n var matchData = minimumVersion.match(version_regex_strict);\n if (matchData != null) {\n retval = this.versionCheck(minimumVersion + '+');\n } else {\n log(\n '[isWebStartInstaller()] Invalid minimumVersion argument to isWebStartInstalled(): ' +\n minimumVersion\n );\n retval = this.versionCheck('1.4.2+');\n }\n return retval;\n },\n\n // obtain JPI version using navigator.mimeTypes array\n // if found, set the version to this.firefoxJavaVersion\n getJPIVersionUsingMimeType: function () {\n var i, s, m;\n // Walk through the full list of mime types.\n // Try static MIME type first (for JRE versions earlier than JRE 9)\n for (i = 0; i < navigator.mimeTypes.length; ++i) {\n s = navigator.mimeTypes[i].type;\n m = s.match(/^application\\/x-java-applet;jpi-version=(.*)$/);\n if (m != null) {\n this.firefoxJavaVersion = m[1];\n this.useStaticMimeType = true;\n return;\n }\n }\n\n for (i = 0; i < navigator.mimeTypes.length; ++i) {\n s = navigator.mimeTypes[i].type;\n m = s.match(/^application\\/x-java-applet;version=(.*)$/);\n if (m != null) {\n if (\n this.firefoxJavaVersion == null ||\n this.compareVersions(m[1], this.firefoxJavaVersion)\n ) {\n this.firefoxJavaVersion = m[1];\n }\n }\n }\n },\n\n // launch the specified JNLP application using the passed in jnlp file\n // the jnlp file does not need to have a codebase\n // this requires JRE 7 or above to work\n // if machine has no JRE 7 or above, we will try to auto-install and then launch\n // (function will return false if JRE auto-install failed)\n launchWebStartApplication: function (jnlp) {\n this.getJPIVersionUsingMimeType();\n\n // make sure we are JRE 7 or above\n if (isWebStartFound() == false) {\n if (isNoPluginWebBrowser()) {\n launchWithJnlpProtocol(jnlp);\n } else if (this.installJRE('1.7.0+') == false || this.isWebStartInstalled('1.7.0') == false) {\n return false;\n }\n }\n\n var jnlpDocbase = null;\n\n // use document.documentURI for docbase\n if (document.documentURI) {\n jnlpDocbase = document.documentURI;\n }\n\n // fallback to document.URL if documentURI not available\n if (jnlpDocbase == null) {\n jnlpDocbase = document.URL;\n }\n\n var browser = this.getBrowser();\n\n var launchTag;\n\n if (browser == 'MSIE') {\n launchTag =\n '<' +\n 'object classid=\"clsid:8AD9C840-044E-11D1-B3E9-00805F499D93\" ' +\n 'width=\"0\" height=\"0\">' +\n '<' +\n 'PARAM name=\"launchjnlp\" value=\"' +\n jnlp +\n '\"' +\n '>' +\n '<' +\n 'PARAM name=\"docbase\" value=\"' +\n encodeURIComponent(jnlpDocbase) +\n '\"' +\n '>' +\n '<' +\n '/' +\n 'object' +\n '>';\n } else if (browser == 'Netscape Family') {\n launchTag =\n '';\n }\n\n if (document.body == 'undefined' || document.body == null) {\n document.write(launchTag);\n // go back to original page, otherwise current page becomes blank\n document.location = jnlpDocbase;\n } else {\n var divTag = document.createElement('div');\n divTag.id = 'div1';\n divTag.style.position = 'relative';\n divTag.style.left = '-10000px';\n divTag.style.margin = '0px auto';\n divTag.className = 'dynamicDiv';\n divTag.innerHTML = launchTag;\n document.body.appendChild(divTag);\n }\n },\n\n createWebStartLaunchButtonEx: function (jnlp) {\n var url = \"javascript:deployJava.launchWebStartApplication('\" + jnlp + \"');\";\n\n document.write(\n '<' +\n 'a href=\"' +\n url +\n '\" onMouseOver=\"window.status=\\'\\'; ' +\n 'return true;\"><' +\n 'img ' +\n 'src=\"' +\n this.launchButtonPNG +\n '\" ' +\n 'border=\"0\" /><' +\n '/' +\n 'a' +\n '>'\n );\n },\n\n /**\n * Outputs a launch button for the specified JNLP URL. When clicked, the\n * button will ensure that an appropriate JRE is installed and then launch\n * the JNLP application. minimumVersion is of the form #[.#[.#[_#]]], and\n * is the minimum JRE version necessary to run this JNLP application.\n * minimumVersion is optional, and if it is not specified, '1.4.2'\n * will be used.\n * If an appropriate JRE or Web Start installation is detected,\n * the JNLP application will be launched, otherwise installLatestJRE()\n * will be called.\n *\n * After installLatestJRE() is called, the script will attempt to detect\n * that the JRE installation has completed and launch the JNLP application,\n * but there are circumstances (such as when the JRE installation\n * requires a browser restart) when this cannot be fulfilled.\n */\n createWebStartLaunchButton: function (jnlp, minimumVersion) {\n var url =\n 'javascript:' +\n 'if (!deployJava.isWebStartInstalled("' +\n minimumVersion +\n '")) {' +\n 'if (deployJava.installLatestJRE()) {' +\n 'if (deployJava.launch("' +\n jnlp +\n '")) {}' +\n '}' +\n '} else {' +\n 'if (deployJava.launch("' +\n jnlp +\n '")) {}' +\n '}';\n\n document.write(\n '<' +\n 'a href=\"' +\n url +\n '\" onMouseOver=\"window.status=\\'\\'; ' +\n 'return true;\"><' +\n 'img ' +\n 'src=\"' +\n this.launchButtonPNG +\n '\" ' +\n 'border=\"0\" /><' +\n '/' +\n 'a' +\n '>'\n );\n },\n\n /**\n * Launch a JNLP application, (using the plugin if available)\n */\n launch: function (jnlp) {\n /*\n * Using the plugin to launch Java Web Start is disabled for the time being\n */\n document.location = jnlp;\n return true;\n },\n\n /**\n * Launch a JNLP application, using JNLP protocol handler\n */\n launchEx: function (jnlp) {\n launchWithJnlpProtocol(jnlp);\n return true;\n },\n\n /*\n * returns true if the ActiveX or XPI plugin is installed\n */\n isPluginInstalled: function () {\n var plugin = this.getPlugin();\n if (plugin && plugin.jvms) {\n return true;\n } else {\n return false;\n }\n },\n\n /*\n * returns true if the plugin is installed and AutoUpdate is enabled\n */\n isAutoUpdateEnabled: function () {\n if (this.isPluginInstalled()) {\n return this.getPlugin().isAutoUpdateEnabled();\n }\n return false;\n },\n\n /*\n * sets AutoUpdate on if plugin is installed\n */\n setAutoUpdateEnabled: function () {\n if (this.isPluginInstalled()) {\n return this.getPlugin().setAutoUpdateEnabled();\n }\n return false;\n },\n\n /*\n * sets the preferred install type : null, online, kernel\n */\n setInstallerType: function (_type) {\n log(\n 'The Deployment Toolkit no longer installs JRE. Method setInstallerType() is no-op. ' +\n 'More Information on usage of the Deployment Toolkit can be found in the Deployment Guide at ' +\n '://docs.oracle.com/javase/8/docs/technotes/guides/deploy/'\n );\n\n return false;\n },\n\n /*\n * sets additional package list - to be used by kernel installer\n */\n setAdditionalPackages: function (_packageList) {\n log(\n 'The Deployment Toolkit no longer installs JRE. Method setAdditionalPackages() is no-op. ' +\n 'More Information on usage of the Deployment Toolkit can be found in the Deployment Guide at ' +\n '://docs.oracle.com/javase/8/docs/technotes/guides/deploy/'\n );\n return false;\n },\n\n /*\n * sets preference to install Early Access versions if available\n */\n setEarlyAccess: function (enabled) {\n this.EAInstallEnabled = enabled;\n },\n\n /*\n * Determines if the next generation plugin (Plugin II) is default\n */\n isPlugin2: function () {\n if (this.isPluginInstalled()) {\n if (this.versionCheck('1.6.0_10+')) {\n try {\n return this.getPlugin().isPlugin2();\n } catch (err) {\n // older plugin w/o isPlugin2() function -\n }\n }\n }\n return false;\n },\n\n //support native DT plugin?\n allowPlugin: function () {\n this.getBrowser();\n\n // Safari and Opera browsers find the plugin but it\n // doesn't work, so until we can get it to work - don't use it.\n var ret = 'Safari' != this.browserName2 && 'Opera' != this.browserName2;\n\n return ret;\n },\n\n getPlugin: function () {\n this.refresh();\n\n var ret = null;\n if (this.allowPlugin()) {\n ret = document.getElementById('deployJavaPlugin');\n }\n return ret;\n },\n\n compareVersionToPattern: function (version, patternArray, familyMatch, minMatch) {\n if (version == undefined || patternArray == undefined) {\n return false;\n }\n var matchData = version.match(version_regex_strict);\n if (matchData != null) {\n var index = 0;\n var result = new Array();\n\n for (var i = 1; i < matchData.length; ++i) {\n if (typeof matchData[i] == 'string' && matchData[i] != '') {\n result[index] = matchData[i];\n index++;\n }\n }\n\n var l = Math.min(result.length, patternArray.length);\n\n // result contains what is installed in local machine\n // patternArray is what is being requested by application\n if (minMatch) {\n // minimum version match, return true if what we have (installed)\n // is greater or equal to what is requested. false otherwise.\n for (var j = 0; j < l; ++j) {\n var resultTemp = parseInt(result[j]);\n var patternArrayTemp = parseInt(patternArray[j]);\n if (resultTemp < patternArrayTemp) {\n return false;\n } else if (resultTemp > patternArrayTemp) {\n return true;\n }\n }\n return true;\n } else {\n for (var k = 0; k < l; ++k) {\n if (result[k] != patternArray[k]) return false;\n }\n if (familyMatch) {\n // family match - return true as long as what we have\n // (installed) matches up to the request pattern\n return true;\n } else {\n // exact match\n // result and patternArray needs to have exact same content\n return result.length == patternArray.length;\n }\n }\n } else {\n return false;\n }\n },\n\n getBrowser: function () {\n if (this.browserName == null) {\n var browser = navigator.userAgent.toLowerCase();\n\n log('[getBrowser()] navigator.userAgent.toLowerCase() -> ' + browser);\n\n // order is important here. Safari userAgent contains mozilla,\n // IE 11 userAgent contains mozilla and netscape,\n // and Chrome userAgent contains both mozilla and safari.\n if (browser.indexOf('edge') != -1) {\n this.browserName = 'Edge';\n this.browserName2 = 'Edge';\n } else if (browser.indexOf('msie') != -1 && browser.indexOf('opera') == -1) {\n this.browserName = 'MSIE';\n this.browserName2 = 'MSIE';\n } else if (browser.indexOf('trident') != -1 || browser.indexOf('Trident') != -1) {\n this.browserName = 'MSIE';\n this.browserName2 = 'MSIE';\n // For Windows 8 and Windows 8.1 check for Metro mode\n if (browser.indexOf('windows nt 6.3') != -1 || browser.indexOf('windows nt 6.2') != -1) {\n try {\n // try to create a known ActiveX object\n new ActiveXObject('htmlfile');\n } catch (e) {\n // ActiveX is disabled\n this.browserName2 = 'NoActiveX';\n }\n }\n } else if (browser.indexOf('iphone') != -1) {\n // this included both iPhone and iPad\n this.browserName = 'Netscape Family';\n this.browserName2 = 'iPhone';\n } else if (browser.indexOf('firefox') != -1 && browser.indexOf('opera') == -1) {\n this.browserName = 'Netscape Family';\n if (this.isPluginInstalled()) {\n this.browserName2 = 'Firefox';\n } else {\n this.browserName2 = 'FirefoxNoPlugin';\n }\n } else if (browser.indexOf('chrome') != -1) {\n this.browserName = 'Netscape Family';\n this.browserName2 = 'Chrome';\n } else if (browser.indexOf('safari') != -1) {\n this.browserName = 'Netscape Family';\n this.browserName2 = 'Safari';\n } else if (browser.indexOf('mozilla') != -1 && browser.indexOf('opera') == -1) {\n this.browserName = 'Netscape Family';\n this.browserName2 = 'Other';\n } else if (browser.indexOf('opera') != -1) {\n this.browserName = 'Netscape Family';\n this.browserName2 = 'Opera';\n } else {\n this.browserName = '?';\n this.browserName2 = 'unknown';\n }\n\n log('[getBrowser()] Detected browser name:' + this.browserName + ', ' + this.browserName2);\n }\n return this.browserName;\n },\n\n testUsingActiveX: function (version) {\n var objectName = 'JavaWebStart.isInstalled.' + version + '.0';\n\n // we need the typeof check here for this to run on FF/Chrome\n // the check needs to be in place here - cannot even pass ActiveXObject\n // as arg to another function\n if (typeof ActiveXObject == 'undefined' || !ActiveXObject) {\n log('[testUsingActiveX()] Browser claims to be IE, but no ActiveXObject object?');\n return false;\n }\n\n try {\n return new ActiveXObject(objectName) != null;\n } catch (exception) {\n return false;\n }\n },\n\n testForMSVM: function () {\n var clsid = '{08B0E5C0-4FCB-11CF-AAA5-00401C608500}';\n\n if (typeof oClientCaps != 'undefined') {\n var v = oClientCaps.getComponentVersion(clsid, 'ComponentID');\n if (v == '' || v == '5,0,5000,0') {\n return false;\n } else {\n return true;\n }\n } else {\n return false;\n }\n },\n\n testUsingMimeTypes: function (version) {\n if (!navigator.mimeTypes) {\n log('[testUsingMimeTypes()] Browser claims to be Netscape family, but no mimeTypes[] array?');\n return false;\n }\n\n for (var i = 0; i < navigator.mimeTypes.length; ++i) {\n var s = navigator.mimeTypes[i].type;\n var m = s.match(/^application\\/x-java-applet\\x3Bversion=(1\\.8|1\\.7|1\\.6|1\\.5|1\\.4\\.2)$/);\n if (m != null) {\n if (this.compareVersions(m[1], version)) {\n return true;\n }\n }\n }\n return false;\n },\n\n testUsingPluginsArray: function (version) {\n if (!navigator.plugins || !navigator.plugins.length) {\n return false;\n }\n var platform = navigator.platform.toLowerCase();\n\n for (var i = 0; i < navigator.plugins.length; ++i) {\n var s = navigator.plugins[i].description;\n if (s.search(/^Java Switchable Plug-in (Cocoa)/) != -1) {\n // Safari on MAC\n if (this.compareVersions('1.5.0', version)) {\n return true;\n }\n } else if (s.search(/^Java/) != -1) {\n if (platform.indexOf('win') != -1) {\n // still can't tell - opera, safari on windows\n // return true for 1.5.0 and 1.6.0\n if (this.compareVersions('1.5.0', version) || this.compareVersions('1.6.0', version)) {\n return true;\n }\n }\n }\n }\n // if above dosn't work on Apple or Windows, just allow 1.5.0\n if (this.compareVersions('1.5.0', version)) {\n return true;\n }\n return false;\n },\n\n IEInstall: function () {\n location.href = constructGetJavaURL(\n (this.locale != null ? '&locale=' + this.locale : '') +\n (this.brand != null ? '&brand=' + this.brand : '')\n );\n\n // should not actually get here\n return false;\n },\n\n done: function (_name, _result) {},\n\n FFInstall: function () {\n location.href = constructGetJavaURL(\n (this.locale != null ? '&locale=' + this.locale : '') +\n (this.brand != null ? '&brand=' + this.brand : '') +\n (this.installType != null ? '&type=' + this.installType : '')\n );\n\n // should not actually get here\n return false;\n },\n\n // return true if 'installed' (considered as a JRE version string) is\n // greater than or equal to 'required' (again, a JRE version string).\n compareVersions: function (installed, required) {\n var a = installed.split('.');\n var b = required.split('.');\n\n for (var i = 0; i < a.length; ++i) {\n a[i] = Number(a[i]);\n }\n for (var j = 0; j < b.length; ++j) {\n b[j] = Number(b[j]);\n }\n if (a.length == 2) {\n a[2] = 0;\n }\n\n if (a[0] > b[0]) return true;\n if (a[0] < b[0]) return false;\n\n if (a[1] > b[1]) return true;\n if (a[1] < b[1]) return false;\n\n if (a[2] > b[2]) return true;\n if (a[2] < b[2]) return false;\n\n return true;\n },\n\n enableAlerts: function () {\n // reset this so we can show the browser detection\n this.browserName = null;\n this.debug = true;\n },\n\n poll: function () {\n this.refresh();\n var postInstallJREList = this.getJREs();\n\n if (this.preInstallJREList.length == 0 && postInstallJREList.length != 0) {\n clearInterval(this.myInterval);\n }\n\n if (\n this.preInstallJREList.length != 0 &&\n postInstallJREList.length != 0 &&\n this.preInstallJREList[0] != postInstallJREList[0]\n ) {\n clearInterval(this.myInterval);\n }\n },\n\n writePluginTag: function () {\n var browser = this.getBrowser();\n\n if (browser == 'MSIE') {\n document.write(\n '<' +\n 'object classid=\"clsid:CAFEEFAC-DEC7-0000-0001-ABCDEFFEDCBA\" ' +\n 'id=\"deployJavaPlugin\" width=\"0\" height=\"0\">' +\n '<' +\n '/' +\n 'object' +\n '>'\n );\n } else if (browser == 'Netscape Family' && this.allowPlugin()) {\n this.writeEmbedTag();\n }\n },\n\n refresh: function () {\n navigator.plugins.refresh(false);\n\n var browser = this.getBrowser();\n if (browser == 'Netscape Family' && this.allowPlugin()) {\n var plugin = document.getElementById('deployJavaPlugin');\n // only do this again if no plugin\n if (plugin == null) {\n this.writeEmbedTag();\n }\n }\n },\n\n writeEmbedTag: function () {\n var written = false;\n if (navigator.mimeTypes != null) {\n for (var i = 0; i < navigator.mimeTypes.length; i++) {\n if (navigator.mimeTypes[i].type == this.mimeType) {\n if (navigator.mimeTypes[i].enabledPlugin) {\n document.write(\n '<' + 'embed id=\"deployJavaPlugin\" type=\"' + this.mimeType + '\" hidden=\"true\" />'\n );\n written = true;\n }\n }\n }\n // if we ddn't find new mimeType, look for old mimeType\n if (!written)\n for (var j = 0; j < navigator.mimeTypes.length; j++) {\n if (navigator.mimeTypes[j].type == this.oldMimeType) {\n if (navigator.mimeTypes[j].enabledPlugin) {\n document.write(\n '<' + 'embed id=\"deployJavaPlugin\" type=\"' + this.oldMimeType + '\" hidden=\"true\" />'\n );\n }\n }\n }\n }\n },\n}; // deployJava object\n\ndeployJava.writePluginTag();\nif (deployJava.locale == null) {\n var loc = null;\n\n if (loc == null)\n try {\n loc = navigator.userLanguage;\n } catch (err) {\n // ignore error\n }\n\n if (loc == null)\n try {\n loc = navigator.systemLanguage;\n } catch (err) {\n // ignore error\n }\n\n if (loc == null)\n try {\n loc = navigator.language;\n } catch (err) {\n // ignore error\n }\n\n if (loc != null) {\n loc.replace('-', '_');\n deployJava.locale = loc;\n }\n}\n\nmodule.exports = deployJava;\n","'use strict';\n\nvar swfobject = require('../vendor/swfobject');\n\n// Get Flash Version. Return a string containing the Flash Version.\nmodule.exports = function getFlashVersion() {\n if (this.isFlash()) {\n var objPlayerVersion = swfobject.getFlashPlayerVersion();\n return objPlayerVersion.major + '.' + objPlayerVersion.minor + '.' + objPlayerVersion.release;\n }\n return '';\n};\n","/*! SWFObject v2.3.20130521 \n is released under the MIT License \n*/\n\n/* global ActiveXObject: false */\n/* eslint-disable strict */\n\nvar UNDEF = \"undefined\",\n OBJECT = \"object\",\n SHOCKWAVE_FLASH = \"Shockwave Flash\",\n SHOCKWAVE_FLASH_AX = \"ShockwaveFlash.ShockwaveFlash\",\n FLASH_MIME_TYPE = \"application/x-shockwave-flash\",\n EXPRESS_INSTALL_ID = \"SWFObjectExprInst\",\n ON_READY_STATE_CHANGE = \"onreadystatechange\",\n\n win = window,\n doc = document,\n nav = navigator,\n\n plugin = false,\n domLoadFnArr = [],\n regObjArr = [],\n objIdArr = [],\n listenersArr = [],\n storedFbContent,\n storedFbContentId,\n storedCallbackFn,\n storedCallbackObj,\n isDomLoaded = false,\n isExpressInstallActive = false,\n dynamicStylesheet,\n dynamicStylesheetMedia,\n autoHideShow = true,\n encodeURIEnabled = false,\n\n/* Centralized function for browser feature detection\n - User agent string detection is only used when no good alternative is possible\n - Is executed directly for optimal performance\n*/\nua = function () {\n var w3cdom = typeof doc.getElementById !== UNDEF && typeof doc.getElementsByTagName !== UNDEF && typeof doc.createElement !== UNDEF,\n u = nav.userAgent.toLowerCase(),\n p = nav.platform.toLowerCase(),\n windows = p ? /win/.test(p) : /win/.test(u),\n mac = p ? /mac/.test(p) : /mac/.test(u),\n webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\\/(\\d+(\\.\\d+)?).*$/, \"$1\")) : false, // returns either the webkit version or false if not webkit\n ie = nav.appName === \"Microsoft Internet Explorer\",\n playerVersion = [0, 0, 0],\n d = null;\n if (typeof nav.plugins !== UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] === OBJECT) {\n d = nav.plugins[SHOCKWAVE_FLASH].description;\n // nav.mimeTypes[\"application/x-shockwave-flash\"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+\n if (d && (typeof nav.mimeTypes !== UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) {\n plugin = true;\n ie = false; // cascaded feature detection for Internet Explorer\n d = d.replace(/^.*\\s+(\\S+\\s+\\S+$)/, \"$1\");\n playerVersion[0] = toInt(d.replace(/^(.*)\\..*$/, \"$1\"));\n playerVersion[1] = toInt(d.replace(/^.*\\.(.*)\\s.*$/, \"$1\"));\n playerVersion[2] = /[a-zA-Z]/.test(d) ? toInt(d.replace(/^.*[a-zA-Z]+(.*)$/, \"$1\")) : 0;\n }\n }\n else if (typeof win.ActiveXObject !== UNDEF) {\n try {\n var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);\n if (a) { // a will return null when ActiveX is disabled\n d = a.GetVariable(\"$version\");\n if (d) {\n ie = true; // cascaded feature detection for Internet Explorer\n d = d.split(\" \")[1].split(\",\");\n playerVersion = [toInt(d[0]), toInt(d[1]), toInt(d[2])];\n }\n }\n }\n catch (e) {\n // ignore error\n }\n }\n return {w3: w3cdom, pv: playerVersion, wk: webkit, ie: ie, win: windows, mac: mac};\n}();\n\n/* Cross-browser onDomLoad\n - Will fire an event as soon as the DOM of a web page is loaded\n - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/\n - Regular onload serves as fallback\n*/\n(function () {\n if (!ua.w3) { return; }\n if ((typeof doc.readyState !== UNDEF && (doc.readyState === \"complete\" || doc.readyState === \"interactive\")) || (typeof doc.readyState === UNDEF && (doc.getElementsByTagName(\"body\")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically\n callDomLoadFunctions();\n }\n if (!isDomLoaded) {\n if (typeof doc.addEventListener !== UNDEF) {\n doc.addEventListener(\"DOMContentLoaded\", callDomLoadFunctions, false);\n }\n if (ua.ie) {\n doc.attachEvent(ON_READY_STATE_CHANGE, function detach() {\n if (doc.readyState === \"complete\") {\n doc.detachEvent(ON_READY_STATE_CHANGE, detach);\n callDomLoadFunctions();\n }\n });\n if (win == top) { // if not inside an iframe\n (function checkDomLoadedIE() {\n if (isDomLoaded) { return; }\n try {\n doc.documentElement.doScroll(\"left\");\n }\n catch (e) {\n setTimeout(checkDomLoadedIE, 0);\n return;\n }\n callDomLoadFunctions();\n }());\n }\n }\n if (ua.wk) {\n (function checkDomLoadedWK() {\n if (isDomLoaded) { return; }\n if (!/loaded|complete/.test(doc.readyState)) {\n setTimeout(checkDomLoadedWK, 0);\n return;\n }\n callDomLoadFunctions();\n }());\n }\n }\n}());\n\nfunction callDomLoadFunctions() {\n if (isDomLoaded || !document.getElementsByTagName(\"body\")[0]) { return; }\n try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early\n var t, span = createElement(\"span\");\n span.style.display = \"none\"; //hide the span in case someone has styled spans via CSS\n t = doc.getElementsByTagName(\"body\")[0].appendChild(span);\n t.parentNode.removeChild(t);\n t = null; //clear the variables\n span = null;\n }\n catch (e) { return; }\n isDomLoaded = true;\n var dl = domLoadFnArr.length;\n for (var i = 0; i < dl; i++) {\n domLoadFnArr[i]();\n }\n}\n\nfunction addDomLoadEvent(fn) {\n if (isDomLoaded) {\n fn();\n }\n else {\n domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+\n }\n}\n\n/* Cross-browser onload\n - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/\n - Will fire an event as soon as a web page including all of its assets are loaded\n */\nfunction addLoadEvent(fn) {\n if (typeof win.addEventListener !== UNDEF) {\n win.addEventListener(\"load\", fn, false);\n }\n else if (typeof doc.addEventListener !== UNDEF) {\n doc.addEventListener(\"load\", fn, false);\n }\n else if (typeof win.attachEvent !== UNDEF) {\n addListener(win, \"onload\", fn);\n }\n else if (typeof win.onload === \"function\") {\n var fnOld = win.onload;\n win.onload = function () {\n fnOld();\n fn();\n };\n }\n else {\n win.onload = fn;\n }\n}\n\n/* Detect the Flash Player version for non-Internet Explorer browsers\n - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:\n a. Both release and build numbers can be detected\n b. Avoid wrong descriptions by corrupt installers provided by Adobe\n c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports\n - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available\n*/\nfunction testPlayerVersion() {\n var b = doc.getElementsByTagName(\"body\")[0];\n var o = createElement(OBJECT);\n o.setAttribute(\"style\", \"visibility: hidden;\");\n o.setAttribute(\"type\", FLASH_MIME_TYPE);\n var t = b.appendChild(o);\n if (t) {\n var counter = 0;\n (function checkGetVariable() {\n if (typeof t.GetVariable !== UNDEF) {\n try {\n var d = t.GetVariable(\"$version\");\n if (d) {\n d = d.split(\" \")[1].split(\",\");\n ua.pv = [toInt(d[0]), toInt(d[1]), toInt(d[2])];\n }\n } catch (e) {\n //t.GetVariable(\"$version\") is known to fail in Flash Player 8 on Firefox\n //If this error is encountered, assume FP8 or lower. Time to upgrade.\n ua.pv = [8, 0, 0];\n }\n }\n else if (counter < 10) {\n counter++;\n setTimeout(checkGetVariable, 10);\n return;\n }\n b.removeChild(o);\n t = null;\n matchVersions();\n }());\n }\n else {\n matchVersions();\n }\n}\n\n/* Perform Flash Player and SWF version matching; static publishing only\n*/\nfunction matchVersions() {\n var rl = regObjArr.length;\n if (rl > 0) {\n for (var i = 0; i < rl; i++) { // for each registered object element\n var id = regObjArr[i].id;\n var cb = regObjArr[i].callbackFn;\n var cbObj = {success: false, id: id};\n if (ua.pv[0] > 0) {\n var obj = getElementById(id);\n if (obj) {\n if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!\n setVisibility(id, true);\n if (cb) {\n cbObj.success = true;\n cbObj.ref = getObjectById(id);\n cbObj.id = id;\n cb(cbObj);\n }\n }\n else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported\n var att = {};\n att.data = regObjArr[i].expressInstall;\n att.width = obj.getAttribute(\"width\") || \"0\";\n att.height = obj.getAttribute(\"height\") || \"0\";\n if (obj.getAttribute(\"class\")) { att.styleclass = obj.getAttribute(\"class\"); }\n if (obj.getAttribute(\"align\")) { att.align = obj.getAttribute(\"align\"); }\n // parse HTML object param element's name-value pairs\n var par = {};\n var p = obj.getElementsByTagName(\"param\");\n var pl = p.length;\n for (var j = 0; j < pl; j++) {\n if (p[j].getAttribute(\"name\").toLowerCase() !== \"movie\") {\n par[p[j].getAttribute(\"name\")] = p[j].getAttribute(\"value\");\n }\n }\n showExpressInstall(att, par, id, cb);\n }\n else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display fallback content instead of SWF\n displayFbContent(obj);\n if (cb) { cb(cbObj); }\n }\n }\n }\n else { // if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or fallback content)\n setVisibility(id, true);\n if (cb) {\n var o = getObjectById(id); // test whether there is an HTML object element or not\n if (o && typeof o.SetVariable !== UNDEF) {\n cbObj.success = true;\n cbObj.ref = o;\n cbObj.id = o.id;\n }\n cb(cbObj);\n }\n }\n }\n }\n}\n\n/* Main function\n - Will preferably execute onDomLoad, otherwise onload (as a fallback)\n*/\ndomLoadFnArr[0] = function () {\n if (plugin) {\n testPlayerVersion();\n }\n else {\n matchVersions();\n }\n};\n\nfunction getObjectById(objectIdStr) {\n var r = null,\n o = getElementById(objectIdStr);\n\n if (o && o.nodeName.toUpperCase() === \"OBJECT\") {\n //If targeted object is valid Flash file\n if (typeof o.SetVariable !== UNDEF) {\n r = o;\n } else {\n //If SetVariable is not working on targeted object but a nested object is\n //available, assume classic nested object markup. Return nested object.\n\n //If SetVariable is not working on targeted object and there is no nested object,\n //return the original object anyway. This is probably new simplified markup.\n\n r = o.getElementsByTagName(OBJECT)[0] || o;\n }\n }\n\n return r;\n}\n\n/* Requirements for Adobe Express Install\n - only one instance can be active at a time\n - fp 6.0.65 or higher\n - Win/Mac OS only\n - no Webkit engines older than version 312\n*/\nfunction canExpressInstall() {\n return !isExpressInstallActive && hasPlayerVersion(\"6.0.65\") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);\n}\n\n/* Show the Adobe Express Install dialog\n - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75\n*/\nfunction showExpressInstall(att, par, replaceElemIdStr, callbackFn) {\n\n var obj = getElementById(replaceElemIdStr);\n\n //Ensure that replaceElemIdStr is really a string and not an element\n replaceElemIdStr = getId(replaceElemIdStr);\n\n isExpressInstallActive = true;\n storedCallbackFn = callbackFn || null;\n storedCallbackObj = {success: false, id: replaceElemIdStr};\n\n if (obj) {\n if (obj.nodeName.toUpperCase() === \"OBJECT\") { // static publishing\n storedFbContent = abstractFbContent(obj);\n storedFbContentId = null;\n }\n else { // dynamic publishing\n storedFbContent = obj;\n storedFbContentId = replaceElemIdStr;\n }\n att.id = EXPRESS_INSTALL_ID;\n if (typeof att.width === UNDEF || (!/%$/.test(att.width) && toInt(att.width) < 310)) { att.width = \"310\"; }\n if (typeof att.height === UNDEF || (!/%$/.test(att.height) && toInt(att.height) < 137)) { att.height = \"137\"; }\n var pt = ua.ie ? \"ActiveX\" : \"PlugIn\",\n fv = \"MMredirectURL=\" + encodeURIComponent(win.location.toString().replace(/&/g, \"%26\")) + \"&MMplayerType=\" + pt + \"&MMdoctitle=\" + encodeURIComponent(doc.title.slice(0, 47) + \" - Flash Player Installation\");\n if (typeof par.flashvars !== UNDEF) {\n par.flashvars += \"&\" + fv;\n }\n else {\n par.flashvars = fv;\n }\n // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,\n // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work\n if (ua.ie && obj.readyState != 4) {\n var newObj = createElement(\"div\");\n replaceElemIdStr += \"SWFObjectNew\";\n newObj.setAttribute(\"id\", replaceElemIdStr);\n obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf\n obj.style.display = \"none\";\n removeSWF(obj); //removeSWF accepts elements now\n }\n createSWF(att, par, replaceElemIdStr);\n }\n}\n\n/* Functions to abstract and display fallback content\n*/\nfunction displayFbContent(obj) {\n if (ua.ie && obj.readyState != 4) {\n // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,\n // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work\n obj.style.display = \"none\";\n var el = createElement(\"div\");\n obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the fallback content\n el.parentNode.replaceChild(abstractFbContent(obj), el);\n removeSWF(obj); //removeSWF accepts elements now\n }\n else {\n obj.parentNode.replaceChild(abstractFbContent(obj), obj);\n }\n}\n\nfunction abstractFbContent(obj) {\n var ac = createElement(\"div\");\n if (ua.win && ua.ie) {\n ac.innerHTML = obj.innerHTML;\n }\n else {\n var nestedObj = obj.getElementsByTagName(OBJECT)[0];\n if (nestedObj) {\n var c = nestedObj.childNodes;\n if (c) {\n var cl = c.length;\n for (var i = 0; i < cl; i++) {\n if (!(c[i].nodeType == 1 && c[i].nodeName === \"PARAM\") && !(c[i].nodeType == 8)) {\n ac.appendChild(c[i].cloneNode(true));\n }\n }\n }\n }\n }\n return ac;\n}\n\nfunction createIeObject(url, paramStr) {\n var div = createElement(\"div\");\n div.innerHTML = \"\" + paramStr + \"\";\n return div.firstChild;\n}\n\n/* Cross-browser dynamic SWF creation\n*/\nfunction createSWF(attObj, parObj, id) {\n var r, el = getElementById(id);\n id = getId(id); // ensure id is truly an ID and not an element\n\n if (ua.wk && ua.wk < 312) { return r; }\n\n if (el) {\n var o = (ua.ie) ? createElement(\"div\") : createElement(OBJECT),\n attr,\n attrLower,\n param;\n\n if (typeof attObj.id === UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the fallback content\n attObj.id = id;\n }\n\n //Add params\n for (param in parObj) {\n //filter out prototype additions from other potential libraries and IE specific param element\n if (Object.prototype.hasOwnProperty.call(parObj, param) && param.toLowerCase() !== \"movie\") {\n createObjParam(o, param, parObj[param]);\n }\n }\n\n //Create IE object, complete with param nodes\n if (ua.ie) { o = createIeObject(attObj.data, o.innerHTML); }\n\n //Add attributes to object\n for (attr in attObj) {\n if (Object.prototype.hasOwnProperty.call(attObj, attr)) { // filter out prototype additions from other potential libraries\n attrLower = attr.toLowerCase();\n\n // 'class' is an ECMA4 reserved keyword\n if (attrLower === \"styleclass\") {\n o.setAttribute(\"class\", attObj[attr]);\n } else if (attrLower !== \"classid\" && attrLower !== \"data\") {\n o.setAttribute(attr, attObj[attr]);\n }\n }\n }\n\n if (ua.ie) {\n objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)\n } else {\n o.setAttribute(\"type\", FLASH_MIME_TYPE);\n o.setAttribute(\"data\", attObj.data);\n }\n\n el.parentNode.replaceChild(o, el);\n r = o;\n }\n\n return r;\n}\n\nfunction createObjParam(el, pName, pValue) {\n var p = createElement(\"param\");\n p.setAttribute(\"name\", pName);\n p.setAttribute(\"value\", pValue);\n el.appendChild(p);\n}\n\n/* Cross-browser SWF removal\n - Especially needed to safely and completely remove a SWF in Internet Explorer\n*/\nfunction removeSWF(id) {\n var obj = getElementById(id);\n if (obj && obj.nodeName.toUpperCase() === \"OBJECT\") {\n if (ua.ie) {\n obj.style.display = \"none\";\n (function removeSWFInIE() {\n if (obj.readyState == 4) {\n //This step prevents memory leaks in Internet Explorer\n for (var i in obj) {\n if (typeof obj[i] === \"function\") {\n obj[i] = null;\n }\n }\n obj.parentNode.removeChild(obj);\n } else {\n setTimeout(removeSWFInIE, 10);\n }\n }());\n }\n else {\n obj.parentNode.removeChild(obj);\n }\n }\n}\n\nfunction isElement(id) {\n return (id && id.nodeType && id.nodeType === 1);\n}\n\nfunction getId(thing) {\n return (isElement(thing)) ? thing.id : thing;\n}\n\n/* Functions to optimize JavaScript compression\n*/\nfunction getElementById(id) {\n\n //Allow users to pass an element OR an element's ID\n if (isElement(id)) { return id; }\n\n var el = null;\n try {\n el = doc.getElementById(id);\n }\n catch (e) {\n // ignore error\n }\n return el;\n}\n\nfunction createElement(el) {\n return doc.createElement(el);\n}\n\n//To aid compression; replaces 14 instances of pareseInt with radix\nfunction toInt(str) {\n return parseInt(str, 10);\n}\n\n/* Updated attachEvent function for Internet Explorer\n - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks\n*/\nfunction addListener(target, eventType, fn) {\n target.attachEvent(eventType, fn);\n listenersArr[listenersArr.length] = [target, eventType, fn];\n}\n\n/* Flash Player and SWF content version matching\n*/\nfunction hasPlayerVersion(rv) {\n rv += \"\"; //Coerce number to string, if needed.\n var pv = ua.pv, v = rv.split(\".\");\n v[0] = toInt(v[0]);\n v[1] = toInt(v[1]) || 0; // supports short notation, e.g. \"9\" instead of \"9.0.0\"\n v[2] = toInt(v[2]) || 0;\n return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;\n}\n\n/* Cross-browser dynamic CSS creation\n - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php\n*/\nfunction createCSS(sel, decl, media, newStyle) {\n var h = doc.getElementsByTagName(\"head\")[0];\n if (!h) { return; } // to also support badly authored HTML pages that lack a head element\n var m = (typeof media === \"string\") ? media : \"screen\";\n if (newStyle) {\n dynamicStylesheet = null;\n dynamicStylesheetMedia = null;\n }\n if (!dynamicStylesheet || dynamicStylesheetMedia != m) {\n // create dynamic stylesheet + get a global reference to it\n var s = createElement(\"style\");\n s.setAttribute(\"type\", \"text/css\");\n s.setAttribute(\"media\", m);\n dynamicStylesheet = h.appendChild(s);\n if (ua.ie && typeof doc.styleSheets !== UNDEF && doc.styleSheets.length > 0) {\n dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];\n }\n dynamicStylesheetMedia = m;\n }\n // add style rule\n if (dynamicStylesheet) {\n if (typeof dynamicStylesheet.addRule !== UNDEF) {\n dynamicStylesheet.addRule(sel, decl);\n } else if (typeof doc.createTextNode !== UNDEF) {\n dynamicStylesheet.appendChild(doc.createTextNode(sel + \" {\" + decl + \"}\"));\n }\n }\n}\n\nfunction setVisibility(id, isVisible) {\n if (!autoHideShow) { return; }\n var v = isVisible ? \"visible\" : \"hidden\",\n el = getElementById(id);\n if (isDomLoaded && el) {\n el.style.visibility = v;\n } else if (typeof id === \"string\") {\n createCSS(\"#\" + id, \"visibility:\" + v);\n }\n}\n\n/* Filter to avoid XSS attacks\n*/\nfunction urlEncodeIfNecessary(s) {\n var regex = /[\\\\\"<>.;]/;\n var hasBadChars = regex.exec(s) !== null;\n return hasBadChars && typeof encodeURIComponent !== UNDEF ? encodeURIComponent(s) : s;\n}\n\n/* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)\n*/\n(function () {\n if (ua.ie) {\n window.attachEvent(\"onunload\", function () {\n // remove listeners to avoid memory leaks\n var ll = listenersArr.length;\n for (var i = 0; i < ll; i++) {\n listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);\n }\n // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect\n var il = objIdArr.length;\n for (var j = 0; j < il; j++) {\n removeSWF(objIdArr[j]);\n }\n // cleanup library's main closures to avoid memory leaks\n for (var k in ua) {\n ua[k] = null;\n }\n ua = null;\n for (var l in swfobject) {\n swfobject[l] = null;\n }\n swfobject = null;\n });\n }\n}());\n\nvar swfobject = {\n /* Public API\n - Reference: http://code.google.com/p/swfobject/wiki/documentation\n */\n registerObject: function (objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {\n if (ua.w3 && objectIdStr && swfVersionStr) {\n var regObj = {};\n regObj.id = objectIdStr;\n regObj.swfVersion = swfVersionStr;\n regObj.expressInstall = xiSwfUrlStr;\n regObj.callbackFn = callbackFn;\n regObjArr[regObjArr.length] = regObj;\n setVisibility(objectIdStr, false);\n }\n else if (callbackFn) {\n callbackFn({success: false, id: objectIdStr});\n }\n },\n\n getObjectById: function (objectIdStr) {\n if (ua.w3) {\n return getObjectById(objectIdStr);\n }\n },\n\n embedSWF: function (swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {\n\n var id = getId(replaceElemIdStr),\n callbackObj = {success: false, id: id};\n\n if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {\n setVisibility(id, false);\n addDomLoadEvent(function () {\n widthStr += \"\"; // auto-convert to string\n heightStr += \"\";\n var att = {};\n if (attObj && typeof attObj === OBJECT) {\n for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs\n att[i] = attObj[i];\n }\n }\n att.data = swfUrlStr;\n att.width = widthStr;\n att.height = heightStr;\n var par = {};\n if (parObj && typeof parObj === OBJECT) {\n for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs\n par[j] = parObj[j];\n }\n }\n if (flashvarsObj && typeof flashvarsObj === OBJECT) {\n for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs\n if (Object.prototype.hasOwnProperty.call(flashvarsObj, k)) {\n\n var key = (encodeURIEnabled) ? encodeURIComponent(k) : k,\n value = (encodeURIEnabled) ? encodeURIComponent(flashvarsObj[k]) : flashvarsObj[k];\n\n if (typeof par.flashvars !== UNDEF) {\n par.flashvars += \"&\" + key + \"=\" + value;\n }\n else {\n par.flashvars = key + \"=\" + value;\n }\n\n }\n }\n }\n if (hasPlayerVersion(swfVersionStr)) { // create SWF\n var obj = createSWF(att, par, replaceElemIdStr);\n if (att.id == id) {\n setVisibility(id, true);\n }\n callbackObj.success = true;\n callbackObj.ref = obj;\n callbackObj.id = obj.id;\n }\n else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install\n att.data = xiSwfUrlStr;\n showExpressInstall(att, par, replaceElemIdStr, callbackFn);\n return;\n }\n else { // show fallback content\n setVisibility(id, true);\n }\n if (callbackFn) { callbackFn(callbackObj); }\n });\n }\n else if (callbackFn) { callbackFn(callbackObj); }\n },\n\n switchOffAutoHideShow: function () {\n autoHideShow = false;\n },\n\n enableUriEncoding: function (bool) {\n encodeURIEnabled = (typeof bool === UNDEF) ? true : bool;\n },\n\n ua: ua,\n\n getFlashPlayerVersion: function () {\n return {major: ua.pv[0], minor: ua.pv[1], release: ua.pv[2]};\n },\n\n hasFlashPlayerVersion: hasPlayerVersion,\n\n createSWF: function (attObj, parObj, replaceElemIdStr) {\n if (ua.w3) {\n return createSWF(attObj, parObj, replaceElemIdStr);\n }\n else {\n return undefined;\n }\n },\n\n showExpressInstall: function (att, par, replaceElemIdStr, callbackFn) {\n if (ua.w3 && canExpressInstall()) {\n showExpressInstall(att, par, replaceElemIdStr, callbackFn);\n }\n },\n\n removeSWF: function (objElemIdStr) {\n if (ua.w3) {\n removeSWF(objElemIdStr);\n }\n },\n\n createCSS: function (selStr, declStr, mediaStr, newStyleBoolean) {\n if (ua.w3) {\n createCSS(selStr, declStr, mediaStr, newStyleBoolean);\n }\n },\n\n addDomLoadEvent: addDomLoadEvent,\n\n addLoadEvent: addLoadEvent,\n\n getQueryParamValue: function (param) {\n var q = doc.location.search || doc.location.hash;\n if (q) {\n if (/\\?/.test(q)) { q = q.split(\"?\")[1]; } // strip question mark\n if (!param) {\n return urlEncodeIfNecessary(q);\n }\n var pairs = q.split(\"&\");\n for (var i = 0; i < pairs.length; i++) {\n if (pairs[i].substring(0, pairs[i].indexOf(\"=\")) == param) {\n return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf(\"=\") + 1)));\n }\n }\n }\n return \"\";\n },\n\n // For internal usage only\n expressInstallCallback: function () {\n if (isExpressInstallActive) {\n var obj = getElementById(EXPRESS_INSTALL_ID);\n if (obj && storedFbContent) {\n obj.parentNode.replaceChild(storedFbContent, obj);\n if (storedFbContentId) {\n setVisibility(storedFbContentId, true);\n if (ua.ie) { storedFbContent.style.display = \"block\"; }\n }\n if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); }\n }\n isExpressInstallActive = false;\n }\n },\n\n version: \"2.3\"\n};\n\nmodule.exports = swfobject;\n","'use strict';\n\nvar inherits = require('inherits');\nvar ClientJS = require('./client.base').ClientJS;\nvar getJavaVersion = require('./modules/java-detection');\nvar getFlashVersion = require('./modules/flash-detection');\n\nfunction ClientJSFull() {\n ClientJS.apply(this, arguments);\n}\ninherits(ClientJSFull, ClientJS);\n\nClientJSFull.prototype.getJavaVersion = getJavaVersion;\nClientJSFull.prototype.getFlashVersion = getFlashVersion;\n\nexports.ClientJS = ClientJSFull;\n"],"sourceRoot":""}