diff --git a/app/src/Server.js b/app/src/Server.js
index bbc599ee..23522724 100644
--- a/app/src/Server.js
+++ b/app/src/Server.js
@@ -58,7 +58,7 @@ dev dependencies: {
* @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
- * @version 1.7.52
+ * @version 1.7.53
*
*/
diff --git a/package.json b/package.json
index 3b6dbb13..7318edbf 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "mirotalksfu",
- "version": "1.7.52",
+ "version": "1.7.53",
"description": "WebRTC SFU browser-based video calls",
"main": "Server.js",
"scripts": {
@@ -75,11 +75,11 @@
"js-yaml": "^4.1.0",
"jsdom": "^26.0.0",
"jsonwebtoken": "^9.0.2",
- "mediasoup": "3.15.3",
- "mediasoup-client": "3.8.1",
+ "mediasoup": "3.15.4",
+ "mediasoup-client": "3.8.2",
"ngrok": "^5.0.0-beta.2",
"nodemailer": "^6.10.0",
- "openai": "^4.85.2",
+ "openai": "^4.85.3",
"qs": "6.14.0",
"sanitize-filename": "^1.6.3",
"socket.io": "4.8.1",
diff --git a/public/js/Brand.js b/public/js/Brand.js
index 20d4a6c6..86d6a367 100644
--- a/public/js/Brand.js
+++ b/public/js/Brand.js
@@ -64,7 +64,7 @@ let BRAND = {
},
about: {
imageUrl: '../images/mirotalk-logo.gif',
- title: 'WebRTC SFU v1.7.52',
+ title: 'WebRTC SFU v1.7.53',
html: `
diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js
index 03232526..6742bab9 100644
--- a/public/js/RoomClient.js
+++ b/public/js/RoomClient.js
@@ -9,7 +9,7 @@
* @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
- * @version 1.7.52
+ * @version 1.7.53
*
*/
diff --git a/public/sfu/MediasoupClient.js b/public/sfu/MediasoupClient.js
index 52416fed..311407d4 100644
--- a/public/sfu/MediasoupClient.js
+++ b/public/sfu/MediasoupClient.js
@@ -4409,7 +4409,7 @@
sdpObject,
});
// libwebrtc supports NACK for OPUS but doesn't announce it.
- ortcUtils.addNackSuppportForOpus(nativeRtpCapabilities);
+ ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
return nativeRtpCapabilities;
} catch (error) {
try {
@@ -7147,7 +7147,7 @@
sdpObject,
});
// libwebrtc supports NACK for OPUS but doesn't announce it.
- ortcUtils.addNackSuppportForOpus(nativeRtpCapabilities);
+ ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
return nativeRtpCapabilities;
} catch (error) {
try {
@@ -10628,7 +10628,7 @@
sdpObject,
});
// libwebrtc supports NACK for OPUS but doesn't announce it.
- ortcUtils.addNackSuppportForOpus(nativeRtpCapabilities);
+ ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
return nativeRtpCapabilities;
} catch (error) {
try {
@@ -12094,7 +12094,7 @@
sdpObject,
});
// libwebrtc supports NACK for OPUS but doesn't announce it.
- ortcUtils.addNackSuppportForOpus(nativeRtpCapabilities);
+ ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
return nativeRtpCapabilities;
} catch (error) {
try {
@@ -12854,11 +12854,11 @@
function (require, module, exports) {
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
- exports.addNackSuppportForOpus = addNackSuppportForOpus;
+ exports.addNackSupportForOpus = addNackSupportForOpus;
/**
* This function adds RTCP NACK support for OPUS codec in given capabilities.
*/
- function addNackSuppportForOpus(rtpCapabilities) {
+ function addNackSupportForOpus(rtpCapabilities) {
for (const codec of rtpCapabilities.codecs ?? []) {
if (
(codec.mimeType.toLowerCase() === 'audio/opus' ||
@@ -14507,7 +14507,7 @@
/**
* Expose mediasoup-client version.
*/
- exports.version = '3.8.1';
+ exports.version = '3.8.2';
/**
* Expose parseScalabilityMode() function.
*/
@@ -16905,162 +16905,160 @@
],
57: [
function (require, module, exports) {
- /* UAParser.js v2.0.0
+ /* UAParser.js v2.0.2
Copyright © 2012-2024 Faisal Salman
AGPLv3 License */
- !(function (i, d) {
- 'use strict';
- function e(i) {
+ ((i, l) => {
+ function I(i) {
for (var e = {}, t = 0; t < i.length; t++) e[i[t].toUpperCase()] = i[t];
return e;
}
- function n(i, e) {
- if (!(typeof i === l && 0 < i.length)) return !!gi(i) && -1 !== ki(e).indexOf(ki(i));
- for (var t in i) if (ki(i[t]) == ki(e)) return 1;
- }
- var w = '',
- u = 'function',
- b = 'undefined',
- l = 'object',
- c = 'string',
- p = 'major',
- h = 'model',
- m = 'name',
- f = 'type',
- g = 'vendor',
- v = 'version',
- k = 'architecture',
- x = 'console',
- y = 'mobile',
+ var M = 500,
+ U = 'user-agent',
+ w = '',
+ R = '?',
+ V = 'function',
+ n = 'undefined',
+ c = 'object',
+ L = 'string',
+ u = 'browser',
+ h = 'cpu',
+ p = 'device',
+ m = 'engine',
+ f = 'os',
+ g = 'result',
+ v = 'name',
+ k = 'type',
+ x = 'vendor',
+ y = 'version',
+ C = 'architecture',
+ B = 'major',
+ T = 'model',
+ G = 'console',
+ S = 'mobile',
r = 'tablet',
- t = 'smarttv',
- o = 'wearable',
- a = 'xr',
- s = 'embedded',
- S = 'inapp',
- _ = 'user-agent',
- C = 500,
- T = 'brands',
- q = 'formFactors',
- O = 'fullVersionList',
- z = 'platform',
- A = 'platformVersion',
- N = 'bitness',
- P = 'sec-ch-ua',
- H = P + '-full-version-list',
- I = P + '-arch',
- U = P + '-' + N,
- j = P + '-form-factors',
- E = P + '-' + y,
- M = P + '-' + h,
- R = P + '-' + z,
- B = R + '-version',
- V = [T, O, y, h, z, A, k, q, N],
- F = 'browser',
- G = 'cpu',
- L = 'device',
- D = 'engine',
- X = 'os',
- $ = 'result',
- W = 'Amazon',
- K = 'Apple',
- Q = 'ASUS',
- Z = 'BlackBerry',
- Y = 'Google',
- J = 'Huawei',
- ii = 'Microsoft',
- ei = 'Motorola',
- ti = 'Samsung',
- oi = 'Sony',
- ri = 'Xiaomi',
- ai = 'Zebra',
- si = 'Mobile ',
- ni = ' Browser',
- wi = 'Chromecast',
- bi = 'Firefox',
- ci = 'Opera',
- di = 'Facebook',
- ui = 'Windows',
- li = typeof i !== b,
- pi = li && i.navigator ? i.navigator : d,
- hi = pi && pi.userAgentData ? pi.userAgentData : d,
- mi = function (i, e) {
- var t,
- o = {},
- r = e;
- if (!fi(e))
- for (var a in ((r = {}), e)) for (var s in e[a]) r[s] = e[a][s].concat(r[s] || []);
- for (t in i) o[t] = r[t] && r[t].length % 2 == 0 ? r[t].concat(i[t]) : i[t];
- return o;
+ e = 'smarttv',
+ t = 'wearable',
+ F = 'xr',
+ D = 'embedded',
+ $ = 'inapp',
+ W = 'brands',
+ _ = 'formFactors',
+ X = 'fullVersionList',
+ q = 'platform',
+ K = 'platformVersion',
+ Q = 'bitness',
+ o = 'sec-ch-ua',
+ Z = o + '-full-version-list',
+ Y = o + '-arch',
+ J = o + '-' + Q,
+ ii = o + '-form-factors',
+ ei = o + '-' + S,
+ ti = o + '-' + T,
+ oi = o + '-' + q,
+ ri = oi + '-version',
+ ai = [W, X, S, T, q, K, C, _, Q],
+ si = 'Amazon',
+ a = 'Apple',
+ ni = 'ASUS',
+ wi = 'BlackBerry',
+ s = 'Google',
+ bi = 'Huawei',
+ di = 'Microsoft',
+ li = 'Motorola',
+ ci = 'Nvidia',
+ ui = 'OnePlus',
+ hi = 'OPPO',
+ pi = 'Samsung',
+ mi = 'Sony',
+ fi = 'Xiaomi',
+ gi = 'Zebra',
+ vi = 'Chromium',
+ b = 'Chromecast',
+ ki = 'Firefox',
+ d = 'Opera',
+ xi = 'Facebook',
+ z = 'Mobile ',
+ yi = ' Browser',
+ Ci = 'Windows',
+ Ti = typeof i !== n,
+ A = Ti && i.navigator ? i.navigator : l,
+ O = A && A.userAgentData ? A.userAgentData : l,
+ Si = function (i, e) {
+ if (typeof i === c && 0 < i.length) {
+ for (var t in i) if (j(i[t]) == j(e)) return !0;
+ return !1;
+ }
+ return !!H(i) && -1 !== j(e).indexOf(j(i));
},
- fi = function (i, e) {
- for (var t in i) return /^(browser|cpu|device|engine|os)$/.test(t) || (!!e && fi(i[t]));
+ _i = function (i, e) {
+ for (var t in i) return /^(browser|cpu|device|engine|os)$/.test(t) || (!!e && _i(i[t]));
},
- gi = function (i) {
- return typeof i === c;
+ H = function (i) {
+ return typeof i === L;
},
- vi = function (i) {
- if (!i) return d;
- for (var e, t = [], o = Si(/\\?\"/g, i).split(','), r = 0; r < o.length; r++)
+ qi = function (i) {
+ if (!i) return l;
+ for (var e, t = [], o = Ai(/\\?\"/g, i).split(','), r = 0; r < o.length; r++)
-1 < o[r].indexOf(';')
- ? ((e = Ci(o[r]).split(';v=')), (t[r] = { brand: e[0], version: e[1] }))
- : (t[r] = Ci(o[r]));
+ ? ((e = Hi(o[r]).split(';v=')), (t[r] = { brand: e[0], version: e[1] }))
+ : (t[r] = Hi(o[r]));
return t;
},
- ki = function (i) {
- return gi(i) ? i.toLowerCase() : i;
+ j = function (i) {
+ return H(i) ? i.toLowerCase() : i;
},
- xi = function (i) {
- return gi(i) ? Si(/[^\d\.]/g, i).split('.')[0] : d;
+ zi = function (i) {
+ return H(i) ? Ai(/[^\d\.]/g, i).split('.')[0] : l;
},
- yi = function (i) {
+ N = function (i) {
for (var e in i) {
e = i[e];
- typeof e == l && 2 == e.length ? (this[e[0]] = e[1]) : (this[e] = d);
+ typeof e == c && 2 == e.length ? (this[e[0]] = e[1]) : (this[e] = l);
}
return this;
},
- Si = function (i, e) {
- return gi(e) ? e.replace(i, w) : e;
+ Ai = function (i, e) {
+ return H(e) ? e.replace(i, w) : e;
},
- _i = function (i) {
- return Si(/\\?\"/g, i);
+ Oi = function (i) {
+ return Ai(/\\?\"/g, i);
},
- Ci = function (i, e) {
- if (gi(i)) return (i = Si(/^\s\s*/, i)), typeof e === b ? i : i.substring(0, C);
+ Hi = function (i, e) {
+ if (H(i)) return (i = Ai(/^\s\s*/, i)), typeof e === n ? i : i.substring(0, M);
},
- Ti = function (i, e) {
+ ji = function (i, e) {
if (i && e)
for (var t, o, r, a, s, n = 0; n < e.length && !a; ) {
- for (var w = e[n], b = e[n + 1], c = (t = 0); c < w.length && !a && w[c]; )
- if ((a = w[c++].exec(i)))
+ for (var w = e[n], b = e[n + 1], d = (t = 0); d < w.length && !a && w[d]; )
+ if ((a = w[d++].exec(i)))
for (o = 0; o < b.length; o++)
(s = a[++t]),
- typeof (r = b[o]) === l && 0 < r.length
+ typeof (r = b[o]) === c && 0 < r.length
? 2 === r.length
- ? typeof r[1] == u
+ ? typeof r[1] == V
? (this[r[0]] = r[1].call(this, s))
: (this[r[0]] = r[1])
: 3 === r.length
- ? typeof r[1] !== u || (r[1].exec && r[1].test)
- ? (this[r[0]] = s ? s.replace(r[1], r[2]) : d)
- : (this[r[0]] = s ? r[1].call(this, s, r[2]) : d)
+ ? typeof r[1] !== V || (r[1].exec && r[1].test)
+ ? (this[r[0]] = s ? s.replace(r[1], r[2]) : l)
+ : (this[r[0]] = s ? r[1].call(this, s, r[2]) : l)
: 4 === r.length &&
(this[r[0]] = s
? r[3].call(this, s.replace(r[1], r[2]))
- : d)
- : (this[r] = s || d);
+ : l)
+ : (this[r] = s || l);
n += 2;
}
},
- qi = function (i, e) {
+ E = function (i, e) {
for (var t in e)
- if (typeof e[t] === l && 0 < e[t].length) {
- for (var o = 0; o < e[t].length; o++) if (n(e[t][o], i)) return '?' === t ? d : t;
- } else if (n(e[t], i)) return '?' === t ? d : t;
+ if (typeof e[t] === c && 0 < e[t].length) {
+ for (var o = 0; o < e[t].length; o++) if (Si(e[t][o], i)) return t === R ? l : t;
+ } else if (Si(e[t], i)) return t === R ? l : t;
return e.hasOwnProperty('*') ? e['*'] : i;
},
- Oi = {
+ Ni = {
ME: '4.90',
'NT 3.11': 'NT3.51',
'NT 4.0': 'NT4.0',
@@ -17073,7 +17071,7 @@
10: ['NT 6.4', 'NT 10.0'],
RT: 'ARM',
},
- zi = {
+ Ei = {
embedded: 'Automotive',
mobile: 'Mobile',
tablet: ['Tablet', 'EInk'],
@@ -17081,30 +17079,30 @@
wearable: 'Watch',
xr: ['VR', 'XR'],
'?': ['Desktop', 'Unknown'],
- '*': d,
+ '*': l,
},
- Ai = {
+ Pi = {
browser: [
[/\b(?:crmo|crios)\/([\w\.]+)/i],
- [v, [m, si + 'Chrome']],
+ [y, [v, z + 'Chrome']],
[/edg(?:e|ios|a)?\/([\w\.]+)/i],
- [v, [m, 'Edge']],
+ [y, [v, 'Edge']],
[
/(opera mini)\/([-\w\.]+)/i,
/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,
/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i,
],
- [m, v],
+ [v, y],
[/opios[\/ ]+([\w\.]+)/i],
- [v, [m, ci + ' Mini']],
+ [y, [v, d + ' Mini']],
[/\bop(?:rg)?x\/([\w\.]+)/i],
- [v, [m, ci + ' GX']],
+ [y, [v, d + ' GX']],
[/\bopr\/([\w\.]+)/i],
- [v, [m, ci]],
+ [y, [v, d]],
[/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i],
- [v, [m, 'Baidu']],
+ [y, [v, 'Baidu']],
[/\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i],
- [v, [m, 'Maxthon']],
+ [y, [v, 'Maxthon']],
[
/(kindle)\/([\w\.]+)/i,
/(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,
@@ -17114,114 +17112,115 @@
/(heytap|ovi|115)browser\/([\d\.]+)/i,
/(weibo)__([\d\.]+)/i,
],
- [m, v],
+ [v, y],
[/quark(?:pc)?\/([-\w\.]+)/i],
- [v, [m, 'Quark']],
+ [y, [v, 'Quark']],
[/\bddg\/([\w\.]+)/i],
- [v, [m, 'DuckDuckGo']],
+ [y, [v, 'DuckDuckGo']],
[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],
- [v, [m, 'UCBrowser']],
+ [y, [v, 'UCBrowser']],
[
/microm.+\bqbcore\/([\w\.]+)/i,
/\bqbcore\/([\w\.]+).+microm/i,
/micromessenger\/([\w\.]+)/i,
],
- [v, [m, 'WeChat']],
+ [y, [v, 'WeChat']],
[/konqueror\/([\w\.]+)/i],
- [v, [m, 'Konqueror']],
+ [y, [v, 'Konqueror']],
[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],
- [v, [m, 'IE']],
+ [y, [v, 'IE']],
[/ya(?:search)?browser\/([\w\.]+)/i],
- [v, [m, 'Yandex']],
+ [y, [v, 'Yandex']],
[/slbrowser\/([\w\.]+)/i],
- [v, [m, 'Smart Lenovo' + ni]],
+ [y, [v, 'Smart Lenovo' + yi]],
[/(avast|avg)\/([\w\.]+)/i],
- [[m, /(.+)/, '$1 Secure' + ni], v],
+ [[v, /(.+)/, '$1 Secure' + yi], y],
[/\bfocus\/([\w\.]+)/i],
- [v, [m, bi + ' Focus']],
+ [y, [v, ki + ' Focus']],
[/\bopt\/([\w\.]+)/i],
- [v, [m, ci + ' Touch']],
+ [y, [v, d + ' Touch']],
[/coc_coc\w+\/([\w\.]+)/i],
- [v, [m, 'Coc Coc']],
+ [y, [v, 'Coc Coc']],
[/dolfin\/([\w\.]+)/i],
- [v, [m, 'Dolphin']],
+ [y, [v, 'Dolphin']],
[/coast\/([\w\.]+)/i],
- [v, [m, ci + ' Coast']],
+ [y, [v, d + ' Coast']],
[/miuibrowser\/([\w\.]+)/i],
- [v, [m, 'MIUI' + ni]],
+ [y, [v, 'MIUI' + yi]],
[/fxios\/([\w\.-]+)/i],
- [v, [m, si + bi]],
+ [y, [v, z + ki]],
[/\bqihoobrowser\/?([\w\.]*)/i],
- [v, [m, '360']],
+ [y, [v, '360']],
[/\b(qq)\/([\w\.]+)/i],
- [[m, /(.+)/, '$1Browser'], v],
+ [[v, /(.+)/, '$1Browser'], y],
[/(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i],
- [[m, /(.+)/, '$1' + ni], v],
+ [[v, /(.+)/, '$1' + yi], y],
[/samsungbrowser\/([\w\.]+)/i],
- [v, [m, ti + ' Internet']],
+ [y, [v, pi + ' Internet']],
[/metasr[\/ ]?([\d\.]+)/i],
- [v, [m, 'Sogou Explorer']],
+ [y, [v, 'Sogou Explorer']],
[/(sogou)mo\w+\/([\d\.]+)/i],
- [[m, 'Sogou Mobile'], v],
+ [[v, 'Sogou Mobile'], y],
[
/(electron)\/([\w\.]+) safari/i,
/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,
/m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i,
],
- [m, v],
+ [v, y],
[/(lbbrowser|rekonq)/i],
- [m],
+ [v],
[/ome\/([\w\.]+) \w* ?(iron) saf/i, /ome\/([\w\.]+).+qihu (360)[es]e/i],
- [v, m],
+ [y, v],
[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],
- [[m, di], v, [f, S]],
+ [[v, xi], y, [k, $]],
[
/(Klarna)\/([\w\.]+)/i,
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,
+ /(daum)apps[\/ ]([\w\.]+)/i,
/safari (line)\/([\w\.]+)/i,
/\b(line)\/([\w\.]+)\/iab/i,
/(alipay)client\/([\w\.]+)/i,
/(twitter)(?:and| f.+e\/([\w\.]+))/i,
/(instagram|snapchat)[\/ ]([-\w\.]+)/i,
],
- [m, v, [f, S]],
+ [v, y, [k, $]],
[/\bgsa\/([\w\.]+) .*safari\//i],
- [v, [m, 'GSA'], [f, S]],
+ [y, [v, 'GSA'], [k, $]],
[/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i],
- [v, [m, 'TikTok'], [f, S]],
+ [y, [v, 'TikTok'], [k, $]],
[/\[(linkedin)app\]/i],
- [m, [f, S]],
+ [v, [k, $]],
[/(chromium)[\/ ]([-\w\.]+)/i],
- [m, v],
+ [v, y],
[/headlesschrome(?:\/([\w\.]+)| )/i],
- [v, [m, 'Chrome Headless']],
+ [y, [v, 'Chrome Headless']],
[/ wv\).+(chrome)\/([\w\.]+)/i],
- [[m, 'Chrome WebView'], v],
+ [[v, 'Chrome WebView'], y],
[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],
- [v, [m, 'Android' + ni]],
+ [y, [v, 'Android' + yi]],
[/chrome\/([\w\.]+) mobile/i],
- [v, [m, si + 'Chrome']],
+ [y, [v, z + 'Chrome']],
[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],
- [m, v],
+ [v, y],
[/version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i],
- [v, [m, si + 'Safari']],
+ [y, [v, z + 'Safari']],
[/iphone .*mobile(?:\/\w+ | ?)safari/i],
- [[m, si + 'Safari']],
+ [[v, z + 'Safari']],
[/version\/([\w\.\,]+) .*(safari)/i],
- [v, m],
+ [y, v],
[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],
- [m, [v, '1']],
+ [v, [y, '1']],
[/(webkit|khtml)\/([\w\.]+)/i],
- [m, v],
+ [v, y],
[/(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i],
- [[m, si + bi], v],
+ [[v, z + ki], y],
[/(navigator|netscape\d?)\/([-\w\.]+)/i],
- [[m, 'Netscape'], v],
+ [[v, 'Netscape'], y],
[/(wolvic|librewolf)\/([\w\.]+)/i],
- [m, v],
+ [v, y],
[/mobile vr; rv:([\w\.]+)\).+firefox/i],
- [v, [m, bi + ' Reality']],
+ [y, [v, ki + ' Reality']],
[
/ekiohf.+(flow)\/([\w\.]+)/i,
/(swiftfox)/i,
@@ -17229,63 +17228,78 @@
/(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|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
+ /(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
/\b(links) \(([\w\.]+)/i,
],
- [m, [v, /_/g, '.']],
+ [v, [y, /_/g, '.']],
[/(cobalt)\/([\w\.]+)/i],
- [m, [v, /[^\d\.]+./, w]],
+ [v, [y, /[^\d\.]+./, w]],
],
cpu: [
- [/\b(?:(amd|x|x86[-_]?|wow|win)64)\b/i],
- [[k, 'amd64']],
- [/(ia32(?=;))/i, /((?:i[346]|x)86)[;\)]/i],
- [[k, 'ia32']],
- [/\b(aarch64|arm(v?8e?l?|_?64))\b/i],
- [[k, 'arm64']],
- [/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],
- [[k, 'armhf']],
- [/windows (ce|mobile); ppc;/i],
- [[k, 'arm']],
- [/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],
- [[k, /ower/, w, ki]],
- [/(sun4\w)[;\)]/i],
- [[k, 'sparc']],
+ [/\b((amd|x|x86[-_]?|wow|win)64)\b/i],
+ [[C, 'amd64']],
+ [/(ia32(?=;))/i, /\b((i[346]|x)86)(pc)?\b/i],
+ [[C, 'ia32']],
+ [/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i],
+ [[C, 'arm64']],
+ [/\b(arm(v[67])?ht?n?[fl]p?)\b/i],
+ [[C, 'armhf']],
+ [/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i],
+ [[C, 'arm']],
+ [/((ppc|powerpc)(64)?)( mac|;|\))/i],
+ [[C, /ower/, w, j]],
+ [/ sun4\w[;\)]/i],
+ [[C, 'sparc']],
[
- /((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i,
+ /\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i,
],
- [[k, ki]],
+ [[C, j]],
],
device: [
[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],
- [h, [g, ti], [f, r]],
+ [T, [x, pi], [k, r]],
[
/\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
/samsung[- ]((?!sm-[lr])[-\w]+)/i,
/sec-(sgh\w+)/i,
],
- [h, [g, ti], [f, y]],
+ [T, [x, pi], [k, S]],
[/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],
- [h, [g, K], [f, y]],
+ [T, [x, a], [k, S]],
[
/\((ipad);[-\w\),; ]+apple/i,
/applecoremedia\/[\w\.]+ \((ipad)/i,
/\b(ipad)\d\d?,\d\d?[;\]].+ios/i,
],
- [h, [g, K], [f, r]],
+ [T, [x, a], [k, r]],
[/(macintosh);/i],
- [h, [g, K]],
+ [T, [x, a]],
[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],
- [h, [g, 'Sharp'], [f, y]],
- [/(?:honor)([-\w ]+)[;\)]/i],
- [h, [g, 'Honor'], [f, y]],
- [/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],
- [h, [g, J], [f, r]],
+ [T, [x, 'Sharp'], [k, S]],
+ [
+ /\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i,
+ ],
+ [T, [x, 'Honor'], [k, r]],
+ [/honor([-\w ]+)[;\)]/i],
+ [T, [x, 'Honor'], [k, S]],
+ [
+ /\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i,
+ ],
+ [T, [x, bi], [k, r]],
[
/(?:huawei)([-\w ]+)[;\)]/i,
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i,
],
- [h, [g, J], [f, y]],
+ [T, [x, bi], [k, S]],
+ [
+ /oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,
+ /\b((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i,
+ ],
+ [
+ [T, /_/g, ' '],
+ [x, fi],
+ [k, r],
+ ],
[
/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,
/\b; (\w+) build\/hm\1/i,
@@ -17293,269 +17307,278 @@
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,
/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i,
+ / ([\w ]+) miui\/v?\d/i,
],
[
- [h, /_/g, ' '],
- [g, ri],
- [f, y],
- ],
- [
- /oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i,
- /\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i,
- ],
- [
- [h, /_/g, ' '],
- [g, ri],
- [f, r],
+ [T, /_/g, ' '],
+ [x, fi],
+ [k, S],
],
[
/; (\w+) bui.+ oppo/i,
/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i,
],
- [h, [g, 'OPPO'], [f, y]],
- [/\b(opd2\d{3}a?) bui/i],
- [h, [g, 'OPPO'], [f, r]],
+ [T, [x, hi], [k, S]],
+ [/\b(opd2(\d{3}a?))(?: bui|\))/i],
+ [T, [x, E, { OnePlus: ['304', '403', '203'], '*': hi }], [k, r]],
[/vivo (\w+)(?: bui|\))/i, /\b(v[12]\d{3}\w?[at])(?: bui|;)/i],
- [h, [g, 'Vivo'], [f, y]],
+ [T, [x, 'Vivo'], [k, S]],
[/\b(rmx[1-3]\d{3})(?: bui|;|\))/i],
- [h, [g, 'Realme'], [f, y]],
+ [T, [x, 'Realme'], [k, S]],
[
/\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,
+ /((?:moto(?! 360)[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i,
],
- [h, [g, ei], [f, y]],
+ [T, [x, li], [k, S]],
[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],
- [h, [g, ei], [f, r]],
+ [T, [x, li], [k, r]],
[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],
- [h, [g, 'LG'], [f, r]],
+ [T, [x, 'LG'], [k, r]],
[
/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
- /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,
+ /\blg[-e;\/ ]+((?!browser|netcast|android tv|watch)\w+)/i,
/\blg-?([\d\w]+) bui/i,
],
- [h, [g, 'LG'], [f, y]],
+ [T, [x, 'LG'], [k, S]],
[
- /(ideatab[-\w ]+)/i,
- /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i,
+ /(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,
+ /lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i,
],
- [h, [g, 'Lenovo'], [f, r]],
- [/(?:maemo|nokia).*(n900|lumia \d+)/i, /nokia[-_ ]?([-\w\.]*)/i],
+ [T, [x, 'Lenovo'], [k, r]],
+ [/(nokia) (t[12][01])/i],
+ [x, T, [k, r]],
+ [/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i, /nokia[-_ ]?(([-\w\. ]*))/i],
[
- [h, /_/g, ' '],
- [g, 'Nokia'],
- [f, y],
+ [T, /_/g, ' '],
+ [k, S],
+ [x, 'Nokia'],
],
- [/(pixel c)\b/i],
- [h, [g, Y], [f, r]],
+ [/(pixel (c|tablet))\b/i],
+ [T, [x, s], [k, r]],
[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],
- [h, [g, Y], [f, y]],
+ [T, [x, s], [k, S]],
[
/droid.+; (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i,
],
- [h, [g, oi], [f, y]],
+ [T, [x, mi], [k, S]],
[/sony tablet [ps]/i, /\b(?:sony)?sgp\w+(?: bui|\))/i],
[
- [h, 'Xperia Tablet'],
- [g, oi],
- [f, r],
+ [T, 'Xperia Tablet'],
+ [x, mi],
+ [k, r],
],
[/ (kb2005|in20[12]5|be20[12][59])\b/i, /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],
- [h, [g, 'OnePlus'], [f, y]],
+ [T, [x, ui], [k, S]],
[
/(alexa)webm/i,
/(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i,
/(kf[a-z]+)( bui|\)).+silk\//i,
],
- [h, [g, W], [f, r]],
+ [T, [x, si], [k, r]],
[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],
[
- [h, /(.+)/g, 'Fire Phone $1'],
- [g, W],
- [f, y],
+ [T, /(.+)/g, 'Fire Phone $1'],
+ [x, si],
+ [k, S],
],
[/(playbook);[-\w\),; ]+(rim)/i],
- [h, g, [f, r]],
+ [T, x, [k, r]],
[/\b((?:bb[a-f]|st[hv])100-\d)/i, /\(bb10; (\w+)/i],
- [h, [g, Z], [f, y]],
+ [T, [x, wi], [k, S]],
[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],
- [h, [g, Q], [f, r]],
+ [T, [x, ni], [k, r]],
[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],
- [h, [g, Q], [f, y]],
+ [T, [x, ni], [k, S]],
[/(nexus 9)/i],
- [h, [g, 'HTC'], [f, r]],
+ [T, [x, 'HTC'], [k, r]],
[
/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i,
],
- [g, [h, /_/g, ' '], [f, y]],
+ [x, [T, /_/g, ' '], [k, S]],
[
/tcl (xess p17aa)/i,
/droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\w(\w|\w\w))?(\)| bui)/i,
],
- [h, [g, 'TCL'], [f, r]],
+ [T, [x, 'TCL'], [k, r]],
[
/droid [\w\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\w(\w|\w\w))?(\)| bui)/i,
],
- [h, [g, 'TCL'], [f, y]],
+ [T, [x, 'TCL'], [k, S]],
[/(itel) ((\w+))/i],
- [[g, ki], h, [f, qi, { tablet: ['p10001l', 'w7001'], '*': 'mobile' }]],
+ [[x, j], T, [k, E, { tablet: ['p10001l', 'w7001'], '*': 'mobile' }]],
[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],
- [h, [g, 'Acer'], [f, r]],
+ [T, [x, 'Acer'], [k, r]],
[/droid.+; (m[1-5] note) bui/i, /\bmz-([-\w]{2,})/i],
- [h, [g, 'Meizu'], [f, y]],
+ [T, [x, 'Meizu'], [k, S]],
[/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i],
- [h, [g, 'Ulefone'], [f, y]],
+ [T, [x, 'Ulefone'], [k, S]],
[/; (energy ?\w+)(?: bui|\))/i, /; energizer ([\w ]+)(?: bui|\))/i],
- [h, [g, 'Energizer'], [f, y]],
+ [T, [x, 'Energizer'], [k, S]],
[/; cat (b35);/i, /; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i],
- [h, [g, 'Cat'], [f, y]],
+ [T, [x, 'Cat'], [k, S]],
[/((?:new )?andromax[\w- ]+)(?: bui|\))/i],
- [h, [g, 'Smartfren'], [f, y]],
+ [T, [x, 'Smartfren'], [k, S]],
[/droid.+; (a(?:015|06[35]|142p?))/i],
- [h, [g, 'Nothing'], [f, y]],
+ [T, [x, 'Nothing'], [k, S]],
+ [/(imo) (tab \w+)/i, /(infinix) (x1101b?)/i],
+ [x, T, [k, r]],
[
- /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
- /; (imo) ((?!tab)[\w ]+?)(?: bui|\))/i,
+ /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
+ /; (hmd|imo) ([\w ]+?)(?: bui|\))/i,
/(hp) ([\w ]+\w)/i,
- /(asus)-?(\w+)/i,
/(microsoft); (lumia[\w ]+)/i,
- /(lenovo)[-_ ]?([-\w]+)/i,
- /(jolla)/i,
+ /(lenovo)[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i,
/(oppo) ?([\w ]+) bui/i,
],
- [g, h, [f, y]],
+ [x, T, [k, S]],
[
- /(imo) (tab \w+)/i,
/(kobo)\s(ereader|touch)/i,
/(archos) (gamepad2?)/i,
/(hp).+(touchpad(?!.+tablet)|tablet)/i,
/(kindle)\/([\w\.]+)/i,
],
- [g, h, [f, r]],
+ [x, T, [k, r]],
[/(surface duo)/i],
- [h, [g, ii], [f, r]],
+ [T, [x, di], [k, r]],
[/droid [\d\.]+; (fp\du?)(?: b|\))/i],
- [h, [g, 'Fairphone'], [f, y]],
- [/(shield[\w ]+) b/i],
- [h, [g, 'Nvidia'], [f, r]],
+ [T, [x, 'Fairphone'], [k, S]],
+ [/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i],
+ [T, [x, ci], [k, r]],
[/(sprint) (\w+)/i],
- [g, h, [f, y]],
+ [x, T, [k, S]],
[/(kin\.[onetw]{3})/i],
[
- [h, /\./g, ' '],
- [g, ii],
- [f, y],
+ [T, /\./g, ' '],
+ [x, di],
+ [k, S],
],
[/droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],
- [h, [g, ai], [f, r]],
+ [T, [x, gi], [k, r]],
[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],
- [h, [g, ai], [f, y]],
+ [T, [x, gi], [k, S]],
[/smart-tv.+(samsung)/i],
- [g, [f, t]],
+ [x, [k, e]],
[/hbbtv.+maple;(\d+)/i],
[
- [h, /^/, 'SmartTV'],
- [g, ti],
- [f, t],
+ [T, /^/, 'SmartTV'],
+ [x, pi],
+ [k, e],
],
[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],
[
- [g, 'LG'],
- [f, t],
+ [x, 'LG'],
+ [k, e],
],
[/(apple) ?tv/i],
- [g, [h, K + ' TV'], [f, t]],
+ [x, [T, a + ' TV'], [k, e]],
[/crkey.*devicetype\/chromecast/i],
[
- [h, wi + ' Third Generation'],
- [g, Y],
- [f, t],
+ [T, b + ' Third Generation'],
+ [x, s],
+ [k, e],
],
[/crkey.*devicetype\/([^/]*)/i],
[
- [h, /^/, 'Chromecast '],
- [g, Y],
- [f, t],
+ [T, /^/, 'Chromecast '],
+ [x, s],
+ [k, e],
],
[/fuchsia.*crkey/i],
[
- [h, wi + ' Nest Hub'],
- [g, Y],
- [f, t],
+ [T, b + ' Nest Hub'],
+ [x, s],
+ [k, e],
],
[/crkey/i],
[
- [h, wi],
- [g, Y],
- [f, t],
+ [T, b],
+ [x, s],
+ [k, e],
],
[/droid.+aft(\w+)( bui|\))/i],
- [h, [g, W], [f, t]],
+ [T, [x, si], [k, e]],
+ [/(shield \w+ tv)/i],
+ [T, [x, ci], [k, e]],
[/\(dtv[\);].+(aquos)/i, /(aquos-tv[\w ]+)\)/i],
- [h, [g, 'Sharp'], [f, t]],
+ [T, [x, 'Sharp'], [k, e]],
[/(bravia[\w ]+)( bui|\))/i],
- [h, [g, oi], [f, t]],
- [/(mitv-\w{5}) bui/i],
- [h, [g, ri], [f, t]],
+ [T, [x, mi], [k, e]],
+ [/(mi(tv|box)-?\w+) bui/i],
+ [T, [x, fi], [k, e]],
[/Hbbtv.*(technisat) (.*);/i],
- [g, h, [f, t]],
+ [x, T, [k, e]],
[
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i,
],
[
- [g, Ci],
- [h, Ci],
- [f, t],
+ [x, Hi],
+ [T, Hi],
+ [k, e],
],
+ [/droid.+; ([\w- ]+) (?:android tv|smart[- ]?tv)/i],
+ [T, [k, e]],
[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],
- [[f, t]],
+ [[k, e]],
[/(ouya)/i, /(nintendo) (\w+)/i],
- [g, h, [f, x]],
- [/droid.+; (shield) bui/i],
- [h, [g, 'Nvidia'], [f, x]],
+ [x, T, [k, G]],
+ [/droid.+; (shield)( bui|\))/i],
+ [T, [x, ci], [k, G]],
[/(playstation \w+)/i],
- [h, [g, oi], [f, x]],
+ [T, [x, mi], [k, G]],
[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],
- [h, [g, ii], [f, x]],
- [/\b(sm-[lr]\d\d[05][fnuw]?s?)\b/i],
- [h, [g, ti], [f, o]],
- [/((pebble))app/i],
- [g, h, [f, o]],
+ [T, [x, di], [k, G]],
+ [/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i],
+ [T, [x, pi], [k, t]],
+ [/((pebble))app/i, /(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i],
+ [x, T, [k, t]],
+ [/(ow(?:19|20)?we?[1-3]{1,3})/i],
+ [T, [x, hi], [k, t]],
[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],
- [h, [g, K], [f, o]],
+ [T, [x, a], [k, t]],
+ [/(opwwe\d{3})/i],
+ [T, [x, ui], [k, t]],
+ [/(moto 360)/i],
+ [T, [x, li], [k, t]],
+ [/(smartwatch 3)/i],
+ [T, [x, mi], [k, t]],
+ [/(g watch r)/i],
+ [T, [x, 'LG'], [k, t]],
[/droid.+; (wt63?0{2,3})\)/i],
- [h, [g, ai], [f, o]],
+ [T, [x, gi], [k, t]],
[/droid.+; (glass) \d/i],
- [h, [g, Y], [f, a]],
+ [T, [x, s], [k, F]],
[/(pico) (4|neo3(?: link|pro)?)/i],
- [g, h, [f, a]],
+ [x, T, [k, F]],
[/; (quest( \d| pro)?)/i],
- [h, [g, di], [f, a]],
+ [T, [x, xi], [k, F]],
[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],
- [g, [f, s]],
+ [x, [k, D]],
[/(aeobc)\b/i],
- [h, [g, W], [f, s]],
- [/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i],
- [h, [f, y]],
- [/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],
- [h, [f, r]],
+ [T, [x, si], [k, D]],
+ [/(homepod).+mac os/i],
+ [T, [x, a], [k, D]],
+ [/windows iot/i],
+ [[k, D]],
+ [/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+?(mobile|vr|\d) safari/i],
+ [T, [k, E, { mobile: 'Mobile', xr: 'VR', '*': r }]],
[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],
- [[f, r]],
+ [[k, r]],
[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],
- [[f, y]],
- [/(android[-\w\. ]{0,9});.+buil/i],
- [h, [g, 'Generic']],
+ [[k, S]],
+ [/droid .+?; ([\w\. -]+)( bui|\))/i],
+ [T, [x, 'Generic']],
],
engine: [
[/windows.+ edge\/([\w\.]+)/i],
- [v, [m, 'EdgeHTML']],
+ [y, [v, 'EdgeHTML']],
[/(arkweb)\/([\w\.]+)/i],
- [m, v],
+ [v, y],
[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],
- [v, [m, 'Blink']],
+ [y, [v, 'Blink']],
[
/(presto)\/([\w\.]+)/i,
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i,
@@ -17564,69 +17587,70 @@
/(icab)[\/ ]([23]\.[\d\.]+)/i,
/\b(libweb)/i,
],
- [m, v],
+ [v, y],
+ [/ladybird\//i],
+ [[v, 'LibWeb']],
[/rv\:([\w\.]{1,9})\b.+(gecko)/i],
- [v, m],
+ [y, v],
],
os: [
[/microsoft (windows) (vista|xp)/i],
- [m, v],
- [/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i],
- [m, [v, qi, Oi]],
+ [v, y],
+ [/(windows (?:phone(?: os)?|mobile|iot))[\/ ]?([\d\.\w ]*)/i],
+ [v, [y, E, Ni]],
[
/windows nt 6\.2; (arm)/i,
- /windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,
+ /windows[\/ ]([ntce\d\. ]+\w)(?!.+xbox)/i,
/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i,
],
[
- [v, qi, Oi],
- [m, ui],
+ [y, E, Ni],
+ [v, Ci],
],
[
- /ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,
+ /[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i,
/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,
/cfnetwork\/.+darwin/i,
],
[
- [v, /_/g, '.'],
- [m, 'iOS'],
+ [y, /_/g, '.'],
+ [v, 'iOS'],
],
[/(mac os x) ?([\w\. ]*)/i, /(macintosh|mac_powerpc\b)(?!.+haiku)/i],
[
- [m, 'macOS'],
- [v, /_/g, '.'],
+ [v, 'macOS'],
+ [y, /_/g, '.'],
],
[/android ([\d\.]+).*crkey/i],
- [v, [m, wi + ' Android']],
+ [y, [v, b + ' Android']],
[/fuchsia.*crkey\/([\d\.]+)/i],
- [v, [m, wi + ' Fuchsia']],
+ [y, [v, b + ' Fuchsia']],
[/crkey\/([\d\.]+).*devicetype\/smartspeaker/i],
- [v, [m, wi + ' SmartSpeaker']],
+ [y, [v, b + ' SmartSpeaker']],
[/linux.*crkey\/([\d\.]+)/i],
- [v, [m, wi + ' Linux']],
+ [y, [v, b + ' Linux']],
[/crkey\/([\d\.]+)/i],
- [v, [m, wi]],
+ [y, [v, b]],
[/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i],
- [v, m],
+ [y, v],
+ [/(ubuntu) ([\w\.]+) like android/i],
+ [[v, /(.+)/, '$1 Touch'], y],
[
- /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish|openharmony)[-\/ ]?([\w\.]*)/i,
- /(blackberry)\w*\/([\w\.]*)/i,
- /(tizen|kaios)[\/ ]([\w\.]+)/i,
- /\((series40);/i,
+ /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\w*[-\/; ]?([\d\.]*)/i,
],
- [m, v],
+ [v, y],
[/\(bb(10);/i],
- [v, [m, Z]],
- [/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],
- [v, [m, 'Symbian']],
+ [y, [v, wi]],
+ [/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i],
+ [y, [v, 'Symbian']],
[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],
- [v, [m, bi + ' OS']],
+ [y, [v, ki + ' OS']],
[/web0s;.+rt(tv)/i, /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],
- [v, [m, 'webOS']],
+ [y, [v, 'webOS']],
[/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i],
- [v, [m, 'watchOS']],
+ [y, [v, 'watchOS']],
[/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i],
- [[m, 'Chrome OS'], v],
+ [[v, 'Chrome OS'], y],
[
/panasonic;(viera)/i,
/(netrange)mmh/i,
@@ -17638,83 +17662,83 @@
/(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,
+ /(hurd|linux)(?: arm\w*| x86\w*| ?)([\w\.]*)/i,
/(gnu) ?([\w\.]*)/i,
/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,
/(haiku) (\w+)/i,
],
- [m, v],
+ [v, y],
[/(sunos) ?([\w\.\d]*)/i],
- [[m, 'Solaris'], v],
+ [[v, 'Solaris'], y],
[
/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,
/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,
/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,
/(unix) ?([\w\.]*)/i,
],
- [m, v],
+ [v, y],
],
},
- Ni =
- ((bi = { init: {}, isIgnore: {}, isIgnoreRgx: {}, toString: {} }),
- yi.call(bi.init, [
- [F, [m, v, p, f]],
- [G, [k]],
- [L, [f, h, g]],
- [D, [m, v]],
- [X, [m, v]],
+ Ii =
+ ((d = { init: {}, isIgnore: {}, isIgnoreRgx: {}, toString: {} }),
+ N.call(d.init, [
+ [u, [v, y, B, k]],
+ [h, [C]],
+ [p, [k, T, x]],
+ [m, [v, y]],
+ [f, [v, y]],
]),
- yi.call(bi.isIgnore, [
- [F, [v, p]],
- [D, [v]],
- [X, [v]],
+ N.call(d.isIgnore, [
+ [u, [y, B]],
+ [m, [y]],
+ [f, [y]],
]),
- yi.call(bi.isIgnoreRgx, [
- [F, / ?browser$/i],
- [X, / ?os$/i],
+ N.call(d.isIgnoreRgx, [
+ [u, / ?browser$/i],
+ [f, / ?os$/i],
]),
- yi.call(bi.toString, [
- [F, [m, v]],
- [G, [k]],
- [L, [g, h]],
- [D, [m, v]],
- [X, [m, v]],
+ N.call(d.toString, [
+ [u, [v, y]],
+ [h, [C]],
+ [p, [x, T]],
+ [m, [v, y]],
+ [f, [v, y]],
]),
- bi),
- Pi = function (e, i) {
- var t = Ni.init[i],
- o = Ni.isIgnore[i] || 0,
- r = Ni.isIgnoreRgx[i] || 0,
- a = Ni.toString[i] || 0;
+ d),
+ Mi = function (e, i) {
+ var t = Ii.init[i],
+ o = Ii.isIgnore[i] || 0,
+ r = Ii.isIgnoreRgx[i] || 0,
+ a = Ii.toString[i] || 0;
function s() {
- yi.call(this, t);
+ N.call(this, t);
}
return (
(s.prototype.getItem = function () {
return e;
}),
(s.prototype.withClientHints = function () {
- return hi
- ? hi.getHighEntropyValues(V).then(function (i) {
- return e.setCH(new Hi(i, !1)).parseCH().get();
+ return O
+ ? O.getHighEntropyValues(ai).then(function (i) {
+ return e.setCH(new Ui(i, !1)).parseCH().get();
})
: e.parseCH().get();
}),
(s.prototype.withFeatureCheck = function () {
return e.detectFeature().get();
}),
- i != $ &&
+ i != g &&
((s.prototype.is = function (i) {
var e,
t = !1;
for (e in this)
if (
this.hasOwnProperty(e) &&
- !n(o, e) &&
- ki(r ? Si(r, this[e]) : this[e]) == ki(r ? Si(r, i) : i)
+ !Si(o, e) &&
+ j(r ? Ai(r, this[e]) : this[e]) == j(r ? Ai(r, i) : i)
) {
- if (((t = !0), i != b)) break;
- } else if (i == b && t) {
+ if (((t = !0), i != n)) break;
+ } else if (i == n && t) {
t = !t;
break;
}
@@ -17723,41 +17747,42 @@
(s.prototype.toString = function () {
var i,
e = w;
- for (i in a) typeof this[a[i]] !== b && (e += (e ? ' ' : w) + this[a[i]]);
- return e || b;
+ for (i in a) typeof this[a[i]] !== n && (e += (e ? ' ' : w) + this[a[i]]);
+ return e || n;
})),
- hi ||
+ O ||
(s.prototype.then = function (i) {
- var e = this,
- t = function () {
- for (var i in e) e.hasOwnProperty(i) && (this[i] = e[i]);
- };
- t.prototype = { is: s.prototype.is, toString: s.prototype.toString };
- t = new t();
- return i(t), t;
+ function e() {
+ for (var i in t) t.hasOwnProperty(i) && (this[i] = t[i]);
+ }
+ var t = this,
+ o =
+ ((e.prototype = { is: s.prototype.is, toString: s.prototype.toString }),
+ new e());
+ return i(o), o;
}),
new s()
);
};
- function Hi(i, e) {
- if (((i = i || {}), yi.call(this, V), e))
- yi.call(this, [
- [T, vi(i[P])],
- [O, vi(i[H])],
- [y, /\?1/.test(i[E])],
- [h, _i(i[M])],
- [z, _i(i[R])],
- [A, _i(i[B])],
- [k, _i(i[I])],
- [q, vi(i[j])],
- [N, _i(i[U])],
+ function Ui(i, e) {
+ if (((i = i || {}), N.call(this, ai), e))
+ N.call(this, [
+ [W, qi(i[o])],
+ [X, qi(i[Z])],
+ [S, /\?1/.test(i[ei])],
+ [T, Oi(i[ti])],
+ [q, Oi(i[oi])],
+ [K, Oi(i[ri])],
+ [C, Oi(i[Y])],
+ [_, qi(i[ii])],
+ [Q, Oi(i[J])],
]);
- else for (var t in i) this.hasOwnProperty(t) && typeof i[t] !== b && (this[t] = i[t]);
+ else for (var t in i) this.hasOwnProperty(t) && typeof i[t] !== n && (this[t] = i[t]);
}
- function Ii(i, e, t, o) {
+ function Ri(i, e, t, o) {
return (
(this.get = function (i) {
- return i ? (this.data.hasOwnProperty(i) ? this.data[i] : d) : this.data;
+ return i ? (this.data.hasOwnProperty(i) ? this.data[i] : l) : this.data;
}),
(this.set = function (i, e) {
return (this.data[i] = e), this;
@@ -17766,36 +17791,36 @@
return (this.uaCH = i), this;
}),
(this.detectFeature = function () {
- if (pi && pi.userAgent == this.ua)
+ if (A && A.userAgent == this.ua)
switch (this.itemType) {
- case F:
- pi.brave && typeof pi.brave.isBrave == u && this.set(m, 'Brave');
+ case u:
+ A.brave && typeof A.brave.isBrave == V && this.set(v, 'Brave');
break;
- case L:
- !this.get(f) && hi && hi[y] && this.set(f, y),
- 'Macintosh' == this.get(h) &&
- pi &&
- typeof pi.standalone !== b &&
- pi.maxTouchPoints &&
- 2 < pi.maxTouchPoints &&
- this.set(h, 'iPad').set(f, r);
+ case p:
+ !this.get(k) && O && O[S] && this.set(k, S),
+ 'Macintosh' == this.get(T) &&
+ A &&
+ typeof A.standalone !== n &&
+ A.maxTouchPoints &&
+ 2 < A.maxTouchPoints &&
+ this.set(T, 'iPad').set(k, r);
break;
- case X:
- !this.get(m) && hi && hi[z] && this.set(m, hi[z]);
+ case f:
+ !this.get(v) && O && O[q] && this.set(v, O[q]);
break;
- case $:
+ case g:
var e = this.data,
i = function (i) {
return e[i].getItem().detectFeature().get();
};
- this.set(F, i(F)).set(G, i(G)).set(L, i(L)).set(D, i(D)).set(X, i(X));
+ this.set(u, i(u)).set(h, i(h)).set(p, i(p)).set(m, i(m)).set(f, i(f));
}
return this;
}),
(this.parseUA = function () {
return (
- this.itemType != $ && Ti.call(this.data, this.ua, this.rgxMap),
- this.itemType == F && this.set(p, xi(this.get(v))),
+ this.itemType != g && ji.call(this.data, this.ua, this.rgxMap),
+ this.itemType == u && this.set(B, zi(this.get(y))),
this
);
}),
@@ -17804,150 +17829,174 @@
e = this.uaCH,
t = this.rgxMap;
switch (this.itemType) {
- case F:
+ case u:
+ case m:
var o,
- r = e[O] || e[T];
+ r = e[X] || e[W];
if (r)
for (var a in r) {
- var s = Si(/(Google|Microsoft) /, r[a].brand || r[a]),
+ var s = r[a].brand || r[a],
a = r[a].version;
- /not.a.brand/i.test(s) ||
- (o && (!/chrom/i.test(o) || /chromi/i.test(s))) ||
- (this.set(m, s).set(v, a).set(p, xi(a)), (o = s));
+ this.itemType != u ||
+ /not.a.brand/i.test(s) ||
+ (o && (!/chrom/i.test(o) || s == vi)) ||
+ ((s = E(s, {
+ Chrome: 'Google Chrome',
+ Edge: 'Microsoft Edge',
+ 'Chrome WebView': 'Android WebView',
+ 'Chrome Headless': 'HeadlessChrome',
+ })),
+ this.set(v, s).set(y, a).set(B, zi(a)),
+ (o = s)),
+ this.itemType == m && s == vi && this.set(y, a);
}
break;
- case G:
- var n = e[k];
- n && (n && '64' == e[N] && (n += '64'), Ti.call(this.data, n + ';', t));
+ case h:
+ var n = e[C];
+ n && ('64' == e[Q] && (n += '64'), ji.call(this.data, n + ';', t));
break;
- case L:
+ case p:
if (
- (e[y] && this.set(f, y),
- e[h] && this.set(h, e[h]),
- 'Xbox' == e[h] && this.set(f, x).set(g, ii),
- e[q])
+ (e[S] && this.set(k, S),
+ e[T] &&
+ (this.set(T, e[T]),
+ (this.get(k) && this.get(x)) ||
+ (ji.call((n = {}), 'droid 9; ' + e[T] + ')', t),
+ !this.get(k) && n.type && this.set(k, n.type),
+ !this.get(x) && n.vendor && this.set(x, n.vendor))),
+ e[_])
) {
- if ('string' != typeof e[q])
- for (var w = 0; !i && w < e[q].length; ) i = qi(e[q][w++], zi);
- else i = qi(e[q], zi);
- this.set(f, i);
+ if ('string' != typeof e[_])
+ for (var w = 0; !i && w < e[_].length; ) i = E(e[_][w++], Ei);
+ else i = E(e[_], Ei);
+ this.set(k, i);
}
break;
- case X:
- n = e[z];
+ case f:
+ var b,
+ n = e[q];
n &&
- ((c = e[A]),
- n == ui && (c = 13 <= parseInt(xi(c), 10) ? '11' : '10'),
- this.set(m, n).set(v, c)),
- this.get(m) == ui && 'Xbox' == e[h] && this.set(m, 'Xbox').set(v, d);
+ ((b = e[K]),
+ n == Ci && (b = 13 <= parseInt(zi(b), 10) ? '11' : '10'),
+ this.set(v, n).set(y, b)),
+ this.get(v) == Ci && 'Xbox' == e[T] && this.set(v, 'Xbox').set(y, l);
break;
- case $:
- var b = this.data,
- c = function (i) {
- return b[i].getItem().setCH(e).parseCH().get();
+ case g:
+ var d = this.data,
+ n = function (i) {
+ return d[i].getItem().setCH(e).parseCH().get();
};
- this.set(F, c(F)).set(G, c(G)).set(L, c(L)).set(D, c(D)).set(X, c(X));
+ this.set(u, n(u)).set(h, n(h)).set(p, n(p)).set(m, n(m)).set(f, n(f));
}
return this;
}),
- yi.call(this, [
+ N.call(this, [
['itemType', i],
['ua', e],
['uaCH', o],
['rgxMap', t],
- ['data', Pi(this, i)],
+ ['data', Mi(this, i)],
]),
this
);
}
- function Ui(i, e, t) {
- var o;
- if (
- (typeof i === l
- ? ((e = fi(i, !0) ? (typeof e === l && (t = e), i) : ((t = i), d)), (i = d))
- : typeof i !== c || fi(e, !0) || ((t = e), (e = d)),
+ function P(i, e, t) {
+ var o, r, a, s, n;
+ return (
+ typeof i === c
+ ? ((e = _i(i, !0) ? (typeof e === c && (t = e), i) : ((t = i), l)), (i = l))
+ : typeof i !== L || _i(e, !0) || ((t = e), (e = l)),
t &&
- typeof t.append === u &&
+ typeof t.append === V &&
((o = {}),
t.forEach(function (i, e) {
o[e] = i;
}),
(t = o)),
- !(this instanceof Ui))
- )
- return new Ui(i, e, t).getResult();
- var r = typeof i === c ? i : t && t[_] ? t[_] : pi && pi.userAgent ? pi.userAgent : w,
- a = new Hi(t, !0),
- s = e ? mi(Ai, e) : Ai,
- e = function (i) {
- return i == $
- ? function () {
- return new Ii(i, r, s, a)
- .set('ua', r)
- .set(F, this.getBrowser())
- .set(G, this.getCPU())
- .set(L, this.getDevice())
- .set(D, this.getEngine())
- .set(X, this.getOS())
- .get();
- }
- : function () {
- return new Ii(i, r, s[i], a).parseUA().get();
- };
- };
- return (
- yi
- .call(this, [
- ['getBrowser', e(F)],
- ['getCPU', e(G)],
- ['getDevice', e(L)],
- ['getEngine', e(D)],
- ['getOS', e(X)],
- ['getResult', e($)],
- [
- 'getUA',
- function () {
- return r;
- },
- ],
- [
- 'setUA',
- function (i) {
- return gi(i) && (r = i.length > C ? Ci(i, C) : i), this;
- },
- ],
- ])
- .setUA(r),
- this
+ this instanceof P
+ ? ((r = typeof i === L ? i : t && t[U] ? t[U] : A && A.userAgent ? A.userAgent : w),
+ (a = new Ui(t, !0)),
+ (s = e
+ ? ((i, e) => {
+ var t,
+ o = {},
+ r = e;
+ if (!_i(e))
+ for (var a in ((r = {}), e))
+ for (var s in e[a]) r[s] = e[a][s].concat(r[s] || []);
+ for (t in i) o[t] = r[t] && r[t].length % 2 == 0 ? r[t].concat(i[t]) : i[t];
+ return o;
+ })(Pi, e)
+ : Pi),
+ N.call(this, [
+ [
+ 'getBrowser',
+ (n = function (i) {
+ return i == g
+ ? function () {
+ return new Ri(i, r, s, a)
+ .set('ua', r)
+ .set(u, this.getBrowser())
+ .set(h, this.getCPU())
+ .set(p, this.getDevice())
+ .set(m, this.getEngine())
+ .set(f, this.getOS())
+ .get();
+ }
+ : function () {
+ return new Ri(i, r, s[i], a).parseUA().get();
+ };
+ })(u),
+ ],
+ ['getCPU', n(h)],
+ ['getDevice', n(p)],
+ ['getEngine', n(m)],
+ ['getOS', n(f)],
+ ['getResult', n(g)],
+ [
+ 'getUA',
+ function () {
+ return r;
+ },
+ ],
+ [
+ 'setUA',
+ function (i) {
+ return H(i) && (r = i.length > M ? Hi(i, M) : i), this;
+ },
+ ],
+ ]).setUA(r),
+ this)
+ : new P(i, e, t).getResult()
);
}
- (Ui.VERSION = '2.0.0'),
- (Ui.BROWSER = e([m, v, p, f])),
- (Ui.CPU = e([k])),
- (Ui.DEVICE = e([h, g, f, x, y, t, r, o, s])),
- (Ui.ENGINE = Ui.OS = e([m, v])),
- typeof exports !== b
- ? (typeof module !== b && module.exports && (exports = module.exports = Ui),
- (exports.UAParser = Ui))
- : typeof define === u && define.amd
+ (P.VERSION = '2.0.2'),
+ (P.BROWSER = I([v, y, B, k])),
+ (P.CPU = I([C])),
+ (P.DEVICE = I([T, x, k, G, S, e, r, t, D])),
+ (P.ENGINE = P.OS = I([v, y])),
+ typeof exports !== n
+ ? ((exports =
+ typeof module !== n && module.exports ? (module.exports = P) : exports).UAParser = P)
+ : typeof define === V && define.amd
? define(function () {
- return Ui;
+ return P;
})
- : li && (i.UAParser = Ui);
- var ji,
- Ei = li && (i.jQuery || i.Zepto);
- Ei &&
- !Ei.ua &&
- ((ji = new Ui()),
- (Ei.ua = ji.getResult()),
- (Ei.ua.get = function () {
- return ji.getUA();
+ : Ti && (i.UAParser = P);
+ var Vi,
+ Li = Ti && (i.jQuery || i.Zepto);
+ Li &&
+ !Li.ua &&
+ ((Vi = new P()),
+ (Li.ua = Vi.getResult()),
+ (Li.ua.get = function () {
+ return Vi.getUA();
}),
- (Ei.ua.set = function (i) {
- ji.setUA(i);
+ (Li.ua.set = function (i) {
+ Vi.setUA(i);
var e,
- t = ji.getResult();
- for (e in t) Ei.ua[e] = t[e];
+ t = Vi.getResult();
+ for (e in t) Li.ua[e] = t[e];
}));
})('object' == typeof window ? window : this);
},