Ignore:
Timestamp:
11/25/21 22:08:24 (3 years ago)
Author:
Ema <ema_spirova@…>
Branches:
master
Children:
8d391a1
Parents:
59329aa
Message:

primeNG components

Location:
trip-planner-front/node_modules/ua-parser-js
Files:
2 added
12 edited

Legend:

Unmodified
Added
Removed
  • trip-planner-front/node_modules/ua-parser-js/bower.json

    r59329aa re29cc2e  
    11{
    22  "name": "ua-parser-js",
    3   "version": "0.7.28",
     3  "version": "0.7.31",
    44  "authors": [
    55    "Faisal Salman <f@faisalman.com>"
  • trip-planner-front/node_modules/ua-parser-js/dist/ua-parser.min.js

    r59329aa re29cc2e  
    1 /*!@license
    2  * UAParser.js v0.7.28
    3  * Lightweight JavaScript-based User-Agent string parser
    4  * https://github.com/faisalman/ua-parser-js
    5  *
    6  * Copyright © 2012-2021 Faisal Salman <f@faisalman.com>
    7  * Licensed under MIT License
    8  */
    9 (function(window,undefined){"use strict";var LIBVERSION="0.7.28",EMPTY="",UNKNOWN="?",FUNC_TYPE="function",UNDEF_TYPE="undefined",OBJ_TYPE="object",STR_TYPE="string",MAJOR="major",MODEL="model",NAME="name",TYPE="type",VENDOR="vendor",VERSION="version",ARCHITECTURE="architecture",CONSOLE="console",MOBILE="mobile",TABLET="tablet",SMARTTV="smarttv",WEARABLE="wearable",EMBEDDED="embedded",UA_MAX_LENGTH=255;var util={extend:function(regexes,extensions){var mergedRegexes={};for(var i in regexes){if(extensions[i]&&extensions[i].length%2===0){mergedRegexes[i]=extensions[i].concat(regexes[i])}else{mergedRegexes[i]=regexes[i]}}return mergedRegexes},has:function(str1,str2){return typeof str1===STR_TYPE?str2.toLowerCase().indexOf(str1.toLowerCase())!==-1:false},lowerize:function(str){return str.toLowerCase()},major:function(version){return typeof version===STR_TYPE?version.replace(/[^\d\.]/g,"").split(".")[0]:undefined},trim:function(str,len){str=str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");return typeof len===UNDEF_TYPE?str:str.substring(0,UA_MAX_LENGTH)}};var mapper={rgx:function(ua,arrays){var i=0,j,k,p,q,matches,match;while(i<arrays.length&&!matches){var regex=arrays[i],props=arrays[i+1];j=k=0;while(j<regex.length&&!matches){matches=regex[j++].exec(ua);if(!!matches){for(p=0;p<props.length;p++){match=matches[++k];q=props[p];if(typeof q===OBJ_TYPE&&q.length>0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){this[q[0]]=q[1].call(this,match)}else{this[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){this[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{this[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){this[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{this[q]=match?match:undefined}}}}i+=2}},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j<map[i].length;j++){if(util.has(map[i][j],str)){return i===UNKNOWN?undefined:i}}}else if(util.has(map[i],str)){return i===UNKNOWN?undefined:i}}return str}};var maps={browser:{oldSafari:{version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}},oldEdge:{version:{.1:"12.",21:"13.",31:"14.",39:"15.",41:"16.",42:"17.",44:"18."}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"}}}};var regexes={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[VERSION,[NAME,"Chrome"]],[/(?:edge|edgios|edga|edg)\/([\w\.]+)/i],[VERSION,[NAME,"Edge"]],[/(opera\smini)\/([\w\.-]+)/i,/(opera\s[mobiletab]{3,6})\b.+version\/([\w\.-]+)/i,/(opera)(?:.+version\/|[\/\s]+)([\w\.]+)/i],[NAME,VERSION],[/opios[\/\s]+([\w\.]+)/i],[VERSION,[NAME,"Opera Mini"]],[/\sopr\/([\w\.]+)/i],[VERSION,[NAME,"Opera"]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i,/(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i,/(ba?idubrowser)[\/\s]?([\w\.]+)/i,/(?:ms|\()(ie)\s([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\/([\w\.-]+)/i,/(rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([\w\.]+)/i,/(weibo)__([\d\.]+)/i],[NAME,VERSION],[/(?:[\s\/]uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i],[VERSION,[NAME,"UCBrowser"]],[/(?:windowswechat)?\sqbcore\/([\w\.]+)\b.*(?:windowswechat)?/i],[VERSION,[NAME,"WeChat(Win) Desktop"]],[/micromessenger\/([\w\.]+)/i],[VERSION,[NAME,"WeChat"]],[/konqueror\/([\w\.]+)/i],[VERSION,[NAME,"Konqueror"]],[/trident.+rv[:\s]([\w\.]{1,9})\b.+like\sgecko/i],[VERSION,[NAME,"IE"]],[/yabrowser\/([\w\.]+)/i],[VERSION,[NAME,"Yandex"]],[/(avast|avg)\/([\w\.]+)/i],[[NAME,/(.+)/,"$1 Secure Browser"],VERSION],[/focus\/([\w\.]+)/i],[VERSION,[NAME,"Firefox Focus"]],[/opt\/([\w\.]+)/i],[VERSION,[NAME,"Opera Touch"]],[/coc_coc_browser\/([\w\.]+)/i],[VERSION,[NAME,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[VERSION,[NAME,"Dolphin"]],[/coast\/([\w\.]+)/i],[VERSION,[NAME,"Opera Coast"]],[/xiaomi\/miuibrowser\/([\w\.]+)/i],[VERSION,[NAME,"MIUI Browser"]],[/fxios\/([\w\.-]+)/i],[VERSION,[NAME,"Firefox"]],[/(qihu|qhbrowser|qihoobrowser|360browser)/i],[[NAME,"360 Browser"]],[/(oculus|samsung|sailfish)browser\/([\w\.]+)/i],[[NAME,/(.+)/,"$1 Browser"],VERSION],[/(comodo_dragon)\/([\w\.]+)/i],[[NAME,/_/g," "],VERSION],[/\s(electron)\/([\w\.]+)\ssafari/i,/(tesla)(?:\sqtcarbrowser|\/(20[12]\d\.[\w\.-]+))/i,/m?(qqbrowser|baiduboxapp|2345Explorer)[\/\s]?([\w\.]+)/i],[NAME,VERSION],[/(MetaSr)[\/\s]?([\w\.]+)/i,/(LBBROWSER)/i],[NAME],[/;fbav\/([\w\.]+);/i],[VERSION,[NAME,"Facebook"]],[/FBAN\/FBIOS|FB_IAB\/FB4A/i],[[NAME,"Facebook"]],[/safari\s(line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(chromium|instagram)[\/\s]([\w\.-]+)/i],[NAME,VERSION],[/\bgsa\/([\w\.]+)\s.*safari\//i],[VERSION,[NAME,"GSA"]],[/headlesschrome(?:\/([\w\.]+)|\s)/i],[VERSION,[NAME,"Chrome Headless"]],[/\swv\).+(chrome)\/([\w\.]+)/i],[[NAME,"Chrome WebView"],VERSION],[/droid.+\sversion\/([\w\.]+)\b.+(?:mobile\ssafari|safari)/i],[VERSION,[NAME,"Android Browser"]],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i],[NAME,VERSION],[/version\/([\w\.]+)\s.*mobile\/\w+\s(safari)/i],[VERSION,[NAME,"Mobile Safari"]],[/version\/([\w\.]+)\s.*(mobile\s?safari|safari)/i],[VERSION,NAME],[/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i],[NAME,[VERSION,mapper.str,maps.browser.oldSafari.version]],[/(webkit|khtml)\/([\w\.]+)/i],[NAME,VERSION],[/(navigator|netscape)\/([\w\.-]+)/i],[[NAME,"Netscape"],VERSION],[/ile\svr;\srv:([\w\.]+)\).+firefox/i],[VERSION,[NAME,"Firefox Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i,/(firefox)\/([\w\.]+)\s[\w\s\-]+\/[\w\.]+$/i,/(mozilla)\/([\w\.]+)\s.+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,/(links)\s\(([\w\.]+)/i,/(gobrowser)\/?([\w\.]*)/i,/(ice\s?browser)\/v?([\w\._]+)/i,/(mosaic)[\/\s]([\w\.]+)/i],[NAME,VERSION]],cpu:[[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i],[[ARCHITECTURE,"amd64"]],[/(ia32(?=;))/i],[[ARCHITECTURE,util.lowerize]],[/((?:i[346]|x)86)[;\)]/i],[[ARCHITECTURE,"ia32"]],[/\b(aarch64|armv?8e?l?)\b/i],[[ARCHITECTURE,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[ARCHITECTURE,"armhf"]],[/windows\s(ce|mobile);\sppc;/i],[[ARCHITECTURE,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i],[[ARCHITECTURE,/ower/,"",util.lowerize]],[/(sun4\w)[;\)]/i],[[ARCHITECTURE,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?:64|(?=v(?:[1-7]|[5-7]1)l?|;|eabi))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[ARCHITECTURE,util.lowerize]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[pt]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus\s10)/i],[MODEL,[VENDOR,"Samsung"],[TYPE,TABLET]],[/\b((?:s[cgp]h|gt|sm)-\w+|galaxy\snexus)/i,/\ssamsung[\s-]([\w-]+)/i,/sec-(sgh\w+)/i],[MODEL,[VENDOR,"Samsung"],[TYPE,MOBILE]],[/\((ip(?:hone|od)[\s\w]*);/i],[MODEL,[VENDOR,"Apple"],[TYPE,MOBILE]],[/\((ipad);[\w\s\),;-]+apple/i,/applecoremedia\/[\w\.]+\s\((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[MODEL,[VENDOR,"Apple"],[TYPE,TABLET]],[/\b((?:agr|ags[23]|bah2?|sht?)-a?[lw]\d{2})/i],[MODEL,[VENDOR,"Huawei"],[TYPE,TABLET]],[/d\/huawei([\w\s-]+)[;\)]/i,/\b(nexus\s6p|vog-[at]?l\d\d|ane-[at]?l[x\d]\d|eml-a?l\d\da?|lya-[at]?l\d[\dc]|clt-a?l\d\di?|ele-l\d\d)/i,/\b(\w{2,4}-[atu][ln][01259][019])[;\)\s]/i],[MODEL,[VENDOR,"Huawei"],[TYPE,MOBILE]],[/\b(poco[\s\w]+)(?:\sbuild|\))/i,/\b;\s(\w+)\sbuild\/hm\1/i,/\b(hm[\s\-_]?note?[\s_]?(?:\d\w)?)\sbuild/i,/\b(redmi[\s\-_]?(?:note|k)?[\w\s_]+)(?:\sbuild|\))/i,/\b(mi[\s\-_]?(?:a\d|one|one[\s_]plus|note lte)?[\s_]?(?:\d?\w?)[\s_]?(?:plus)?)\sbuild/i],[[MODEL,/_/g," "],[VENDOR,"Xiaomi"],[TYPE,MOBILE]],[/\b(mi[\s\-_]?(?:pad)(?:[\w\s_]+))(?:\sbuild|\))/i],[[MODEL,/_/g," "],[VENDOR,"Xiaomi"],[TYPE,TABLET]],[/;\s(\w+)\sbuild.+\soppo/i,/\s(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007)\b/i],[MODEL,[VENDOR,"OPPO"],[TYPE,MOBILE]],[/\svivo\s(\w+)(?:\sbuild|\))/i,/\s(v[12]\d{3}\w?[at])(?:\sbuild|;)/i],[MODEL,[VENDOR,"Vivo"],[TYPE,MOBILE]],[/\s(rmx[12]\d{3})(?:\sbuild|;)/i],[MODEL,[VENDOR,"Realme"],[TYPE,MOBILE]],[/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)\b[\w\s]+build\//i,/\smot(?:orola)?[\s-](\w*)/i,/((?:moto[\s\w\(\)]+|xt\d{3,4}|nexus\s6)(?=\sbuild|\)))/i],[MODEL,[VENDOR,"Motorola"],[TYPE,MOBILE]],[/\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i],[MODEL,[VENDOR,"Motorola"],[TYPE,TABLET]],[/((?=lg)?[vl]k\-?\d{3})\sbuild|\s3\.[\s\w;-]{10}lg?-([06cv9]{3,4})/i],[MODEL,[VENDOR,"LG"],[TYPE,TABLET]],[/(lm-?f100[nv]?|nexus\s[45])/i,/lg[e;\s\/-]+((?!browser|netcast)\w+)/i,/\blg(\-?[\d\w]+)\sbuild/i],[MODEL,[VENDOR,"LG"],[TYPE,MOBILE]],[/(ideatab[\w\-\s]+)/i,/lenovo\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+)|yt[\d\w-]{6}|tb[\d\w-]{6})/i],[MODEL,[VENDOR,"Lenovo"],[TYPE,TABLET]],[/(?:maemo|nokia).*(n900|lumia\s\d+)/i,/nokia[\s_-]?([\w\.-]*)/i],[[MODEL,/_/g," "],[VENDOR,"Nokia"],[TYPE,MOBILE]],[/droid.+;\s(pixel\sc)[\s)]/i],[MODEL,[VENDOR,"Google"],[TYPE,TABLET]],[/droid.+;\s(pixel[\s\daxl]{0,6})(?:\sbuild|\))/i],[MODEL,[VENDOR,"Google"],[TYPE,MOBILE]],[/droid.+\s([c-g]\d{4}|so[-l]\w+|xq-a\w[4-7][12])(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[MODEL,[VENDOR,"Sony"],[TYPE,MOBILE]],[/sony\stablet\s[ps]\sbuild\//i,/(?:sony)?sgp\w+(?:\sbuild\/|\))/i],[[MODEL,"Xperia Tablet"],[VENDOR,"Sony"],[TYPE,TABLET]],[/\s(kb2005|in20[12]5|be20[12][59])\b/i,/\ba000(1)\sbuild/i,/\boneplus\s(a\d{4})[\s)]/i],[MODEL,[VENDOR,"OnePlus"],[TYPE,MOBILE]],[/(alexa)webm/i,/(kf[a-z]{2}wi)(\sbuild\/|\))/i,/(kf[a-z]+)(\sbuild\/|\)).+silk\//i],[MODEL,[VENDOR,"Amazon"],[TYPE,TABLET]],[/(sd|kf)[0349hijorstuw]+(\sbuild\/|\)).+silk\//i],[[MODEL,"Fire Phone"],[VENDOR,"Amazon"],[TYPE,MOBILE]],[/\((playbook);[\w\s\),;-]+(rim)/i],[MODEL,VENDOR,[TYPE,TABLET]],[/((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10;\s(\w+)/i],[MODEL,[VENDOR,"BlackBerry"],[TYPE,MOBILE]],[/(?:\b|asus_)(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus\s7|padfone|p00[cj])/i],[MODEL,[VENDOR,"ASUS"],[TYPE,TABLET]],[/\s(z[es]6[027][01][km][ls]|zenfone\s\d\w?)\b/i],[MODEL,[VENDOR,"ASUS"],[TYPE,MOBILE]],[/(nexus\s9)/i],[MODEL,[VENDOR,"HTC"],[TYPE,TABLET]],[/(htc)[;_\s-]{1,2}([\w\s]+(?=\)|\sbuild)|\w+)/i,/(zte)-(\w*)/i,/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i],[VENDOR,[MODEL,/_/g," "],[TYPE,MOBILE]],[/droid[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i],[MODEL,[VENDOR,"Acer"],[TYPE,TABLET]],[/droid.+;\s(m[1-5]\snote)\sbuild/i,/\bmz-([\w-]{2,})/i],[MODEL,[VENDOR,"Meizu"],[TYPE,MOBILE]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i,/(hp)\s([\w\s]+\w)/i,/(asus)-?(\w+)/i,/(microsoft);\s(lumia[\s\w]+)/i,/(lenovo)[_\s-]?([\w-]+)/i,/linux;.+(jolla);/i,/droid.+;\s(oppo)\s?([\w\s]+)\sbuild/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/(archos)\s(gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/\s(nook)[\w\s]+build\/(\w+)/i,/(dell)\s(strea[kpr\s\d]*[\dko])/i,/[;\/]\s?(le[\s\-]+pan)[\s\-]+(\w{1,9})\sbuild/i,/[;\/]\s?(trinity)[\-\s]*(t\d{3})\sbuild/i,/\b(gigaset)[\s\-]+(q\w{1,9})\sbuild/i,/\b(vodafone)\s([\w\s]+)(?:\)|\sbuild)/i],[VENDOR,MODEL,[TYPE,TABLET]],[/\s(surface\sduo)\s/i],[MODEL,[VENDOR,"Microsoft"],[TYPE,TABLET]],[/droid\s[\d\.]+;\s(fp\du?)\sbuild/i],[MODEL,[VENDOR,"Fairphone"],[TYPE,MOBILE]],[/\s(u304aa)\sbuild/i],[MODEL,[VENDOR,"AT&T"],[TYPE,MOBILE]],[/sie-(\w*)/i],[MODEL,[VENDOR,"Siemens"],[TYPE,MOBILE]],[/[;\/]\s?(rct\w+)\sbuild/i],[MODEL,[VENDOR,"RCA"],[TYPE,TABLET]],[/[;\/\s](venue[\d\s]{2,7})\sbuild/i],[MODEL,[VENDOR,"Dell"],[TYPE,TABLET]],[/[;\/]\s?(q(?:mv|ta)\w+)\sbuild/i],[MODEL,[VENDOR,"Verizon"],[TYPE,TABLET]],[/[;\/]\s(?:barnes[&\s]+noble\s|bn[rt])([\w\s\+]*)\sbuild/i],[MODEL,[VENDOR,"Barnes & Noble"],[TYPE,TABLET]],[/[;\/]\s(tm\d{3}\w+)\sbuild/i],[MODEL,[VENDOR,"NuVision"],[TYPE,TABLET]],[/;\s(k88)\sbuild/i],[MODEL,[VENDOR,"ZTE"],[TYPE,TABLET]],[/;\s(nx\d{3}j)\sbuild/i],[MODEL,[VENDOR,"ZTE"],[TYPE,MOBILE]],[/[;\/]\s?(gen\d{3})\sbuild.*49h/i],[MODEL,[VENDOR,"Swiss"],[TYPE,MOBILE]],[/[;\/]\s?(zur\d{3})\sbuild/i],[MODEL,[VENDOR,"Swiss"],[TYPE,TABLET]],[/[;\/]\s?((zeki)?tb.*\b)\sbuild/i],[MODEL,[VENDOR,"Zeki"],[TYPE,TABLET]],[/[;\/]\s([yr]\d{2})\sbuild/i,/[;\/]\s(dragon[\-\s]+touch\s|dt)(\w{5})\sbuild/i],[[VENDOR,"Dragon Touch"],MODEL,[TYPE,TABLET]],[/[;\/]\s?(ns-?\w{0,9})\sbuild/i],[MODEL,[VENDOR,"Insignia"],[TYPE,TABLET]],[/[;\/]\s?((nxa|Next)-?\w{0,9})\sbuild/i],[MODEL,[VENDOR,"NextBook"],[TYPE,TABLET]],[/[;\/]\s?(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05]))\sbuild/i],[[VENDOR,"Voice"],MODEL,[TYPE,MOBILE]],[/[;\/]\s?(lvtel\-)?(v1[12])\sbuild/i],[[VENDOR,"LvTel"],MODEL,[TYPE,MOBILE]],[/;\s(ph-1)\s/i],[MODEL,[VENDOR,"Essential"],[TYPE,MOBILE]],[/[;\/]\s?(v(100md|700na|7011|917g).*\b)\sbuild/i],[MODEL,[VENDOR,"Envizen"],[TYPE,TABLET]],[/[;\/]\s?(trio[\s\w\-\.]+)\sbuild/i],[MODEL,[VENDOR,"MachSpeed"],[TYPE,TABLET]],[/[;\/]\s?tu_(1491)\sbuild/i],[MODEL,[VENDOR,"Rotor"],[TYPE,TABLET]],[/(shield[\w\s]+)\sbuild/i],[MODEL,[VENDOR,"Nvidia"],[TYPE,TABLET]],[/(sprint)\s(\w+)/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/(kin\.[onetw]{3})/i],[[MODEL,/\./g," "],[VENDOR,"Microsoft"],[TYPE,MOBILE]],[/droid\s[\d\.]+;\s(cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[MODEL,[VENDOR,"Zebra"],[TYPE,TABLET]],[/droid\s[\d\.]+;\s(ec30|ps20|tc[2-8]\d[kx])\)/i],[MODEL,[VENDOR,"Zebra"],[TYPE,MOBILE]],[/\s(ouya)\s/i,/(nintendo)\s([wids3utch]+)/i],[VENDOR,MODEL,[TYPE,CONSOLE]],[/droid.+;\s(shield)\sbuild/i],[MODEL,[VENDOR,"Nvidia"],[TYPE,CONSOLE]],[/(playstation\s[345portablevi]+)/i],[MODEL,[VENDOR,"Sony"],[TYPE,CONSOLE]],[/[\s\(;](xbox(?:\sone)?(?!;\sxbox))[\s\);]/i],[MODEL,[VENDOR,"Microsoft"],[TYPE,CONSOLE]],[/smart-tv.+(samsung)/i],[VENDOR,[TYPE,SMARTTV]],[/hbbtv.+maple;(\d+)/i],[[MODEL,/^/,"SmartTV"],[VENDOR,"Samsung"],[TYPE,SMARTTV]],[/(?:linux;\snetcast.+smarttv|lg\snetcast\.tv-201\d)/i],[[VENDOR,"LG"],[TYPE,SMARTTV]],[/(apple)\s?tv/i],[VENDOR,[MODEL,"Apple TV"],[TYPE,SMARTTV]],[/crkey/i],[[MODEL,"Chromecast"],[VENDOR,"Google"],[TYPE,SMARTTV]],[/droid.+aft([\w])(\sbuild\/|\))/i],[MODEL,[VENDOR,"Amazon"],[TYPE,SMARTTV]],[/\(dtv[\);].+(aquos)/i],[MODEL,[VENDOR,"Sharp"],[TYPE,SMARTTV]],[/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i],[[VENDOR,util.trim],[MODEL,util.trim],[TYPE,SMARTTV]],[/[\s\/\(](android\s|smart[-\s]?|opera\s)tv[;\)\s]/i],[[TYPE,SMARTTV]],[/((pebble))app\/[\d\.]+\s/i],[VENDOR,MODEL,[TYPE,WEARABLE]],[/droid.+;\s(glass)\s\d/i],[MODEL,[VENDOR,"Google"],[TYPE,WEARABLE]],[/droid\s[\d\.]+;\s(wt63?0{2,3})\)/i],[MODEL,[VENDOR,"Zebra"],[TYPE,WEARABLE]],[/(tesla)(?:\sqtcarbrowser|\/20[12]\d\.[\w\.-]+)/i],[VENDOR,[TYPE,EMBEDDED]],[/droid .+?; ([^;]+?)(?: build|\) applewebkit).+? mobile safari/i],[MODEL,[TYPE,MOBILE]],[/droid .+?;\s([^;]+?)(?: build|\) applewebkit).+?(?! mobile) safari/i],[MODEL,[TYPE,TABLET]],[/\s(tablet|tab)[;\/]/i,/\s(mobile)(?:[;\/]|\ssafari)/i],[[TYPE,util.lowerize]],[/(android[\w\.\s\-]{0,9});.+build/i],[MODEL,[VENDOR,"Generic"]],[/(phone)/i],[[TYPE,MOBILE]]],engine:[[/windows.+\sedge\/([\w\.]+)/i],[VERSION,[NAME,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[VERSION,[NAME,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[NAME,VERSION],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[VERSION,NAME]],os:[[/microsoft\s(windows)\s(vista|xp)/i],[NAME,VERSION],[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i,/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)(?!.+xbox)/i],[NAME,[VERSION,mapper.str,maps.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[NAME,"Windows"],[VERSION,mapper.str,maps.os.windows.version]],[/ip[honead]{2,4}\b(?:.*os\s([\w]+)\slike\smac|;\sopera)/i,/cfnetwork\/.+darwin/i],[[VERSION,/_/g,"."],[NAME,"iOS"]],[/(mac\sos\sx)\s?([\w\s\.]*)/i,/(macintosh|mac(?=_powerpc)\s)(?!.+haiku)/i],[[NAME,"Mac OS"],[VERSION,/_/g,"."]],[/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/\s]([\w\.]+)/i,/\((series40);/i],[NAME,VERSION],[/\(bb(10);/i],[VERSION,[NAME,"BlackBerry"]],[/(?:symbian\s?os|symbos|s60(?=;)|series60)[\/\s-]?([\w\.]*)/i],[VERSION,[NAME,"Symbian"]],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[NAME,"Firefox OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[VERSION,[NAME,"webOS"]],[/crkey\/([\d\.]+)/i],[VERSION,[NAME,"Chromecast"]],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[NAME,"Chromium OS"],VERSION],[/(nintendo|playstation)\s([wids345portablevuch]+)/i,/(xbox);\s+xbox\s([^\);]+)/i,/(mint)[\/\s\(\)]?(\w*)/i,/(mageia|vectorlinux)[;\s]/i,/(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?=\slinux)|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus|raspbian)(?:\sgnu\/linux)?(?:\slinux)?[\/\s-]?(?!chrom|package)([\w\.-]*)/i,/(hurd|linux)\s?([\w\.]*)/i,/(gnu)\s?([\w\.]*)/i,/\s([frentopc-]{0,4}bsd|dragonfly)\s?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku)\s(\w+)/i],[NAME,VERSION],[/(sunos)\s?([\w\.\d]*)/i],[[NAME,"Solaris"],VERSION],[/((?:open)?solaris)[\/\s-]?([\w\.]*)/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i,/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i,/(unix)\s?([\w\.]*)/i],[NAME,VERSION]]};var UAParser=function(ua,extensions){if(typeof ua==="object"){extensions=ua;ua=undefined}if(!(this instanceof UAParser)){return new UAParser(ua,extensions).getResult()}var _ua=ua||(typeof window!=="undefined"&&window.navigator&&window.navigator.userAgent?window.navigator.userAgent:EMPTY);var _rgxmap=extensions?util.extend(regexes,extensions):regexes;this.getBrowser=function(){var _browser={name:undefined,version:undefined};mapper.rgx.call(_browser,_ua,_rgxmap.browser);_browser.major=util.major(_browser.version);return _browser};this.getCPU=function(){var _cpu={architecture:undefined};mapper.rgx.call(_cpu,_ua,_rgxmap.cpu);return _cpu};this.getDevice=function(){var _device={vendor:undefined,model:undefined,type:undefined};mapper.rgx.call(_device,_ua,_rgxmap.device);return _device};this.getEngine=function(){var _engine={name:undefined,version:undefined};mapper.rgx.call(_engine,_ua,_rgxmap.engine);return _engine};this.getOS=function(){var _os={name:undefined,version:undefined};mapper.rgx.call(_os,_ua,_rgxmap.os);return _os};this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}};this.getUA=function(){return _ua};this.setUA=function(ua){_ua=typeof ua===STR_TYPE&&ua.length>UA_MAX_LENGTH?util.trim(ua,UA_MAX_LENGTH):ua;return this};this.setUA(_ua);return this};UAParser.VERSION=LIBVERSION;UAParser.BROWSER={NAME:NAME,MAJOR:MAJOR,VERSION:VERSION};UAParser.CPU={ARCHITECTURE:ARCHITECTURE};UAParser.DEVICE={MODEL:MODEL,VENDOR:VENDOR,TYPE:TYPE,CONSOLE:CONSOLE,MOBILE:MOBILE,SMARTTV:SMARTTV,TABLET:TABLET,WEARABLE:WEARABLE,EMBEDDED:EMBEDDED};UAParser.ENGINE={NAME:NAME,VERSION:VERSION};UAParser.OS={NAME:NAME,VERSION:VERSION};if(typeof exports!==UNDEF_TYPE){if(typeof module!==UNDEF_TYPE&&module.exports){exports=module.exports=UAParser}exports.UAParser=UAParser}else{if(typeof define==="function"&&define.amd){define(function(){return UAParser})}else if(typeof window!=="undefined"){window.UAParser=UAParser}}var $=typeof window!=="undefined"&&(window.jQuery||window.Zepto);if($&&!$.ua){var parser=new UAParser;$.ua=parser.getResult();$.ua.get=function(){return parser.getUA()};$.ua.set=function(uastring){parser.setUA(uastring);var result=parser.getResult();for(var prop in result){$.ua[prop]=result[prop]}}}})(typeof window==="object"?window:this);
     1/* UAParser.js v0.7.31
     2   Copyright © 2012-2021 Faisal Salman <f@faisalman.com>
     3   MIT License */
     4(function(window,undefined){"use strict";var LIBVERSION="0.7.31",EMPTY="",UNKNOWN="?",FUNC_TYPE="function",UNDEF_TYPE="undefined",OBJ_TYPE="object",STR_TYPE="string",MAJOR="major",MODEL="model",NAME="name",TYPE="type",VENDOR="vendor",VERSION="version",ARCHITECTURE="architecture",CONSOLE="console",MOBILE="mobile",TABLET="tablet",SMARTTV="smarttv",WEARABLE="wearable",EMBEDDED="embedded",UA_MAX_LENGTH=255;var AMAZON="Amazon",APPLE="Apple",ASUS="ASUS",BLACKBERRY="BlackBerry",BROWSER="Browser",CHROME="Chrome",EDGE="Edge",FIREFOX="Firefox",GOOGLE="Google",HUAWEI="Huawei",LG="LG",MICROSOFT="Microsoft",MOTOROLA="Motorola",OPERA="Opera",SAMSUNG="Samsung",SONY="Sony",XIAOMI="Xiaomi",ZEBRA="Zebra",FACEBOOK="Facebook";var extend=function(regexes,extensions){var mergedRegexes={};for(var i in regexes){if(extensions[i]&&extensions[i].length%2===0){mergedRegexes[i]=extensions[i].concat(regexes[i])}else{mergedRegexes[i]=regexes[i]}}return mergedRegexes},enumerize=function(arr){var enums={};for(var i=0;i<arr.length;i++){enums[arr[i].toUpperCase()]=arr[i]}return enums},has=function(str1,str2){return typeof str1===STR_TYPE?lowerize(str2).indexOf(lowerize(str1))!==-1:false},lowerize=function(str){return str.toLowerCase()},majorize=function(version){return typeof version===STR_TYPE?version.replace(/[^\d\.]/g,EMPTY).split(".")[0]:undefined},trim=function(str,len){if(typeof str===STR_TYPE){str=str.replace(/^\s\s*/,EMPTY).replace(/\s\s*$/,EMPTY);return typeof len===UNDEF_TYPE?str:str.substring(0,UA_MAX_LENGTH)}};var rgxMapper=function(ua,arrays){var i=0,j,k,p,q,matches,match;while(i<arrays.length&&!matches){var regex=arrays[i],props=arrays[i+1];j=k=0;while(j<regex.length&&!matches){matches=regex[j++].exec(ua);if(!!matches){for(p=0;p<props.length;p++){match=matches[++k];q=props[p];if(typeof q===OBJ_TYPE&&q.length>0){if(q.length===2){if(typeof q[1]==FUNC_TYPE){this[q[0]]=q[1].call(this,match)}else{this[q[0]]=q[1]}}else if(q.length===3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){this[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{this[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length===4){this[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{this[q]=match?match:undefined}}}}i+=2}},strMapper=function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j<map[i].length;j++){if(has(map[i][j],str)){return i===UNKNOWN?undefined:i}}}else if(has(map[i],str)){return i===UNKNOWN?undefined:i}}return str};var oldSafariMap={"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"},windowsVersionMap={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"};var regexes={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[VERSION,[NAME,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[VERSION,[NAME,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[NAME,VERSION],[/opios[\/ ]+([\w\.]+)/i],[VERSION,[NAME,OPERA+" Mini"]],[/\bopr\/([\w\.]+)/i],[VERSION,[NAME,OPERA]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,/(ba?idubrowser)[\/ ]?([\w\.]+)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([-\w\.]+)/i,/(weibo)__([\d\.]+)/i],[NAME,VERSION],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[VERSION,[NAME,"UC"+BROWSER]],[/\bqbcore\/([\w\.]+)/i],[VERSION,[NAME,"WeChat(Win) Desktop"]],[/micromessenger\/([\w\.]+)/i],[VERSION,[NAME,"WeChat"]],[/konqueror\/([\w\.]+)/i],[VERSION,[NAME,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[VERSION,[NAME,"IE"]],[/yabrowser\/([\w\.]+)/i],[VERSION,[NAME,"Yandex"]],[/(avast|avg)\/([\w\.]+)/i],[[NAME,/(.+)/,"$1 Secure "+BROWSER],VERSION],[/\bfocus\/([\w\.]+)/i],[VERSION,[NAME,FIREFOX+" Focus"]],[/\bopt\/([\w\.]+)/i],[VERSION,[NAME,OPERA+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[VERSION,[NAME,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[VERSION,[NAME,"Dolphin"]],[/coast\/([\w\.]+)/i],[VERSION,[NAME,OPERA+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[VERSION,[NAME,"MIUI "+BROWSER]],[/fxios\/([-\w\.]+)/i],[VERSION,[NAME,FIREFOX]],[/\bqihu|(qi?ho?o?|360)browser/i],[[NAME,"360 "+BROWSER]],[/(oculus|samsung|sailfish)browser\/([\w\.]+)/i],[[NAME,/(.+)/,"$1 "+BROWSER],VERSION],[/(comodo_dragon)\/([\w\.]+)/i],[[NAME,/_/g," "],VERSION],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i],[NAME,VERSION],[/(metasr)[\/ ]?([\w\.]+)/i,/(lbbrowser)/i],[NAME],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[NAME,FACEBOOK],VERSION],[/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(chromium|instagram)[\/ ]([-\w\.]+)/i],[NAME,VERSION],[/\bgsa\/([\w\.]+) .*safari\//i],[VERSION,[NAME,"GSA"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[VERSION,[NAME,CHROME+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[NAME,CHROME+" WebView"],VERSION],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[VERSION,[NAME,"Android "+BROWSER]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[NAME,VERSION],[/version\/([\w\.]+) .*mobile\/\w+ (safari)/i],[VERSION,[NAME,"Mobile Safari"]],[/version\/([\w\.]+) .*(mobile ?safari|safari)/i],[VERSION,NAME],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[NAME,[VERSION,strMapper,oldSafariMap]],[/(webkit|khtml)\/([\w\.]+)/i],[NAME,VERSION],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[NAME,"Netscape"],VERSION],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[VERSION,[NAME,FIREFOX+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i],[NAME,VERSION]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[ARCHITECTURE,"amd64"]],[/(ia32(?=;))/i],[[ARCHITECTURE,lowerize]],[/((?:i[346]|x)86)[;\)]/i],[[ARCHITECTURE,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[ARCHITECTURE,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[ARCHITECTURE,"armhf"]],[/windows (ce|mobile); ppc;/i],[[ARCHITECTURE,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[ARCHITECTURE,/ower/,EMPTY,lowerize]],[/(sun4\w)[;\)]/i],[[ARCHITECTURE,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[ARCHITECTURE,lowerize]]],device:[[/\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],[MODEL,[VENDOR,SAMSUNG],[TYPE,TABLET]],[/\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[MODEL,[VENDOR,SAMSUNG],[TYPE,MOBILE]],[/\((ip(?:hone|od)[\w ]*);/i],[MODEL,[VENDOR,APPLE],[TYPE,MOBILE]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[MODEL,[VENDOR,APPLE],[TYPE,TABLET]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[MODEL,[VENDOR,HUAWEI],[TYPE,TABLET]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}-[atu]?[ln][01259x][012359][an]?)\b(?!.+d\/s)/i],[MODEL,[VENDOR,HUAWEI],[TYPE,MOBILE]],[/\b(poco[\w ]+)(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[MODEL,/_/g," "],[VENDOR,XIAOMI],[TYPE,MOBILE]],[/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[MODEL,/_/g," "],[VENDOR,XIAOMI],[TYPE,TABLET]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[MODEL,[VENDOR,"OPPO"],[TYPE,MOBILE]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[MODEL,[VENDOR,"Vivo"],[TYPE,MOBILE]],[/\b(rmx[12]\d{3})(?: bui|;|\))/i],[MODEL,[VENDOR,"Realme"],[TYPE,MOBILE]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[MODEL,[VENDOR,MOTOROLA],[TYPE,MOBILE]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[MODEL,[VENDOR,MOTOROLA],[TYPE,TABLET]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[MODEL,[VENDOR,LG],[TYPE,TABLET]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[MODEL,[VENDOR,LG],[TYPE,MOBILE]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[MODEL,[VENDOR,"Lenovo"],[TYPE,TABLET]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[MODEL,/_/g," "],[VENDOR,"Nokia"],[TYPE,MOBILE]],[/(pixel c)\b/i],[MODEL,[VENDOR,GOOGLE],[TYPE,TABLET]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[MODEL,[VENDOR,GOOGLE],[TYPE,MOBILE]],[/droid.+ ([c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[MODEL,[VENDOR,SONY],[TYPE,MOBILE]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[MODEL,"Xperia Tablet"],[VENDOR,SONY],[TYPE,TABLET]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[MODEL,[VENDOR,"OnePlus"],[TYPE,MOBILE]],[/(alexa)webm/i,/(kf[a-z]{2}wi)( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[MODEL,[VENDOR,AMAZON],[TYPE,TABLET]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[MODEL,/(.+)/g,"Fire Phone $1"],[VENDOR,AMAZON],[TYPE,MOBILE]],[/(playbook);[-\w\),; ]+(rim)/i],[MODEL,VENDOR,[TYPE,TABLET]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[MODEL,[VENDOR,BLACKBERRY],[TYPE,MOBILE]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[MODEL,[VENDOR,ASUS],[TYPE,TABLET]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[MODEL,[VENDOR,ASUS],[TYPE,MOBILE]],[/(nexus 9)/i],[MODEL,[VENDOR,"HTC"],[TYPE,TABLET]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\w]*)/i],[VENDOR,[MODEL,/_/g," "],[TYPE,MOBILE]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[MODEL,[VENDOR,"Acer"],[TYPE,TABLET]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[MODEL,[VENDOR,"Meizu"],[TYPE,MOBILE]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[MODEL,[VENDOR,"Sharp"],[TYPE,MOBILE]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[VENDOR,MODEL,[TYPE,TABLET]],[/(surface duo)/i],[MODEL,[VENDOR,MICROSOFT],[TYPE,TABLET]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[MODEL,[VENDOR,"Fairphone"],[TYPE,MOBILE]],[/(u304aa)/i],[MODEL,[VENDOR,"AT&T"],[TYPE,MOBILE]],[/\bsie-(\w*)/i],[MODEL,[VENDOR,"Siemens"],[TYPE,MOBILE]],[/\b(rct\w+) b/i],[MODEL,[VENDOR,"RCA"],[TYPE,TABLET]],[/\b(venue[\d ]{2,7}) b/i],[MODEL,[VENDOR,"Dell"],[TYPE,TABLET]],[/\b(q(?:mv|ta)\w+) b/i],[MODEL,[VENDOR,"Verizon"],[TYPE,TABLET]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[MODEL,[VENDOR,"Barnes & Noble"],[TYPE,TABLET]],[/\b(tm\d{3}\w+) b/i],[MODEL,[VENDOR,"NuVision"],[TYPE,TABLET]],[/\b(k88) b/i],[MODEL,[VENDOR,"ZTE"],[TYPE,TABLET]],[/\b(nx\d{3}j) b/i],[MODEL,[VENDOR,"ZTE"],[TYPE,MOBILE]],[/\b(gen\d{3}) b.+49h/i],[MODEL,[VENDOR,"Swiss"],[TYPE,MOBILE]],[/\b(zur\d{3}) b/i],[MODEL,[VENDOR,"Swiss"],[TYPE,TABLET]],[/\b((zeki)?tb.*\b) b/i],[MODEL,[VENDOR,"Zeki"],[TYPE,TABLET]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[VENDOR,"Dragon Touch"],MODEL,[TYPE,TABLET]],[/\b(ns-?\w{0,9}) b/i],[MODEL,[VENDOR,"Insignia"],[TYPE,TABLET]],[/\b((nxa|next)-?\w{0,9}) b/i],[MODEL,[VENDOR,"NextBook"],[TYPE,TABLET]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[VENDOR,"Voice"],MODEL,[TYPE,MOBILE]],[/\b(lvtel\-)?(v1[12]) b/i],[[VENDOR,"LvTel"],MODEL,[TYPE,MOBILE]],[/\b(ph-1) /i],[MODEL,[VENDOR,"Essential"],[TYPE,MOBILE]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[MODEL,[VENDOR,"Envizen"],[TYPE,TABLET]],[/\b(trio[-\w\. ]+) b/i],[MODEL,[VENDOR,"MachSpeed"],[TYPE,TABLET]],[/\btu_(1491) b/i],[MODEL,[VENDOR,"Rotor"],[TYPE,TABLET]],[/(shield[\w ]+) b/i],[MODEL,[VENDOR,"Nvidia"],[TYPE,TABLET]],[/(sprint) (\w+)/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/(kin\.[onetw]{3})/i],[[MODEL,/\./g," "],[VENDOR,MICROSOFT],[TYPE,MOBILE]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[MODEL,[VENDOR,ZEBRA],[TYPE,TABLET]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[MODEL,[VENDOR,ZEBRA],[TYPE,MOBILE]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[VENDOR,MODEL,[TYPE,CONSOLE]],[/droid.+; (shield) bui/i],[MODEL,[VENDOR,"Nvidia"],[TYPE,CONSOLE]],[/(playstation [345portablevi]+)/i],[MODEL,[VENDOR,SONY],[TYPE,CONSOLE]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[MODEL,[VENDOR,MICROSOFT],[TYPE,CONSOLE]],[/smart-tv.+(samsung)/i],[VENDOR,[TYPE,SMARTTV]],[/hbbtv.+maple;(\d+)/i],[[MODEL,/^/,"SmartTV"],[VENDOR,SAMSUNG],[TYPE,SMARTTV]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[VENDOR,LG],[TYPE,SMARTTV]],[/(apple) ?tv/i],[VENDOR,[MODEL,APPLE+" TV"],[TYPE,SMARTTV]],[/crkey/i],[[MODEL,CHROME+"cast"],[VENDOR,GOOGLE],[TYPE,SMARTTV]],[/droid.+aft(\w)( bui|\))/i],[MODEL,[VENDOR,AMAZON],[TYPE,SMARTTV]],[/\(dtv[\);].+(aquos)/i],[MODEL,[VENDOR,"Sharp"],[TYPE,SMARTTV]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i],[[VENDOR,trim],[MODEL,trim],[TYPE,SMARTTV]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[TYPE,SMARTTV]],[/((pebble))app/i],[VENDOR,MODEL,[TYPE,WEARABLE]],[/droid.+; (glass) \d/i],[MODEL,[VENDOR,GOOGLE],[TYPE,WEARABLE]],[/droid.+; (wt63?0{2,3})\)/i],[MODEL,[VENDOR,ZEBRA],[TYPE,WEARABLE]],[/(quest( 2)?)/i],[MODEL,[VENDOR,FACEBOOK],[TYPE,WEARABLE]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[VENDOR,[TYPE,EMBEDDED]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i],[MODEL,[TYPE,MOBILE]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[MODEL,[TYPE,TABLET]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[TYPE,TABLET]],[/(phone|mobile(?:[;\/]| safari)|pda(?=.+windows ce))/i],[[TYPE,MOBILE]],[/(android[-\w\. ]{0,9});.+buil/i],[MODEL,[VENDOR,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[VERSION,[NAME,EDGE+"HTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[VERSION,[NAME,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i],[NAME,VERSION],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[VERSION,NAME]],os:[[/microsoft (windows) (vista|xp)/i],[NAME,VERSION],[/(windows) nt 6\.2; (arm)/i,/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,/(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i],[NAME,[VERSION,strMapper,windowsVersionMap]],[/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[NAME,"Windows"],[VERSION,strMapper,windowsVersionMap]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/cfnetwork\/.+darwin/i],[[VERSION,/_/g,"."],[NAME,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[NAME,"Mac OS"],[VERSION,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86)/i],[VERSION,NAME],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[NAME,VERSION],[/\(bb(10);/i],[VERSION,[NAME,BLACKBERRY]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[VERSION,[NAME,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[VERSION,[NAME,FIREFOX+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[VERSION,[NAME,"webOS"]],[/crkey\/([\d\.]+)/i],[VERSION,[NAME,CHROME+"cast"]],[/(cros) [\w]+ ([\w\.]+\w)/i],[[NAME,"Chromium OS"],VERSION],[/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([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,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[NAME,VERSION],[/(sunos) ?([\w\.\d]*)/i],[[NAME,"Solaris"],VERSION],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i,/(unix) ?([\w\.]*)/i],[NAME,VERSION]]};var UAParser=function(ua,extensions){if(typeof ua===OBJ_TYPE){extensions=ua;ua=undefined}if(!(this instanceof UAParser)){return new UAParser(ua,extensions).getResult()}var _ua=ua||(typeof window!==UNDEF_TYPE&&window.navigator&&window.navigator.userAgent?window.navigator.userAgent:EMPTY);var _rgxmap=extensions?extend(regexes,extensions):regexes;this.getBrowser=function(){var _browser={};_browser[NAME]=undefined;_browser[VERSION]=undefined;rgxMapper.call(_browser,_ua,_rgxmap.browser);_browser.major=majorize(_browser.version);return _browser};this.getCPU=function(){var _cpu={};_cpu[ARCHITECTURE]=undefined;rgxMapper.call(_cpu,_ua,_rgxmap.cpu);return _cpu};this.getDevice=function(){var _device={};_device[VENDOR]=undefined;_device[MODEL]=undefined;_device[TYPE]=undefined;rgxMapper.call(_device,_ua,_rgxmap.device);return _device};this.getEngine=function(){var _engine={};_engine[NAME]=undefined;_engine[VERSION]=undefined;rgxMapper.call(_engine,_ua,_rgxmap.engine);return _engine};this.getOS=function(){var _os={};_os[NAME]=undefined;_os[VERSION]=undefined;rgxMapper.call(_os,_ua,_rgxmap.os);return _os};this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}};this.getUA=function(){return _ua};this.setUA=function(ua){_ua=typeof ua===STR_TYPE&&ua.length>UA_MAX_LENGTH?trim(ua,UA_MAX_LENGTH):ua;return this};this.setUA(_ua);return this};UAParser.VERSION=LIBVERSION;UAParser.BROWSER=enumerize([NAME,VERSION,MAJOR]);UAParser.CPU=enumerize([ARCHITECTURE]);UAParser.DEVICE=enumerize([MODEL,VENDOR,TYPE,CONSOLE,MOBILE,SMARTTV,TABLET,WEARABLE,EMBEDDED]);UAParser.ENGINE=UAParser.OS=enumerize([NAME,VERSION]);if(typeof exports!==UNDEF_TYPE){if(typeof module!==UNDEF_TYPE&&module.exports){exports=module.exports=UAParser}exports.UAParser=UAParser}else{if(typeof define===FUNC_TYPE&&define.amd){define(function(){return UAParser})}else if(typeof window!==UNDEF_TYPE){window.UAParser=UAParser}}var $=typeof window!==UNDEF_TYPE&&(window.jQuery||window.Zepto);if($&&!$.ua){var parser=new UAParser;$.ua=parser.getResult();$.ua.get=function(){return parser.getUA()};$.ua.set=function(ua){parser.setUA(ua);var result=parser.getResult();for(var prop in result){$.ua[prop]=result[prop]}}}})(typeof window==="object"?window:this);
  • trip-planner-front/node_modules/ua-parser-js/dist/ua-parser.pack.js

    r59329aa re29cc2e  
    1 /*!@license
    2  * UAParser.js v0.7.28
    3  * Lightweight JavaScript-based User-Agent string parser
    4  * https://github.com/faisalman/ua-parser-js
    5  *
    6  * Copyright © 2012-2021 Faisal Salman <f@faisalman.com>
    7  * Licensed under MIT License
    8  */
    9 !function(r,b){"use strict";var u="function",e="undefined",c="object",a="string",i="model",s="name",o="type",n="vendor",t="version",l="architecture",w="console",d="mobile",m="tablet",p="smarttv",f="wearable",h="embedded",g={extend:function(i,s){var e,o={};for(e in i)s[e]&&s[e].length%2==0?o[e]=s[e].concat(i[e]):o[e]=i[e];return o},has:function(i,s){return typeof i==a&&-1!==s.toLowerCase().indexOf(i.toLowerCase())},lowerize:function(i){return i.toLowerCase()},major:function(i){return typeof i==a?i.replace(/[^\d\.]/g,"").split(".")[0]:b},trim:function(i,s){return i=i.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),typeof s==e?i:i.substring(0,255)}},v={rgx:function(i,s){for(var e,o,r,a,n,t=0;t<s.length&&!a;){for(var l=s[t],w=s[t+1],d=e=0;d<l.length&&!a;)if(a=l[d++].exec(i))for(o=0;o<w.length;o++)n=a[++e],typeof(r=w[o])==c&&0<r.length?2==r.length?typeof r[1]==u?this[r[0]]=r[1].call(this,n):this[r[0]]=r[1]:3==r.length?typeof r[1]!=u||r[1].exec&&r[1].test?this[r[0]]=n?n.replace(r[1],r[2]):b:this[r[0]]=n?r[1].call(this,n,r[2]):b:4==r.length&&(this[r[0]]=n?r[3].call(this,n.replace(r[1],r[2])):b):this[r]=n||b;t+=2}},str:function(i,s){for(var e in s)if(typeof s[e]==c&&0<s[e].length){for(var o=0;o<s[e].length;o++)if(g.has(s[e][o],i))return"?"===e?b:e}else if(g.has(s[e],i))return"?"===e?b:e;return i}},x={browser:{oldSafari:{version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}},oldEdge:{version:{.1:"12.",21:"13.",31:"14.",39:"15.",41:"16.",42:"17.",44:"18."}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"}}}},k={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[t,[s,"Chrome"]],[/(?:edge|edgios|edga|edg)\/([\w\.]+)/i],[t,[s,"Edge"]],[/(opera\smini)\/([\w\.-]+)/i,/(opera\s[mobiletab]{3,6})\b.+version\/([\w\.-]+)/i,/(opera)(?:.+version\/|[\/\s]+)([\w\.]+)/i],[s,t],[/opios[\/\s]+([\w\.]+)/i],[t,[s,"Opera Mini"]],[/\sopr\/([\w\.]+)/i],[t,[s,"Opera"]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i,/(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i,/(ba?idubrowser)[\/\s]?([\w\.]+)/i,/(?:ms|\()(ie)\s([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\/([\w\.-]+)/i,/(rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([\w\.]+)/i,/(weibo)__([\d\.]+)/i],[s,t],[/(?:[\s\/]uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i],[t,[s,"UCBrowser"]],[/(?:windowswechat)?\sqbcore\/([\w\.]+)\b.*(?:windowswechat)?/i],[t,[s,"WeChat(Win) Desktop"]],[/micromessenger\/([\w\.]+)/i],[t,[s,"WeChat"]],[/konqueror\/([\w\.]+)/i],[t,[s,"Konqueror"]],[/trident.+rv[:\s]([\w\.]{1,9})\b.+like\sgecko/i],[t,[s,"IE"]],[/yabrowser\/([\w\.]+)/i],[t,[s,"Yandex"]],[/(avast|avg)\/([\w\.]+)/i],[[s,/(.+)/,"$1 Secure Browser"],t],[/focus\/([\w\.]+)/i],[t,[s,"Firefox Focus"]],[/opt\/([\w\.]+)/i],[t,[s,"Opera Touch"]],[/coc_coc_browser\/([\w\.]+)/i],[t,[s,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[t,[s,"Dolphin"]],[/coast\/([\w\.]+)/i],[t,[s,"Opera Coast"]],[/xiaomi\/miuibrowser\/([\w\.]+)/i],[t,[s,"MIUI Browser"]],[/fxios\/([\w\.-]+)/i],[t,[s,"Firefox"]],[/(qihu|qhbrowser|qihoobrowser|360browser)/i],[[s,"360 Browser"]],[/(oculus|samsung|sailfish)browser\/([\w\.]+)/i],[[s,/(.+)/,"$1 Browser"],t],[/(comodo_dragon)\/([\w\.]+)/i],[[s,/_/g," "],t],[/\s(electron)\/([\w\.]+)\ssafari/i,/(tesla)(?:\sqtcarbrowser|\/(20[12]\d\.[\w\.-]+))/i,/m?(qqbrowser|baiduboxapp|2345Explorer)[\/\s]?([\w\.]+)/i],[s,t],[/(MetaSr)[\/\s]?([\w\.]+)/i,/(LBBROWSER)/i],[s],[/;fbav\/([\w\.]+);/i],[t,[s,"Facebook"]],[/FBAN\/FBIOS|FB_IAB\/FB4A/i],[[s,"Facebook"]],[/safari\s(line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(chromium|instagram)[\/\s]([\w\.-]+)/i],[s,t],[/\bgsa\/([\w\.]+)\s.*safari\//i],[t,[s,"GSA"]],[/headlesschrome(?:\/([\w\.]+)|\s)/i],[t,[s,"Chrome Headless"]],[/\swv\).+(chrome)\/([\w\.]+)/i],[[s,"Chrome WebView"],t],[/droid.+\sversion\/([\w\.]+)\b.+(?:mobile\ssafari|safari)/i],[t,[s,"Android Browser"]],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i],[s,t],[/version\/([\w\.]+)\s.*mobile\/\w+\s(safari)/i],[t,[s,"Mobile Safari"]],[/version\/([\w\.]+)\s.*(mobile\s?safari|safari)/i],[t,s],[/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i],[s,[t,v.str,x.browser.oldSafari.version]],[/(webkit|khtml)\/([\w\.]+)/i],[s,t],[/(navigator|netscape)\/([\w\.-]+)/i],[[s,"Netscape"],t],[/ile\svr;\srv:([\w\.]+)\).+firefox/i],[t,[s,"Firefox Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i,/(firefox)\/([\w\.]+)\s[\w\s\-]+\/[\w\.]+$/i,/(mozilla)\/([\w\.]+)\s.+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,/(links)\s\(([\w\.]+)/i,/(gobrowser)\/?([\w\.]*)/i,/(ice\s?browser)\/v?([\w\._]+)/i,/(mosaic)[\/\s]([\w\.]+)/i],[s,t]],cpu:[[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i],[[l,"amd64"]],[/(ia32(?=;))/i],[[l,g.lowerize]],[/((?:i[346]|x)86)[;\)]/i],[[l,"ia32"]],[/\b(aarch64|armv?8e?l?)\b/i],[[l,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[l,"armhf"]],[/windows\s(ce|mobile);\sppc;/i],[[l,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i],[[l,/ower/,"",g.lowerize]],[/(sun4\w)[;\)]/i],[[l,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?:64|(?=v(?:[1-7]|[5-7]1)l?|;|eabi))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[l,g.lowerize]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[pt]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus\s10)/i],[i,[n,"Samsung"],[o,m]],[/\b((?:s[cgp]h|gt|sm)-\w+|galaxy\snexus)/i,/\ssamsung[\s-]([\w-]+)/i,/sec-(sgh\w+)/i],[i,[n,"Samsung"],[o,d]],[/\((ip(?:hone|od)[\s\w]*);/i],[i,[n,"Apple"],[o,d]],[/\((ipad);[\w\s\),;-]+apple/i,/applecoremedia\/[\w\.]+\s\((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[i,[n,"Apple"],[o,m]],[/\b((?:agr|ags[23]|bah2?|sht?)-a?[lw]\d{2})/i],[i,[n,"Huawei"],[o,m]],[/d\/huawei([\w\s-]+)[;\)]/i,/\b(nexus\s6p|vog-[at]?l\d\d|ane-[at]?l[x\d]\d|eml-a?l\d\da?|lya-[at]?l\d[\dc]|clt-a?l\d\di?|ele-l\d\d)/i,/\b(\w{2,4}-[atu][ln][01259][019])[;\)\s]/i],[i,[n,"Huawei"],[o,d]],[/\b(poco[\s\w]+)(?:\sbuild|\))/i,/\b;\s(\w+)\sbuild\/hm\1/i,/\b(hm[\s\-_]?note?[\s_]?(?:\d\w)?)\sbuild/i,/\b(redmi[\s\-_]?(?:note|k)?[\w\s_]+)(?:\sbuild|\))/i,/\b(mi[\s\-_]?(?:a\d|one|one[\s_]plus|note lte)?[\s_]?(?:\d?\w?)[\s_]?(?:plus)?)\sbuild/i],[[i,/_/g," "],[n,"Xiaomi"],[o,d]],[/\b(mi[\s\-_]?(?:pad)(?:[\w\s_]+))(?:\sbuild|\))/i],[[i,/_/g," "],[n,"Xiaomi"],[o,m]],[/;\s(\w+)\sbuild.+\soppo/i,/\s(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007)\b/i],[i,[n,"OPPO"],[o,d]],[/\svivo\s(\w+)(?:\sbuild|\))/i,/\s(v[12]\d{3}\w?[at])(?:\sbuild|;)/i],[i,[n,"Vivo"],[o,d]],[/\s(rmx[12]\d{3})(?:\sbuild|;)/i],[i,[n,"Realme"],[o,d]],[/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)\b[\w\s]+build\//i,/\smot(?:orola)?[\s-](\w*)/i,/((?:moto[\s\w\(\)]+|xt\d{3,4}|nexus\s6)(?=\sbuild|\)))/i],[i,[n,"Motorola"],[o,d]],[/\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i],[i,[n,"Motorola"],[o,m]],[/((?=lg)?[vl]k\-?\d{3})\sbuild|\s3\.[\s\w;-]{10}lg?-([06cv9]{3,4})/i],[i,[n,"LG"],[o,m]],[/(lm-?f100[nv]?|nexus\s[45])/i,/lg[e;\s\/-]+((?!browser|netcast)\w+)/i,/\blg(\-?[\d\w]+)\sbuild/i],[i,[n,"LG"],[o,d]],[/(ideatab[\w\-\s]+)/i,/lenovo\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+)|yt[\d\w-]{6}|tb[\d\w-]{6})/i],[i,[n,"Lenovo"],[o,m]],[/(?:maemo|nokia).*(n900|lumia\s\d+)/i,/nokia[\s_-]?([\w\.-]*)/i],[[i,/_/g," "],[n,"Nokia"],[o,d]],[/droid.+;\s(pixel\sc)[\s)]/i],[i,[n,"Google"],[o,m]],[/droid.+;\s(pixel[\s\daxl]{0,6})(?:\sbuild|\))/i],[i,[n,"Google"],[o,d]],[/droid.+\s([c-g]\d{4}|so[-l]\w+|xq-a\w[4-7][12])(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[i,[n,"Sony"],[o,d]],[/sony\stablet\s[ps]\sbuild\//i,/(?:sony)?sgp\w+(?:\sbuild\/|\))/i],[[i,"Xperia Tablet"],[n,"Sony"],[o,m]],[/\s(kb2005|in20[12]5|be20[12][59])\b/i,/\ba000(1)\sbuild/i,/\boneplus\s(a\d{4})[\s)]/i],[i,[n,"OnePlus"],[o,d]],[/(alexa)webm/i,/(kf[a-z]{2}wi)(\sbuild\/|\))/i,/(kf[a-z]+)(\sbuild\/|\)).+silk\//i],[i,[n,"Amazon"],[o,m]],[/(sd|kf)[0349hijorstuw]+(\sbuild\/|\)).+silk\//i],[[i,"Fire Phone"],[n,"Amazon"],[o,d]],[/\((playbook);[\w\s\),;-]+(rim)/i],[i,n,[o,m]],[/((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10;\s(\w+)/i],[i,[n,"BlackBerry"],[o,d]],[/(?:\b|asus_)(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus\s7|padfone|p00[cj])/i],[i,[n,"ASUS"],[o,m]],[/\s(z[es]6[027][01][km][ls]|zenfone\s\d\w?)\b/i],[i,[n,"ASUS"],[o,d]],[/(nexus\s9)/i],[i,[n,"HTC"],[o,m]],[/(htc)[;_\s-]{1,2}([\w\s]+(?=\)|\sbuild)|\w+)/i,/(zte)-(\w*)/i,/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i],[n,[i,/_/g," "],[o,d]],[/droid[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i],[i,[n,"Acer"],[o,m]],[/droid.+;\s(m[1-5]\snote)\sbuild/i,/\bmz-([\w-]{2,})/i],[i,[n,"Meizu"],[o,d]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i,/(hp)\s([\w\s]+\w)/i,/(asus)-?(\w+)/i,/(microsoft);\s(lumia[\s\w]+)/i,/(lenovo)[_\s-]?([\w-]+)/i,/linux;.+(jolla);/i,/droid.+;\s(oppo)\s?([\w\s]+)\sbuild/i],[n,i,[o,d]],[/(archos)\s(gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/\s(nook)[\w\s]+build\/(\w+)/i,/(dell)\s(strea[kpr\s\d]*[\dko])/i,/[;\/]\s?(le[\s\-]+pan)[\s\-]+(\w{1,9})\sbuild/i,/[;\/]\s?(trinity)[\-\s]*(t\d{3})\sbuild/i,/\b(gigaset)[\s\-]+(q\w{1,9})\sbuild/i,/\b(vodafone)\s([\w\s]+)(?:\)|\sbuild)/i],[n,i,[o,m]],[/\s(surface\sduo)\s/i],[i,[n,"Microsoft"],[o,m]],[/droid\s[\d\.]+;\s(fp\du?)\sbuild/i],[i,[n,"Fairphone"],[o,d]],[/\s(u304aa)\sbuild/i],[i,[n,"AT&T"],[o,d]],[/sie-(\w*)/i],[i,[n,"Siemens"],[o,d]],[/[;\/]\s?(rct\w+)\sbuild/i],[i,[n,"RCA"],[o,m]],[/[;\/\s](venue[\d\s]{2,7})\sbuild/i],[i,[n,"Dell"],[o,m]],[/[;\/]\s?(q(?:mv|ta)\w+)\sbuild/i],[i,[n,"Verizon"],[o,m]],[/[;\/]\s(?:barnes[&\s]+noble\s|bn[rt])([\w\s\+]*)\sbuild/i],[i,[n,"Barnes & Noble"],[o,m]],[/[;\/]\s(tm\d{3}\w+)\sbuild/i],[i,[n,"NuVision"],[o,m]],[/;\s(k88)\sbuild/i],[i,[n,"ZTE"],[o,m]],[/;\s(nx\d{3}j)\sbuild/i],[i,[n,"ZTE"],[o,d]],[/[;\/]\s?(gen\d{3})\sbuild.*49h/i],[i,[n,"Swiss"],[o,d]],[/[;\/]\s?(zur\d{3})\sbuild/i],[i,[n,"Swiss"],[o,m]],[/[;\/]\s?((zeki)?tb.*\b)\sbuild/i],[i,[n,"Zeki"],[o,m]],[/[;\/]\s([yr]\d{2})\sbuild/i,/[;\/]\s(dragon[\-\s]+touch\s|dt)(\w{5})\sbuild/i],[[n,"Dragon Touch"],i,[o,m]],[/[;\/]\s?(ns-?\w{0,9})\sbuild/i],[i,[n,"Insignia"],[o,m]],[/[;\/]\s?((nxa|Next)-?\w{0,9})\sbuild/i],[i,[n,"NextBook"],[o,m]],[/[;\/]\s?(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05]))\sbuild/i],[[n,"Voice"],i,[o,d]],[/[;\/]\s?(lvtel\-)?(v1[12])\sbuild/i],[[n,"LvTel"],i,[o,d]],[/;\s(ph-1)\s/i],[i,[n,"Essential"],[o,d]],[/[;\/]\s?(v(100md|700na|7011|917g).*\b)\sbuild/i],[i,[n,"Envizen"],[o,m]],[/[;\/]\s?(trio[\s\w\-\.]+)\sbuild/i],[i,[n,"MachSpeed"],[o,m]],[/[;\/]\s?tu_(1491)\sbuild/i],[i,[n,"Rotor"],[o,m]],[/(shield[\w\s]+)\sbuild/i],[i,[n,"Nvidia"],[o,m]],[/(sprint)\s(\w+)/i],[n,i,[o,d]],[/(kin\.[onetw]{3})/i],[[i,/\./g," "],[n,"Microsoft"],[o,d]],[/droid\s[\d\.]+;\s(cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[i,[n,"Zebra"],[o,m]],[/droid\s[\d\.]+;\s(ec30|ps20|tc[2-8]\d[kx])\)/i],[i,[n,"Zebra"],[o,d]],[/\s(ouya)\s/i,/(nintendo)\s([wids3utch]+)/i],[n,i,[o,w]],[/droid.+;\s(shield)\sbuild/i],[i,[n,"Nvidia"],[o,w]],[/(playstation\s[345portablevi]+)/i],[i,[n,"Sony"],[o,w]],[/[\s\(;](xbox(?:\sone)?(?!;\sxbox))[\s\);]/i],[i,[n,"Microsoft"],[o,w]],[/smart-tv.+(samsung)/i],[n,[o,p]],[/hbbtv.+maple;(\d+)/i],[[i,/^/,"SmartTV"],[n,"Samsung"],[o,p]],[/(?:linux;\snetcast.+smarttv|lg\snetcast\.tv-201\d)/i],[[n,"LG"],[o,p]],[/(apple)\s?tv/i],[n,[i,"Apple TV"],[o,p]],[/crkey/i],[[i,"Chromecast"],[n,"Google"],[o,p]],[/droid.+aft([\w])(\sbuild\/|\))/i],[i,[n,"Amazon"],[o,p]],[/\(dtv[\);].+(aquos)/i],[i,[n,"Sharp"],[o,p]],[/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i],[[n,g.trim],[i,g.trim],[o,p]],[/[\s\/\(](android\s|smart[-\s]?|opera\s)tv[;\)\s]/i],[[o,p]],[/((pebble))app\/[\d\.]+\s/i],[n,i,[o,f]],[/droid.+;\s(glass)\s\d/i],[i,[n,"Google"],[o,f]],[/droid\s[\d\.]+;\s(wt63?0{2,3})\)/i],[i,[n,"Zebra"],[o,f]],[/(tesla)(?:\sqtcarbrowser|\/20[12]\d\.[\w\.-]+)/i],[n,[o,h]],[/droid .+?; ([^;]+?)(?: build|\) applewebkit).+? mobile safari/i],[i,[o,d]],[/droid .+?;\s([^;]+?)(?: build|\) applewebkit).+?(?! mobile) safari/i],[i,[o,m]],[/\s(tablet|tab)[;\/]/i,/\s(mobile)(?:[;\/]|\ssafari)/i],[[o,g.lowerize]],[/(android[\w\.\s\-]{0,9});.+build/i],[i,[n,"Generic"]],[/(phone)/i],[[o,d]]],engine:[[/windows.+\sedge\/([\w\.]+)/i],[t,[s,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[t,[s,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[s,t],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[t,s]],os:[[/microsoft\s(windows)\s(vista|xp)/i],[s,t],[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i,/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)(?!.+xbox)/i],[s,[t,v.str,x.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[s,"Windows"],[t,v.str,x.os.windows.version]],[/ip[honead]{2,4}\b(?:.*os\s([\w]+)\slike\smac|;\sopera)/i,/cfnetwork\/.+darwin/i],[[t,/_/g,"."],[s,"iOS"]],[/(mac\sos\sx)\s?([\w\s\.]*)/i,/(macintosh|mac(?=_powerpc)\s)(?!.+haiku)/i],[[s,"Mac OS"],[t,/_/g,"."]],[/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/\s]([\w\.]+)/i,/\((series40);/i],[s,t],[/\(bb(10);/i],[t,[s,"BlackBerry"]],[/(?:symbian\s?os|symbos|s60(?=;)|series60)[\/\s-]?([\w\.]*)/i],[t,[s,"Symbian"]],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[s,"Firefox OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[t,[s,"webOS"]],[/crkey\/([\d\.]+)/i],[t,[s,"Chromecast"]],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[s,"Chromium OS"],t],[/(nintendo|playstation)\s([wids345portablevuch]+)/i,/(xbox);\s+xbox\s([^\);]+)/i,/(mint)[\/\s\(\)]?(\w*)/i,/(mageia|vectorlinux)[;\s]/i,/(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?=\slinux)|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus|raspbian)(?:\sgnu\/linux)?(?:\slinux)?[\/\s-]?(?!chrom|package)([\w\.-]*)/i,/(hurd|linux)\s?([\w\.]*)/i,/(gnu)\s?([\w\.]*)/i,/\s([frentopc-]{0,4}bsd|dragonfly)\s?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku)\s(\w+)/i],[s,t],[/(sunos)\s?([\w\.\d]*)/i],[[s,"Solaris"],t],[/((?:open)?solaris)[\/\s-]?([\w\.]*)/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i,/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i,/(unix)\s?([\w\.]*)/i],[s,t]]},y=function(i,s){if("object"==typeof i&&(s=i,i=b),!(this instanceof y))return new y(i,s).getResult();var e=i||(void 0!==r&&r.navigator&&r.navigator.userAgent?r.navigator.userAgent:""),o=s?g.extend(k,s):k;return this.getBrowser=function(){var i={name:b,version:b};return v.rgx.call(i,e,o.browser),i.major=g.major(i.version),i},this.getCPU=function(){var i={architecture:b};return v.rgx.call(i,e,o.cpu),i},this.getDevice=function(){var i={vendor:b,model:b,type:b};return v.rgx.call(i,e,o.device),i},this.getEngine=function(){var i={name:b,version:b};return v.rgx.call(i,e,o.engine),i},this.getOS=function(){var i={name:b,version:b};return v.rgx.call(i,e,o.os),i},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return e},this.setUA=function(i){return e=typeof i==a&&255<i.length?g.trim(i,255):i,this},this.setUA(e),this};y.VERSION="0.7.28",y.BROWSER={NAME:s,MAJOR:"major",VERSION:t},y.CPU={ARCHITECTURE:l},y.DEVICE={MODEL:i,VENDOR:n,TYPE:o,CONSOLE:w,MOBILE:d,SMARTTV:p,TABLET:m,WEARABLE:f,EMBEDDED:h},y.ENGINE={NAME:s,VERSION:t},y.OS={NAME:s,VERSION:t},typeof exports!=e?(typeof module!=e&&module.exports&&(exports=module.exports=y),exports.UAParser=y):"function"==typeof define&&define.amd?define(function(){return y}):void 0!==r&&(r.UAParser=y);var S,E=void 0!==r&&(r.jQuery||r.Zepto);E&&!E.ua&&(S=new y,E.ua=S.getResult(),E.ua.get=function(){return S.getUA()},E.ua.set=function(i){S.setUA(i);var s,e=S.getResult();for(s in e)E.ua[s]=e[s]})}("object"==typeof window?window:this);
     1/* UAParser.js v0.7.31
     2   Copyright © 2012-2021 Faisal Salman <f@faisalman.com>
     3   MIT License */
     4!function(r,d){"use strict";function i(i){for(var e={},o=0;o<i.length;o++)e[i[o].toUpperCase()]=i[o];return e}function n(i,e){return typeof i==w&&-1!==I(e).indexOf(I(i))}function t(i,e){if(typeof i==w)return i=i.replace(/^\s\s*/,"").replace(/\s\s*$/,""),typeof e==b?i:i.substring(0,255)}function s(i,e){for(var o,a,r,n,t,s=0;s<e.length&&!n;){for(var b=e[s],w=e[s+1],l=o=0;l<b.length&&!n;)if(n=b[l++].exec(i))for(a=0;a<w.length;a++)t=n[++o],typeof(r=w[a])==c&&0<r.length?2===r.length?typeof r[1]==u?this[r[0]]=r[1].call(this,t):this[r[0]]=r[1]:3===r.length?typeof r[1]!=u||r[1].exec&&r[1].test?this[r[0]]=t?t.replace(r[1],r[2]):d:this[r[0]]=t?r[1].call(this,t,r[2]):d:4===r.length&&(this[r[0]]=t?r[3].call(this,t.replace(r[1],r[2])):d):this[r]=t||d;s+=2}}function e(i,e){for(var o in e)if(typeof e[o]==c&&0<e[o].length){for(var a=0;a<e[o].length;a++)if(n(e[o][a],i))return"?"===o?d:o}else if(n(e[o],i))return"?"===o?d:o;return i}var u="function",b="undefined",c="object",w="string",l="model",p="name",m="type",f="vendor",h="version",g="architecture",o="console",a="mobile",v="tablet",x="smarttv",k="wearable",y="embedded",_="Amazon",S="Apple",T="ASUS",q="BlackBerry",z="Browser",N="Chrome",A="Firefox",C="Google",E="Huawei",O="LG",U="Microsoft",j="Motorola",R="Opera",M="Samsung",P="Sony",V="Xiaomi",B="Zebra",D="Facebook",I=function(i){return i.toLowerCase()},W={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},F={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[h,[p,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[h,[p,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[p,h],[/opios[\/ ]+([\w\.]+)/i],[h,[p,R+" Mini"]],[/\bopr\/([\w\.]+)/i],[h,[p,R]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,/(ba?idubrowser)[\/ ]?([\w\.]+)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([-\w\.]+)/i,/(weibo)__([\d\.]+)/i],[p,h],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[h,[p,"UC"+z]],[/\bqbcore\/([\w\.]+)/i],[h,[p,"WeChat(Win) Desktop"]],[/micromessenger\/([\w\.]+)/i],[h,[p,"WeChat"]],[/konqueror\/([\w\.]+)/i],[h,[p,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[h,[p,"IE"]],[/yabrowser\/([\w\.]+)/i],[h,[p,"Yandex"]],[/(avast|avg)\/([\w\.]+)/i],[[p,/(.+)/,"$1 Secure "+z],h],[/\bfocus\/([\w\.]+)/i],[h,[p,A+" Focus"]],[/\bopt\/([\w\.]+)/i],[h,[p,R+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[h,[p,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[h,[p,"Dolphin"]],[/coast\/([\w\.]+)/i],[h,[p,R+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[h,[p,"MIUI "+z]],[/fxios\/([-\w\.]+)/i],[h,[p,A]],[/\bqihu|(qi?ho?o?|360)browser/i],[[p,"360 "+z]],[/(oculus|samsung|sailfish)browser\/([\w\.]+)/i],[[p,/(.+)/,"$1 "+z],h],[/(comodo_dragon)\/([\w\.]+)/i],[[p,/_/g," "],h],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i],[p,h],[/(metasr)[\/ ]?([\w\.]+)/i,/(lbbrowser)/i],[p],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[p,D],h],[/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(chromium|instagram)[\/ ]([-\w\.]+)/i],[p,h],[/\bgsa\/([\w\.]+) .*safari\//i],[h,[p,"GSA"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[h,[p,N+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[p,N+" WebView"],h],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[h,[p,"Android "+z]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[p,h],[/version\/([\w\.]+) .*mobile\/\w+ (safari)/i],[h,[p,"Mobile Safari"]],[/version\/([\w\.]+) .*(mobile ?safari|safari)/i],[h,p],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[p,[h,e,{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\/([\w\.]+)/i],[p,h],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[p,"Netscape"],h],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[h,[p,A+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i],[p,h]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[g,"amd64"]],[/(ia32(?=;))/i],[[g,I]],[/((?:i[346]|x)86)[;\)]/i],[[g,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[g,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[g,"armhf"]],[/windows (ce|mobile); ppc;/i],[[g,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[g,/ower/,"",I]],[/(sun4\w)[;\)]/i],[[g,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[g,I]]],device:[[/\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],[l,[f,M],[m,v]],[/\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[l,[f,M],[m,a]],[/\((ip(?:hone|od)[\w ]*);/i],[l,[f,S],[m,a]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[l,[f,S],[m,v]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[l,[f,E],[m,v]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}-[atu]?[ln][01259x][012359][an]?)\b(?!.+d\/s)/i],[l,[f,E],[m,a]],[/\b(poco[\w ]+)(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[l,/_/g," "],[f,V],[m,a]],[/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[l,/_/g," "],[f,V],[m,v]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[l,[f,"OPPO"],[m,a]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[l,[f,"Vivo"],[m,a]],[/\b(rmx[12]\d{3})(?: bui|;|\))/i],[l,[f,"Realme"],[m,a]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[l,[f,j],[m,a]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[l,[f,j],[m,v]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[l,[f,O],[m,v]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[l,[f,O],[m,a]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[l,[f,"Lenovo"],[m,v]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[l,/_/g," "],[f,"Nokia"],[m,a]],[/(pixel c)\b/i],[l,[f,C],[m,v]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[l,[f,C],[m,a]],[/droid.+ ([c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[l,[f,P],[m,a]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[l,"Xperia Tablet"],[f,P],[m,v]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[l,[f,"OnePlus"],[m,a]],[/(alexa)webm/i,/(kf[a-z]{2}wi)( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[l,[f,_],[m,v]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[l,/(.+)/g,"Fire Phone $1"],[f,_],[m,a]],[/(playbook);[-\w\),; ]+(rim)/i],[l,f,[m,v]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[l,[f,q],[m,a]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[l,[f,T],[m,v]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[l,[f,T],[m,a]],[/(nexus 9)/i],[l,[f,"HTC"],[m,v]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\w]*)/i],[f,[l,/_/g," "],[m,a]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[l,[f,"Acer"],[m,v]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[l,[f,"Meizu"],[m,a]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[l,[f,"Sharp"],[m,a]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[f,l,[m,a]],[/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[f,l,[m,v]],[/(surface duo)/i],[l,[f,U],[m,v]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[l,[f,"Fairphone"],[m,a]],[/(u304aa)/i],[l,[f,"AT&T"],[m,a]],[/\bsie-(\w*)/i],[l,[f,"Siemens"],[m,a]],[/\b(rct\w+) b/i],[l,[f,"RCA"],[m,v]],[/\b(venue[\d ]{2,7}) b/i],[l,[f,"Dell"],[m,v]],[/\b(q(?:mv|ta)\w+) b/i],[l,[f,"Verizon"],[m,v]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[l,[f,"Barnes & Noble"],[m,v]],[/\b(tm\d{3}\w+) b/i],[l,[f,"NuVision"],[m,v]],[/\b(k88) b/i],[l,[f,"ZTE"],[m,v]],[/\b(nx\d{3}j) b/i],[l,[f,"ZTE"],[m,a]],[/\b(gen\d{3}) b.+49h/i],[l,[f,"Swiss"],[m,a]],[/\b(zur\d{3}) b/i],[l,[f,"Swiss"],[m,v]],[/\b((zeki)?tb.*\b) b/i],[l,[f,"Zeki"],[m,v]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[f,"Dragon Touch"],l,[m,v]],[/\b(ns-?\w{0,9}) b/i],[l,[f,"Insignia"],[m,v]],[/\b((nxa|next)-?\w{0,9}) b/i],[l,[f,"NextBook"],[m,v]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[f,"Voice"],l,[m,a]],[/\b(lvtel\-)?(v1[12]) b/i],[[f,"LvTel"],l,[m,a]],[/\b(ph-1) /i],[l,[f,"Essential"],[m,a]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[l,[f,"Envizen"],[m,v]],[/\b(trio[-\w\. ]+) b/i],[l,[f,"MachSpeed"],[m,v]],[/\btu_(1491) b/i],[l,[f,"Rotor"],[m,v]],[/(shield[\w ]+) b/i],[l,[f,"Nvidia"],[m,v]],[/(sprint) (\w+)/i],[f,l,[m,a]],[/(kin\.[onetw]{3})/i],[[l,/\./g," "],[f,U],[m,a]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[l,[f,B],[m,v]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[l,[f,B],[m,a]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[f,l,[m,o]],[/droid.+; (shield) bui/i],[l,[f,"Nvidia"],[m,o]],[/(playstation [345portablevi]+)/i],[l,[f,P],[m,o]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[l,[f,U],[m,o]],[/smart-tv.+(samsung)/i],[f,[m,x]],[/hbbtv.+maple;(\d+)/i],[[l,/^/,"SmartTV"],[f,M],[m,x]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[f,O],[m,x]],[/(apple) ?tv/i],[f,[l,S+" TV"],[m,x]],[/crkey/i],[[l,N+"cast"],[f,C],[m,x]],[/droid.+aft(\w)( bui|\))/i],[l,[f,_],[m,x]],[/\(dtv[\);].+(aquos)/i],[l,[f,"Sharp"],[m,x]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i],[[f,t],[l,t],[m,x]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[m,x]],[/((pebble))app/i],[f,l,[m,k]],[/droid.+; (glass) \d/i],[l,[f,C],[m,k]],[/droid.+; (wt63?0{2,3})\)/i],[l,[f,B],[m,k]],[/(quest( 2)?)/i],[l,[f,D],[m,k]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[f,[m,y]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i],[l,[m,a]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[l,[m,v]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[m,v]],[/(phone|mobile(?:[;\/]| safari)|pda(?=.+windows ce))/i],[[m,a]],[/(android[-\w\. ]{0,9});.+buil/i],[l,[f,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[h,[p,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[h,[p,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i],[p,h],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[h,p]],os:[[/microsoft (windows) (vista|xp)/i],[p,h],[/(windows) nt 6\.2; (arm)/i,/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,/(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i],[p,[h,e,W]],[/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[p,"Windows"],[h,e,W]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/cfnetwork\/.+darwin/i],[[h,/_/g,"."],[p,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[p,"Mac OS"],[h,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86)/i],[h,p],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[p,h],[/\(bb(10);/i],[h,[p,q]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[h,[p,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[h,[p,A+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[h,[p,"webOS"]],[/crkey\/([\d\.]+)/i],[h,[p,N+"cast"]],[/(cros) [\w]+ ([\w\.]+\w)/i],[[p,"Chromium OS"],h],[/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([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,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[p,h],[/(sunos) ?([\w\.\d]*)/i],[[p,"Solaris"],h],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i,/(unix) ?([\w\.]*)/i],[p,h]]},G=function(i,e){if(typeof i==c&&(e=i,i=d),!(this instanceof G))return new G(i,e).getResult();var o=i||(typeof r!=b&&r.navigator&&r.navigator.userAgent?r.navigator.userAgent:""),a=e?function(i,e){var o,a={};for(o in i)e[o]&&e[o].length%2==0?a[o]=e[o].concat(i[o]):a[o]=i[o];return a}(F,e):F;return this.getBrowser=function(){var i,e={};return e[p]=d,e[h]=d,s.call(e,o,a.browser),e.major=typeof(i=e.version)==w?i.replace(/[^\d\.]/g,"").split(".")[0]:d,e},this.getCPU=function(){var i={};return i[g]=d,s.call(i,o,a.cpu),i},this.getDevice=function(){var i={};return i[f]=d,i[l]=d,i[m]=d,s.call(i,o,a.device),i},this.getEngine=function(){var i={};return i[p]=d,i[h]=d,s.call(i,o,a.engine),i},this.getOS=function(){var i={};return i[p]=d,i[h]=d,s.call(i,o,a.os),i},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return o},this.setUA=function(i){return o=typeof i==w&&255<i.length?t(i,255):i,this},this.setUA(o),this};G.VERSION="0.7.31",G.BROWSER=i([p,h,"major"]),G.CPU=i([g]),G.DEVICE=i([l,f,m,o,a,x,v,k,y]),G.ENGINE=G.OS=i([p,h]),typeof exports!=b?(typeof module!=b&&module.exports&&(exports=module.exports=G),exports.UAParser=G):typeof define==u&&define.amd?define(function(){return G}):typeof r!=b&&(r.UAParser=G);var L,Z=typeof r!=b&&(r.jQuery||r.Zepto);Z&&!Z.ua&&(L=new G,Z.ua=L.getResult(),Z.ua.get=function(){return L.getUA()},Z.ua.set=function(i){L.setUA(i);var e,o=L.getResult();for(e in o)Z.ua[e]=o[e]})}("object"==typeof window?window:this);
  • trip-planner-front/node_modules/ua-parser-js/package.js

    r59329aa re29cc2e  
    11Package.describe({
    22  name: 'faisalman:ua-parser-js',
    3   version: '0.7.28',
     3  version: '0.7.31',
    44  summary: 'Lightweight JavaScript-based user-agent string parser',
    55  git: 'https://github.com/faisalman/ua-parser-js.git',
  • trip-planner-front/node_modules/ua-parser-js/package.json

    r59329aa re29cc2e  
    11{
    2   "_args": [
    3     [
    4       "ua-parser-js@0.7.28",
    5       "C:\\Users\\DELL\\Desktop\\bachelor-thesis\\trip-planner-front"
    6     ]
    7   ],
    8   "_development": true,
    9   "_from": "ua-parser-js@0.7.28",
    10   "_id": "ua-parser-js@0.7.28",
     2  "_from": "ua-parser-js@^0.7.30",
     3  "_id": "ua-parser-js@0.7.31",
    114  "_inBundle": false,
    12   "_integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==",
     5  "_integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==",
    136  "_location": "/ua-parser-js",
    147  "_phantomChildren": {},
    158  "_requested": {
    16     "type": "version",
     9    "type": "range",
    1710    "registry": true,
    18     "raw": "ua-parser-js@0.7.28",
     11    "raw": "ua-parser-js@^0.7.30",
    1912    "name": "ua-parser-js",
    2013    "escapedName": "ua-parser-js",
    21     "rawSpec": "0.7.28",
     14    "rawSpec": "^0.7.30",
    2215    "saveSpec": null,
    23     "fetchSpec": "0.7.28"
     16    "fetchSpec": "^0.7.30"
    2417  },
    2518  "_requiredBy": [
    2619    "/karma"
    2720  ],
    28   "_resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
    29   "_spec": "0.7.28",
    30   "_where": "C:\\Users\\DELL\\Desktop\\bachelor-thesis\\trip-planner-front",
     21  "_resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz",
     22  "_shasum": "649a656b191dffab4f21d5e053e27ca17cbff5c6",
     23  "_spec": "ua-parser-js@^0.7.30",
     24  "_where": "C:\\Users\\DELL\\Desktop\\bachelor-thesis\\trip-planner-front\\node_modules\\karma",
    3125  "author": {
    3226    "name": "Faisal Salman",
     
    3731    "url": "https://github.com/faisalman/ua-parser-js/issues"
    3832  },
     33  "bundleDependencies": false,
    3934  "contributors": [
    4035    {
     
    528523  ],
    529524  "demo": "https://faisalman.github.io/ua-parser-js",
    530   "description": "Lightweight JavaScript-based user-agent string parser",
     525  "deprecated": false,
     526  "description": "Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data. Supports browser & node.js environment",
    531527  "devDependencies": {
     528    "@babel/parser": "7.15.8",
     529    "@babel/traverse": "7.15.4",
    532530    "jshint": "~2.12.0",
    533531    "mocha": "~8.2.0",
     
    576574  },
    577575  "scripts": {
    578     "build": "uglifyjs src/ua-parser.js -o dist/ua-parser.min.js --comments && uglifyjs src/ua-parser.js -o dist/ua-parser.pack.js --comments --compress --mangle",
     576    "build": "uglifyjs src/ua-parser.js -o dist/ua-parser.min.js --comments '/^ UA/' && uglifyjs src/ua-parser.js -o dist/ua-parser.pack.js --comments '/^ UA/' --compress --mangle",
    579577    "test": "jshint src/ua-parser.js && mocha -R nyan test/test.js",
    580578    "test-ci": "jshint src/ua-parser.js && mocha -R spec test/test.js",
     
    583581  },
    584582  "title": "UAParser.js",
    585   "version": "0.7.28",
     583  "version": "0.7.31",
    586584  "verup": {
    587585    "files": [
     
    592590    "regs": [
    593591      "^((?:\\$|(\\s*\\*\\s*@)|(\\s*(?:var|,)?\\s+))(?:LIBVERSION|version)[\\s\\:='\"]+)([0-9]+(?:\\.[0-9]+){2,2})",
    594       "^(\\s?\\*.*v)([0-9]+(?:\\.[0-9]+){2,2})"
     592      "^(\\/?\\s?\\*.*v)([0-9]+(?:\\.[0-9]+){2,2})"
    595593    ]
    596594  }
  • trip-planner-front/node_modules/ua-parser-js/readme.md

    r59329aa re29cc2e  
    1616
    1717* Author    : Faisal Salman <<f@faisalman.com>>
    18 * Demo      : http://faisalman.github.io/ua-parser-js
     18* Demo      : https://faisalman.github.io/ua-parser-js
    1919* Source    : https://github.com/faisalman/ua-parser-js
    2020
     
    4242Firefox [Reality], Flock, Flow, GSA, GoBrowser, ICE Browser, IE, IEMobile, IceApe,
    4343IceCat, IceDragon, Iceweasel, Instagram, Iridium, Iron, Jasmine, K-Meleon,
    44 Kindle, Konqueror, LBBROWSER, Line, Links, Lunascape, Lynx, MIUI Browser,
     44Kindle, Klar, Konqueror, LBBROWSER, Line, Links, Lunascape, Lynx, MIUI Browser,
    4545Maemo Browser, Maemo, Maxthon, MetaSr Midori, Minimo, Mobile Safari, Mosaic,
    46 Mozilla, NetFront, NetSurf, Netfront, Netscape, NokiaBrowser, Oculus Browser,
     46Mozilla, NetFront, NetSurf, Netfront, Netscape, NokiaBrowser, Obigo, Oculus Browser,
    4747OmniWeb, Opera Coast, Opera [Mini/Mobi/Tablet], PaleMoon, PhantomJS, Phoenix,
    4848Polaris, Puffin, QQ, QQBrowser, QQBrowserLite, Quark, QupZilla, RockMelt, Safari,
    4949Sailfish Browser, Samsung Browser, SeaMonkey, Silk, Skyfire, Sleipnir, Slim,
    50 SlimBrowser, Swiftfox, Tesla, Tizen Browser, UCBrowser, Vivaldi, Waterfox, WeChat,
    51 Weibo, Yandex, baidu, iCab, w3m, Whale Browser...
     50SlimBrowser, Swiftfox, Tesla, Tizen Browser, UCBrowser, UP.Browser, Vivaldi,
     51Waterfox, WeChat, Weibo, Yandex, baidu, iCab, w3m, Whale Browser...
    5252
    5353# 'browser.version' determined dynamically
     
    6565Essential, Fairphone, GeeksPhone, Google, HP, HTC, Huawei, Jolla, Lenovo, LG,
    6666Meizu, Microsoft, Motorola, Nexian, Nintendo, Nokia, Nvidia, OnePlus, OPPO, Ouya,
    67 Palm, Panasonic, Pebble, Polytron, Realme, RIM, Samsung, Sharp, Siemens,
     67Palm, Panasonic, Pebble, Polytron, Realme, RIM, Roku, Samsung, Sharp, Siemens,
    6868Sony[Ericsson], Sprint, Tesla, Vivo, Vodafone, Xbox, Xiaomi, Zebra, ZTE, ...
    6969
     
    8787```sh
    8888# Possible 'os.name'
    89 AIX, Amiga OS, Android, Arch, Bada, BeOS, BlackBerry, CentOS, Chromium OS,
    90 Contiki, Fedora, Firefox OS, FreeBSD, Debian, DragonFly, Fuchsia, Gentoo, GNU,
    91 Haiku, Hurd, iOS, Joli, KaiOS, Linpus, Linux, Mac OS, Mageia, Mandriva, MeeGo,
    92 Minix, Mint, Morph OS, NetBSD, Nintendo, OpenBSD, OpenVMS, OS/2, Palm, PC-BSD,
    93 PCLinuxOS, Plan9, PlayStation, QNX, Raspbian, RedHat, RIM Tablet OS, RISC OS,
    94 Sailfish, Series40, Slackware, Solaris, SUSE, Symbian, Tizen, Ubuntu, Unix,
    95 VectorLinux, WebOS, Windows [Phone/Mobile], Zenwalk, ...
     89AIX, Amiga OS, Android[-x86], Arch, Bada, BeOS, BlackBerry, CentOS, Chromium OS,
     90Contiki, Fedora, Firefox OS, FreeBSD, Debian, Deepin, DragonFly, elementary OS,
     91Fuchsia, Gentoo, GhostBSD, GNU, Haiku, HP-UX, Hurd, iOS, Joli, KaiOS, Linpus, Linspire,
     92Linux, Mac OS, Maemo, Mageia, Mandriva, Manjaro, MeeGo, Minix, Mint, Morph OS, NetBSD,
     93Nintendo, OpenBSD, OpenVMS, OS/2, Palm, PC-BSD, PCLinuxOS, Plan9, PlayStation, QNX,
     94Raspbian, RedHat, RIM Tablet OS, RISC OS, Sabayon, Sailfish, Series40, Slackware, Solaris,
     95SUSE, Symbian, Tizen, Ubuntu, Unix, VectorLinux, WebOS, Windows [Phone/Mobile], Zenwalk, ...
    9696
    9797# 'os.version' determined dynamically
  • trip-planner-front/node_modules/ua-parser-js/src/ua-parser.js

    r59329aa re29cc2e  
    1 /*!@license
    2  * UAParser.js v0.7.28
    3  * Lightweight JavaScript-based User-Agent string parser
    4  * https://github.com/faisalman/ua-parser-js
    5  *
    6  * Copyright © 2012-2021 Faisal Salman <f@faisalman.com>
    7  * Licensed under MIT License
    8  */
     1/////////////////////////////////////////////////////////////////////////////////
     2/* UAParser.js v0.7.31
     3   Copyright © 2012-2021 Faisal Salman <f@faisalman.com>
     4   MIT License *//*
     5   Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
     6   Supports browser & node.js environment.
     7   Demo   : https://faisalman.github.io/ua-parser-js
     8   Source : https://github.com/faisalman/ua-parser-js */
     9/////////////////////////////////////////////////////////////////////////////////
    910
    1011(function (window, undefined) {
     
    1718
    1819
    19     var LIBVERSION  = '0.7.28',
     20    var LIBVERSION  = '0.7.31',
    2021        EMPTY       = '',
    2122        UNKNOWN     = '?',
     
    2425        OBJ_TYPE    = 'object',
    2526        STR_TYPE    = 'string',
    26         MAJOR       = 'major', // deprecated
     27        MAJOR       = 'major',
    2728        MODEL       = 'model',
    2829        NAME        = 'name',
     
    3940        UA_MAX_LENGTH = 255;
    4041
     42    var AMAZON  = 'Amazon',
     43        APPLE   = 'Apple',
     44        ASUS    = 'ASUS',
     45        BLACKBERRY = 'BlackBerry',
     46        BROWSER = 'Browser',
     47        CHROME  = 'Chrome',
     48        EDGE    = 'Edge',
     49        FIREFOX = 'Firefox',
     50        GOOGLE  = 'Google',
     51        HUAWEI  = 'Huawei',
     52        LG      = 'LG',
     53        MICROSOFT = 'Microsoft',
     54        MOTOROLA  = 'Motorola',
     55        OPERA   = 'Opera',
     56        SAMSUNG = 'Samsung',
     57        SONY    = 'Sony',
     58        XIAOMI  = 'Xiaomi',
     59        ZEBRA   = 'Zebra',
     60        FACEBOOK   = 'Facebook';
    4161
    4262    ///////////
     
    4464    //////////
    4565
    46 
    47     var util = {
    48         extend : function (regexes, extensions) {
     66    var extend = function (regexes, extensions) {
    4967            var mergedRegexes = {};
    5068            for (var i in regexes) {
     
    5775            return mergedRegexes;
    5876        },
    59         has : function (str1, str2) {
    60             return typeof str1 === STR_TYPE ? str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1 : false;
     77        enumerize = function (arr) {
     78            var enums = {};
     79            for (var i=0; i<arr.length; i++) {
     80                enums[arr[i].toUpperCase()] = arr[i];
     81            }
     82            return enums;
    6183        },
    62         lowerize : function (str) {
     84        has = function (str1, str2) {
     85            return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;
     86        },
     87        lowerize = function (str) {
    6388            return str.toLowerCase();
    6489        },
    65         major : function (version) {
    66             return typeof(version) === STR_TYPE ? version.replace(/[^\d\.]/g,'').split(".")[0] : undefined;
     90        majorize = function (version) {
     91            return typeof(version) === STR_TYPE ? version.replace(/[^\d\.]/g, EMPTY).split('.')[0] : undefined;
    6792        },
    68         trim : function (str, len) {
    69             str = str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
    70             return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
    71         }
     93        trim = function (str, len) {
     94            if (typeof(str) === STR_TYPE) {
     95                str = str.replace(/^\s\s*/, EMPTY).replace(/\s\s*$/, EMPTY);
     96                return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
     97            }
    7298    };
    73 
    7499
    75100    ///////////////
     
    77102    //////////////
    78103
    79 
    80     var mapper = {
    81 
    82         rgx : function (ua, arrays) {
     104    var rgxMapper = function (ua, arrays) {
    83105
    84106            var i = 0, j, k, p, q, matches, match;
     
    102124                            // check if given property is actually array
    103125                            if (typeof q === OBJ_TYPE && q.length > 0) {
    104                                 if (q.length == 2) {
     126                                if (q.length === 2) {
    105127                                    if (typeof q[1] == FUNC_TYPE) {
    106128                                        // assign modified match
     
    110132                                        this[q[0]] = q[1];
    111133                                    }
    112                                 } else if (q.length == 3) {
     134                                } else if (q.length === 3) {
    113135                                    // check whether function or regex
    114136                                    if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {
     
    119141                                        this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;
    120142                                    }
    121                                 } else if (q.length == 4) {
     143                                } else if (q.length === 4) {
    122144                                        this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;
    123145                                }
     
    132154        },
    133155
    134         str : function (str, map) {
     156        strMapper = function (str, map) {
    135157
    136158            for (var i in map) {
    137                 // check if array
     159                // check if current value is array
    138160                if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {
    139161                    for (var j = 0; j < map[i].length; j++) {
    140                         if (util.has(map[i][j], str)) {
     162                        if (has(map[i][j], str)) {
    141163                            return (i === UNKNOWN) ? undefined : i;
    142164                        }
    143165                    }
    144                 } else if (util.has(map[i], str)) {
     166                } else if (has(map[i], str)) {
    145167                    return (i === UNKNOWN) ? undefined : i;
    146168                }
    147169            }
    148170            return str;
    149         }
    150171    };
    151 
    152172
    153173    ///////////////
     
    155175    //////////////
    156176
    157 
    158     var maps = {
    159 
    160         browser : {
    161             // Safari < 3.0
    162             oldSafari : {
    163                 version : {
    164                     '1.0'   : '/8',
    165                     '1.2'   : '/1',
    166                     '1.3'   : '/3',
    167                     '2.0'   : '/412',
    168                     '2.0.2' : '/416',
    169                     '2.0.3' : '/417',
    170                     '2.0.4' : '/419',
    171                     '?'     : '/'
    172                 }
    173             },
    174             oldEdge : {
    175                 version : {
    176                     '0.1'   : '12.',
    177                     '21'    : '13.',
    178                     '31'    : '14.',
    179                     '39'    : '15.',
    180                     '41'    : '16.',
    181                     '42'    : '17.',
    182                     '44'    : '18.'
    183                 }
    184             }
     177    // Safari < 3.0
     178    var oldSafariMap = {
     179            '1.0'   : '/8',
     180            '1.2'   : '/1',
     181            '1.3'   : '/3',
     182            '2.0'   : '/412',
     183            '2.0.2' : '/416',
     184            '2.0.3' : '/417',
     185            '2.0.4' : '/419',
     186            '?'     : '/'
    185187        },
    186 
    187         os : {
    188             windows : {
    189                 version : {
    190                     'ME'        : '4.90',
    191                     'NT 3.11'   : 'NT3.51',
    192                     'NT 4.0'    : 'NT4.0',
    193                     '2000'      : 'NT 5.0',
    194                     'XP'        : ['NT 5.1', 'NT 5.2'],
    195                     'Vista'     : 'NT 6.0',
    196                     '7'         : 'NT 6.1',
    197                     '8'         : 'NT 6.2',
    198                     '8.1'       : 'NT 6.3',
    199                     '10'        : ['NT 6.4', 'NT 10.0'],
    200                     'RT'        : 'ARM'
    201                 }
    202             }
    203         }
     188        windowsVersionMap = {
     189            'ME'        : '4.90',
     190            'NT 3.11'   : 'NT3.51',
     191            'NT 4.0'    : 'NT4.0',
     192            '2000'      : 'NT 5.0',
     193            'XP'        : ['NT 5.1', 'NT 5.2'],
     194            'Vista'     : 'NT 6.0',
     195            '7'         : 'NT 6.1',
     196            '8'         : 'NT 6.2',
     197            '8.1'       : 'NT 6.3',
     198            '10'        : ['NT 6.4', 'NT 10.0'],
     199            'RT'        : 'ARM'
    204200    };
    205 
    206201
    207202    //////////////
    208203    // Regex map
    209204    /////////////
    210 
    211205
    212206    var regexes = {
     
    218212            /edg(?:e|ios|a)?\/([\w\.]+)/i                                       // Microsoft Edge
    219213            ], [VERSION, [NAME, 'Edge']], [
    220             // breaking change (reserved for next major release):
    221             ///edge\/([\w\.]+)/i                                                  // Old Edge (Trident)
    222             //], [[VERSION, mapper.str, maps.browser.oldEdge.version], [NAME, 'Edge']], [
    223214
    224215            // Presto based
    225             /(opera\smini)\/([\w\.-]+)/i,                                       // Opera Mini
    226             /(opera\s[mobiletab]{3,6})\b.+version\/([\w\.-]+)/i,                // Opera Mobi/Tablet
    227             /(opera)(?:.+version\/|[\/\s]+)([\w\.]+)/i,                         // Opera
    228             ], [NAME, VERSION], [
    229             /opios[\/\s]+([\w\.]+)/i                                            // Opera mini on iphone >= 8.0
    230             ], [VERSION, [NAME, 'Opera Mini']], [
    231             /\sopr\/([\w\.]+)/i                                                 // Opera Webkit
    232             ], [VERSION, [NAME, 'Opera']], [
     216            /(opera mini)\/([-\w\.]+)/i,                                        // Opera Mini
     217            /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,                 // Opera Mobi/Tablet
     218            /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i                           // Opera
     219            ], [NAME, VERSION], [
     220            /opios[\/ ]+([\w\.]+)/i                                             // Opera mini on iphone >= 8.0
     221            ], [VERSION, [NAME, OPERA+' Mini']], [
     222            /\bopr\/([\w\.]+)/i                                                 // Opera Webkit
     223            ], [VERSION, [NAME, OPERA]], [
    233224
    234225            // Mixed
    235226            /(kindle)\/([\w\.]+)/i,                                             // Kindle
    236             /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i,     // Lunascape/Maxthon/Netfront/Jasmine/Blazer
     227            /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,      // Lunascape/Maxthon/Netfront/Jasmine/Blazer
    237228            // Trident based
    238             /(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i,             // Avant/IEMobile/SlimBrowser
    239             /(ba?idubrowser)[\/\s]?([\w\.]+)/i,                                 // Baidu Browser
    240             /(?:ms|\()(ie)\s([\w\.]+)/i,                                        // Internet Explorer
    241 
    242             // Webkit/KHTML based
    243             /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\/([\w\.-]+)/i,
    244                                                                                 // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
    245             /(rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([\w\.]+)/i,         // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
     229            /(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,               // Avant/IEMobile/SlimBrowser
     230            /(ba?idubrowser)[\/ ]?([\w\.]+)/i,                                  // Baidu Browser
     231            /(?:ms|\()(ie) ([\w\.]+)/i,                                         // Internet Explorer
     232
     233            // Webkit/KHTML based                                               // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
     234            /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([-\w\.]+)/i,
     235                                                                                // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
    246236            /(weibo)__([\d\.]+)/i                                               // Weibo
    247237            ], [NAME, VERSION], [
    248             /(?:[\s\/]uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i           // UCBrowser
    249             ], [VERSION, [NAME, 'UCBrowser']], [
    250             /(?:windowswechat)?\sqbcore\/([\w\.]+)\b.*(?:windowswechat)?/i      // WeChat Desktop for Windows Built-in Browser
     238            /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i                 // UCBrowser
     239            ], [VERSION, [NAME, 'UC'+BROWSER]], [
     240            /\bqbcore\/([\w\.]+)/i                                              // WeChat Desktop for Windows Built-in Browser
    251241            ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [
    252242            /micromessenger\/([\w\.]+)/i                                        // WeChat
     
    254244            /konqueror\/([\w\.]+)/i                                             // Konqueror
    255245            ], [VERSION, [NAME, 'Konqueror']], [
    256             /trident.+rv[:\s]([\w\.]{1,9})\b.+like\sgecko/i                     // IE11
     246            /trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i                       // IE11
    257247            ], [VERSION, [NAME, 'IE']], [
    258248            /yabrowser\/([\w\.]+)/i                                             // Yandex
    259249            ], [VERSION, [NAME, 'Yandex']], [
    260250            /(avast|avg)\/([\w\.]+)/i                                           // Avast/AVG Secure Browser
    261             ], [[NAME, /(.+)/, '$1 Secure Browser'], VERSION], [
    262             /focus\/([\w\.]+)/i                                                 // Firefox Focus
    263             ], [VERSION, [NAME, 'Firefox Focus']], [
    264             /opt\/([\w\.]+)/i                                                   // Opera Touch
    265             ], [VERSION, [NAME, 'Opera Touch']], [
    266             /coc_coc_browser\/([\w\.]+)/i                                       // Coc Coc Browser
     251            ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [
     252            /\bfocus\/([\w\.]+)/i                                               // Firefox Focus
     253            ], [VERSION, [NAME, FIREFOX+' Focus']], [
     254            /\bopt\/([\w\.]+)/i                                                 // Opera Touch
     255            ], [VERSION, [NAME, OPERA+' Touch']], [
     256            /coc_coc\w+\/([\w\.]+)/i                                            // Coc Coc Browser
    267257            ], [VERSION, [NAME, 'Coc Coc']], [
    268258            /dolfin\/([\w\.]+)/i                                                // Dolphin
    269259            ], [VERSION, [NAME, 'Dolphin']], [
    270260            /coast\/([\w\.]+)/i                                                 // Opera Coast
    271             ], [VERSION, [NAME, 'Opera Coast']],
    272             [/xiaomi\/miuibrowser\/([\w\.]+)/i                                  // MIUI Browser
    273             ], [VERSION, [NAME, 'MIUI Browser']], [
    274             /fxios\/([\w\.-]+)/i                                                // Firefox for iOS
    275             ], [VERSION, [NAME, 'Firefox']], [
    276             /(qihu|qhbrowser|qihoobrowser|360browser)/i                         // 360
    277             ], [[NAME, '360 Browser']], [
     261            ], [VERSION, [NAME, OPERA+' Coast']], [
     262            /miuibrowser\/([\w\.]+)/i                                           // MIUI Browser
     263            ], [VERSION, [NAME, 'MIUI '+BROWSER]], [
     264            /fxios\/([-\w\.]+)/i                                                // Firefox for iOS
     265            ], [VERSION, [NAME, FIREFOX]], [
     266            /\bqihu|(qi?ho?o?|360)browser/i                                     // 360
     267            ], [[NAME, '360 '+BROWSER]], [
    278268            /(oculus|samsung|sailfish)browser\/([\w\.]+)/i
    279             ], [[NAME, /(.+)/, '$1 Browser'], VERSION], [                       // Oculus/Samsung/Sailfish Browser
     269            ], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [                      // Oculus/Samsung/Sailfish Browser
    280270            /(comodo_dragon)\/([\w\.]+)/i                                       // Comodo Dragon
    281271            ], [[NAME, /_/g, ' '], VERSION], [
    282             /\s(electron)\/([\w\.]+)\ssafari/i,                                 // Electron-based App
    283             /(tesla)(?:\sqtcarbrowser|\/(20[12]\d\.[\w\.-]+))/i,                // Tesla
    284             /m?(qqbrowser|baiduboxapp|2345Explorer)[\/\s]?([\w\.]+)/i           // QQBrowser/Baidu App/2345 Browser
    285             ], [NAME, VERSION], [
    286             /(MetaSr)[\/\s]?([\w\.]+)/i,                                        // SouGouBrowser
    287             /(LBBROWSER)/i                                                      // LieBao Browser
     272            /(electron)\/([\w\.]+) safari/i,                                    // Electron-based App
     273            /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,                   // Tesla
     274            /m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i            // QQBrowser/Baidu App/2345 Browser
     275            ], [NAME, VERSION], [
     276            /(metasr)[\/ ]?([\w\.]+)/i,                                         // SouGouBrowser
     277            /(lbbrowser)/i                                                      // LieBao Browser
    288278            ], [NAME], [
    289279
    290280            // WebView
    291             /;fbav\/([\w\.]+);/i                                                // Facebook App for iOS & Android with version
    292             ], [VERSION, [NAME, 'Facebook']], [
    293             /FBAN\/FBIOS|FB_IAB\/FB4A/i                                         // Facebook App for iOS & Android without version
    294             ], [[NAME, 'Facebook']], [
    295             /safari\s(line)\/([\w\.]+)/i,                                       // Line App for iOS
     281            /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i       // Facebook App for iOS & Android
     282            ], [[NAME, FACEBOOK], VERSION], [
     283            /safari (line)\/([\w\.]+)/i,                                        // Line App for iOS
    296284            /\b(line)\/([\w\.]+)\/iab/i,                                        // Line App for Android
    297             /(chromium|instagram)[\/\s]([\w\.-]+)/i                             // Chromium/Instagram
    298             ], [NAME, VERSION], [
    299             /\bgsa\/([\w\.]+)\s.*safari\//i                                     // Google Search Appliance on iOS
     285            /(chromium|instagram)[\/ ]([-\w\.]+)/i                              // Chromium/Instagram
     286            ], [NAME, VERSION], [
     287            /\bgsa\/([\w\.]+) .*safari\//i                                      // Google Search Appliance on iOS
    300288            ], [VERSION, [NAME, 'GSA']], [
    301289
    302             /headlesschrome(?:\/([\w\.]+)|\s)/i                                 // Chrome Headless
    303             ], [VERSION, [NAME, 'Chrome Headless']], [
    304 
    305             /\swv\).+(chrome)\/([\w\.]+)/i                                      // Chrome WebView
    306             ], [[NAME, 'Chrome WebView'], VERSION], [
    307 
    308             /droid.+\sversion\/([\w\.]+)\b.+(?:mobile\ssafari|safari)/i         // Android Browser
    309             ], [VERSION, [NAME, 'Android Browser']], [
    310 
    311             /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i      // Chrome/OmniWeb/Arora/Tizen/Nokia
    312             ], [NAME, VERSION], [
    313 
    314             /version\/([\w\.]+)\s.*mobile\/\w+\s(safari)/i                      // Mobile Safari
     290            /headlesschrome(?:\/([\w\.]+)| )/i                                  // Chrome Headless
     291            ], [VERSION, [NAME, CHROME+' Headless']], [
     292
     293            / wv\).+(chrome)\/([\w\.]+)/i                                       // Chrome WebView
     294            ], [[NAME, CHROME+' WebView'], VERSION], [
     295
     296            /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i           // Android Browser
     297            ], [VERSION, [NAME, 'Android '+BROWSER]], [
     298
     299            /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i       // Chrome/OmniWeb/Arora/Tizen/Nokia
     300            ], [NAME, VERSION], [
     301
     302            /version\/([\w\.]+) .*mobile\/\w+ (safari)/i                        // Mobile Safari
    315303            ], [VERSION, [NAME, 'Mobile Safari']], [
    316             /version\/([\w\.]+)\s.*(mobile\s?safari|safari)/i                   // Safari & Safari Mobile
     304            /version\/([\w\.]+) .*(mobile ?safari|safari)/i                     // Safari & Safari Mobile
    317305            ], [VERSION, NAME], [
    318             /webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i                     // Safari < 3.0
    319             ], [NAME, [VERSION, mapper.str, maps.browser.oldSafari.version]], [
     306            /webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i                      // Safari < 3.0
     307            ], [NAME, [VERSION, strMapper, oldSafariMap]], [
    320308
    321309            /(webkit|khtml)\/([\w\.]+)/i
     
    323311
    324312            // Gecko based
    325             /(navigator|netscape)\/([\w\.-]+)/i                                 // Netscape
     313            /(navigator|netscape\d?)\/([-\w\.]+)/i                              // Netscape
    326314            ], [[NAME, 'Netscape'], VERSION], [
    327             /ile\svr;\srv:([\w\.]+)\).+firefox/i                                // Firefox Reality
    328             ], [VERSION, [NAME, 'Firefox Reality']], [
     315            /mobile vr; rv:([\w\.]+)\).+firefox/i                               // Firefox Reality
     316            ], [VERSION, [NAME, FIREFOX+' Reality']], [
    329317            /ekiohf.+(flow)\/([\w\.]+)/i,                                       // Flow
    330318            /(swiftfox)/i,                                                      // Swiftfox
    331             /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,
    332                                                                                 // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
    333             /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i,
     319            /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,
     320                                                                                // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar
     321            /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,
    334322                                                                                // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
    335             /(firefox)\/([\w\.]+)\s[\w\s\-]+\/[\w\.]+$/i,                       // Other Firefox-based
    336             /(mozilla)\/([\w\.]+)\s.+rv\:.+gecko\/\d+/i,                        // Mozilla
     323            /(firefox)\/([\w\.]+)/i,                                            // Other Firefox-based
     324            /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,                         // Mozilla
    337325
    338326            // Other
    339             /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,
    340                                                                                 // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir
    341             /(links)\s\(([\w\.]+)/i,                                            // Links
    342             /(gobrowser)\/?([\w\.]*)/i,                                         // GoBrowser
    343             /(ice\s?browser)\/v?([\w\._]+)/i,                                   // ICE Browser
    344             /(mosaic)[\/\s]([\w\.]+)/i                                          // Mosaic
     327            /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
     328                                                                                // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser
     329            /(links) \(([\w\.]+)/i                                              // Links
    345330            ], [NAME, VERSION]
    346331        ],
     
    348333        cpu : [[
    349334
    350             /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i                     // AMD64 (x64)
     335            /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i                     // AMD64 (x64)
    351336            ], [[ARCHITECTURE, 'amd64']], [
    352337
    353338            /(ia32(?=;))/i                                                      // IA32 (quicktime)
    354             ], [[ARCHITECTURE, util.lowerize]], [
     339            ], [[ARCHITECTURE, lowerize]], [
    355340
    356341            /((?:i[346]|x)86)[;\)]/i                                            // IA32 (x86)
    357342            ], [[ARCHITECTURE, 'ia32']], [
    358343
    359             /\b(aarch64|armv?8e?l?)\b/i                                         // ARM64
     344            /\b(aarch64|arm(v?8e?l?|_?64))\b/i                                 // ARM64
    360345            ], [[ARCHITECTURE, 'arm64']], [
    361346
     
    364349
    365350            // PocketPC mistakenly identified as PowerPC
    366             /windows\s(ce|mobile);\sppc;/i
     351            /windows (ce|mobile); ppc;/i
    367352            ], [[ARCHITECTURE, 'arm']], [
    368353
    369             /((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i                           // PowerPC
    370             ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [
     354            /((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i                            // PowerPC
     355            ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [
    371356
    372357            /(sun4\w)[;\)]/i                                                    // SPARC
    373358            ], [[ARCHITECTURE, 'sparc']], [
    374359
    375             /((?:avr32|ia64(?=;))|68k(?=\))|\barm(?:64|(?=v(?:[1-7]|[5-7]1)l?|;|eabi))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
     360            /((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
    376361                                                                                // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
    377             ], [[ARCHITECTURE, util.lowerize]]
     362            ], [[ARCHITECTURE, lowerize]]
    378363        ],
    379364
     
    386371
    387372            // Samsung
    388             /\b(sch-i[89]0\d|shw-m380s|sm-[pt]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus\s10)/i
    389             ], [MODEL, [VENDOR, 'Samsung'], [TYPE, TABLET]], [
    390             /\b((?:s[cgp]h|gt|sm)-\w+|galaxy\snexus)/i,
    391             /\ssamsung[\s-]([\w-]+)/i,
     373            /\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
     374            ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [
     375            /\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i,
     376            /samsung[- ]([-\w]+)/i,
    392377            /sec-(sgh\w+)/i
    393             ], [MODEL, [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
     378            ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [
    394379
    395380            // Apple
    396             /\((ip(?:hone|od)[\s\w]*);/i                                        // iPod/iPhone
    397             ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [
    398             /\((ipad);[\w\s\),;-]+apple/i,                                      // iPad
    399             /applecoremedia\/[\w\.]+\s\((ipad)/i,
     381            /\((ip(?:hone|od)[\w ]*);/i                                         // iPod/iPhone
     382            ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [
     383            /\((ipad);[-\w\),; ]+apple/i,                                       // iPad
     384            /applecoremedia\/[\w\.]+ \((ipad)/i,
    400385            /\b(ipad)\d\d?,\d\d?[;\]].+ios/i
    401             ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [
     386            ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [
    402387
    403388            // Huawei
    404             /\b((?:agr|ags[23]|bah2?|sht?)-a?[lw]\d{2})/i,
    405             ], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [
    406             /d\/huawei([\w\s-]+)[;\)]/i,
    407             /\b(nexus\s6p|vog-[at]?l\d\d|ane-[at]?l[x\d]\d|eml-a?l\d\da?|lya-[at]?l\d[\dc]|clt-a?l\d\di?|ele-l\d\d)/i,
    408             /\b(\w{2,4}-[atu][ln][01259][019])[;\)\s]/i
    409             ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [
     389            /\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
     390            ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [
     391            /(?:huawei|honor)([-\w ]+)[;\)]/i,
     392            /\b(nexus 6p|\w{2,4}-[atu]?[ln][01259x][012359][an]?)\b(?!.+d\/s)/i
     393            ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [
    410394
    411395            // Xiaomi
    412             /\b(poco[\s\w]+)(?:\sbuild|\))/i,                                   // Xiaomi POCO
    413             /\b;\s(\w+)\sbuild\/hm\1/i,                                         // Xiaomi Hongmi 'numeric' models
    414             /\b(hm[\s\-_]?note?[\s_]?(?:\d\w)?)\sbuild/i,                       // Xiaomi Hongmi
    415             /\b(redmi[\s\-_]?(?:note|k)?[\w\s_]+)(?:\sbuild|\))/i,              // Xiaomi Redmi
    416             /\b(mi[\s\-_]?(?:a\d|one|one[\s_]plus|note lte)?[\s_]?(?:\d?\w?)[\s_]?(?:plus)?)\sbuild/i // Xiaomi Mi
    417             ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
    418             /\b(mi[\s\-_]?(?:pad)(?:[\w\s_]+))(?:\sbuild|\))/i                  // Mi Pad tablets
    419             ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [
     396            /\b(poco[\w ]+)(?: bui|\))/i,                                       // Xiaomi POCO
     397            /\b; (\w+) build\/hm\1/i,                                           // Xiaomi Hongmi 'numeric' models
     398            /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,                             // Xiaomi Hongmi
     399            /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,                   // Xiaomi Redmi
     400            /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i // Xiaomi Mi
     401            ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
     402            /\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i                        // Mi Pad tablets
     403            ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
    420404
    421405            // OPPO
    422             /;\s(\w+)\sbuild.+\soppo/i,
    423             /\s(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007)\b/i
     406            /; (\w+) bui.+ oppo/i,
     407            /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
    424408            ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [
    425409
    426410            // Vivo
    427             /\svivo\s(\w+)(?:\sbuild|\))/i,
    428             /\s(v[12]\d{3}\w?[at])(?:\sbuild|;)/i
     411            /vivo (\w+)(?: bui|\))/i,
     412            /\b(v[12]\d{3}\w?[at])(?: bui|;)/i
    429413            ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
    430414
    431415            // Realme
    432             /\s(rmx[12]\d{3})(?:\sbuild|;)/i
     416            /\b(rmx[12]\d{3})(?: bui|;|\))/i
    433417            ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [
    434418
    435419            // Motorola
    436             /\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)\b[\w\s]+build\//i,
    437             /\smot(?:orola)?[\s-](\w*)/i,
    438             /((?:moto[\s\w\(\)]+|xt\d{3,4}|nexus\s6)(?=\sbuild|\)))/i
    439             ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [
    440             /\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i
    441             ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [
     420            /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
     421            /\bmot(?:orola)?[- ](\w*)/i,
     422            /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
     423            ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [
     424            /\b(mz60\d|xoom[2 ]{0,2}) build\//i
     425            ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [
    442426
    443427            // LG
    444             /((?=lg)?[vl]k\-?\d{3})\sbuild|\s3\.[\s\w;-]{10}lg?-([06cv9]{3,4})/i
    445             ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [
    446             /(lm-?f100[nv]?|nexus\s[45])/i,
    447             /lg[e;\s\/-]+((?!browser|netcast)\w+)/i,
    448             /\blg(\-?[\d\w]+)\sbuild/i
    449             ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
     428            /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
     429            ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [
     430            /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
     431            /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,
     432            /\blg-?([\d\w]+) bui/i
     433            ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [
    450434
    451435            // Lenovo
    452             /(ideatab[\w\-\s]+)/i,
    453             /lenovo\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+)|yt[\d\w-]{6}|tb[\d\w-]{6})/i        // Lenovo tablets
     436            /(ideatab[-\w ]+)/i,
     437            /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i
    454438            ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
    455439
    456440            // Nokia
    457             /(?:maemo|nokia).*(n900|lumia\s\d+)/i,
    458             /nokia[\s_-]?([\w\.-]*)/i
     441            /(?:maemo|nokia).*(n900|lumia \d+)/i,
     442            /nokia[-_ ]?([-\w\.]*)/i
    459443            ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [
    460444
    461445            // Google
    462             /droid.+;\s(pixel\sc)[\s)]/i                                        // Google Pixel C
    463             ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [
    464             /droid.+;\s(pixel[\s\daxl]{0,6})(?:\sbuild|\))/i                    // Google Pixel
    465             ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
     446            /(pixel c)\b/i                                                      // Google Pixel C
     447            ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [
     448            /droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i                         // Google Pixel
     449            ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [
    466450
    467451            // Sony
    468             /droid.+\s([c-g]\d{4}|so[-l]\w+|xq-a\w[4-7][12])(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i
    469             ], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [
    470             /sony\stablet\s[ps]\sbuild\//i,
    471             /(?:sony)?sgp\w+(?:\sbuild\/|\))/i
    472             ], [[MODEL, 'Xperia Tablet'], [VENDOR, 'Sony'], [TYPE, TABLET]], [
     452            /droid.+ ([c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
     453            ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [
     454            /sony tablet [ps]/i,
     455            /\b(?:sony)?sgp\w+(?: bui|\))/i
     456            ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [
    473457
    474458            // OnePlus
    475             /\s(kb2005|in20[12]5|be20[12][59])\b/i,
    476             /\ba000(1)\sbuild/i,                                                // OnePlus
    477             /\boneplus\s(a\d{4})[\s)]/i
     459            / (kb2005|in20[12]5|be20[12][59])\b/i,
     460            /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
    478461            ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
    479462
    480463            // Amazon
    481464            /(alexa)webm/i,
    482             /(kf[a-z]{2}wi)(\sbuild\/|\))/i,                                    // Kindle Fire without Silk
    483             /(kf[a-z]+)(\sbuild\/|\)).+silk\//i                                 // Kindle Fire HD
    484             ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
    485             /(sd|kf)[0349hijorstuw]+(\sbuild\/|\)).+silk\//i                    // Fire Phone
    486             ], [[MODEL, 'Fire Phone'], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [
     465            /(kf[a-z]{2}wi)( bui|\))/i,                                         // Kindle Fire without Silk
     466            /(kf[a-z]+)( bui|\)).+silk\//i                                      // Kindle Fire HD
     467            ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [
     468            /((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i                     // Fire Phone
     469            ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [
    487470
    488471            // BlackBerry
    489             /\((playbook);[\w\s\),;-]+(rim)/i                                   // BlackBerry PlayBook
     472            /(playbook);[-\w\),; ]+(rim)/i                                      // BlackBerry PlayBook
    490473            ], [MODEL, VENDOR, [TYPE, TABLET]], [
    491             /((?:bb[a-f]|st[hv])100-\d)/i,
    492             /\(bb10;\s(\w+)/i                                                   // BlackBerry 10
    493             ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
     474            /\b((?:bb[a-f]|st[hv])100-\d)/i,
     475            /\(bb10; (\w+)/i                                                    // BlackBerry 10
     476            ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [
    494477
    495478            // Asus
    496             /(?:\b|asus_)(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus\s7|padfone|p00[cj])/i
    497             ], [MODEL, [VENDOR, 'ASUS'], [TYPE, TABLET]], [
    498             /\s(z[es]6[027][01][km][ls]|zenfone\s\d\w?)\b/i
    499             ], [MODEL, [VENDOR, 'ASUS'], [TYPE, MOBILE]], [
     479            /(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
     480            ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [
     481            / (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
     482            ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [
    500483
    501484            // HTC
    502             /(nexus\s9)/i                                                       // HTC Nexus 9
     485            /(nexus 9)/i                                                        // HTC Nexus 9
    503486            ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
    504             /(htc)[;_\s-]{1,2}([\w\s]+(?=\)|\sbuild)|\w+)/i,                    // HTC
     487            /(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,                         // HTC
    505488
    506489            // ZTE
    507             /(zte)-(\w*)/i,
    508             /(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
     490            /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
     491            /(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\w]*)/i        // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
    509492            ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
    510493
    511494            // Acer
    512             /droid[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i
     495            /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
    513496            ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
    514497
    515498            // Meizu
    516             /droid.+;\s(m[1-5]\snote)\sbuild/i,
    517             /\bmz-([\w-]{2,})/i
     499            /droid.+; (m[1-5] note) bui/i,
     500            /\bmz-([-\w]{2,})/i
    518501            ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
    519502
     503            // Sharp
     504            /\b(sh-?[altvz]?\d\d[a-ekm]?)/i
     505            ], [MODEL, [VENDOR, 'Sharp'], [TYPE, MOBILE]], [
     506
    520507            // MIXED
    521             /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i,
     508            /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,
    522509                                                                                // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
    523             /(hp)\s([\w\s]+\w)/i,                                               // HP iPAQ
     510            /(hp) ([\w ]+\w)/i,                                                 // HP iPAQ
    524511            /(asus)-?(\w+)/i,                                                   // Asus
    525             /(microsoft);\s(lumia[\s\w]+)/i,                                    // Microsoft Lumia
    526             /(lenovo)[_\s-]?([\w-]+)/i,                                         // Lenovo
    527             /linux;.+(jolla);/i,                                                // Jolla
    528             /droid.+;\s(oppo)\s?([\w\s]+)\sbuild/i                              // OPPO
     512            /(microsoft); (lumia[\w ]+)/i,                                      // Microsoft Lumia
     513            /(lenovo)[-_ ]?([-\w]+)/i,                                          // Lenovo
     514            /(jolla)/i,                                                         // Jolla
     515            /(oppo) ?([\w ]+) bui/i                                             // OPPO
    529516            ], [VENDOR, MODEL, [TYPE, MOBILE]], [
    530517
    531             /(archos)\s(gamepad2?)/i,                                           // Archos
     518            /(archos) (gamepad2?)/i,                                            // Archos
    532519            /(hp).+(touchpad(?!.+tablet)|tablet)/i,                             // HP TouchPad
    533520            /(kindle)\/([\w\.]+)/i,                                             // Kindle
    534             /\s(nook)[\w\s]+build\/(\w+)/i,                                     // Nook
    535             /(dell)\s(strea[kpr\s\d]*[\dko])/i,                                 // Dell Streak
    536             /[;\/]\s?(le[\s\-]+pan)[\s\-]+(\w{1,9})\sbuild/i,                   // Le Pan Tablets
    537             /[;\/]\s?(trinity)[\-\s]*(t\d{3})\sbuild/i,                         // Trinity Tablets
    538             /\b(gigaset)[\s\-]+(q\w{1,9})\sbuild/i,                             // Gigaset Tablets
    539             /\b(vodafone)\s([\w\s]+)(?:\)|\sbuild)/i                            // Vodafone
     521            /(nook)[\w ]+build\/(\w+)/i,                                        // Nook
     522            /(dell) (strea[kpr\d ]*[\dko])/i,                                   // Dell Streak
     523            /(le[- ]+pan)[- ]+(\w{1,9}) bui/i,                                  // Le Pan Tablets
     524            /(trinity)[- ]*(t\d{3}) bui/i,                                      // Trinity Tablets
     525            /(gigaset)[- ]+(q\w{1,9}) bui/i,                                    // Gigaset Tablets
     526            /(vodafone) ([\w ]+)(?:\)| bui)/i                                   // Vodafone
    540527            ], [VENDOR, MODEL, [TYPE, TABLET]], [
    541528
    542             /\s(surface\sduo)\s/i                                               // Surface Duo
    543             ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, TABLET]], [
    544             /droid\s[\d\.]+;\s(fp\du?)\sbuild/i
     529            /(surface duo)/i                                                    // Surface Duo
     530            ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [
     531            /droid [\d\.]+; (fp\du?)(?: b|\))/i                                 // Fairphone
    545532            ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [
    546             /\s(u304aa)\sbuild/i                                                // AT&T
     533            /(u304aa)/i                                                         // AT&T
    547534            ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [
    548             /sie-(\w*)/i                                                        // Siemens
     535            /\bsie-(\w*)/i                                                      // Siemens
    549536            ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
    550             /[;\/]\s?(rct\w+)\sbuild/i                                          // RCA Tablets
     537            /\b(rct\w+) b/i                                                     // RCA Tablets
    551538            ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
    552             /[;\/\s](venue[\d\s]{2,7})\sbuild/i                                 // Dell Venue Tablets
     539            /\b(venue[\d ]{2,7}) b/i                                            // Dell Venue Tablets
    553540            ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
    554             /[;\/]\s?(q(?:mv|ta)\w+)\sbuild/i                                   // Verizon Tablet
     541            /\b(q(?:mv|ta)\w+) b/i                                              // Verizon Tablet
    555542            ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [
    556             /[;\/]\s(?:barnes[&\s]+noble\s|bn[rt])([\w\s\+]*)\sbuild/i          // Barnes & Noble Tablet
     543            /\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i                       // Barnes & Noble Tablet
    557544            ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [
    558             /[;\/]\s(tm\d{3}\w+)\sbuild/i
     545            /\b(tm\d{3}\w+) b/i
    559546            ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
    560             /;\s(k88)\sbuild/i                                                  // ZTE K Series Tablet
     547            /\b(k88) b/i                                                        // ZTE K Series Tablet
    561548            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
    562             /;\s(nx\d{3}j)\sbuild/i                                             // ZTE Nubia
     549            /\b(nx\d{3}j) b/i                                                   // ZTE Nubia
    563550            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [
    564             /[;\/]\s?(gen\d{3})\sbuild.*49h/i                                   // Swiss GEN Mobile
     551            /\b(gen\d{3}) b.+49h/i                                              // Swiss GEN Mobile
    565552            ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
    566             /[;\/]\s?(zur\d{3})\sbuild/i                                        // Swiss ZUR Tablet
     553            /\b(zur\d{3}) b/i                                                   // Swiss ZUR Tablet
    567554            ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
    568             /[;\/]\s?((zeki)?tb.*\b)\sbuild/i                                   // Zeki Tablets
     555            /\b((zeki)?tb.*\b) b/i                                              // Zeki Tablets
    569556            ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
    570             /[;\/]\s([yr]\d{2})\sbuild/i,
    571             /[;\/]\s(dragon[\-\s]+touch\s|dt)(\w{5})\sbuild/i                   // Dragon Touch Tablet
     557            /\b([yr]\d{2}) b/i,
     558            /\b(dragon[- ]+touch |dt)(\w{5}) b/i                                // Dragon Touch Tablet
    572559            ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [
    573             /[;\/]\s?(ns-?\w{0,9})\sbuild/i                                     // Insignia Tablets
     560            /\b(ns-?\w{0,9}) b/i                                                // Insignia Tablets
    574561            ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
    575             /[;\/]\s?((nxa|Next)-?\w{0,9})\sbuild/i                             // NextBook Tablets
     562            /\b((nxa|next)-?\w{0,9}) b/i                                        // NextBook Tablets
    576563            ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
    577             /[;\/]\s?(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05]))\sbuild/i
    578             ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [                    // Voice Xtreme Phones
    579             /[;\/]\s?(lvtel\-)?(v1[12])\sbuild/i                                // LvTel Phones
     564            /\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i                  // Voice Xtreme Phones
     565            ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [
     566            /\b(lvtel\-)?(v1[12]) b/i                                           // LvTel Phones
    580567            ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
    581             /;\s(ph-1)\s/i
    582             ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [                // Essential PH-1
    583             /[;\/]\s?(v(100md|700na|7011|917g).*\b)\sbuild/i                    // Envizen Tablets
     568            /\b(ph-1) /i                                                        // Essential PH-1
     569            ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [
     570            /\b(v(100md|700na|7011|917g).*\b) b/i                               // Envizen Tablets
    584571            ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
    585             /[;\/]\s?(trio[\s\w\-\.]+)\sbuild/i                                 // MachSpeed Tablets
     572            /\b(trio[-\w\. ]+) b/i                                              // MachSpeed Tablets
    586573            ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [
    587             /[;\/]\s?tu_(1491)\sbuild/i                                         // Rotor Tablets
     574            /\btu_(1491) b/i                                                    // Rotor Tablets
    588575            ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [
    589             /(shield[\w\s]+)\sbuild/i                                           // Nvidia Shield Tablets
     576            /(shield[\w ]+) b/i                                                 // Nvidia Shield Tablets
    590577            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [
    591             /(sprint)\s(\w+)/i                                                  // Sprint Phones
     578            /(sprint) (\w+)/i                                                   // Sprint Phones
    592579            ], [VENDOR, MODEL, [TYPE, MOBILE]], [
    593580            /(kin\.[onetw]{3})/i                                                // Microsoft Kin
    594             ], [[MODEL, /\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [
    595             /droid\s[\d\.]+;\s(cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i     // Zebra
    596             ], [MODEL, [VENDOR, 'Zebra'], [TYPE, TABLET]], [
    597             /droid\s[\d\.]+;\s(ec30|ps20|tc[2-8]\d[kx])\)/i
    598             ], [MODEL, [VENDOR, 'Zebra'], [TYPE, MOBILE]], [
     581            ], [[MODEL, /\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [
     582            /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i             // Zebra
     583            ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [
     584            /droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
     585            ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [
    599586
    600587            ///////////////////
     
    602589            ///////////////////
    603590
    604             /\s(ouya)\s/i,                                                      // Ouya
    605             /(nintendo)\s([wids3utch]+)/i                                       // Nintendo
     591            /(ouya)/i,                                                          // Ouya
     592            /(nintendo) ([wids3utch]+)/i                                        // Nintendo
    606593            ], [VENDOR, MODEL, [TYPE, CONSOLE]], [
    607             /droid.+;\s(shield)\sbuild/i                                        // Nvidia
     594            /droid.+; (shield) bui/i                                            // Nvidia
    608595            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
    609             /(playstation\s[345portablevi]+)/i                                  // Playstation
    610             ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [
    611             /[\s\(;](xbox(?:\sone)?(?!;\sxbox))[\s\);]/i                        // Microsoft Xbox
    612             ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [
     596            /(playstation [345portablevi]+)/i                                   // Playstation
     597            ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
     598            /\b(xbox(?: one)?(?!; xbox))[\); ]/i                                // Microsoft Xbox
     599            ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [
    613600
    614601            ///////////////////
     
    619606            ], [VENDOR, [TYPE, SMARTTV]], [
    620607            /hbbtv.+maple;(\d+)/i
    621             ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [
    622             /(?:linux;\snetcast.+smarttv|lg\snetcast\.tv-201\d)/i,              // LG SmartTV
    623             ], [[VENDOR, 'LG'], [TYPE, SMARTTV]], [
    624             /(apple)\s?tv/i                                                     // Apple TV
    625             ], [VENDOR, [MODEL, 'Apple TV'], [TYPE, SMARTTV]], [
     608            ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [
     609            /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i        // LG SmartTV
     610            ], [[VENDOR, LG], [TYPE, SMARTTV]], [
     611            /(apple) ?tv/i                                                      // Apple TV
     612            ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [
    626613            /crkey/i                                                            // Google Chromecast
    627             ], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [
    628             /droid.+aft([\w])(\sbuild\/|\))/i                                   // Fire TV
    629             ], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [
     614            ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
     615            /droid.+aft(\w)( bui|\))/i                                          // Fire TV
     616            ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
    630617            /\(dtv[\);].+(aquos)/i                                              // Sharp
    631618            ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [
    632             /hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i            // HbbTV devices
    633             ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [
    634             /[\s\/\(](android\s|smart[-\s]?|opera\s)tv[;\)\s]/i                 // SmartTV from Unidentified Vendors
     619            /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,                          // Roku
     620            /hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i               // HbbTV devices
     621            ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [
     622            /\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i                   // SmartTV from Unidentified Vendors
    635623            ], [[TYPE, SMARTTV]], [
    636624
     
    639627            ///////////////////
    640628
    641             /((pebble))app\/[\d\.]+\s/i                                         // Pebble
     629            /((pebble))app/i                                                    // Pebble
    642630            ], [VENDOR, MODEL, [TYPE, WEARABLE]], [
    643             /droid.+;\s(glass)\s\d/i                                            // Google Glass
    644             ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
    645             /droid\s[\d\.]+;\s(wt63?0{2,3})\)/i
    646             ], [MODEL, [VENDOR, 'Zebra'], [TYPE, WEARABLE]], [
     631            /droid.+; (glass) \d/i                                              // Google Glass
     632            ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [
     633            /droid.+; (wt63?0{2,3})\)/i
     634            ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [
     635            /(quest( 2)?)/i                                                     // Oculus Quest
     636            ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [
    647637
    648638            ///////////////////
     
    650640            ///////////////////
    651641
    652             /(tesla)(?:\sqtcarbrowser|\/20[12]\d\.[\w\.-]+)/i                   // Tesla
     642            /(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i                              // Tesla
    653643            ], [VENDOR, [TYPE, EMBEDDED]], [
    654644
     
    657647            ///////////////////
    658648
    659             /droid .+?; ([^;]+?)(?: build|\) applewebkit).+? mobile safari/i    // Android Phones from Unidentified Vendors
     649            /droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i           // Android Phones from Unidentified Vendors
    660650            ], [MODEL, [TYPE, MOBILE]], [
    661             /droid .+?;\s([^;]+?)(?: build|\) applewebkit).+?(?! mobile) safari/i  // Android Tablets from Unidentified Vendors
     651            /droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i       // Android Tablets from Unidentified Vendors
    662652            ], [MODEL, [TYPE, TABLET]], [
    663             /\s(tablet|tab)[;\/]/i,                                             // Unidentifiable Tablet
    664             /\s(mobile)(?:[;\/]|\ssafari)/i                                     // Unidentifiable Mobile
    665             ], [[TYPE, util.lowerize]], [
    666             /(android[\w\.\s\-]{0,9});.+build/i                                 // Generic Android Device
    667             ], [MODEL, [VENDOR, 'Generic']], [
    668             /(phone)/i
    669             ], [[TYPE, MOBILE]]
     653            /\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i                      // Unidentifiable Tablet
     654            ], [[TYPE, TABLET]], [
     655            /(phone|mobile(?:[;\/]| safari)|pda(?=.+windows ce))/i              // Unidentifiable Mobile
     656            ], [[TYPE, MOBILE]], [
     657            /(android[-\w\. ]{0,9});.+buil/i                                    // Generic Android Device
     658            ], [MODEL, [VENDOR, 'Generic']]
    670659        ],
    671660
    672661        engine : [[
    673662
    674             /windows.+\sedge\/([\w\.]+)/i                                       // EdgeHTML
    675             ], [VERSION, [NAME, 'EdgeHTML']], [
     663            /windows.+ edge\/([\w\.]+)/i                                       // EdgeHTML
     664            ], [VERSION, [NAME, EDGE+'HTML']], [
    676665
    677666            /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i                         // Blink
     
    681670            /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
    682671            /ekioh(flow)\/([\w\.]+)/i,                                          // Flow
    683             /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,                          // KHTML/Tasman/Links
    684             /(icab)[\/\s]([23]\.[\d\.]+)/i                                      // iCab
     672            /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,                           // KHTML/Tasman/Links
     673            /(icab)[\/ ]([23]\.[\d\.]+)/i                                       // iCab
    685674            ], [NAME, VERSION], [
    686675
     
    692681
    693682            // Windows
    694             /microsoft\s(windows)\s(vista|xp)/i                                 // Windows (iTunes)
    695             ], [NAME, VERSION], [
    696             /(windows)\snt\s6\.2;\s(arm)/i,                                     // Windows RT
    697             /(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i,                   // Windows Phone
    698             /(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)(?!.+xbox)/i
    699             ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [
    700             /(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
    701             ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [
     683            /microsoft (windows) (vista|xp)/i                                   // Windows (iTunes)
     684            ], [NAME, VERSION], [
     685            /(windows) nt 6\.2; (arm)/i,                                        // Windows RT
     686            /(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,            // Windows Phone
     687            /(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i
     688            ], [NAME, [VERSION, strMapper, windowsVersionMap]], [
     689            /(win(?=3|9|n)|win 9x )([nt\d\.]+)/i
     690            ], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [
    702691
    703692            // iOS/macOS
    704             /ip[honead]{2,4}\b(?:.*os\s([\w]+)\slike\smac|;\sopera)/i,          // iOS
     693            /ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,              // iOS
    705694            /cfnetwork\/.+darwin/i
    706695            ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
    707             /(mac\sos\sx)\s?([\w\s\.]*)/i,
    708             /(macintosh|mac(?=_powerpc)\s)(?!.+haiku)/i                         // Mac OS
     696            /(mac os x) ?([\w\. ]*)/i,
     697            /(macintosh|mac_powerpc\b)(?!.+haiku)/i                             // Mac OS
    709698            ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [
    710699
    711             // Mobile OSes                                                      // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS
    712             /(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i,
     700            // Mobile OSes
     701            /droid ([\w\.]+)\b.+(android[- ]x86)/i                              // Android-x86
     702            ], [VERSION, NAME], [                                               // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS
     703            /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,
    713704            /(blackberry)\w*\/([\w\.]*)/i,                                      // Blackberry
    714             /(tizen|kaios)[\/\s]([\w\.]+)/i,                                    // Tizen/KaiOS
     705            /(tizen|kaios)[\/ ]([\w\.]+)/i,                                     // Tizen/KaiOS
    715706            /\((series40);/i                                                    // Series 40
    716707            ], [NAME, VERSION], [
    717708            /\(bb(10);/i                                                        // BlackBerry 10
    718             ], [VERSION, [NAME, 'BlackBerry']], [
    719             /(?:symbian\s?os|symbos|s60(?=;)|series60)[\/\s-]?([\w\.]*)/i       // Symbian
     709            ], [VERSION, [NAME, BLACKBERRY]], [
     710            /(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i         // Symbian
    720711            ], [VERSION, [NAME, 'Symbian']], [
    721             /mozilla.+\(mobile;.+gecko.+firefox/i                              // Firefox OS
    722             ], [[NAME, 'Firefox OS']], [
     712            /mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i // Firefox OS
     713            ], [VERSION, [NAME, FIREFOX+' OS']], [
    723714            /web0s;.+rt(tv)/i,
    724715            /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i                              // WebOS
     
    727718            // Google Chromecast
    728719            /crkey\/([\d\.]+)/i                                                 // Google Chromecast
    729             ], [VERSION, [NAME, 'Chromecast']], [
    730             /(cros)\s[\w]+\s([\w\.]+\w)/i                                       // Chromium OS
     720            ], [VERSION, [NAME, CHROME+'cast']], [
     721            /(cros) [\w]+ ([\w\.]+\w)/i                                         // Chromium OS
    731722            ], [[NAME, 'Chromium OS'], VERSION],[
    732723
    733724            // Console
    734             /(nintendo|playstation)\s([wids345portablevuch]+)/i,                // Nintendo/Playstation
    735             /(xbox);\s+xbox\s([^\);]+)/i,                                       // Microsoft Xbox (360, One, X, S, Series X, Series S)
    736 
    737             // GNU/Linux based
    738             /(mint)[\/\s\(\)]?(\w*)/i,                                          // Mint
    739             /(mageia|vectorlinux)[;\s]/i,                                       // Mageia/VectorLinux
    740             /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?=\slinux)|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus|raspbian)(?:\sgnu\/linux)?(?:\slinux)?[\/\s-]?(?!chrom|package)([\w\.-]*)/i,
    741                                                                                 // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
    742                                                                                 // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus
    743             /(hurd|linux)\s?([\w\.]*)/i,                                        // Hurd/Linux
    744             /(gnu)\s?([\w\.]*)/i,                                               // GNU
    745 
    746             // BSD based
    747             /\s([frentopc-]{0,4}bsd|dragonfly)\s?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,  // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
    748             /(haiku)\s(\w+)/i                                                   // Haiku
    749             ], [NAME, VERSION], [
     725            /(nintendo|playstation) ([wids345portablevuch]+)/i,                 // Nintendo/Playstation
     726            /(xbox); +xbox ([^\);]+)/i,                                         // Microsoft Xbox (360, One, X, S, Series X, Series S)
    750727
    751728            // Other
    752             /(sunos)\s?([\w\.\d]*)/i                                            // Solaris
     729            /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,                            // Joli/Palm
     730            /(mint)[\/\(\) ]?(\w*)/i,                                           // Mint
     731            /(mageia|vectorlinux)[; ]/i,                                        // Mageia/VectorLinux
     732            /([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,
     733                                                                                // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire
     734            /(hurd|linux) ?([\w\.]*)/i,                                         // Hurd/Linux
     735            /(gnu) ?([\w\.]*)/i,                                                // GNU
     736            /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
     737            /(haiku) (\w+)/i                                                    // Haiku
     738            ], [NAME, VERSION], [
     739            /(sunos) ?([\w\.\d]*)/i                                             // Solaris
    753740            ], [[NAME, 'Solaris'], VERSION], [
    754             /((?:open)?solaris)[\/\s-]?([\w\.]*)/i,                             // Solaris
    755             /(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i,                                // AIX
    756             /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i,  // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia
    757             /(unix)\s?([\w\.]*)/i                                               // UNIX
     741            /((?:open)?solaris)[-\/ ]?([\w\.]*)/i,                              // Solaris
     742            /(aix) ((\d)(?=\.|\)| )[\w\.])*/i,                                  // AIX
     743            /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i,            // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX
     744            /(unix) ?([\w\.]*)/i                                                // UNIX
    758745            ], [NAME, VERSION]
    759746        ]
    760747    };
    761748
    762 
    763749    /////////////////
    764750    // Constructor
    765751    ////////////////
     752
    766753    var UAParser = function (ua, extensions) {
    767754
    768         if (typeof ua === 'object') {
     755        if (typeof ua === OBJ_TYPE) {
    769756            extensions = ua;
    770757            ua = undefined;
     
    775762        }
    776763
    777         var _ua = ua || ((typeof window !== 'undefined' && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
    778         var _rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
     764        var _ua = ua || ((typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
     765        var _rgxmap = extensions ? extend(regexes, extensions) : regexes;
    779766
    780767        this.getBrowser = function () {
    781             var _browser = { name: undefined, version: undefined };
    782             mapper.rgx.call(_browser, _ua, _rgxmap.browser);
    783             _browser.major = util.major(_browser.version); // deprecated
     768            var _browser = {};
     769            _browser[NAME] = undefined;
     770            _browser[VERSION] = undefined;
     771            rgxMapper.call(_browser, _ua, _rgxmap.browser);
     772            _browser.major = majorize(_browser.version);
    784773            return _browser;
    785774        };
    786775        this.getCPU = function () {
    787             var _cpu = { architecture: undefined };
    788             mapper.rgx.call(_cpu, _ua, _rgxmap.cpu);
     776            var _cpu = {};
     777            _cpu[ARCHITECTURE] = undefined;
     778            rgxMapper.call(_cpu, _ua, _rgxmap.cpu);
    789779            return _cpu;
    790780        };
    791781        this.getDevice = function () {
    792             var _device = { vendor: undefined, model: undefined, type: undefined };
    793             mapper.rgx.call(_device, _ua, _rgxmap.device);
     782            var _device = {};
     783            _device[VENDOR] = undefined;
     784            _device[MODEL] = undefined;
     785            _device[TYPE] = undefined;
     786            rgxMapper.call(_device, _ua, _rgxmap.device);
    794787            return _device;
    795788        };
    796789        this.getEngine = function () {
    797             var _engine = { name: undefined, version: undefined };
    798             mapper.rgx.call(_engine, _ua, _rgxmap.engine);
     790            var _engine = {};
     791            _engine[NAME] = undefined;
     792            _engine[VERSION] = undefined;
     793            rgxMapper.call(_engine, _ua, _rgxmap.engine);
    799794            return _engine;
    800795        };
    801796        this.getOS = function () {
    802             var _os = { name: undefined, version: undefined };
    803             mapper.rgx.call(_os, _ua, _rgxmap.os);
     797            var _os = {};
     798            _os[NAME] = undefined;
     799            _os[VERSION] = undefined;
     800            rgxMapper.call(_os, _ua, _rgxmap.os);
    804801            return _os;
    805802        };
     
    818815        };
    819816        this.setUA = function (ua) {
    820             _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? util.trim(ua, UA_MAX_LENGTH) : ua;
     817            _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;
    821818            return this;
    822819        };
     
    826823
    827824    UAParser.VERSION = LIBVERSION;
    828     UAParser.BROWSER = {
    829         NAME    : NAME,
    830         MAJOR   : MAJOR, // deprecated
    831         VERSION : VERSION
    832     };
    833     UAParser.CPU = {
    834         ARCHITECTURE : ARCHITECTURE
    835     };
    836     UAParser.DEVICE = {
    837         MODEL   : MODEL,
    838         VENDOR  : VENDOR,
    839         TYPE    : TYPE,
    840         CONSOLE : CONSOLE,
    841         MOBILE  : MOBILE,
    842         SMARTTV : SMARTTV,
    843         TABLET  : TABLET,
    844         WEARABLE: WEARABLE,
    845         EMBEDDED: EMBEDDED
    846     };
    847     UAParser.ENGINE = {
    848         NAME    : NAME,
    849         VERSION : VERSION
    850     };
    851     UAParser.OS = {
    852         NAME    : NAME,
    853         VERSION : VERSION
    854     };
     825    UAParser.BROWSER =  enumerize([NAME, VERSION, MAJOR]);
     826    UAParser.CPU = enumerize([ARCHITECTURE]);
     827    UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);
     828    UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);
    855829
    856830    ///////////
    857831    // Export
    858832    //////////
    859 
    860833
    861834    // check js environment
     
    868841    } else {
    869842        // requirejs env (optional)
    870         if (typeof(define) === 'function' && define.amd) {
     843        if (typeof(define) === FUNC_TYPE && define.amd) {
    871844            define(function () {
    872845                return UAParser;
    873846            });
    874         } else if (typeof window !== 'undefined') {
     847        } else if (typeof window !== UNDEF_TYPE) {
    875848            // browser env
    876849            window.UAParser = UAParser;
     
    883856    //   jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
    884857    //   and we should catch that.
    885     var $ = typeof window !== 'undefined' && (window.jQuery || window.Zepto);
     858    var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);
    886859    if ($ && !$.ua) {
    887860        var parser = new UAParser();
     
    890863            return parser.getUA();
    891864        };
    892         $.ua.set = function (uastring) {
    893             parser.setUA(uastring);
     865        $.ua.set = function (ua) {
     866            parser.setUA(ua);
    894867            var result = parser.getResult();
    895868            for (var prop in result) {
  • trip-planner-front/node_modules/ua-parser-js/test/browser-test.json

    r59329aa re29cc2e  
    161161    },
    162162    {
     163        "desc"    : "Camino on Mac",
     164        "ua"      : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Camino/2.2.1",
     165        "expect"  :
     166        {
     167            "name"    : "Camino",
     168            "version" : "2.2.1",
     169            "major"   : "2"
     170        }
     171    },
     172    {
    163173        "desc"    : "Chimera",
    164174        "ua"      : "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; pl-PL; rv:1.0.1) Gecko/20021111 Chimera/0.6",
     
    428438            "version" : "1.0a1",
    429439            "major"   : "1"
     440        }
     441    },
     442    {
     443        "desc"    : "Firefox for Maemo (Nokia N900)",
     444        "ua"      : "Mozilla/5.0 (Maemo; Linux armv7l; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 Fennec/10.0.1",
     445        "expect"  :
     446        {
     447            "name"    : "Fennec",
     448            "version" : "10.0.1",
     449            "major"   : "10"
    430450        }
    431451    },
     
    730750    },
    731751    {
     752        "desc"    : "Netscape 6",
     753        "ua"      : "Mozilla/5.0 (Windows; U; Win95; de-DE; rv:0.9.2) Gecko/20010726 Netscape6/6.1",
     754        "expect"  :
     755        {
     756            "name"    : "Netscape",
     757            "version" : "6.1",
     758            "major"   : "6"
     759        }
     760    },
     761    {
    732762        "desc"    : "Nokia Browser",
    733763        "ua"      : "Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/025.007; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.37 Mobile Safari/533.4 3gpp-gba",
     
    740770    },
    741771    {
     772        "desc"    : "Obigo",
     773        "ua"      : "LG-GS290/V100 Obigo/WAP2.0 Profile/MIDP-2.1 Configuration/CLDC-1.1",
     774        "expect"  :
     775        {
     776            "name"    : "Obigo",
     777            "version" : "WAP2.0",
     778            "major"   : "2"
     779        }
     780    },
     781    {
     782        "desc"    : "Obigo",
     783        "ua"      : "LG/KU990i/v10a Browser/Obigo-Q05A/3.6 MMS/LG-MMS-V1.0/1.2 Java/ASVM/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1",
     784        "expect"  :
     785        {
     786            "name"    : "Obigo",
     787            "version" : "Q05A",
     788            "major"   : "05"
     789        }
     790    },
     791    {
    742792        "desc"    : "Oculus Browser",
    743793        "ua"      : "Mozilla/5.0 (Linux; Android 7.0; SM-G920I Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/3.4.9 SamsungBrowser/4.0 Chrome/57.0.2987.146 Mobile VR Safari/537.36",
     
    750800    },
    751801    {
     802        "desc"    : "Oculus Browser",
     803        "ua"      : "Mozilla/5.0 (Linux; Android 10; Quest 2) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/15.0.0.0.22.280317669 SamsungBrowser/4.0 Chrome/89.0.4389.90 VR Safari/537.36",
     804        "expect"  :
     805        {
     806            "name"    : "Oculus Browser",
     807            "version" : "15.0.0.0.22.280317669",
     808            "major"   : "15"
     809        }
     810    },
     811    {
    752812        "desc"    : "OmniWeb",
    753813        "ua"      : "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.48",
     
    9601020    },
    9611021    {
     1022        "desc"    : "SeaMonkey on Mac",
     1023        "ua"      : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1",
     1024        "expect"  :
     1025        {
     1026            "name"    : "SeaMonkey",
     1027            "version" : "2.7.1",
     1028            "major"   : "2"
     1029        }
     1030    },
     1031    {
    9621032        "desc"    : "Silk Browser",
    9631033        "ua"      : "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-84)",
     
    10901160    },
    10911161    {
     1162        "desc"    : "UPBrowser",
     1163        "ua"      : "BenQ-CF61/1.00/WAP2.0/MIDP2.0/CLDC1.0 UP.Browser/6.3.0.4.c.1.102 (GUI) MMP/2.0",
     1164        "expect"  :
     1165        {
     1166            "name"    : "UP.Browser",
     1167            "version" : "6.3.0.4.c.1.102",
     1168            "major"   : "6"
     1169        }
     1170    },
     1171    {
    10921172        "desc": "WeChat on iOS",
    10931173        "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H321 MicroMessenger/6.3.6 NetType/WIFI Language/zh_CN",
     
    12301310    },
    12311311    {
     1312        "desc"    : "Firefox iOS using iPad",
     1313        "ua"      : "Mozilla/5.0 (iPad; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4",
     1314        "expect"  :
     1315        {
     1316            "name"    : "Firefox",
     1317            "version" : "1.0",
     1318            "major"   : "1"
     1319        }
     1320    },
     1321    {
    12321322        "desc"    : "QQ on iOS",
    12331323        "ua"      : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A456 QQ/6.5.3.410 V1_IPH_SQ_6.5.3_1_APP_A Pixel/1080 Core/UIWebView NetType/WIFI Mem/26",
  • trip-planner-front/node_modules/ua-parser-js/test/cpu-test.json

    r59329aa re29cc2e  
    8181    },
    8282    {
     83        "desc"    : "Nokia N900 Linux mobile",
     84        "ua"      : "Mozilla/5.0 (Maemo; Linux armv7l; rv:10.0) Gecko/20100101 Firefox/10.0 Fennec/10.0",
     85        "expect"  :
     86        {
     87            "architecture"  : "arm"
     88        }
     89    },
     90    {
    8391        "desc"    : "ARMEABI",
    8492        "ua"      : "[FBAN/FB4A;FBAV/237.0.0.44.120;FBBV/170693408;FBDM/{density=1.75,width=720,height=1280};FBLC/en_US;FBRV/172067074;FBCR/ ;FBMF/samsung;FBBD/samsung;FBPN/com.facebook.katana;FBDV/SM-S367VL;FBSV/9;FBBK/1;FBOP/19;FBCA/armeabi-v7a:armeabi;]",
     
    105113    },
    106114    {
     115        "desc"    : "ARM64",
     116        "ua"      : "Mozilla/5.0 (Windows NT 10.0; ARM64; RM-1096) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
     117        "expect"  :
     118        {
     119            "architecture"  : "arm64"
     120        }
     121    },
     122    {
     123        "desc"    : "ARM64",
     124        "ua"      : "Mozilla/5.0 (Linux; arm_64; Android 9; HRY-LX1T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 YaBrowser/19.12.1.121.00 Mobile Safari/537.36",
     125        "expect"  :
     126        {
     127            "architecture"  : "arm64"
     128        }
     129    },
     130    {
    107131        "desc"    : "Pocket PC",
    108132        "ua"      : "Opera/9.7 (Windows Mobile; PPC; Opera Mobi/35166; U; en) Presto/2.2.1",
     
    131155        "desc"    : "Mac PowerPC",
    132156        "ua"      : "iCab/2.9.5 (Macintosh; U; PPC; Mac OS X)",
     157        "expect"  :
     158        {
     159            "architecture"  : "ppc"
     160        }
     161    },
     162    {
     163        "desc"    : "Mac OS X on PowerPC using Firefox",
     164        "ua"      : "Mozilla/5.0 (Macintosh; PPC Mac OS X x.y; rv:10.0) Gecko/20100101 Firefox/10.0",
    133165        "expect"  :
    134166        {
  • trip-planner-front/node_modules/ua-parser-js/test/device-test.json

    r59329aa re29cc2e  
    9999    },
    100100    {
     101        "desc": "ASUS Zenfone Max Pro",
     102        "ua": "Mozilla/5.0 (Linux; Android 9; ZB602KL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36",
     103        "expect": {
     104            "vendor": "ASUS",
     105            "model": "ZB602KL",
     106            "type": "mobile"
     107        }
     108    },
     109    {
    101110        "desc": "ASUS Zenfone Max Pro (M1)",
    102111        "ua": "Mozilla/5.0 (Linux; Android 8.1; ASUS_X00TD Build/OPM1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36",
     
    207216    },
    208217    {
     218        "desc": "Fairphone 2",
     219        "ua": "Mozilla/5.0 (Linux; Android 7.1.2; FP2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36",
     220        "expect": {
     221            "vendor": "Fairphone",
     222            "model": "FP2",
     223            "type": "mobile"
     224        }
     225    },
     226    {
     227        "desc": "Fairphone 3",
     228        "ua": "Mozilla/5.0 (Linux; Android 9; FP3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.93 Mobile Safari/537.36",
     229        "expect": {
     230            "vendor": "Fairphone",
     231            "model": "FP3",
     232            "type": "mobile"
     233        }
     234    },
     235    {
    209236        "desc": "HTC Desire 820",
    210237        "ua": "Mozilla/5.0 (Linux; Android 6.0.1; HTC Desire 820 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36",
     
    266293            "vendor": "Huawei",
    267294            "model": "LUA-L03",
     295            "type": "mobile"
     296        }
     297    },
     298    {
     299        "desc": "HUAWEI MediaPad M3 Lite 10",
     300        "ua": "Mozilla/5.0 (Linux; Android 7.0; BAH-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36",
     301        "expect": {
     302            "vendor": "Huawei",
     303            "model": "BAH-L09",
     304            "type": "tablet"
     305        }
     306    },
     307    {
     308        "desc": "HUAWEI MediaPad M5 Lite",
     309        "ua": "Mozilla/5.0 (Linux; Android 8.0.0; BAH2-W19 Build/HUAWEIBAH2-W19; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Safari/537.36",
     310        "expect": {
     311            "vendor": "Huawei",
     312            "model": "BAH2-W19",
     313            "type": "tablet"
     314        }
     315    },
     316    {
     317        "desc": "HUAWEI MediaPad M5",
     318        "ua": "Mozilla/5.0 (Linux; Android 9; SHT-AL09 Build/HUAWEISHT-AL09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.90 Mobile Safari/537.36",
     319        "expect": {
     320            "vendor": "Huawei",
     321            "model": "SHT-AL09",
     322            "type": "tablet"
     323        }
     324    },
     325    {
     326        "desc": "HUAWEI MediaPad T5",
     327        "ua": "Mozilla/5.0 (Linux; Android 8.0.0; AGS2-L09 Build/HUAWEIAGS2-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/84.0.4147.125 Safari/537.36",
     328        "expect": {
     329            "vendor": "Huawei",
     330            "model": "AGS2-L09",
     331            "type": "tablet"
     332        }
     333    },
     334    {
     335        "desc": "HUAWEI MediaPad T10",
     336        "ua": "Mozilla/5.0 (Linux; Android 10; AGR-W09 Build/HUAWEIAGR-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Safari/537.36",
     337        "expect": {
     338            "vendor": "Huawei",
     339            "model": "AGR-W09",
     340            "type": "tablet"
     341        }
     342    },
     343    {
     344        "desc": "HUAWEI MediaPad T10s",
     345        "ua": "Mozilla/5.0 (Linux; Android 10; AGS3-W09 Build/HUAWEIAGS3-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Safari/537.36",
     346        "expect": {
     347            "vendor": "Huawei",
     348            "model": "AGS3-W09",
     349            "type": "tablet"
     350        }
     351    },
     352    {
     353        "desc": "Huawei MatePad T 10",
     354        "ua": "Mozilla/5.0 (Linux; Android 10; AGR-L09; HMSCore 5.0.4.301) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 HuaweiBrowser/11.0.3.304 Safari/537.36",
     355        "expect": {
     356            "vendor": "Huawei",
     357            "model": "AGR-L09",
     358            "type": "tablet"
     359        }
     360    },
     361    {
     362        "desc": "Huawei M3",
     363        "ua": "Mozilla/5.0 (Linux; Android 7.0; BTV-W09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36",
     364        "expect": {
     365            "vendor": "Huawei",
     366            "model": "BTV-W09",
     367            "type": "tablet"
     368        }
     369    },
     370    {
     371        "desc": "Huawei Mate 10 Pro",
     372        "ua": "Mozilla/5.0 (Linux; Android 8.0; BLA-L29 Build/HUAWEIBLA-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3236.6 Mobile Safari/537.36",
     373        "expect": {
     374            "vendor": "Huawei",
     375            "model": "BLA-L29",
     376            "type": "mobile"
     377        }
     378    },
     379    {
     380        "desc": "Huawei Mate X",
     381        "ua": "Mozilla/5.0 (Linux; Android 9; TAH-AN00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.111 Safari/537.36",
     382        "expect": {
     383            "vendor": "Huawei",
     384            "model": "TAH-AN00",
     385            "type": "mobile"
     386        }
     387    },
     388    {
     389        "desc": "Huawei Mate X2",
     390        "ua": "Mozilla/5.0 (Linux; Android 10; TET-AN00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.96 Mobile Safari/537.36",
     391        "expect": {
     392            "vendor": "Huawei",
     393            "model": "TET-AN00",
     394            "type": "mobile"
     395        }
     396    },
     397    {
     398      "desc": "Huawei Mate 20 X",
     399      "ua": "Mozilla/5.0 (Linux; Android 9; EVR-L29 Build/HUAWEIEVR-L29; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.110 Mobile Safari/537.36",
     400      "expect": {
     401          "vendor": "Huawei",
     402          "model": "EVR-L29",
     403          "type": "mobile"
     404      }
     405    },
     406    {
     407      "desc": "Huawei Mate 20 Pro",
     408      "ua": "Mozilla/5.0 (Linux; Android 9; LYA-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
     409      "expect": {
     410          "vendor": "Huawei",
     411          "model": "LYA-L09",
     412          "type": "mobile"
     413      }
     414    },
     415    {
     416      "desc": "Huawei Mate 20 Pro",
     417      "ua": "Mozilla/5.0 (Linux; Android 9; LYA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
     418      "expect": {
     419          "vendor": "Huawei",
     420          "model": "LYA-AL00",
     421          "type": "mobile"
     422      }
     423    },
     424    {
     425        "desc": "Huawei P20 Lite",
     426        "ua": "Mozilla/5.0 (Linux; Android 8.0.0; ANE-LX1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.143 Mobile Safari/537.36",
     427        "expect": {
     428            "vendor": "Huawei",
     429            "model": "ANE-LX1",
     430            "type": "mobile"
     431        }
     432    },
     433    {
     434      "desc": "Huawei P20",
     435      "ua": "Mozilla/5.0 (Linux; Android 8.1.0; EML-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Mobile Safari/537.36",
     436      "expect": {
     437          "vendor": "Huawei",
     438          "model": "EML-L29",
     439          "type": "mobile"
     440      }
     441    },
     442    {
     443        "desc": "Huawei P20 Pro",
     444        "ua": "Mozilla/5.0 (Linux; Android 9; CLT-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
     445        "expect": {
     446            "vendor": "Huawei",
     447            "model": "CLT-L29",
     448            "type": "mobile"
     449        }
     450    },
     451    {
     452        "desc": "Huawei P30",
     453        "ua": "Mozilla/5.0 (Linux; Android 9; ELE-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.90 Mobile Safari/537.36",
     454        "expect": {
     455            "vendor": "Huawei",
     456            "model": "ELE-L29",
     457            "type": "mobile"
     458        }
     459    },
     460    {
     461        "desc": "Huawei P30 Pro",
     462        "ua": "Mozilla/5.0 (Linux; Android 9; VOG-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.143 Mobile Safari/537.36",
     463        "expect": {
     464            "vendor": "Huawei",
     465            "model": "VOG-L29",
     466            "type": "mobile"
     467        }
     468    },
     469    {
     470        "desc": "Huawei P40",
     471        "ua": "Mozilla/5.0 (Linux; Android 10; ANA-AN00 Build/HUAWEIANA-AN00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/11.26 SP-engine/2.22.0 baiduboxapp/11.26.0.10 (Baidu; P1 10) NABar/1.0",
     472        "expect": {
     473            "vendor": "Huawei",
     474            "model": "ANA-AN00",
     475            "type": "mobile"
     476        }
     477    },
     478    {
     479        "desc": "Huawei P40 Pro",
     480        "ua": "Mozilla/5.0 (Linux; Android 10; ELS-AN00 Build/HUAWEIELS-AN00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Mobile Safari/537.36 mailapp/6.0.0",
     481        "expect": {
     482            "vendor": "Huawei",
     483            "model": "ELS-AN00",
     484            "type": "mobile"
     485        }
     486    },
     487    {
     488        "desc": "Huawei 30 Pro+",
     489        "ua": "Mozilla/5.0 (Linux; Android 10; EBG-AN10 Build/HUAWEIEBG-AN10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.86 Mobile Safari/537.36 EdgA/42.0.0.2741",
     490        "expect": {
     491            "vendor": "Huawei",
     492            "model": "EBG-AN10",
     493            "type": "mobile"
     494        }
     495    },
     496    {
     497        "desc": "Huawei 30S",
     498        "ua": "Mozilla/5.0 (Linux; Android 10; CDY-AN90 Build/HUAWEICDY-AN90; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Mobile Safari/537.36 mailapp/5.8.0",
     499        "expect": {
     500            "vendor": "Huawei",
     501            "model": "CDY-AN90",
     502            "type": "mobile"
     503        }
     504    },
     505    {
     506        "desc": "Huawei Enjoy10e",
     507        "ua": "Dalvik/2.1.0 (Linux; U; Android 10; MED-AL00 Build/HUAWEIMED-AL00)",
     508        "expect": {
     509            "vendor": "Huawei",
     510            "model": "MED-AL00",
     511            "type": "mobile"
     512        }
     513    },
     514    {
     515        "desc": "Huawei Honor 6A",
     516        "ua": "Mozilla/5.0 (Linux; Android 7.0; DLI-L22 Build/HONORDLI-L22; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/79.0.3945.116 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/252.0.0.22.355;]",
     517        "expect": {
     518            "vendor": "Huawei",
     519            "model": "DLI-L22",
     520            "type": "mobile"
     521        }
     522    },
     523    {
     524        "desc": "Huawei Honor 7",
     525        "ua": "Mozilla/5.0 (Linux; Android 6.0; PLK-L01 Build/HONORPLK-L01; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/79.0.3945.116 Mobile Safari/537.36",
     526        "expect": {
     527            "vendor": "Huawei",
     528            "model": "PLK-L01",
     529            "type": "mobile"
     530        }
     531    },
     532    {
     533        "desc": "Huawei 10 Lite",
     534        "ua": "Mozilla/5.0 (Linux; Android 9; HRY-LX1 Build/HONORHRY-LX1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.91 Mobile Safari/537.36",
     535        "expect": {
     536            "vendor": "Huawei",
     537            "model": "HRY-LX1",
     538            "type": "mobile"
     539        }
     540    },
     541    {
     542        "desc": "Huawei Y7 2018",
     543        "ua": "Mozilla/5.0 (Linux; Android 8.0.0; LDN-L01) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.62 Mobile Safari/537.36",
     544        "expect": {
     545            "vendor": "Huawei",
     546            "model": "LDN-L01",
     547            "type": "mobile"
     548        }
     549    },
     550    {
     551        "desc": "Huawei Honor 8X",
     552        "ua": "Mozilla/5.0 (Linux; Android 9; JSN-L21) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36",
     553        "expect": {
     554            "vendor": "Huawei",
     555            "model": "JSN-L21",
     556            "type": "mobile"
     557        }
     558    },
     559    {
     560        "desc": "Huawei Y6 2019",
     561        "ua": "Mozilla/5.0 (Linux; Android 9; MRD-LX1N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36",
     562        "expect": {
     563            "vendor": "Huawei",
     564            "model": "MRD-LX1N",
     565            "type": "mobile"
     566        }
     567    },
     568    {
     569        "desc": "Huawei Y9 2019",
     570        "ua": "Mozilla/5.0 (Linux; Android 9; JKM-LX2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Mobile Safari/537.36",
     571        "expect": {
     572            "vendor": "Huawei",
     573            "model": "JKM-LX2",
     574            "type": "mobile"
     575        }
     576    },
     577    {
     578        "desc": "Huawei Y5",
     579        "ua": "Mozilla/5.0 (Linux; Android 9; AMN-LX3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36",
     580        "expect": {
     581            "vendor": "Huawei",
     582            "model": "AMN-LX3",
     583            "type": "mobile"
     584        }
     585    },
     586    {
     587        "desc": "Huawei Y7p",
     588        "ua": "Mozilla/5.0 (Linux; Android 9; ART-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.92 Mobile Safari/537.36",
     589        "expect": {
     590            "vendor": "Huawei",
     591            "model": "ART-L29",
     592            "type": "mobile"
     593        }
     594    },
     595    {
     596        "desc": "Huawei Mate 20 Lite",
     597        "ua": "Mozilla/5.0 (Linux; Android 8.1.0; SNE-LX1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.116 Mobile Safari/537.36",
     598        "expect": {
     599            "vendor": "Huawei",
     600            "model": "SNE-LX1",
     601            "type": "mobile"
     602        }
     603    },
     604    {
     605        "desc": "Huawei P10 Lite",
     606        "ua": "Mozilla/5.0 (Linux; Android 8.0.0; WAS-LX1A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.90 Mobile Safari/537.36",
     607        "expect": {
     608            "vendor": "Huawei",
     609            "model": "WAS-LX1A",
     610            "type": "mobile"
     611        }
     612    },
     613    {
     614        "desc": "Huawei Y5 Lite 2018",
     615        "ua": "Mozilla/5.0 (Linux; Android 8.1.0; DRA-LX5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
     616        "expect": {
     617            "vendor": "Huawei",
     618            "model": "DRA-LX5",
     619            "type": "mobile"
     620        }
     621    },
     622    {
     623        "desc": "Huawei Honor 8C",
     624        "ua": "Mozilla/5.0 (Linux; Android 8.1.0; BKK-LX2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36",
     625        "expect": {
     626            "vendor": "Huawei",
     627            "model": "BKK-LX2",
    268628            "type": "mobile"
    269629        }
     
    369729    },
    370730    {
     731        "desc": "LG V40 ThinQ",
     732        "ua": "Mozilla/5.0 (Linux; Android 9; LM-V405) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Mobile Safari/537.36",
     733        "expect": {
     734            "vendor": "LG",
     735            "model": "LM-V405",
     736            "type": "mobile"
     737        }
     738    },
     739    {
     740        "desc": "LG K30",
     741        "ua": "Mozilla/5.0 (Linux; Android 8.1.0; LM-X410.F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36",
     742        "expect": {
     743            "vendor": "LG",
     744            "model": "LM-X410.F",
     745            "type": "mobile"
     746        }
     747    },
     748    {
     749        "desc": "LG K30",
     750        "ua": "Mozilla/5.0 (Linux; Android 9; LM-X410.FGN) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.93 Mobile Safari/537.36",
     751        "expect": {
     752            "vendor": "LG",
     753            "model": "LM-X410.FGN",
     754            "type": "mobile"
     755        }
     756    },
     757    {
     758        "desc": "LG Stylo 5",
     759        "ua": "Mozilla/5.0 (Linux; Android 9; LM-Q720) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.96 Mobile Safari/537.36",
     760        "expect": {
     761            "vendor": "LG",
     762            "model": "LM-Q720",
     763            "type": "mobile"
     764        }
     765    },
     766    {
     767        "desc": "LG G7 ThinQ",
     768        "ua": "Mozilla/5.0 (Linux; Android 9; LM-G710VM Build/PKQ1.181105.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/79.0.3945.136 Mobile Safari/537.36",
     769        "expect": {
     770            "vendor": "LG",
     771            "model": "LM-G710VM",
     772            "type": "mobile"
     773        }
     774    },
     775    {
    371776        "desc": "LG K500",
    372777        "ua": "Mozilla/5.0 (Linux; Android 6.0.1; LG-K500 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36",
     
    425830        "desc": "LG Smart TV",
    426831        "ua": "Mozilla/5.0 (Linux; NetCast; U) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/53.0.2785 34 Safari/537.31 SmartTV/8.5",
     832        "expect": {
     833            "vendor": "LG",
     834            "model": "undefined",
     835            "type": "smarttv"
     836        }
     837    },
     838    {
     839        "desc": "LG Android TV",
     840        "ua": "Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; LG Android TV Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30",
    427841        "expect": {
    428842            "vendor": "LG",
     
    6411055    },
    6421056    {
     1057        "desc": "Oculus Quest",
     1058        "ua": "Mozilla/5.0 (Linux; Android 10; Quest) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/15.0.0.0.22.280317669 SamsungBrowser/4.0 Chrome/89.0.4389.90 VR Safari/537.36",
     1059        "expect": {
     1060            "vendor": "Facebook",
     1061            "model": "Quest",
     1062            "type": "wearable"
     1063        }
     1064    },
     1065    {
     1066        "desc": "Oculus Quest 2",
     1067        "ua": "Mozilla/5.0 (Linux; Android 10; Quest 2) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/15.0.0.0.22.280317669 SamsungBrowser/4.0 Chrome/89.0.4389.90 VR Safari/537.36",
     1068        "expect": {
     1069            "vendor": "Facebook",
     1070            "model": "Quest 2",
     1071            "type": "wearable"
     1072        }
     1073    },
     1074    {
    6431075        "desc": "OnePlus One",
    6441076        "ua": "Mozilla/5.0 (Linux; Android 4.4.4; A0001 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Mobile Safari/537.36",
    6451077        "expect": {
    6461078            "vendor": "OnePlus",
    647             "model": "1",
     1079            "model": "A0001",
    6481080            "type": "mobile"
    6491081        }
     
    6541086        "expect": {
    6551087            "vendor": "OnePlus",
    656             "model": "1",
     1088            "model": "A0001",
     1089            "type": "mobile"
     1090        }
     1091    },
     1092    {
     1093        "desc": "OnePlus 2",
     1094        "ua": "Mozilla/5.0 (Linux; Android 6.0.1; ONE A2003) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.93 Mobile Safari/537.36",
     1095        "expect": {
     1096            "vendor": "OnePlus",
     1097            "model": "A2003",
    6571098            "type": "mobile"
    6581099        }
     
    8031244    },
    8041245    {
     1246        "desc": "OPPO Reno5 A",
     1247        "ua": "Mozilla/5.0 (Linux; Android 11; A101OP) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Mobile Safari/537.36",
     1248        "expect": {
     1249            "vendor": "OPPO",
     1250            "model": "A101OP",
     1251            "type": "mobile"
     1252        }
     1253    },
     1254    {
    8051255        "desc": "OPPO Find X",
    8061256        "ua": "Mozilla/5.0 (Linux; Android 8.1; PAFM00 Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36",
     
    8301280    },
    8311281    {
     1282        "desc": "Realme C2",
     1283        "ua": "Mozilla/5.0 (Linux; Android 9; RMX1941) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
     1284        "expect": {
     1285            "vendor": "Realme",
     1286            "model": "RMX1941",
     1287            "type": "mobile"
     1288        }
     1289    },
     1290    {
    8321291        "desc": "Realme Narzo 20",
    8331292        "ua": "Mozilla/5.0 (Linux; U; Android 10; xx-xx; RMX2193 Build/QP1A.190711.020) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.80 Mobile Safari/537.36",
     
    8351294            "vendor": "Realme",
    8361295            "model": "RMX2193",
     1296            "type": "mobile"
     1297        }
     1298    },
     1299    {
     1300        "desc": "Realme 2 Pro",
     1301        "ua": "Mozilla/5.0 (Linux; Android 9; RMX1801) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Mobile Safari/537.36",
     1302        "expect": {
     1303            "vendor": "Realme",
     1304            "model": "RMX1801",
    8371305            "type": "mobile"
    8381306        }
     
    8481316    },
    8491317    {
     1318        "desc": "Roku",
     1319        "ua": "Mozilla/5.0 (Roku) AppleWebKit/537.36 (KHTML, like Gecko) Web/1.1 Safari/537.36",
     1320        "expect": {
     1321            "vendor": "Roku",
     1322            "model": "",
     1323            "type": "smarttv"
     1324        }
     1325    },
     1326    {
     1327        "desc": "Roku",
     1328        "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36 Roku/DVP-8.10 (468.10E04145A)",
     1329        "expect": {
     1330            "vendor": "Roku",
     1331            "model": "DVP-8.10",
     1332            "type": "smarttv"
     1333        }
     1334    },
     1335    {
     1336        "desc": "Roku",
     1337        "ua": "Roku4640X/DVP-7.70 (297.70E04154A)",
     1338        "expect": {
     1339            "vendor": "Roku",
     1340            "model": "DVP-7.70",
     1341            "type": "smarttv"
     1342        }
     1343    },
     1344    {
    8501345        "desc": "Kindle Fire HD",
    8511346        "ua": "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Mobile Safari/535.19 Silk-Accelerated=true",
     
    10821577    },
    10831578    {
     1579        "desc": "Sharp Aquos B10",
     1580        "ua": "Mozilla/5.0 (Linux; Android 7.0; SH-A01) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Mobile Safari/537.36",
     1581        "expect": {
     1582            "vendor": "Sharp",
     1583            "model": "SH-A01",
     1584            "type": "mobile"
     1585        }
     1586    },
     1587    {
     1588        "desc": "Sharp Aquos L2",
     1589        "ua": "Mozilla/5.0 (Linux; Android 7.0; SH-L02 Build/S4045) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36",
     1590        "expect": {
     1591            "vendor": "Sharp",
     1592            "model": "SH-L02",
     1593            "type": "mobile"
     1594        }
     1595    },
     1596    {
     1597        "desc": "Sharp Aquos R2",
     1598        "ua": "Mozilla/5.0 (Linux; Android 8.0; SHV42) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.92 Mobile Safari/537.36",
     1599        "expect": {
     1600            "vendor": "Sharp",
     1601            "model": "SHV42",
     1602            "type": "mobile"
     1603        }
     1604    },
     1605    {
    10841606        "desc": "Sony G8141 (Xperia XZ Premium)",
    10851607        "ua": "Mozilla/5.0 (Linux; Android 8.0.0; G8141) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Mobile Safari/537.36",
     
    11501672            "vendor": "Sony",
    11511673            "model": "XQ-AT51",
     1674            "type": "mobile"
     1675        }
     1676    },
     1677    {
     1678        "desc": "Sony Xperia 1ii",
     1679        "ua": "Mozilla/5.0 (Linux; Android 10; SOG01) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36",
     1680        "expect": {
     1681            "vendor": "Sony",
     1682            "model": "SOG01",
    11521683            "type": "mobile"
    11531684        }
     
    13091840    },
    13101841    {
     1842        "desc": "Xiaomi Mi Max 3",
     1843        "ua": "Mozilla/5.0 (Linux; Android 9; MI MAX 3 Build/PKQ1.181007.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/79.0.3945.116 Mobile Safari/537.36",
     1844        "expect": {
     1845            "vendor": "Xiaomi",
     1846            "model": "MI MAX 3",
     1847            "type": "mobile"
     1848        }
     1849    },
     1850    {
     1851        "desc": "Xiaomi Mi A1",
     1852        "ua": "Mozilla/5.0 (Linux; Android 9; Mi A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.101 Mobile Safari/537.36",
     1853        "expect": {
     1854            "vendor": "Xiaomi",
     1855            "model": "Mi A1",
     1856            "type": "mobile"
     1857        }
     1858    },
     1859    {
     1860        "desc": "Xiaomi Mi A2 Lite",
     1861        "ua": "Mozilla/5.0 (Linux; Android 9; Mi A2 Lite) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.62 Mobile Safari/537.36",
     1862        "expect": {
     1863            "vendor": "Xiaomi",
     1864            "model": "Mi A2 Lite",
     1865            "type": "mobile"
     1866        }
     1867    },
     1868    {
     1869        "desc": "Xiaomi Mi 9 SE",
     1870        "ua": "Mozilla/5.0 (Linux; Android 9; Mi 9 SE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Mobile Safari/537.36",
     1871        "expect": {
     1872            "vendor": "Xiaomi",
     1873            "model": "Mi 9 SE",
     1874            "type": "mobile"
     1875        }
     1876    },
     1877    {
     1878        "desc": "Xiaomi Mi A2",
     1879        "ua": "Mozilla/5.0 (Linux; Android 9; Mi A2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36",
     1880        "expect": {
     1881            "vendor": "Xiaomi",
     1882            "model": "Mi A2",
     1883            "type": "mobile"
     1884        }
     1885    },
     1886    {
    13111887        "desc": "Xiaomi MI PAD 2",
    13121888        "ua": "Mozilla/5.0 (Linux; Android 5.1; MI PAD 2 Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/60.0.3112.107 Safari/537.36 [FB_IAB/FB4A;FBAV/137.0.0.24.91;]",
     
    16942270    },
    16952271    {
    1696         "desc": "Android Phone Unidentified Vendor (docomo SH-02M)",
     2272        "desc": "docomo SH-02M",
    16972273        "ua": "Mozilla/5.0 (Linux; Android 9; SH-02M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Mobile Safari/537.36",
    16982274        "expect": {
     2275            "vendor": "Sharp",
    16992276            "model": "SH-02M",
    17002277            "type": "mobile"
     
    18582435            "vendor": "ZTE",
    18592436            "model": "NX629J",
     2437            "type": "mobile"
     2438        }
     2439    },
     2440    {
     2441        "desc": "ZTE Blade A5",
     2442        "ua": "Mozilla/5.0 (Linux; Android 9; ZTE Blade A5 2019) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36",
     2443        "expect": {
     2444            "vendor": "ZTE",
     2445            "model": "Blade A5 2019",
     2446            "type": "mobile"
     2447        }
     2448    },
     2449    {
     2450        "desc": "ZTE BLADE V0730",
     2451        "ua": "Mozilla/5.0 (Linux; Android 6.0; ZTE BLADE V0730) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36",
     2452        "expect": {
     2453            "vendor": "ZTE",
     2454            "model": "BLADE V0730",
     2455            "type": "mobile"
     2456        }
     2457    },
     2458    {
     2459        "desc": "ZTE B2017G",
     2460        "ua": "Mozilla/5.0 (Linux; Android 7.1.1; ZTE B2017G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.93 Mobile Safari/537.36",
     2461        "expect": {
     2462            "vendor": "ZTE",
     2463            "model": "B2017G",
    18602464            "type": "mobile"
    18612465        }
     
    20692673    },
    20702674    {
    2071         "desc": "HUAWEI MediaPad M3 Lite 10",
    2072         "ua": "Mozilla/5.0 (Linux; Android 7.0; BAH-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36",
    2073         "expect": {
    2074             "vendor": "Huawei",
    2075             "model": "BAH-L09",
    2076             "type": "tablet"
    2077         }
    2078     },
    2079     {
    2080         "desc": "HUAWEI MediaPad M5 Lite",
    2081         "ua": "Mozilla/5.0 (Linux; Android 8.0.0; BAH2-W19 Build/HUAWEIBAH2-W19; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Safari/537.36",
    2082         "expect": {
    2083             "vendor": "Huawei",
    2084             "model": "BAH2-W19",
    2085             "type": "tablet"
    2086         }
    2087     },
    2088     {
    2089         "desc": "HUAWEI MediaPad M5",
    2090         "ua": "Mozilla/5.0 (Linux; Android 9; SHT-AL09 Build/HUAWEISHT-AL09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.90 Mobile Safari/537.36",
    2091         "expect": {
    2092             "vendor": "Huawei",
    2093             "model": "SHT-AL09",
    2094             "type": "tablet"
    2095         }
    2096     },
    2097     {
    2098         "desc": "HUAWEI MediaPad T5",
    2099         "ua": "Mozilla/5.0 (Linux; Android 8.0.0; AGS2-L09 Build/HUAWEIAGS2-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/84.0.4147.125 Safari/537.36",
    2100         "expect": {
    2101             "vendor": "Huawei",
    2102             "model": "AGS2-L09",
    2103             "type": "tablet"
    2104         }
    2105     },
    2106     {
    2107         "desc": "HUAWEI MediaPad T10",
    2108         "ua": "Mozilla/5.0 (Linux; Android 10; AGR-W09 Build/HUAWEIAGR-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Safari/537.36",
    2109         "expect": {
    2110             "vendor": "Huawei",
    2111             "model": "AGR-W09",
    2112             "type": "tablet"
    2113         }
    2114     },
    2115     {
    2116         "desc": "HUAWEI MediaPad T10s",
    2117         "ua": "Mozilla/5.0 (Linux; Android 10; AGS3-W09 Build/HUAWEIAGS3-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Safari/537.36",
    2118         "expect": {
    2119             "vendor": "Huawei",
    2120             "model": "AGS3-W09",
    2121             "type": "tablet"
    2122         }
    2123     },
    2124     {
    2125         "desc": "Huawei MatePad T 10",
    2126         "ua": "Mozilla/5.0 (Linux; Android 10; AGR-L09; HMSCore 5.0.4.301) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 HuaweiBrowser/11.0.3.304 Safari/537.36",
    2127         "expect": {
    2128             "vendor": "Huawei",
    2129             "model": "AGR-L09",
    2130             "type": "tablet"
    2131         }
    2132     },
    2133     {
    2134         "desc": "Huawei Mate 10 Pro",
    2135         "ua": "Mozilla/5.0 (Linux; Android 8.0; BLA-L29 Build/HUAWEIBLA-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3236.6 Mobile Safari/537.36",
    2136         "expect": {
    2137             "vendor": "Huawei",
    2138             "model": "BLA-L29",
    2139             "type": "mobile"
    2140         }
    2141     },
    2142     {
    2143         "desc": "Huawei Mate X",
    2144         "ua": "Mozilla/5.0 (Linux; Android 9; TAH-AN00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.111 Safari/537.36",
    2145         "expect": {
    2146             "vendor": "Huawei",
    2147             "model": "TAH-AN00",
    2148             "type": "mobile"
    2149         }
    2150     },
    2151     {
    2152         "desc": "Huawei Mate X2",
    2153         "ua": "Mozilla/5.0 (Linux; Android 10; TET-AN00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.96 Mobile Safari/537.36",
    2154         "expect": {
    2155             "vendor": "Huawei",
    2156             "model": "TET-AN00",
    2157             "type": "mobile"
    2158         }
    2159     },
    2160     {
    2161       "desc": "Huawei Mate 20 X",
    2162       "ua": "Mozilla/5.0 (Linux; Android 9; EVR-L29 Build/HUAWEIEVR-L29; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.110 Mobile Safari/537.36",
    2163       "expect": {
    2164           "vendor": "Huawei",
    2165           "model": "EVR-L29",
    2166           "type": "mobile"
    2167       }
    2168     },
    2169     {
    2170       "desc": "Huawei Mate 20 Pro",
    2171       "ua": "Mozilla/5.0 (Linux; Android 9; LYA-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
    2172       "expect": {
    2173           "vendor": "Huawei",
    2174           "model": "LYA-L09",
    2175           "type": "mobile"
    2176       }
    2177     },
    2178     {
    2179       "desc": "Huawei Mate 20 Pro",
    2180       "ua": "Mozilla/5.0 (Linux; Android 9; LYA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
    2181       "expect": {
    2182           "vendor": "Huawei",
    2183           "model": "LYA-AL00",
    2184           "type": "mobile"
    2185       }
    2186     },
    2187     {
    2188         "desc": "Huawei P20 Lite",
    2189         "ua": "Mozilla/5.0 (Linux; Android 8.0.0; ANE-LX1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.143 Mobile Safari/537.36",
    2190         "expect": {
    2191             "vendor": "Huawei",
    2192             "model": "ANE-LX1",
    2193             "type": "mobile"
    2194         }
    2195     },
    2196     {
    2197       "desc": "Huawei P20",
    2198       "ua": "Mozilla/5.0 (Linux; Android 8.1.0; EML-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Mobile Safari/537.36",
    2199       "expect": {
    2200           "vendor": "Huawei",
    2201           "model": "EML-L29",
    2202           "type": "mobile"
    2203       }
    2204   },
    2205   {
    2206     "desc": "Huawei P20 Pro",
    2207     "ua": "Mozilla/5.0 (Linux; Android 9; CLT-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
    2208     "expect": {
    2209         "vendor": "Huawei",
    2210         "model": "CLT-L29",
    2211         "type": "mobile"
     2675        "desc": "Amazon Fire 7",
     2676        "ua": "Mozilla/5.0 (Linux; Android 5.1.1; KFAUWI) AppleWebKit/537.36 (KHTML, like Gecko) Silk/80.5.3 like Chrome/80.0.3987.162 Safari/537.36",
     2677        "expect": {
     2678            "vendor": "Amazon",
     2679            "model": "KFAUWI",
     2680            "type": "tablet"
     2681        }
     2682    },
     2683    {
     2684        "desc": "AT&T Radiant Core U304AA",
     2685        "ua": "Dalvik/2.1.0 (Linux; U; Android 9; U304AA Build/P00610)",
     2686        "expect": {
     2687            "vendor": "AT&T",
     2688            "model": "U304AA",
     2689            "type": "mobile"
     2690        }
     2691    },
     2692    {
     2693        "desc": "Vodafone Smart Tab 4G",
     2694        "ua": "Mozilla/5.0 (Linux; Android 4.4.4; Vodafone Smart Tab 4G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
     2695        "expect": {
     2696            "vendor": "Vodafone",
     2697            "model": "Smart Tab 4G",
     2698            "type": "tablet"
     2699        }
     2700    },
     2701    {
     2702        "desc": "Vodafone Smart ultra 6",
     2703        "ua": "Mozilla/5.0 (Linux; Android 5.0.2; Vodafone Smart ultra 6 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.133 Mobile Safari/537.36",
     2704        "expect": {
     2705            "vendor": "Vodafone",
     2706            "model": "Smart ultra 6",
     2707            "type": "tablet"
     2708        }
     2709    },
     2710    {
     2711        "desc": "4ife 4K Smart TV Box",
     2712        "ua": "Mozilla/5.0 (Linux; Android 4.4.2; 4ife 4K Smart TV Box Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36 Vinebre",
     2713        "expect": {
     2714            "vendor": "undefined",
     2715            "model": "undefined",
     2716            "type": "smarttv"
     2717        }
     2718    },
     2719    {
     2720        "desc": "FaceBook Mobile App",
     2721        "ua": "[FBAN/FBIOS;FBAV/283.0.0.44.117;FBBV/238386386;FBDV/iPhone12,1;FBMD/iPhone;FBSN/iOS;FBSV/13.6.1;FBSS/2;FBID/phone;FBLC/en_US;FBOP/5;FBRV/240127608]",
     2722        "expect": {
     2723            "type": "mobile"
     2724        }
     2725    },
     2726    {
     2727        "desc": "Issue #454",
     2728        "ua": "Mosamzilla/5.0 (Windows; U; Win98; en-US; rv:1.7.5) Gecko/20050603 Netscape/8.0.2",
     2729        "expect": {
     2730            "vendor": "undefined",
     2731            "model": "undefined",
     2732            "type": "undefined"
     2733        }
     2734    },
     2735    {
     2736        "desc": "Alcatel",
     2737        "ua": "Mozilla/5.0 (Linux; Android 4.4.2; ALCATEL A564C Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.133 Mobile Safari/537.36",
     2738        "expect": {
     2739            "vendor": "ALCATEL",
     2740            "model": "A564C",
     2741            "type": "mobile"
     2742        }
     2743    },
     2744    {
     2745        "desc": "Alcatel Go Flip",
     2746        "ua": "Mozilla/5.0 (Mobile; ALCATEL4044T; rv:37.0) Gecko/37.0 Firefox/37.0 KaiOS/1.0",
     2747        "expect": {
     2748            "vendor": "ALCATEL",
     2749            "model": "4044T",
     2750            "type": "mobile"
     2751        }
     2752    },
     2753    {
     2754        "desc": "Jolla",
     2755        "ua": "Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0",
     2756        "expect": {
     2757            "vendor": "Jolla",
     2758            "model": "undefined",
     2759            "type": "mobile"
     2760        }
     2761    },
     2762    {
     2763        "desc": "Xbox One",
     2764        "ua": "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; Xbox; Xbox One)",
     2765        "expect": {
     2766            "vendor": "Microsoft",
     2767            "model": "Xbox One",
     2768            "type": "console"
     2769        }
     2770    },
     2771    {
     2772        "desc": "Xbox",
     2773        "ua": "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Xbox)",
     2774        "expect": {
     2775            "vendor": "Microsoft",
     2776            "model": "Xbox",
     2777            "type": "console"
     2778        }
     2779    },
     2780    {
     2781        "desc": "Nvidia Shield Tablet",
     2782        "ua": "Mozilla/5.0 (Linux; Android 5.1.1; SHIELD Tablet Build/LVY48E; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/45.0.2454.19 Safari/537.36",
     2783        "expect": {
     2784            "vendor": "Nvidia",
     2785            "model": "SHIELD Tablet",
     2786            "type": "tablet"
     2787        }
     2788    },
     2789    {
     2790        "desc": "Ouya",
     2791        "ua": "Mozilla/5.0 (Linux; Android 4.1.2; OUYA Console Build/JZO54L-OUYA) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.84 Safari/537.36",
     2792        "expect": {
     2793            "vendor": "OUYA",
     2794            "model": "undefined",
     2795            "type": "console"
     2796        }
     2797    },
     2798    {
     2799        "desc": "Vivo Y52s",
     2800        "ua": "Mozilla/5.0 (Linux; Android 10; V2057A Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/12.10 SP-engine/2.28.0 baiduboxapp/12.10.0.10 (Baidu; P1 10) NABar/1.0",
     2801        "expect": {
     2802            "vendor": "Vivo",
     2803            "model": "V2057A",
     2804            "type": "mobile"
     2805        }
     2806    },
     2807    {
     2808        "desc": "Vivo X60",
     2809        "ua": "Mozilla/5.0 (Linux; Android 11; V2046A; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/8.8.71.0",
     2810        "expect": {
     2811            "vendor": "Vivo",
     2812            "model": "V2046A",
     2813            "type": "mobile"
     2814        }
     2815    },
     2816    {
     2817        "desc": "Vivo Y79A",
     2818        "ua": "Mozilla/5.0 (Linux; Android 7.1.2; vivo Y79A Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/9.0.14.0",
     2819        "expect": {
     2820            "vendor": "Vivo",
     2821            "model": "Y79A",
     2822            "type": "mobile"
     2823        }
     2824    },
     2825    {
     2826        "desc": "Vivo Y97",
     2827        "ua": "Mozilla/5.0 (Linux; Android 8.1.0; V1813T Build/O11019; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/9.0.14.0",
     2828        "expect": {
     2829            "vendor": "Vivo",
     2830            "model": "V1813T",
     2831            "type": "mobile"
     2832        }
     2833    },
     2834    {
     2835        "desc": "Vivo iQOO Pro",
     2836        "ua": "Mozilla/5.0 (Linux; Android 11; V1916A; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/9.1.10.6",
     2837        "expect": {
     2838            "vendor": "Vivo",
     2839            "model": "V1916A",
     2840            "type": "mobile"
     2841        }
     2842    },
     2843    {
     2844        "desc": "Unknown Mobile using Firefox",
     2845        "ua": "Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0",
     2846        "expect": {
     2847            "vendor": "undefined",
     2848            "model": "undefined",
     2849            "type": "mobile"
     2850        }
     2851    },
     2852    {
     2853        "desc": "Unknown Tablet using Firefox",
     2854        "ua": "Mozilla/5.0 (Android 4.4; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0",
     2855        "expect": {
     2856            "vendor": "undefined",
     2857            "model": "undefined",
     2858            "type": "tablet"
     2859        }
     2860    },
     2861    {
     2862        "desc": "Unknown Mobile using Focus for Android",
     2863        "ua": "Mozilla/5.0 (Linux; Android 7.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/1.0 Chrome/59.0.3029.83 Mobile Safari/537.36",
     2864        "expect": {
     2865            "vendor": "undefined",
     2866            "model": "undefined",
     2867            "type": "mobile"
     2868        }
     2869    },
     2870    {
     2871        "desc": "Unknown Tablet using Focus for Android",
     2872        "ua": "Mozilla/5.0 (Linux; Android 7.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/1.0 Chrome/59.0.3029.83 Safari/537.36",
     2873        "expect": {
     2874            "vendor": "undefined",
     2875            "model": "undefined",
     2876            "type": "tablet"
     2877        }
     2878    },
     2879    {
     2880        "desc": "Unknown Device using Focus for Android with GeckoView",
     2881        "ua": "Mozilla/5.0 (Android 7.0; Mobile; rv:62.0) Gecko/62.0 Firefox/62.0",
     2882        "expect": {
     2883            "vendor": "undefined",
     2884            "model": "undefined",
     2885            "type": "mobile"
     2886        }
     2887    },
     2888    {
     2889        "desc": "Unknown Mobile using Firefox OS",
     2890        "ua": "Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0",
     2891        "expect": {
     2892            "vendor": "undefined",
     2893            "model": "undefined",
     2894            "type": "mobile"
     2895        }
     2896    },
     2897    {
     2898        "desc": "Unknown Tablet using Firefox OS",
     2899        "ua": "Mozilla/5.0 (Tablet; rv:26.0) Gecko/26.0 Firefox/26.0",
     2900        "expect": {
     2901            "vendor": "undefined",
     2902            "model": "undefined",
     2903            "type": "tablet"
     2904        }
     2905    },
     2906    {
     2907        "desc": "Unknown TV using Firefox OS",
     2908        "ua": "Mozilla/5.0 (TV; rv:44.0) Gecko/44.0 Firefox/44.0",
     2909        "expect": {
     2910            "vendor": "undefined",
     2911            "model": "undefined",
     2912            "type": "smarttv"
     2913        }
     2914    },
     2915    {
     2916        "desc": "PDA with Windows CE",
     2917        "ua": "Mozilla/4.0 (PDA; Windows CE/1.0.1) NetFront/3.0",
     2918        "expect": {
     2919            "vendor": "undefined",
     2920            "model": "undefined",
     2921            "type": "mobile"
     2922        }
    22122923    }
    2213   },
    2214   {
    2215       "desc": "Huawei P30",
    2216       "ua": "Mozilla/5.0 (Linux; Android 9; ELE-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.90 Mobile Safari/537.36",
    2217       "expect": {
    2218           "vendor": "Huawei",
    2219           "model": "ELE-L29",
    2220           "type": "mobile"
    2221       }
    2222   },
    2223   {
    2224       "desc": "Huawei P30 Pro",
    2225       "ua": "Mozilla/5.0 (Linux; Android 9; VOG-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.143 Mobile Safari/537.36",
    2226       "expect": {
    2227           "vendor": "Huawei",
    2228           "model": "VOG-L29",
    2229           "type": "mobile"
    2230       }
    2231   },
    2232   {
    2233     "desc": "Huawei P40",
    2234     "ua": "Mozilla/5.0 (Linux; Android 10; ANA-AN00 Build/HUAWEIANA-AN00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/11.26 SP-engine/2.22.0 baiduboxapp/11.26.0.10 (Baidu; P1 10) NABar/1.0",
    2235     "expect": {
    2236         "vendor": "Huawei",
    2237         "model": "ANA-AN00",
    2238         "type": "mobile"
    2239     }
    2240   },
    2241   {
    2242     "desc": "Huawei P40 Pro",
    2243     "ua": "Mozilla/5.0 (Linux; Android 10; ELS-AN00 Build/HUAWEIELS-AN00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Mobile Safari/537.36 mailapp/6.0.0",
    2244     "expect": {
    2245         "vendor": "Huawei",
    2246         "model": "ELS-AN00",
    2247         "type": "mobile"
    2248     }
    2249   },
    2250   {
    2251     "desc": "Huawei 30 Pro+",
    2252     "ua": "Mozilla/5.0 (Linux; Android 10; EBG-AN10 Build/HUAWEIEBG-AN10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.86 Mobile Safari/537.36 EdgA/42.0.0.2741",
    2253     "expect": {
    2254         "vendor": "Huawei",
    2255         "model": "EBG-AN10",
    2256         "type": "mobile"
    2257     }
    2258   },
    2259   {
    2260     "desc": "Huawei 30S",
    2261     "ua": "Mozilla/5.0 (Linux; Android 10; CDY-AN90 Build/HUAWEICDY-AN90; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Mobile Safari/537.36 mailapp/5.8.0",
    2262     "expect": {
    2263         "vendor": "Huawei",
    2264         "model": "CDY-AN90",
    2265         "type": "mobile"
    2266     }
    2267   },
    2268   {
    2269     "desc": "Huawei Enjoy10e",
    2270     "ua": "Dalvik/2.1.0 (Linux; U; Android 10; MED-AL00 Build/HUAWEIMED-AL00)",
    2271     "expect": {
    2272         "vendor": "Huawei",
    2273         "model": "MED-AL00",
    2274         "type": "mobile"
    2275     }
    2276   },
    2277   {
    2278     "desc": "Amazon Fire 7",
    2279     "ua": "Mozilla/5.0 (Linux; Android 5.1.1; KFAUWI) AppleWebKit/537.36 (KHTML, like Gecko) Silk/80.5.3 like Chrome/80.0.3987.162 Safari/537.36",
    2280     "expect": {
    2281         "vendor": "Amazon",
    2282         "model": "KFAUWI",
    2283         "type": "tablet"
    2284     }
    2285   },
    2286   {
    2287     "desc": "AT&T Radiant Core U304AA",
    2288     "ua": "Dalvik/2.1.0 (Linux; U; Android 9; U304AA Build/P00610)",
    2289     "expect": {
    2290         "vendor": "AT&T",
    2291         "model": "U304AA",
    2292         "type": "mobile"
    2293     }
    2294   },
    2295   {
    2296     "desc": "Vodafone Smart Tab 4G",
    2297     "ua": "Mozilla/5.0 (Linux; Android 4.4.4; Vodafone Smart Tab 4G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
    2298     "expect": {
    2299         "vendor": "Vodafone",
    2300         "model": "Smart Tab 4G",
    2301         "type": "tablet"
    2302     }
    2303   },
    2304   {
    2305     "desc": "Vodafone Smart ultra 6",
    2306     "ua": "Mozilla/5.0 (Linux; Android 5.0.2; Vodafone Smart ultra 6 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.133 Mobile Safari/537.36",
    2307     "expect": {
    2308         "vendor": "Vodafone",
    2309         "model": "Smart ultra 6",
    2310         "type": "tablet"
    2311     }
    2312   },
    2313   {
    2314     "desc": "4ife 4K Smart TV Box",
    2315     "ua": "Mozilla/5.0 (Linux; Android 4.4.2; 4ife 4K Smart TV Box Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36 Vinebre",
    2316     "expect": {
    2317         "vendor": "undefined",
    2318         "model": "undefined",
    2319         "type": "smarttv"
    2320     }
    2321   },
    2322   {
    2323     "desc": "FaceBook Mobile App",
    2324     "ua": "[FBAN/FBIOS;FBAV/283.0.0.44.117;FBBV/238386386;FBDV/iPhone12,1;FBMD/iPhone;FBSN/iOS;FBSV/13.6.1;FBSS/2;FBID/phone;FBLC/en_US;FBOP/5;FBRV/240127608]",
    2325     "expect": {
    2326         "type": "mobile"
    2327     }
    2328   },
    2329   {
    2330     "desc": "Issue #454",
    2331     "ua": "Mosamzilla/5.0 (Windows; U; Win98; en-US; rv:1.7.5) Gecko/20050603 Netscape/8.0.2",
    2332     "expect": {
    2333         "vendor": "undefined",
    2334         "model": "undefined",
    2335         "type": "undefined"
    2336     }
    2337   },
    2338   {
    2339     "desc": "Alcatel",
    2340     "ua": "Mozilla/5.0 (Linux; Android 4.4.2; ALCATEL A564C Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.133 Mobile Safari/537.36",
    2341     "expect": {
    2342         "vendor": "ALCATEL",
    2343         "model": "A564C",
    2344         "type": "mobile"
    2345     }
    2346   },
    2347   {
    2348     "desc": "Alcatel Go Flip",
    2349     "ua": "Mozilla/5.0 (Mobile; ALCATEL4044T; rv:37.0) Gecko/37.0 Firefox/37.0 KaiOS/1.0",
    2350     "expect": {
    2351         "vendor": "ALCATEL",
    2352         "model": "4044T",
    2353         "type": "mobile"
    2354     }
    2355   },
    2356   {
    2357     "desc": "Jolla",
    2358     "ua": "Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0",
    2359     "expect": {
    2360         "vendor": "Jolla",
    2361         "model": "undefined",
    2362         "type": "mobile"
    2363     }
    2364   },
    2365   {
    2366     "desc": "Xbox One",
    2367     "ua": "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; Xbox; Xbox One)",
    2368     "expect": {
    2369         "vendor": "Microsoft",
    2370         "model": "Xbox One",
    2371         "type": "console"
    2372     }
    2373   },
    2374   {
    2375     "desc": "Xbox",
    2376     "ua": "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Xbox)",
    2377     "expect": {
    2378         "vendor": "Microsoft",
    2379         "model": "Xbox",
    2380         "type": "console"
    2381     }
    2382   },
    2383   {
    2384     "desc": "Nvidia Shield Tablet",
    2385     "ua": "Mozilla/5.0 (Linux; Android 5.1.1; SHIELD Tablet Build/LVY48E; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/45.0.2454.19 Safari/537.36",
    2386     "expect": {
    2387         "vendor": "Nvidia",
    2388         "model": "SHIELD Tablet",
    2389         "type": "tablet"
    2390     }
    2391   },
    2392   {
    2393     "desc": "Ouya",
    2394     "ua": "Mozilla/5.0 (Linux; Android 4.1.2; OUYA Console Build/JZO54L-OUYA) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.84 Safari/537.36",
    2395     "expect": {
    2396         "vendor": "OUYA",
    2397         "model": "undefined",
    2398         "type": "console"
    2399     }
    2400   },
    2401   {
    2402     "desc": "Vivo Y52s",
    2403     "ua": "Mozilla/5.0 (Linux; Android 10; V2057A Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/12.10 SP-engine/2.28.0 baiduboxapp/12.10.0.10 (Baidu; P1 10) NABar/1.0",
    2404     "expect": {
    2405         "vendor": "Vivo",
    2406         "model": "V2057A",
    2407         "type": "mobile"
    2408     }
    2409   },
    2410   {
    2411     "desc": "Vivo X60",
    2412     "ua": "Mozilla/5.0 (Linux; Android 11; V2046A; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/8.8.71.0",
    2413     "expect": {
    2414         "vendor": "Vivo",
    2415         "model": "V2046A",
    2416         "type": "mobile"
    2417     }
    2418   },
    2419   {
    2420     "desc": "Vivo Y79A",
    2421     "ua": "Mozilla/5.0 (Linux; Android 7.1.2; vivo Y79A Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/9.0.14.0",
    2422     "expect": {
    2423         "vendor": "Vivo",
    2424         "model": "Y79A",
    2425         "type": "mobile"
    2426     }
    2427   },
    2428   {
    2429     "desc": "Vivo Y97",
    2430     "ua": "Mozilla/5.0 (Linux; Android 8.1.0; V1813T Build/O11019; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/9.0.14.0",
    2431     "expect": {
    2432         "vendor": "Vivo",
    2433         "model": "V1813T",
    2434         "type": "mobile"
    2435     }
    2436   },
    2437   {
    2438     "desc": "Vivo iQOO Pro",
    2439     "ua": "Mozilla/5.0 (Linux; Android 11; V1916A; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/9.1.10.6",
    2440     "expect": {
    2441         "vendor": "Vivo",
    2442         "model": "V1916A",
    2443         "type": "mobile"
    2444     }
    2445   }
    24462924]
  • trip-planner-front/node_modules/ua-parser-js/test/os-test.json

    r59329aa re29cc2e  
    109109    },
    110110    {
     111        "desc"    : "Windows Mobile",
     112        "ua"      : "Opera/9.80 (Windows Mobile; WCE; Opera Mobi/WMD-50433; U; en) Presto/2.4.13 Version/10.00",
     113        "expect"  :
     114        {
     115            "name"    : "Windows Mobile",
     116            "version" : "undefined"
     117        }
     118    },
     119    {
    111120        "desc"    : "Windows Phone",
    112121        "ua"      : "Opera/9.80 (Windows Phone; Opera Mini/7.6.8/35.7518; U; ru) Presto/2.8.119 Version/11.10",
     
    136145    },
    137146    {
     147        "desc"    : "Windows NT on x86 or aarch64 CPU using Firefox",
     148        "ua"      : "Mozilla/5.0 (Windows NT x.y; rv:10.0) Gecko/20100101 Firefox/10.0",
     149        "expect"  :
     150        {
     151            "name"    : "Windows",
     152            "version" : "NT x"
     153        }
     154    },
     155    {
     156        "desc"    : "Windows NT on x64 CPU using Firefox",
     157        "ua"      : "Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0",
     158        "expect"  :
     159        {
     160            "name"    : "Windows",
     161            "version" : "NT x"
     162        }
     163    },
     164    {
    138165        "desc"    : "BlackBerry",
    139166        "ua"      : "BlackBerry9300/5.0.0.912 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/378",
     
    280307    },
    281308    {
     309        "desc"    : "Nokia N900 Linux mobile, on the Fennec browser",
     310        "ua"      : "Mozilla/5.0 (Maemo; Linux armv7l; rv:10.0) Gecko/20100101 Firefox/10.0 Fennec/10.0",
     311        "expect"  :
     312        {
     313            "name"    : "Maemo",
     314            "version" : "undefined"
     315        }
     316    },
     317    {
    282318        "desc"    : "MeeGo",
    283319        "ua"      : "Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13",
     
    321357        {
    322358            "name"    : "Firefox OS",
    323             "version" : "undefined"
     359            "version" : "14.0"
     360        }
     361    },
     362    {
     363        "desc"    : "Firefox OS on Tablet",
     364        "ua"      : "Mozilla/5.0 (Tablet; rv:26.0) Gecko/26.0 Firefox/26.0",
     365        "expect"  :
     366        {
     367            "name"    : "Firefox OS",
     368            "version" : "26.0"
     369        }
     370    },
     371    {
     372        "desc"    : "Firefox OS on TV",
     373        "ua"      : "Mozilla/5.0 (TV; rv:44.0) Gecko/44.0 Firefox/44.0",
     374        "expect"  :
     375        {
     376            "name"    : "Firefox OS",
     377            "version" : "44.0"
    324378        }
    325379    },
     
    551605    {
    552606        "desc"    : "Slackware",
    553         "ua"      : "",
    554         "expect"  :
    555         {
    556             "name"    : "",
    557             "version" : ""
     607        "ua"      : "Mozilla/5.0 Slackware/13.37 (X11; U; Linux x86_64; en-US) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41",
     608        "expect"  :
     609        {
     610            "name"    : "Slackware",
     611            "version" : "13.37"
    558612        }
    559613    },
     
    614668    {
    615669        "desc"    : "Solaris",
    616         "ua"      : "",
    617         "expect"  :
    618         {
    619             "name"    : "",
    620             "version" : ""
     670        "ua"      : "Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.7) Gecko/20070606",
     671        "expect"  :
     672        {
     673            "name"    : "Solaris",
     674            "version" : "sun4u"
    621675        }
    622676    },
     
    650704    {
    651705        "desc"    : "DragonFly",
    652         "ua"      : "",
    653         "expect"  :
    654         {
    655             "name"    : "",
    656             "version" : ""
     706        "ua"      : "Mozilla/5.0 (X11; U; DragonFly i386; de; rv:1.9.1) Gecko/20090720 Firefox/3.5.1",
     707        "expect"  :
     708        {
     709            "name"    : "DragonFly",
     710            "version" : "undefined"
    657711        }
    658712    },
     
    685739    },
    686740    {
     741        "desc"    : "Mac OS on PowerPC",
     742        "ua"      : "Mozilla/4.0 (compatible; MSIE 5.0b1; Mac_PowerPC)",
     743        "expect"  :
     744        {
     745            "name"    : "Mac OS",
     746            "version" : "undefined"
     747        }
     748    },
     749    {
     750        "desc"    : "Mac OS X on x86, x86_64, or aarch64 using Firefox",
     751        "ua"      : "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:10.0) Gecko/20100101 Firefox/10.0",
     752        "expect"  :
     753        {
     754            "name"    : "Mac OS",
     755            "version" : "x.y"
     756        }
     757    },
     758    {
     759        "desc"    : "Mac OS X on PowerPC using Firefox",
     760        "ua"      : "Mozilla/5.0 (Macintosh; PPC Mac OS X x.y; rv:10.0) Gecko/20100101 Firefox/10.0",
     761        "expect"  :
     762        {
     763            "name"    : "Mac OS",
     764            "version" : "x.y"
     765        }
     766    },
     767    {
    687768        "desc"    : "Mac OS",
    688769        "ua"      : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36",
     
    767848    {
    768849        "desc"    : "AIX",
    769         "ua"      : "",
    770         "expect"  :
    771         {
    772             "name"    : "",
    773             "version" : ""
     850        "ua"      : "Mozilla/5.0 (X11; U; AIX 000138384C00; en-US; rv:1.0.1) Gecko/20030213 Netscape/7.0",
     851        "expect"  :
     852        {
     853            "name"    : "AIX",
     854            "version" : "undefined"
    774855        }
    775856    },
    776857    {
    777858        "desc"    : "Plan9",
    778         "ua"      : "",
    779         "expect"  :
    780         {
    781             "name"    : "",
    782             "version" : ""
     859        "ua"      : "NCSA_Mosaic/5.0 (X11;Plan 9 4.0)",
     860        "expect"  :
     861        {
     862            "name"    : "Plan 9",
     863            "version" : "4.0"
    783864        }
    784865    },
    785866    {
    786867        "desc"    : "Minix",
    787         "ua"      : "",
    788         "expect"  :
    789         {
    790             "name"    : "",
    791             "version" : ""
     868        "ua"      : "Mozilla/5.0 (X11; Original ; Minix 3.3 ; rv:3.0)",
     869        "expect"  :
     870        {
     871            "name"    : "Minix",
     872            "version" : "3.3"
    792873        }
    793874    },
    794875    {
    795876        "desc"    : "BeOS",
    796         "ua"      : "",
    797         "expect"  :
    798         {
    799             "name"    : "",
    800             "version" : ""
     877        "ua"      : "Mozilla/5.0 (BeOS; U; BeOS BePC; en-US; rv:1.8.1.8pre) Gecko/20070926 SeaMonkey/1.1.5pre",
     878        "expect"  :
     879        {
     880            "name"    : "BeOS",
     881            "version" : "undefined"
    801882        }
    802883    },
    803884    {
    804885        "desc"    : "OS/2",
    805         "ua"      : "",
    806         "expect"  :
    807         {
    808             "name"    : "",
    809             "version" : ""
     886        "ua"      : "Links (2.1pre14; OS/2 1 i386; 80x33)",
     887        "expect"  :
     888        {
     889            "name"    : "OS/2",
     890            "version" : "undefined"
    810891        }
    811892    },
    812893    {
    813894        "desc"    : "AmigaOS",
    814         "ua"      : "",
    815         "expect"  :
    816         {
    817             "name"    : "",
    818             "version" : ""
     895        "ua"      : "Mozilla/4.0 (compatible; AWEB 3.4 SE; AmigaOS)",
     896        "expect"  :
     897        {
     898            "name"    : "AmigaOS",
     899            "version" : "undefined"
    819900        }
    820901    },
    821902    {
    822903        "desc"    : "MorphOS",
    823         "ua"      : "",
    824         "expect"  :
    825         {
    826             "name"    : "",
    827             "version" : ""
     904        "ua"      : "AmigaVoyager/3.4.4 (MorphOS/PPC native)",
     905        "expect"  :
     906        {
     907            "name"    : "MorphOS",
     908            "version" : "undefined"
    828909        }
    829910    },
    830911    {
    831912        "desc"    : "UNIX",
    832         "ua"      : "",
    833         "expect"  :
    834         {
    835             "name"    : "",
    836             "version" : ""
     913        "ua"      : "Surf/0.4.1 (X11; U; Unix; en-US) AppleWebKit/531.2+ Compatible (Safari)",
     914        "expect"  :
     915        {
     916            "name"    : "Unix",
     917            "version" : "undefined"
    837918        }
    838919    },
    839920    {
    840921        "desc"    : "Joli",
    841         "ua"      : "",
    842         "expect"  :
    843         {
    844             "name"    : "",
    845             "version" : ""
     922        "ua"      : "Mozilla/5.0 (X11; Jolicloud Linux i686) AppleWebKit/537.6 (KHTML, like Gecko) Joli OS/1.2 Chromium/23.0.1240.0 Chrome/23.0.1240.0 Safari/537.6",
     923        "expect"  :
     924        {
     925            "name"    : "Joli",
     926            "version" : "1.2"
    846927        }
    847928    },
    848929    {
    849930        "desc"    : "CentOS",
    850         "ua"      : "",
    851         "expect"  :
    852         {
    853             "name"    : "",
    854             "version" : ""
     931        "ua"      : "Konqueror/15.13 (CentOS Linux 7.4; cs-CZ;)",
     932        "expect"  :
     933        {
     934            "name"    : "CentOS",
     935            "version" : "7.4"
    855936        }
    856937    },
    857938    {
    858939        "desc"    : "PCLinuxOS",
    859         "ua"      : "",
    860         "expect"  :
    861         {
    862             "name"    : "",
    863             "version" : ""
     940        "ua"      : "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101209 PCLinuxOS/1.9.2.13-1pclos2010 (2010) Firefox/3.6.13",
     941        "expect"  :
     942        {
     943            "name"    : "PCLinuxOS",
     944            "version" : "1.9.2.13-1pclos2010"
    864945        }
    865946    },
    866947    {
    867948        "desc"    : "RedHat",
    868         "ua"      : "",
    869         "expect"  :
    870         {
    871             "name"    : "",
    872             "version" : ""
     949        "ua"      : "Mozilla/5.0 (compatible; Konqueror/4.3; Linux) KHTML/4.3.4 (like Gecko) Red Hat Enterprise Linux/4.3.4-11.el6_1.4",
     950        "expect"  :
     951        {
     952            "name"    : "Red Hat",
     953            "version" : "4.3.4-11.el6_1.4"
     954        }
     955    },
     956    {
     957        "desc"    : "RedHat",
     958        "ua"      : "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.13pre) Gecko/20070717 Red Hat/1.0.9-4.el4 SeaMonkey/1.0.9",
     959        "expect"  :
     960        {
     961            "name"    : "Red Hat",
     962            "version" : "1.0.9-4.el4"
     963        }
     964    },
     965    {
     966        "desc"    : "RedHat",
     967        "ua"      : "iTunes/4.7.1 (Linux; N; Red Hat; x86_64-linux; EN; utf8) SqueezeCenter, Squeezebox Server, Logitech Media Server/7.9.1/1522157629",
     968        "expect"  :
     969        {
     970            "name"    : "Red Hat",
     971            "version" : "undefined"
     972        }
     973    },
     974    {
     975        "desc"    : "RedHat",
     976        "ua"      : "curl/7.20.0 (x86_64-redhat-linux-gnu) libcurl/7.20.0 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5",
     977        "expect"  :
     978        {
     979            "name"    : "redhat",
     980            "version" : "undefined"
     981        }
     982    },
     983    {
     984        "desc"    : "RISC OS",
     985        "ua"      : "Mozilla/1.10 [en] (Compatible; RISC OS 3.70; Oregano 1.10)",
     986        "expect"  :
     987        {
     988            "name"    : "RISC OS",
     989            "version" : "3.70"
    873990        }
    874991    },
    875992    {
    876993        "desc"    : "Zenwalk",
    877         "ua"      : "",
    878         "expect"  :
    879         {
    880             "name"    : "",
    881             "version" : ""
     994        "ua"      : "Flock/2.16 (Zenwalk 7.3; es_PR;)",
     995        "expect"  :
     996        {
     997            "name"    : "Zenwalk",
     998            "version" : "7.3"
    882999        }
    8831000    },
    8841001    {
    8851002        "desc"    : "Hurd",
    886         "ua"      : "",
    887         "expect"  :
    888         {
    889             "name"    : "",
    890             "version" : ""
     1003        "ua"      : "Mozilla/5.0 (X11; Hurd 0.9 i386; en-US) libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/3.7.0 Safari/696.96",
     1004        "expect"  :
     1005        {
     1006            "name"    : "Hurd",
     1007            "version" : "0.9"
    8911008        }
    8921009    },
    8931010    {
    8941011        "desc"    : "Linux",
    895         "ua"      : "",
    896         "expect"  :
    897         {
    898             "name"    : "",
    899             "version" : ""
    900         }
    901     },
    902     {
    903         "desc"    : "GNU",
    904         "ua"      : "",
    905         "expect"  :
    906         {
    907             "name"    : "",
    908             "version" : ""
     1012        "ua"      : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36",
     1013        "expect"  :
     1014        {
     1015            "name"    : "Linux",
     1016            "version" : "x86_64"
     1017        }
     1018    },
     1019    {
     1020        "desc"    : "Deepin",
     1021        "ua"      : "Mozilla/5.0 (X11; Linux x86_64; Deepin 15.5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 NFSBrowser/5.0.0.1886",
     1022        "expect"  :
     1023        {
     1024            "name"    : "Deepin",
     1025            "version" : "15.5"
    9091026        }
    9101027    },
    9111028    {
    9121029        "desc"    : "Palm OS",
    913         "ua"      : "",
    914         "expect"  :
    915         {
    916             "name"    : "",
    917             "version" : ""
     1030        "ua"      : "Mozilla/4.76 [en] (PalmOS; U; WebPro3.0; Palm-Arz1)",
     1031        "expect"  :
     1032        {
     1033            "name"    : "Palm",
     1034            "version" : "undefined"
     1035        }
     1036    },
     1037    {
     1038        "desc"    : "HP-UX",
     1039        "ua"      : "Mozilla/5.0 (X11; U; HP-UX 9000/785; es-ES; rv:1.0.1) Gecko/20020827 Netscape/7.0",
     1040        "expect"  :
     1041        {
     1042            "name"    : "HP-UX",
     1043            "version" : "undefined"
     1044        }
     1045    },
     1046    {
     1047        "desc"    : "Contiki",
     1048        "ua"      : "Contiki/1.0 (Commodore 64; http://dunkels.com/adam/contiki/)",
     1049        "expect"  :
     1050        {
     1051            "name"    : "Contiki",
     1052            "version" : "1.0"
     1053        }
     1054    },
     1055    {
     1056        "desc"    : "Linpus",
     1057        "ua"      : "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b5pre) Gecko/2008032619 Linpus/3.0-0.49",
     1058        "expect"  :
     1059        {
     1060            "name"    : "Linpus",
     1061            "version" : "3.0-0.49"
     1062        }
     1063    },
     1064    {
     1065        "desc"    : "Manjaro",
     1066        "ua"      : "Mozilla/5.0 (X11; Manjaro 19.0.2; Arch; x64; rv:84.0) Gecko/20100101 Firefox/84.0",
     1067        "expect"  :
     1068        {
     1069            "name"    : "Manjaro",
     1070            "version" : "19.0.2"
     1071        }
     1072    },
     1073    {
     1074        "desc"    : "elementary OS",
     1075        "ua"      : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/604.1 (KHTML, like Gecko) Version/11.0 Safari/604.1 elementary OS/0.4 (Loki) Epiphany/3.18.11",
     1076        "expect"  :
     1077        {
     1078            "name"    : "elementary OS",
     1079            "version" : "0.4"
     1080        }
     1081    },
     1082    {
     1083        "desc"    : "GhostBSD",
     1084        "ua"      : "Mozilla/5.0 (X11; GhostBSD/10.3; x86_64; rv:50.0.1) Gecko/20100101 Firefox/50.0.1",
     1085        "expect"  :
     1086        {
     1087            "name"    : "GhostBSD",
     1088            "version" : "10.3"
     1089        }
     1090    },
     1091    {
     1092        "desc"    : "Android-x86",
     1093        "ua"      : "Mozilla/5.0 (Linux; Android 7.1.2; Generic Android-x86) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 OPR/61.2.3076.56749",
     1094        "expect"  :
     1095        {
     1096            "name"    : "Android-x86",
     1097            "version" : "7.1.2"
     1098        }
     1099    },
     1100    {
     1101        "desc"    : "Sabayon",
     1102        "ua"      : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Sabayon Chrome/19.0.1084.46 Safari/536.5",
     1103        "expect"  :
     1104        {
     1105            "name"    : "Sabayon",
     1106            "version" : "undefined"
     1107        }
     1108    },
     1109    {
     1110        "desc"    : "Linspire",
     1111        "ua"      : "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.4) Gecko/20060803 Firefox/1.5.0.4 Linspire/1.5.0.4",
     1112        "expect"  :
     1113        {
     1114            "name"    : "Linspire",
     1115            "version" : "1.5.0.4"
    9181116        }
    9191117    }
  • trip-planner-front/node_modules/ua-parser-js/test/test.js

    r59329aa re29cc2e  
    33var assert      = require('assert');
    44var requirejs   = require('requirejs');
     5var parseJS     = require('@babel/parser').parse;
     6var traverse    = require('@babel/traverse').default;
    57var UAParser    = require('./../src/ua-parser');
    68var browsers    = require('./browser-test.json');
     
    138140    var regexes;
    139141
    140     // todo: use AST-based instead of grep
    141     before('Read main js file', function (done) {
    142         fs.readFile('src/ua-parser.js', 'utf8', function (err, data) {
    143             regexes = data.match(/(\/.+\/[ig]+)(?=[,\s\n])/g);
    144             done();
     142    before('Read main js file', function () {
     143        var code = fs.readFileSync('src/ua-parser.js', 'utf8').toString();
     144        var ast = parseJS(code, { sourceType: "script" });
     145        regexes = [];
     146        traverse(ast, {
     147            RegExpLiteral: (path) => {
     148                regexes.push(path.node.pattern);
     149            }
    145150        });
     151
     152        if (regexes.length === 0) {
     153            throw new Error("Regexes cannot be empty!");
     154        }
    146155    });
    147156
     
    157166        });
    158167    });
    159 })
     168});
Note: See TracChangeset for help on using the changeset viewer.