Skip to content
This repository
Browse code

[minor] Minor speed increase by using nulled objects

  • Loading branch information...
commit 3a4fe431ca378aab66e6fdf3688d2ca9553c48a8 1 parent c267179
Arnout Kazemier authored January 13, 2013
2,236  lib/regexps.js
... ...
@@ -1,285 +1,1955 @@
1  
-exports.browser = [
2  
-    [ new RegExp("^(Opera)/(\\d+)\\.(\\d+) \\(Nintendo Wii"), "Wii", 0, 0, 0 ]
3  
-  , [ new RegExp("(SeaMonkey|Camino)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)"), 0, 0, 0, 0 ]
4  
-  , [ new RegExp("(Pale[Mm]oon)/(\\d+)\\.(\\d+)\\.?(\\d+)?"), "Pale Moon (Firefox Variant)", 0, 0, 0 ]
5  
-  , [ new RegExp("(Fennec)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)"), "Firefox Mobile", 0, 0, 0 ]
6  
-  , [ new RegExp("(Fennec)/(\\d+)\\.(\\d+)(pre)"), "Firefox Mobile", 0, 0, 0 ]
7  
-  , [ new RegExp("(Fennec)/(\\d+)\\.(\\d+)"), "Firefox Mobile", 0, 0, 0 ]
8  
-  , [ new RegExp("Mobile.*(Firefox)/(\\d+)\\.(\\d+)"), "Firefox Mobile", 0, 0, 0 ]
9  
-  , [ new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)"), "Firefox ($1)", 0, 0, 0 ]
10  
-  , [ new RegExp("(Firefox)/(\\d+)\\.(\\d+)(a\\d+[a-z]*)"), "Firefox Alpha", 0, 0, 0 ]
11  
-  , [ new RegExp("(Firefox)/(\\d+)\\.(\\d+)(b\\d+[a-z]*)"), "Firefox Beta", 0, 0, 0 ]
12  
-  , [ new RegExp("(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(a\\d+[a-z]*)"), "Firefox Alpha", 0, 0, 0 ]
13  
-  , [ new RegExp("(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(b\\d+[a-z]*)"), "Firefox Beta", 0, 0, 0 ]
14  
-  , [ new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"), "Firefox ($1)", 0, 0, 0 ]
15  
-  , [ new RegExp("(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)"), "MicroB", 0, 0, 0 ]
16  
-  , [ new RegExp("(MozillaDeveloperPreview)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"), 0, 0, 0, 0 ]
17  
-  , [ new RegExp("(Flock)/(\\d+)\\.(\\d+)(b\\d+?)"), 0, 0, 0, 0 ]
18  
-  , [ new RegExp("(RockMelt)/(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
19  
-  , [ new RegExp("(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)"), "Netscape", 0, 0, 0 ]
20  
-  , [ new RegExp("(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)"), "Netscape", 0, 0, 0 ]
21  
-  , [ new RegExp("(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)"), "Netscape", 0, 0, 0 ]
22  
-  , [ new RegExp("(MyIBrow)/(\\d+)\\.(\\d+)"), "My Internet Browser", 0, 0, 0 ]
23  
-  , [ new RegExp("(Opera Tablet).*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), 0, 0, 0, 0 ]
24  
-  , [ new RegExp("(Opera)/.+Opera Mobi.+Version/(\\d+)\\.(\\d+)"), "Opera Mobile", 0, 0, 0 ]
25  
-  , [ new RegExp("Opera Mobi"), "Opera Mobile", 0, 0, 0 ]
26  
-  , [ new RegExp("(Opera Mini)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
27  
-  , [ new RegExp("(Opera Mini)/att/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
28  
-  , [ new RegExp("(Opera)/9.80.*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), 0, 0, 0, 0 ]
29  
-  , [ new RegExp("(webOSBrowser)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
30  
-  , [ new RegExp("(webOS)/(\\d+)\\.(\\d+)"), "webOSBrowser", 0, 0, 0 ]
31  
-  , [ new RegExp("(wOSBrowser).+TouchPad/(\\d+)\\.(\\d+)"), "webOS TouchPad", 0, 0, 0 ]
32  
-  , [ new RegExp("(luakit)"), "LuaKit", 0, 0, 0 ]
33  
-  , [ new RegExp("(Lightning)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)"), 0, 0, 0, 0 ]
34  
-  , [ new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)"), "Swiftfox", 0, 0, 0 ]
35  
-  , [ new RegExp("(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)"), "Swiftfox", 0, 0, 0 ]
36  
-  , [ new RegExp("(rekonq)/(\\d+)\\.(\\d+) Safari"), "Rekonq", 0, 0, 0 ]
37  
-  , [ new RegExp("rekonq"), "Rekonq", 0, 0, 0 ]
38  
-  , [ new RegExp("(conkeror|Conkeror)/(\\d+)\\.(\\d+)\\.?(\\d+)?"), "Conkeror", 0, 0, 0 ]
39  
-  , [ new RegExp("(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)"), "Konqueror", 0, 0, 0 ]
40  
-  , [ new RegExp("(WeTab)-Browser"), 0, 0, 0, 0 ]
41  
-  , [ new RegExp("(Comodo_Dragon)/(\\d+)\\.(\\d+)\\.(\\d+)"), "Comodo Dragon", 0, 0, 0 ]
42  
-  , [ new RegExp("(YottaaMonitor|BrowserMob|HttpMonitor|YandexBot|Slurp|BingPreview|PagePeeker|ThumbShotsBot|WebThumb|URL2PNG|ZooShot|GomezA|Catchpoint bot|Willow Internet Crawler|Google SketchUp|Read%20Later)"), 0, 0, 0, 0 ]
43  
-  , [ new RegExp("(Symphony) (\\d+).(\\d+)"), 0, 0, 0, 0 ]
44  
-  , [ new RegExp("(Minimo)"), 0, 0, 0, 0 ]
45  
-  , [ new RegExp("(CrMo)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"), "Chrome Mobile", 0, 0, 0 ]
46  
-  , [ new RegExp("(CriOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"), "Chrome Mobile iOS", 0, 0, 0 ]
47  
-  , [ new RegExp("(Chrome)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+) Mobile"), "Chrome Mobile", 0, 0, 0 ]
48  
-  , [ new RegExp("(chromeframe)/(\\d+)\\.(\\d+)\\.(\\d+)"), "Chrome Frame", 0, 0, 0 ]
49  
-  , [ new RegExp("(UC Browser)(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
50  
-  , [ new RegExp("(SLP Browser)/(\\d+)\\.(\\d+)"), "Tizen Browser", 0, 0, 0 ]
51  
-  , [ new RegExp("(Epiphany)/(\\d+)\\.(\\d+).(\\d+)"), 0, 0, 0, 0 ]
52  
-  , [ new RegExp("(SE 2\\.X) MetaSr (\\d+)\\.(\\d+)"), "Sogou Explorer", 0, 0, 0 ]
53  
-  , [ new RegExp("(FlyFlow)/(\\d+)\\.(\\d+)"), "Baidu Explorer", 0, 0, 0 ]
54  
-  , [ new RegExp("(Pingdom.com_bot_version_)(\\d+)\\.(\\d+)"), "PingdomBot", 0, 0, 0 ]
55  
-  , [ new RegExp("(facebookexternalhit)/(\\d+)\\.(\\d+)"), "FacebookBot", 0, 0, 0 ]
56  
-  , [ new RegExp("(Twitterbot)/(\\d+)\\.(\\d+)"), "TwitterBot", 0, 0, 0 ]
57  
-  , [ new RegExp("(PyAMF)/(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
58  
-  , [ new RegExp("(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|WebPilot|Vodafone|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\\.Browser|Bunjaloo|Google Earth|Raven for Mac)/(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
59  
-  , [ new RegExp("(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
60  
-  , [ new RegExp("(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
61  
-  , [ new RegExp("(iCab|Lunascape|Opera|Android|Jasmine|Polaris|BREW) (\\d+)\\.(\\d+)\\.?(\\d+)?"), 0, 0, 0, 0 ]
62  
-  , [ new RegExp("(Kindle)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
63  
-  , [ new RegExp("(Android) Donut"), 0, "1", "2", 0 ]
64  
-  , [ new RegExp("(Android) Eclair"), 0, "2", "1", 0 ]
65  
-  , [ new RegExp("(Android) Froyo"), 0, "2", "2", 0 ]
66  
-  , [ new RegExp("(Android) Gingerbread"), 0, "2", "3", 0 ]
67  
-  , [ new RegExp("(Android) Honeycomb"), 0, "3", 0, 0 ]
68  
-  , [ new RegExp("(IEMobile)[ /](\\d+)\\.(\\d+)"), "IE Mobile", 0, 0, 0 ]
69  
-  , [ new RegExp("(MSIE) (\\d+)\\.(\\d+).*XBLWP7"), "IE Large Screen", 0, 0, 0 ]
70  
-  , [ new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
71  
-  , [ new RegExp("(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?"), 0, 0, 0, 0 ]
72  
-  , [ new RegExp("(Obigo)InternetBrowser"), 0, 0, 0, 0 ]
73  
-  , [ new RegExp("(Obigo)\\-Browser"), 0, 0, 0, 0 ]
74  
-  , [ new RegExp("(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?"), 0, 0, 0, 0 ]
75  
-  , [ new RegExp("(MAXTHON|Maxthon) (\\d+)\\.(\\d+)"), "Maxthon", 0, 0, 0 ]
76  
-  , [ new RegExp("(Maxthon|MyIE2|Uzbl|Shiira)"), 0, "0", 0, 0 ]
77  
-  , [ new RegExp("(PLAYSTATION) (\\d+)"), "PlayStation", 0, 0, 0 ]
78  
-  , [ new RegExp("(PlayStation Portable)[^\\d]+(\\d+).(\\d+)"), 0, 0, 0, 0 ]
79  
-  , [ new RegExp("(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
80  
-  , [ new RegExp("(POLARIS)/(\\d+)\\.(\\d+)"), "Polaris", 0, 0, 0 ]
81  
-  , [ new RegExp("(Embider)/(\\d+)\\.(\\d+)"), "Polaris", 0, 0, 0 ]
82  
-  , [ new RegExp("(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)"), "Bon Echo", 0, 0, 0 ]
83  
-  , [ new RegExp("(iPod).+Version/(\\d+)\\.(\\d+)\\.(\\d+)"), "Mobile Safari", 0, 0, 0 ]
84  
-  , [ new RegExp("(iPod).*Version/(\\d+)\\.(\\d+)"), "Mobile Safari", 0, 0, 0 ]
85  
-  , [ new RegExp("(iPhone).*Version/(\\d+)\\.(\\d+)\\.(\\d+)"), "Mobile Safari", 0, 0, 0 ]
86  
-  , [ new RegExp("(iPhone).*Version/(\\d+)\\.(\\d+)"), "Mobile Safari", 0, 0, 0 ]
87  
-  , [ new RegExp("(iPad).*Version/(\\d+)\\.(\\d+)\\.(\\d+)"), "Mobile Safari", 0, 0, 0 ]
88  
-  , [ new RegExp("(iPad).*Version/(\\d+)\\.(\\d+)"), "Mobile Safari", 0, 0, 0 ]
89  
-  , [ new RegExp("(iPod|iPhone|iPad);.*CPU.*OS (\\d+)(?:_\\d+)?_(\\d+).*Mobile"), "Mobile Safari", 0, 0, 0 ]
90  
-  , [ new RegExp("(iPod|iPhone|iPad)"), "Mobile Safari", 0, 0, 0 ]
91  
-  , [ new RegExp("(AvantGo) (\\d+).(\\d+)"), 0, 0, 0, 0 ]
92  
-  , [ new RegExp("(Avant)"), 0, "1", 0, 0 ]
93  
-  , [ new RegExp("(QtCarBrowser)"), 0, "1", 0, 0 ]
94  
-  , [ new RegExp("^(Nokia)"), "Nokia Services (WAP) Browser", 0, 0, 0 ]
95  
-  , [ new RegExp("(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
96  
-  , [ new RegExp("(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)"), 0, 0, 0, 0 ]
97  
-  , [ new RegExp("(NokiaBrowser)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
98  
-  , [ new RegExp("(BrowserNG)/(\\d+)\\.(\\d+).(\\d+)"), "NokiaBrowser", 0, 0, 0 ]
99  
-  , [ new RegExp("(Series60)/5\\.0"), "NokiaBrowser", "7", "0", 0 ]
100  
-  , [ new RegExp("(Series60)/(\\d+)\\.(\\d+)"), "Nokia OSS Browser", 0, 0, 0 ]
101  
-  , [ new RegExp("(S40OviBrowser)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"), "Nokia Series 40 Ovi Browser", 0, 0, 0 ]
102  
-  , [ new RegExp("(Nokia)[EN]?(\\d+)"), 0, 0, 0, 0 ]
103  
-  , [ new RegExp("(BB10);"), "Blackberry WebKit", 0, 0, 0 ]
104  
-  , [ new RegExp("(PlayBook).+RIM Tablet OS (\\d+)\\.(\\d+)\\.(\\d+)"), "Blackberry WebKit", 0, 0, 0 ]
105  
-  , [ new RegExp("(Black[bB]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)"), "Blackberry WebKit", 0, 0, 0 ]
106  
-  , [ new RegExp("(Black[bB]erry)\\s?(\\d+)"), "Blackberry", 0, 0, 0 ]
107  
-  , [ new RegExp("(OmniWeb)/v(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
108  
-  , [ new RegExp("(Blazer)/(\\d+)\\.(\\d+)"), "Palm Blazer", 0, 0, 0 ]
109  
-  , [ new RegExp("(Pre)/(\\d+)\\.(\\d+)"), "Palm Pre", 0, 0, 0 ]
110  
-  , [ new RegExp("(Links) \\((\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
111  
-  , [ new RegExp("(QtWeb) Internet Browser/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
112  
-  , [ new RegExp("(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?"), "Amazon Silk", 0, 0, 0 ]
113  
-  , [ new RegExp("(AppleWebKit)/(\\d+)\\.?(\\d+)?\\+ .* Safari"), "WebKit Nightly", 0, 0, 0 ]
114  
-  , [ new RegExp("(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/"), "Safari", 0, 0, 0 ]
115  
-  , [ new RegExp("(Safari)/\\d+"), 0, 0, 0, 0 ]
116  
-  , [ new RegExp("(OLPC)/Update(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
117  
-  , [ new RegExp("(OLPC)/Update()\\.(\\d+)"), 0, "0", 0, 0 ]
118  
-  , [ new RegExp("(SEMC\\-Browser)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
119  
-  , [ new RegExp("(Teleca)"), "Teleca Browser", 0, 0, 0 ]
120  
-  , [ new RegExp("(MSIE) (\\d+)\\.(\\d+)"), "IE", 0, 0, 0 ]
121  
-  , [ new RegExp("(Nintendo 3DS).* Version/(\\d+)\\.(\\d+)(?:\\.(\\w+))"), 0, 0, 0, 0 ]
122  
-  , [ new RegExp("(python-requests)/(\\d+)\\.(\\d+)"), "Python Requests", 0, 0, 0 ]
123  
-  , [ new RegExp("(Thunderbird)/(\\d+)\\.(\\d+)\\.?(\\d+)?"), 0, 0, 0, 0 ]
124  
-  , [ new RegExp("(Wget)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)"), 0, 0, 0, 0 ]
125  
-  , [ new RegExp("(curl)/(\\d+)\\.(\\d+)\\.(\\d+)"), "cURL", 0, 0, 0 ]
126  
-];
  1
+var parser;
127 2
 
128  
-exports.device = [
129  
-    [ new RegExp("HTC ([A-Z][a-z0-9]+) Build"), "HTC $1", 0, 0, 0 ]
130  
-  , [ new RegExp("HTC ([A-Z][a-z0-9 ]+) \\d+\\.\\d+\\.\\d+\\.\\d+"), "HTC $1", 0, 0, 0 ]
131  
-  , [ new RegExp("HTC_Touch_([A-Za-z0-9]+)"), "HTC Touch ($1)", 0, 0, 0 ]
132  
-  , [ new RegExp("USCCHTC(\\d+)"), "HTC $1 (US Cellular)", 0, 0, 0 ]
133  
-  , [ new RegExp("Sprint APA(9292)"), "HTC $1 (Sprint)", 0, 0, 0 ]
134  
-  , [ new RegExp("HTC ([A-Za-z0-9]+ [A-Z])"), "HTC $1", 0, 0, 0 ]
135  
-  , [ new RegExp("HTC-([A-Za-z0-9]+)"), "HTC $1", 0, 0, 0 ]
136  
-  , [ new RegExp("HTC_([A-Za-z0-9]+)"), "HTC $1", 0, 0, 0 ]
137  
-  , [ new RegExp("HTC ([A-Za-z0-9]+)"), "HTC $1", 0, 0, 0 ]
138  
-  , [ new RegExp("(ADR[A-Za-z0-9]+)"), "HTC $1", 0, 0, 0 ]
139  
-  , [ new RegExp("(HTC)"), 0, 0, 0, 0 ]
140  
-  , [ new RegExp("(QtCarBrowser)"), "Tesla Model S", 0, 0, 0 ]
141  
-  , [ new RegExp("(SamsungSGHi560)"), "Samsung SGHi560", 0, 0, 0 ]
142  
-  , [ new RegExp("SonyEricsson([A-Za-z0-9]+)/"), "Ericsson $1", 0, 0, 0 ]
143  
-  , [ new RegExp("(KFOT Build)"), "Kindle Fire", 0, 0, 0 ]
144  
-  , [ new RegExp("(KFTT Build)"), "Kindle Fire HD", 0, 0, 0 ]
145  
-  , [ new RegExp("(KFJWI Build)"), "Kindle Fire HD 8.9\" WiFi", 0, 0, 0 ]
146  
-  , [ new RegExp("(KFJWA Build)"), "Kindle Fire HD 8.9\" 4G", 0, 0, 0 ]
147  
-  , [ new RegExp("(Kindle Fire)"), 0, 0, 0, 0 ]
148  
-  , [ new RegExp("(Kindle)"), 0, 0, 0, 0 ]
149  
-  , [ new RegExp("(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?"), "Kindle Fire", 0, 0, 0 ]
150  
-  , [ new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\; [A-Za-z]{2}\\-[A-Za-z]{2}\\; WOWMobile (.+) Build"), 0, 0, 0, 0 ]
151  
-  , [ new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+; [A-Za-z]{2}\\-[A-Za-z]{2}\\; (.+) Build"), 0, 0, 0, 0 ]
152  
-  , [ new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\-update1\\; [A-Za-z]{2}\\-[A-Za-z]{2}\\; (.+) Build"), 0, 0, 0, 0 ]
153  
-  , [ new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\; [A-Za-z]{2}\\-[A-Za-z]{2}\\; (.+) Build"), 0, 0, 0, 0 ]
154  
-  , [ new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+; (.+) Build"), 0, 0, 0, 0 ]
155  
-  , [ new RegExp("NokiaN([0-9]+)"), "Nokia N$1", 0, 0, 0 ]
156  
-  , [ new RegExp("Nokia([A-Za-z0-9\\v-]+)"), "Nokia $1", 0, 0, 0 ]
157  
-  , [ new RegExp("NOKIA ([A-Za-z0-9\\-]+)"), "Nokia $1", 0, 0, 0 ]
158  
-  , [ new RegExp("Nokia ([A-Za-z0-9\\-]+)"), "Nokia $1", 0, 0, 0 ]
159  
-  , [ new RegExp("Lumia ([A-Za-z0-9\\-]+)"), "Lumia $1", 0, 0, 0 ]
160  
-  , [ new RegExp("Symbian"), "Nokia", 0, 0, 0 ]
161  
-  , [ new RegExp("BB10; ([A-Za-z0-9\\- ]+)\\)"), "BlackBerry $1", 0, 0, 0 ]
162  
-  , [ new RegExp("(PlayBook).+RIM Tablet OS"), "Blackberry Playbook", 0, 0, 0 ]
163  
-  , [ new RegExp("(Black[Bb]erry [0-9]+);"), 0, 0, 0, 0 ]
164  
-  , [ new RegExp("Black[Bb]erry([0-9]+)"), "BlackBerry $1", 0, 0, 0 ]
165  
-  , [ new RegExp("(Pre)/(\\d+)\\.(\\d+)"), "Palm Pre", 0, 0, 0 ]
166  
-  , [ new RegExp("(Pixi)/(\\d+)\\.(\\d+)"), "Palm Pixi", 0, 0, 0 ]
167  
-  , [ new RegExp("(Touchpad)/(\\d+)\\.(\\d+)"), "HP Touchpad", 0, 0, 0 ]
168  
-  , [ new RegExp("HPiPAQ([A-Za-z0-9]+)/(\\d+).(\\d+)"), "HP iPAQ $1", 0, 0, 0 ]
169  
-  , [ new RegExp("Palm([A-Za-z0-9]+)"), "Palm $1", 0, 0, 0 ]
170  
-  , [ new RegExp("Treo([A-Za-z0-9]+)"), "Palm Treo $1", 0, 0, 0 ]
171  
-  , [ new RegExp("webOS.*(P160UNA)/(\\d+).(\\d+)"), "HP Veer", 0, 0, 0 ]
172  
-  , [ new RegExp("(PlayStation Portable)"), 0, 0, 0, 0 ]
173  
-  , [ new RegExp("(PlayStation Vita)"), 0, 0, 0, 0 ]
174  
-  , [ new RegExp("(AppleTV)"), "AppleTV", 0, 0, 0 ]
175  
-  , [ new RegExp("(iPad) Simulator;"), 0, 0, 0, 0 ]
176  
-  , [ new RegExp("(iPad);"), 0, 0, 0, 0 ]
177  
-  , [ new RegExp("(iPod);"), 0, 0, 0, 0 ]
178  
-  , [ new RegExp("(iPhone) Simulator;"), 0, 0, 0, 0 ]
179  
-  , [ new RegExp("(iPhone);"), 0, 0, 0, 0 ]
180  
-  , [ new RegExp("acer_([A-Za-z0-9]+)_"), "Acer $1", 0, 0, 0 ]
181  
-  , [ new RegExp("acer_([A-Za-z0-9]+)_"), "Acer $1", 0, 0, 0 ]
182  
-  , [ new RegExp("Amoi\\-([A-Za-z0-9]+)"), "Amoi $1", 0, 0, 0 ]
183  
-  , [ new RegExp("AMOI\\-([A-Za-z0-9]+)"), "Amoi $1", 0, 0, 0 ]
184  
-  , [ new RegExp("Asus\\-([A-Za-z0-9]+)"), "Asus $1", 0, 0, 0 ]
185  
-  , [ new RegExp("ASUS\\-([A-Za-z0-9]+)"), "Asus $1", 0, 0, 0 ]
186  
-  , [ new RegExp("BIRD\\-([A-Za-z0-9]+)"), "Bird $1", 0, 0, 0 ]
187  
-  , [ new RegExp("BIRD\\.([A-Za-z0-9]+)"), "Bird $1", 0, 0, 0 ]
188  
-  , [ new RegExp("BIRD ([A-Za-z0-9]+)"), "Bird $1", 0, 0, 0 ]
189  
-  , [ new RegExp("Dell ([A-Za-z0-9]+)"), "Dell $1", 0, 0, 0 ]
190  
-  , [ new RegExp("DoCoMo/2\\.0 ([A-Za-z0-9]+)"), "DoCoMo $1", 0, 0, 0 ]
191  
-  , [ new RegExp("([A-Za-z0-9]+)_W\\;FOMA"), "DoCoMo $1", 0, 0, 0 ]
192  
-  , [ new RegExp("([A-Za-z0-9]+)\\;FOMA"), "DoCoMo $1", 0, 0, 0 ]
193  
-  , [ new RegExp("vodafone([A-Za-z0-9]+)"), "Huawei Vodafone $1", 0, 0, 0 ]
194  
-  , [ new RegExp("i\\-mate ([A-Za-z0-9]+)"), "i-mate $1", 0, 0, 0 ]
195  
-  , [ new RegExp("Kyocera\\-([A-Za-z0-9]+)"), "Kyocera $1", 0, 0, 0 ]
196  
-  , [ new RegExp("KWC\\-([A-Za-z0-9]+)"), "Kyocera $1", 0, 0, 0 ]
197  
-  , [ new RegExp("Lenovo\\-([A-Za-z0-9]+)"), "Lenovo $1", 0, 0, 0 ]
198  
-  , [ new RegExp("Lenovo_([A-Za-z0-9]+)"), "Lenovo $1", 0, 0, 0 ]
199  
-  , [ new RegExp("LG/([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ]
200  
-  , [ new RegExp("LG-LG([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ]
201  
-  , [ new RegExp("LGE-LG([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ]
202  
-  , [ new RegExp("LGE VX([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ]
203  
-  , [ new RegExp("LG ([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ]
204  
-  , [ new RegExp("LGE LG\\-AX([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ]
205  
-  , [ new RegExp("LG\\-([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ]
206  
-  , [ new RegExp("LGE\\-([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ]
207  
-  , [ new RegExp("LG([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ]
208  
-  , [ new RegExp("(KIN)\\.One (\\d+)\\.(\\d+)"), "Microsoft $1", 0, 0, 0 ]
209  
-  , [ new RegExp("(KIN)\\.Two (\\d+)\\.(\\d+)"), "Microsoft $1", 0, 0, 0 ]
210  
-  , [ new RegExp("(Motorola)\\-([A-Za-z0-9]+)"), 0, 0, 0, 0 ]
211  
-  , [ new RegExp("MOTO\\-([A-Za-z0-9]+)"), "Motorola $1", 0, 0, 0 ]
212  
-  , [ new RegExp("MOT\\-([A-Za-z0-9]+)"), "Motorola $1", 0, 0, 0 ]
213  
-  , [ new RegExp("Philips([A-Za-z0-9]+)"), "Philips $1", 0, 0, 0 ]
214  
-  , [ new RegExp("Philips ([A-Za-z0-9]+)"), "Philips $1", 0, 0, 0 ]
215  
-  , [ new RegExp("SAMSUNG-([A-Za-z0-9\\-]+)"), "Samsung $1", 0, 0, 0 ]
216  
-  , [ new RegExp("SAMSUNG\\; ([A-Za-z0-9\\-]+)"), "Samsung $1", 0, 0, 0 ]
217  
-  , [ new RegExp("Softbank/1\\.0/([A-Za-z0-9]+)"), "Softbank $1", 0, 0, 0 ]
218  
-  , [ new RegExp("Softbank/2\\.0/([A-Za-z0-9]+)"), "Softbank $1", 0, 0, 0 ]
219  
-  , [ new RegExp("(PlayStation3 PPC)"), "Playstation 3", 0, 0, 0 ]
220  
-  , [ new RegExp("(hiptop|avantgo|plucker|xiino|blazer|elaine|up.browser|up.link|mmp|smartphone|midp|wap|vodafone|o2|pocket|mobile|pda)"), "Generic Smartphone", 0, 0, 0 ]
221  
-  , [ new RegExp("^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a wa|acer|acs\\-|airn|alav|asus|attw|au\\-m|aur |aus |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bell|bird|bw\\-n|bw\\-u|beck|benq|bilb|blac|c55/|cdm\\-|chtm|capi|comp|cond|craw|dall|dbte|dc\\-s|dica|ds\\-d|ds12|dait|devi|dmob|doco|dopo|el49|erk0|esl8|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly\\-|fly_|g\\-mo|g1 u|g560|gf\\-5|grun|gene|go.w|good|grad|hcit|hd\\-m|hd\\-p|hd\\-t|hei\\-|hp i|hpip|hs\\-c|htc |htc\\-|htca|htcg)"), "Generic Feature Phone", 0, 0, 0 ]
222  
-  , [ new RegExp("^(htcp|htcs|htct|htc_|haie|hita|huaw|hutc|i\\-20|i\\-go|i\\-ma|i230|iac|iac\\-|iac/|ig01|im1k|inno|iris|jata|java|kddi|kgt|kgt/|kpt |kwc\\-|klon|lexi|lg g|lg\\-a|lg\\-b|lg\\-c|lg\\-d|lg\\-f|lg\\-g|lg\\-k|lg\\-l|lg\\-m|lg\\-o|lg\\-p|lg\\-s|lg\\-t|lg\\-u|lg\\-w|lg/k|lg/l|lg/u|lg50|lg54|lge\\-|lge/|lynx|leno|m1\\-w|m3ga|m50/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot |mot\\-|mt50|mtp1|mtv |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec\\-|nem\\-|newg|neon)"), "Generic Feature Phone", 0, 0, 0 ]
223  
-  , [ new RegExp("^(netf|noki|nzph|o2 x|o2\\-x|opwv|owg1|opti|oran|ot\\-s|p800|pand|pg\\-1|pg\\-2|pg\\-3|pg\\-6|pg\\-8|pg\\-c|pg13|phil|pn\\-2|pt\\-g|palm|pana|pire|pock|pose|psio|qa\\-a|qc\\-2|qc\\-3|qc\\-5|qc\\-7|qc07|qc12|qc21|qc32|qc60|qci\\-|qwap|qtek|r380|r600|raks|rim9|rove|s55/|sage|sams|sc01|sch\\-|scp\\-|sdk/|se47|sec\\-|sec0|sec1|semc|sgh\\-|shar|sie\\-|sk\\-0|sl45|slid|smb3|smt5|sp01|sph\\-|spv |spv\\-|sy01|samm|sany|sava|scoo|send|siem|smar|smit|soft|sony|t\\-mo|t218|t250|t600|t610|t618|tcl\\-|tdg\\-|telm|tim\\-|ts70|tsm\\-|tsm3|tsm5|tx\\-9|tagt)"), "Generic Feature Phone", 0, 0, 0 ]
224  
-  , [ new RegExp("^(talk|teli|topl|tosh|up.b|upg1|utst|v400|v750|veri|vk\\-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vite|voda|vulc|w3c |w3c\\-|wapj|wapp|wapu|wapm|wig |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas\\-|your|zte\\-|zeto|aste|audi|avan|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd\\-|dang|eml2|fetc|hipt|http|ibro|idea|ikom|ipaq|jbro|jemu|jigs|keji|kyoc|kyok|libw|m\\-cr|midp|mmef|moto|mwbp|mywa|newt|nok6|o2im|pant|pdxg|play|pluc|port|prox|rozo|sama|seri|smal|symb|treo|upsi|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap\\-|webc|whit|wmlb|xda\\-|xda_)"), "Generic Feature Phone", 0, 0, 0 ]
225  
-  , [ new RegExp("(bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\\-webcrawler|converacrawler|dataparksearch|findlinks)"), "Spider", 0, 0, 0 ]
226  
-];
  3
+exports.browser = Object.create(null);
227 4
 
228  
-exports.os = [
229  
-    [ new RegExp("(Android) (\\d+)\\.(\\d+)(?:[.\\-]([a-z0-9]+))?"), 0, 0, 0, 0 ]
230  
-  , [ new RegExp("(Android)\\-(\\d+)\\.(\\d+)(?:[.\\-]([a-z0-9]+))?"), 0, 0, 0, 0 ]
231  
-  , [ new RegExp("(Android) Donut"), 0, "1", "2", 0 ]
232  
-  , [ new RegExp("(Android) Eclair"), 0, "2", "1", 0 ]
233  
-  , [ new RegExp("(Android) Froyo"), 0, "2", "2", 0 ]
234  
-  , [ new RegExp("(Android) Gingerbread"), 0, "2", "3", 0 ]
235  
-  , [ new RegExp("(Android) Honeycomb"), 0, "3", 0, 0 ]
236  
-  , [ new RegExp("(Silk-Accelerated=[a-z]{4,5})"), "Android", 0, 0, 0 ]
237  
-  , [ new RegExp("(Windows Phone 6\\.5)"), 0, 0, 0, 0 ]
238  
-  , [ new RegExp("(Windows (?:NT 5\\.2|NT 5\\.1))"), "Windows XP", 0, 0, 0 ]
239  
-  , [ new RegExp("(XBLWP7)"), "Windows Phone OS", 0, 0, 0 ]
240  
-  , [ new RegExp("(Windows NT 6\\.1)"), "Windows 7", 0, 0, 0 ]
241  
-  , [ new RegExp("(Windows NT 6\\.0)"), "Windows Vista", 0, 0, 0 ]
242  
-  , [ new RegExp("(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\\.0|Windows Vista|Windows 2000)"), 0, 0, 0, 0 ]
243  
-  , [ new RegExp("(Windows NT 6\\.2; ARM;)"), "Windows RT", 0, 0, 0 ]
244  
-  , [ new RegExp("(Windows NT 6\\.2)"), "Windows 8", 0, 0, 0 ]
245  
-  , [ new RegExp("(Windows NT 5\\.0)"), "Windows 2000", 0, 0, 0 ]
246  
-  , [ new RegExp("(Windows Phone OS) (\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
247  
-  , [ new RegExp("(Windows ?Mobile)"), "Windows Mobile", 0, 0, 0 ]
248  
-  , [ new RegExp("(WinNT4.0)"), "Windows NT 4.0", 0, 0, 0 ]
249  
-  , [ new RegExp("(Win98)"), "Windows 98", 0, 0, 0 ]
250  
-  , [ new RegExp("(Tizen)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
251  
-  , [ new RegExp("(Mac OS X) (\\d+)[_.](\\d+)(?:[_.](\\d+))?"), 0, 0, 0, 0 ]
252  
-  , [ new RegExp("(?:PPC|Intel) (Mac OS X)"), 0, 0, 0, 0 ]
253  
-  , [ new RegExp("(CPU OS|iPhone OS) (\\d+)_(\\d+)(?:_(\\d+))?"), "iOS", 0, 0, 0 ]
254  
-  , [ new RegExp("(iPhone|iPad|iPod); Opera"), "iOS", 0, 0, 0 ]
255  
-  , [ new RegExp("(iPhone|iPad|iPod).*Mac OS X.*Version/(\\d+)\\.(\\d+)"), "iOS", 0, 0, 0 ]
256  
-  , [ new RegExp("(AppleTV)/(\\d+)\\.(\\d+)"), "ATV OS X", "$1", "$2", 0 ]
257  
-  , [ new RegExp("(CrOS) [a-z0-9_]+ (\\d+)\\.(\\d+)(?:\\.(\\d+))?"), "Chrome OS", 0, 0, 0 ]
258  
-  , [ new RegExp("(Debian)-(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), 0, 0, 0, 0 ]
259  
-  , [ new RegExp("(Linux Mint)(?:/(\\d+))?"), 0, 0, 0, 0 ]
260  
-  , [ new RegExp("(Mandriva)(?: Linux)?/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), 0, 0, 0, 0 ]
261  
-  , [ new RegExp("(Symbian[Oo][Ss])/(\\d+)\\.(\\d+)"), "Symbian OS", 0, 0, 0 ]
262  
-  , [ new RegExp("(Symbian/3).+NokiaBrowser/7\\.3"), "Symbian^3 Anna", 0, 0, 0 ]
263  
-  , [ new RegExp("(Symbian/3).+NokiaBrowser/7\\.4"), "Symbian^3 Belle", 0, 0, 0 ]
264  
-  , [ new RegExp("(Symbian/3)"), "Symbian^3", 0, 0, 0 ]
265  
-  , [ new RegExp("(Series 60|SymbOS|S60)"), "Symbian OS", 0, 0, 0 ]
266  
-  , [ new RegExp("(MeeGo)"), 0, 0, 0, 0 ]
267  
-  , [ new RegExp("Symbian [Oo][Ss]"), "Symbian OS", 0, 0, 0 ]
268  
-  , [ new RegExp("(BB10);.+Version/(\\d+)\\.(\\d+)\\.(\\d+)"), "BlackBerry OS", 0, 0, 0 ]
269  
-  , [ new RegExp("(Black[Bb]erry)[0-9a-z]+/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), "BlackBerry OS", 0, 0, 0 ]
270  
-  , [ new RegExp("(Black[Bb]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), "BlackBerry OS", 0, 0, 0 ]
271  
-  , [ new RegExp("(RIM Tablet OS) (\\d+)\\.(\\d+)\\.(\\d+)"), "BlackBerry Tablet OS", 0, 0, 0 ]
272  
-  , [ new RegExp("(Play[Bb]ook)"), "BlackBerry Tablet OS", 0, 0, 0 ]
273  
-  , [ new RegExp("(Black[Bb]erry)"), "Blackberry OS", 0, 0, 0 ]
274  
-  , [ new RegExp("(GoogleTV) (\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
275  
-  , [ new RegExp("(GoogleTV)\\/\\d+"), 0, 0, 0, 0 ]
276  
-  , [ new RegExp("(webOS|hpwOS)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), "webOS", 0, 0, 0 ]
277  
-  , [ new RegExp("(SUSE|Fedora|Red Hat|PCLinuxOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
278  
-  , [ new RegExp("(SUSE|Fedora|Red Hat|Puppy|PCLinuxOS|CentOS)/(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
279  
-  , [ new RegExp("(Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Red Hat|Slackware)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
280  
-  , [ new RegExp("(PlayStation Vita) (\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
281  
-  , [ new RegExp("(Windows|OpenBSD|FreeBSD|NetBSD|Ubuntu|Kubuntu|Android|Arch Linux|CentOS|WeTab|Slackware)"), 0, 0, 0, 0 ]
282  
-  , [ new RegExp("(Linux)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ]
283  
-  , [ new RegExp("(Linux|BSD)"), 0, 0, 0, 0 ]
284  
-  , [ new RegExp("(Red Hat)"), 0, 0, 0, 0 ]
285  
-];
  5
+parser = Object.create(null);
  6
+parser[0] = new RegExp("^(Opera)/(\\d+)\\.(\\d+) \\(Nintendo Wii");
  7
+parser[1] = "Wii";
  8
+parser[2] = 0;
  9
+parser[3] = 0;
  10
+parser[4] = 0;
  11
+exports.browser[0] = parser;
  12
+parser = Object.create(null);
  13
+parser[0] = new RegExp("(SeaMonkey|Camino)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)");
  14
+parser[1] = 0;
  15
+parser[2] = 0;
  16
+parser[3] = 0;
  17
+parser[4] = 0;
  18
+exports.browser[1] = parser;
  19
+parser = Object.create(null);
  20
+parser[0] = new RegExp("(Pale[Mm]oon)/(\\d+)\\.(\\d+)\\.?(\\d+)?");
  21
+parser[1] = "Pale Moon (Firefox Variant)";
  22
+parser[2] = 0;
  23
+parser[3] = 0;
  24
+parser[4] = 0;
  25
+exports.browser[2] = parser;
  26
+parser = Object.create(null);
  27
+parser[0] = new RegExp("(Fennec)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)");
  28
+parser[1] = "Firefox Mobile";
  29
+parser[2] = 0;
  30
+parser[3] = 0;
  31
+parser[4] = 0;
  32
+exports.browser[3] = parser;
  33
+parser = Object.create(null);
  34
+parser[0] = new RegExp("(Fennec)/(\\d+)\\.(\\d+)(pre)");
  35
+parser[1] = "Firefox Mobile";
  36
+parser[2] = 0;
  37
+parser[3] = 0;
  38
+parser[4] = 0;
  39
+exports.browser[4] = parser;
  40
+parser = Object.create(null);
  41
+parser[0] = new RegExp("(Fennec)/(\\d+)\\.(\\d+)");
  42
+parser[1] = "Firefox Mobile";
  43
+parser[2] = 0;
  44
+parser[3] = 0;
  45
+parser[4] = 0;
  46
+exports.browser[5] = parser;
  47
+parser = Object.create(null);
  48
+parser[0] = new RegExp("Mobile.*(Firefox)/(\\d+)\\.(\\d+)");
  49
+parser[1] = "Firefox Mobile";
  50
+parser[2] = 0;
  51
+parser[3] = 0;
  52
+parser[4] = 0;
  53
+exports.browser[6] = parser;
  54
+parser = Object.create(null);
  55
+parser[0] = new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)");
  56
+parser[1] = "Firefox ($1)";
  57
+parser[2] = 0;
  58
+parser[3] = 0;
  59
+parser[4] = 0;
  60
+exports.browser[7] = parser;
  61
+parser = Object.create(null);
  62
+parser[0] = new RegExp("(Firefox)/(\\d+)\\.(\\d+)(a\\d+[a-z]*)");
  63
+parser[1] = "Firefox Alpha";
  64
+parser[2] = 0;
  65
+parser[3] = 0;
  66
+parser[4] = 0;
  67
+exports.browser[8] = parser;
  68
+parser = Object.create(null);
  69
+parser[0] = new RegExp("(Firefox)/(\\d+)\\.(\\d+)(b\\d+[a-z]*)");
  70
+parser[1] = "Firefox Beta";
  71
+parser[2] = 0;
  72
+parser[3] = 0;
  73
+parser[4] = 0;
  74
+exports.browser[9] = parser;
  75
+parser = Object.create(null);
  76
+parser[0] = new RegExp("(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(a\\d+[a-z]*)");
  77
+parser[1] = "Firefox Alpha";
  78
+parser[2] = 0;
  79
+parser[3] = 0;
  80
+parser[4] = 0;
  81
+exports.browser[10] = parser;
  82
+parser = Object.create(null);
  83
+parser[0] = new RegExp("(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(b\\d+[a-z]*)");
  84
+parser[1] = "Firefox Beta";
  85
+parser[2] = 0;
  86
+parser[3] = 0;
  87
+parser[4] = 0;
  88
+exports.browser[11] = parser;
  89
+parser = Object.create(null);
  90
+parser[0] = new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?");
  91
+parser[1] = "Firefox ($1)";
  92
+parser[2] = 0;
  93
+parser[3] = 0;
  94
+parser[4] = 0;
  95
+exports.browser[12] = parser;
  96
+parser = Object.create(null);
  97
+parser[0] = new RegExp("(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)");
  98
+parser[1] = "MicroB";
  99
+parser[2] = 0;
  100
+parser[3] = 0;
  101
+parser[4] = 0;
  102
+exports.browser[13] = parser;
  103
+parser = Object.create(null);
  104
+parser[0] = new RegExp("(MozillaDeveloperPreview)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?");
  105
+parser[1] = 0;
  106
+parser[2] = 0;
  107
+parser[3] = 0;
  108
+parser[4] = 0;
  109
+exports.browser[14] = parser;
  110
+parser = Object.create(null);
  111
+parser[0] = new RegExp("(Flock)/(\\d+)\\.(\\d+)(b\\d+?)");
  112
+parser[1] = 0;
  113
+parser[2] = 0;
  114
+parser[3] = 0;
  115
+parser[4] = 0;
  116
+exports.browser[15] = parser;
  117
+parser = Object.create(null);
  118
+parser[0] = new RegExp("(RockMelt)/(\\d+)\\.(\\d+)\\.(\\d+)");
  119
+parser[1] = 0;
  120
+parser[2] = 0;
  121
+parser[3] = 0;
  122
+parser[4] = 0;
  123
+exports.browser[16] = parser;
  124
+parser = Object.create(null);
  125
+parser[0] = new RegExp("(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)");
  126
+parser[1] = "Netscape";
  127
+parser[2] = 0;
  128
+parser[3] = 0;
  129
+parser[4] = 0;
  130
+exports.browser[17] = parser;
  131
+parser = Object.create(null);
  132
+parser[0] = new RegExp("(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)");
  133
+parser[1] = "Netscape";
  134
+parser[2] = 0;
  135
+parser[3] = 0;
  136
+parser[4] = 0;
  137
+exports.browser[18] = parser;
  138
+parser = Object.create(null);
  139
+parser[0] = new RegExp("(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)");
  140
+parser[1] = "Netscape";
  141
+parser[2] = 0;
  142
+parser[3] = 0;
  143
+parser[4] = 0;
  144
+exports.browser[19] = parser;
  145
+parser = Object.create(null);
  146
+parser[0] = new RegExp("(MyIBrow)/(\\d+)\\.(\\d+)");
  147
+parser[1] = "My Internet Browser";
  148
+parser[2] = 0;
  149
+parser[3] = 0;
  150
+parser[4] = 0;
  151
+exports.browser[20] = parser;
  152
+parser = Object.create(null);
  153
+parser[0] = new RegExp("(Opera Tablet).*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?");
  154
+parser[1] = 0;
  155
+parser[2] = 0;
  156
+parser[3] = 0;
  157
+parser[4] = 0;
  158
+exports.browser[21] = parser;
  159
+parser = Object.create(null);
  160
+parser[0] = new RegExp("(Opera)/.+Opera Mobi.+Version/(\\d+)\\.(\\d+)");
  161
+parser[1] = "Opera Mobile";
  162
+parser[2] = 0;
  163
+parser[3] = 0;
  164
+parser[4] = 0;
  165
+exports.browser[22] = parser;
  166
+parser = Object.create(null);
  167
+parser[0] = new RegExp("Opera Mobi");
  168
+parser[1] = "Opera Mobile";
  169
+parser[2] = 0;
  170
+parser[3] = 0;
  171
+parser[4] = 0;
  172
+exports.browser[23] = parser;
  173
+parser = Object.create(null);
  174
+parser[0] = new RegExp("(Opera Mini)/(\\d+)\\.(\\d+)");
  175
+parser[1] = 0;
  176
+parser[2] = 0;
  177
+parser[3] = 0;
  178
+parser[4] = 0;
  179
+exports.browser[24] = parser;
  180
+parser = Object.create(null);
  181
+parser[0] = new RegExp("(Opera Mini)/att/(\\d+)\\.(\\d+)");
  182
+parser[1] = 0;
  183
+parser[2] = 0;
  184
+parser[3] = 0;
  185
+parser[4] = 0;
  186
+exports.browser[25] = parser;
  187
+parser = Object.create(null);
  188
+parser[0] = new RegExp("(Opera)/9.80.*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?");
  189
+parser[1] = 0;
  190
+parser[2] = 0;
  191
+parser[3] = 0;
  192
+parser[4] = 0;
  193
+exports.browser[26] = parser;
  194
+parser = Object.create(null);
  195
+parser[0] = new RegExp("(webOSBrowser)/(\\d+)\\.(\\d+)");
  196
+parser[1] = 0;
  197
+parser[2] = 0;
  198
+parser[3] = 0;
  199
+parser[4] = 0;
  200
+exports.browser[27] = parser;
  201
+parser = Object.create(null);
  202
+parser[0] = new RegExp("(webOS)/(\\d+)\\.(\\d+)");
  203
+parser[1] = "webOSBrowser";
  204
+parser[2] = 0;
  205
+parser[3] = 0;
  206
+parser[4] = 0;
  207
+exports.browser[28] = parser;
  208
+parser = Object.create(null);
  209
+parser[0] = new RegExp("(wOSBrowser).+TouchPad/(\\d+)\\.(\\d+)");
  210
+parser[1] = "webOS TouchPad";
  211
+parser[2] = 0;
  212
+parser[3] = 0;
  213
+parser[4] = 0;
  214
+exports.browser[29] = parser;
  215
+parser = Object.create(null);
  216
+parser[0] = new RegExp("(luakit)");
  217
+parser[1] = "LuaKit";
  218
+parser[2] = 0;
  219
+parser[3] = 0;
  220
+parser[4] = 0;
  221
+exports.browser[30] = parser;
  222
+parser = Object.create(null);
  223
+parser[0] = new RegExp("(Lightning)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)");
  224
+parser[1] = 0;
  225
+parser[2] = 0;
  226
+parser[3] = 0;
  227
+parser[4] = 0;
  228
+exports.browser[31] = parser;
  229
+parser = Object.create(null);
  230
+parser[0] = new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)");
  231
+parser[1] = "Swiftfox";
  232
+parser[2] = 0;
  233
+parser[3] = 0;
  234
+parser[4] = 0;
  235
+exports.browser[32] = parser;
  236
+parser = Object.create(null);
  237
+parser[0] = new RegExp("(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)");
  238
+parser[1] = "Swiftfox";
  239
+parser[2] = 0;
  240
+parser[3] = 0;
  241
+parser[4] = 0;
  242
+exports.browser[33] = parser;
  243
+parser = Object.create(null);
  244
+parser[0] = new RegExp("(rekonq)/(\\d+)\\.(\\d+) Safari");
  245
+parser[1] = "Rekonq";
  246
+parser[2] = 0;
  247
+parser[3] = 0;
  248
+parser[4] = 0;
  249
+exports.browser[34] = parser;
  250
+parser = Object.create(null);
  251
+parser[0] = new RegExp("rekonq");
  252
+parser[1] = "Rekonq";
  253
+parser[2] = 0;
  254
+parser[3] = 0;
  255
+parser[4] = 0;
  256
+exports.browser[35] = parser;
  257
+parser = Object.create(null);
  258
+parser[0] = new RegExp("(conkeror|Conkeror)/(\\d+)\\.(\\d+)\\.?(\\d+)?");
  259
+parser[1] = "Conkeror";
  260
+parser[2] = 0;
  261
+parser[3] = 0;
  262
+parser[4] = 0;
  263
+exports.browser[36] = parser;
  264
+parser = Object.create(null);
  265
+parser[0] = new RegExp("(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)");
  266
+parser[1] = "Konqueror";
  267
+parser[2] = 0;
  268
+parser[3] = 0;
  269
+parser[4] = 0;
  270
+exports.browser[37] = parser;
  271
+parser = Object.create(null);
  272
+parser[0] = new RegExp("(WeTab)-Browser");
  273
+parser[1] = 0;
  274
+parser[2] = 0;
  275
+parser[3] = 0;
  276
+parser[4] = 0;
  277
+exports.browser[38] = parser;
  278
+parser = Object.create(null);
  279
+parser[0] = new RegExp("(Comodo_Dragon)/(\\d+)\\.(\\d+)\\.(\\d+)");
  280
+parser[1] = "Comodo Dragon";
  281
+parser[2] = 0;
  282
+parser[3] = 0;
  283
+parser[4] = 0;
  284
+exports.browser[39] = parser;
  285
+parser = Object.create(null);
  286
+parser[0] = new RegExp("(YottaaMonitor|BrowserMob|HttpMonitor|YandexBot|Slurp|BingPreview|PagePeeker|ThumbShotsBot|WebThumb|URL2PNG|ZooShot|GomezA|Catchpoint bot|Willow Internet Crawler|Google SketchUp|Read%20Later)");
  287
+parser[1] = 0;
  288
+parser[2] = 0;
  289
+parser[3] = 0;
  290
+parser[4] = 0;
  291
+exports.browser[40] = parser;
  292
+parser = Object.create(null);
  293
+parser[0] = new RegExp("(Symphony) (\\d+).(\\d+)");
  294
+parser[1] = 0;
  295
+parser[2] = 0;
  296
+parser[3] = 0;
  297
+parser[4] = 0;
  298
+exports.browser[41] = parser;
  299
+parser = Object.create(null);
  300
+parser[0] = new RegExp("(Minimo)");
  301
+parser[1] = 0;
  302
+parser[2] = 0;
  303
+parser[3] = 0;
  304
+parser[4] = 0;
  305
+exports.browser[42] = parser;
  306
+parser = Object.create(null);
  307
+parser[0] = new RegExp("(CrMo)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)");
  308
+parser[1] = "Chrome Mobile";
  309
+parser[2] = 0;
  310
+parser[3] = 0;
  311
+parser[4] = 0;
  312
+exports.browser[43] = parser;
  313
+parser = Object.create(null);
  314
+parser[0] = new RegExp("(CriOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)");
  315
+parser[1] = "Chrome Mobile iOS";
  316
+parser[2] = 0;
  317
+parser[3] = 0;
  318
+parser[4] = 0;
  319
+exports.browser[44] = parser;
  320
+parser = Object.create(null);
  321
+parser[0] = new RegExp("(Chrome)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+) Mobile");
  322
+parser[1] = "Chrome Mobile";
  323
+parser[2] = 0;
  324
+parser[3] = 0;
  325
+parser[4] = 0;
  326
+exports.browser[45] = parser;
  327
+parser = Object.create(null);
  328
+parser[0] = new RegExp("(chromeframe)/(\\d+)\\.(\\d+)\\.(\\d+)");
  329
+parser[1] = "Chrome Frame";
  330
+parser[2] = 0;
  331
+parser[3] = 0;
  332
+parser[4] = 0;
  333
+exports.browser[46] = parser;
  334
+parser = Object.create(null);
  335
+parser[0] = new RegExp("(UC Browser)(\\d+)\\.(\\d+)\\.(\\d+)");
  336
+parser[1] = 0;
  337
+parser[2] = 0;
  338
+parser[3] = 0;
  339
+parser[4] = 0;
  340
+exports.browser[47] = parser;
  341
+parser = Object.create(null);
  342
+parser[0] = new RegExp("(SLP Browser)/(\\d+)\\.(\\d+)");
  343
+parser[1] = "Tizen Browser";
  344
+parser[2] = 0;
  345
+parser[3] = 0;
  346
+parser[4] = 0;
  347
+exports.browser[48] = parser;
  348
+parser = Object.create(null);
  349
+parser[0] = new RegExp("(Epiphany)/(\\d+)\\.(\\d+).(\\d+)");
  350
+parser[1] = 0;
  351
+parser[2] = 0;
  352
+parser[3] = 0;
  353
+parser[4] = 0;
  354
+exports.browser[49] = parser;
  355
+parser = Object.create(null);
  356
+parser[0] = new RegExp("(SE 2\\.X) MetaSr (\\d+)\\.(\\d+)");
  357
+parser[1] = "Sogou Explorer";
  358
+parser[2] = 0;
  359
+parser[3] = 0;
  360
+parser[4] = 0;
  361
+exports.browser[50] = parser;
  362
+parser = Object.create(null);
  363
+parser[0] = new RegExp("(FlyFlow)/(\\d+)\\.(\\d+)");
  364
+parser[1] = "Baidu Explorer";
  365
+parser[2] = 0;
  366
+parser[3] = 0;
  367
+parser[4] = 0;
  368
+exports.browser[51] = parser;
  369
+parser = Object.create(null);
  370
+parser[0] = new RegExp("(Pingdom.com_bot_version_)(\\d+)\\.(\\d+)");
  371
+parser[1] = "PingdomBot";
  372
+parser[2] = 0;
  373
+parser[3] = 0;
  374
+parser[4] = 0;
  375
+exports.browser[52] = parser;
  376
+parser = Object.create(null);
  377
+parser[0] = new RegExp("(facebookexternalhit)/(\\d+)\\.(\\d+)");
  378
+parser[1] = "FacebookBot";
  379
+parser[2] = 0;
  380
+parser[3] = 0;
  381
+parser[4] = 0;
  382
+exports.browser[53] = parser;
  383
+parser = Object.create(null);
  384
+parser[0] = new RegExp("(Twitterbot)/(\\d+)\\.(\\d+)");
  385
+parser[1] = "TwitterBot";
  386
+parser[2] = 0;
  387
+parser[3] = 0;
  388
+parser[4] = 0;
  389
+exports.browser[54] = parser;
  390
+parser = Object.create(null);
  391
+parser[0] = new RegExp("(PyAMF)/(\\d+)\\.(\\d+)\\.(\\d+)");
  392
+parser[1] = 0;
  393
+parser[2] = 0;
  394
+parser[3] = 0;
  395
+parser[4] = 0;
  396
+exports.browser[55] = parser;
  397
+parser = Object.create(null);
  398
+parser[0] = new RegExp("(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|WebPilot|Vodafone|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\\.Browser|Bunjaloo|Google Earth|Raven for Mac)/(\\d+)\\.(\\d+)\\.(\\d+)");
  399
+parser[1] = 0;
  400
+parser[2] = 0;
  401
+parser[3] = 0;
  402
+parser[4] = 0;
  403
+exports.browser[56] = parser;
  404
+parser = Object.create(null);
  405
+parser[0] = new RegExp("(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser)/(\\d+)\\.(\\d+)");
  406
+parser[1] = 0;
  407
+parser[2] = 0;
  408
+parser[3] = 0;
  409
+parser[4] = 0;
  410
+exports.browser[57] = parser;
  411
+parser = Object.create(null);
  412
+parser[0] = new RegExp("(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)");
  413
+parser[1] = 0;
  414
+parser[2] = 0;
  415
+parser[3] = 0;
  416
+parser[4] = 0;
  417
+exports.browser[58] = parser;
  418
+parser = Object.create(null);
  419
+parser[0] = new RegExp("(iCab|Lunascape|Opera|Android|Jasmine|Polaris|BREW) (\\d+)\\.(\\d+)\\.?(\\d+)?");
  420
+parser[1] = 0;
  421
+parser[2] = 0;
  422
+parser[3] = 0;
  423
+parser[4] = 0;
  424
+exports.browser[59] = parser;
  425
+parser = Object.create(null);
  426
+parser[0] = new RegExp("(Kindle)/(\\d+)\\.(\\d+)");
  427
+parser[1] = 0;
  428
+parser[2] = 0;
  429
+parser[3] = 0;
  430
+parser[4] = 0;
  431
+exports.browser[60] = parser;
  432
+parser = Object.create(null);
  433
+parser[0] = new RegExp("(Android) Donut");
  434
+parser[1] = 0;
  435
+parser[2] = "1";
  436
+parser[3] = "2";
  437
+parser[4] = 0;
  438
+exports.browser[61] = parser;
  439
+parser = Object.create(null);
  440
+parser[0] = new RegExp("(Android) Eclair");
  441
+parser[1] = 0;
  442
+parser[2] = "2";
  443
+parser[3] = "1";
  444
+parser[4] = 0;
  445
+exports.browser[62] = parser;
  446
+parser = Object.create(null);
  447
+parser[0] = new RegExp("(Android) Froyo");
  448
+parser[1] = 0;
  449
+parser[2] = "2";
  450
+parser[3] = "2";
  451
+parser[4] = 0;
  452
+exports.browser[63] = parser;
  453
+parser = Object.create(null);
  454
+parser[0] = new RegExp("(Android) Gingerbread");
  455
+parser[1] = 0;
  456
+parser[2] = "2";
  457
+parser[3] = "3";
  458
+parser[4] = 0;
  459
+exports.browser[64] = parser;
  460
+parser = Object.create(null);
  461
+parser[0] = new RegExp("(Android) Honeycomb");
  462
+parser[1] = 0;
  463
+parser[2] = "3";
  464
+parser[3] = 0;
  465
+parser[4] = 0;
  466
+exports.browser[65] = parser;
  467
+parser = Object.create(null);
  468
+parser[0] = new RegExp("(IEMobile)[ /](\\d+)\\.(\\d+)");
  469
+parser[1] = "IE Mobile";
  470
+parser[2] = 0;
  471
+parser[3] = 0;
  472
+parser[4] = 0;
  473
+exports.browser[66] = parser;
  474
+parser = Object.create(null);
  475
+parser[0] = new RegExp("(MSIE) (\\d+)\\.(\\d+).*XBLWP7");
  476
+parser[1] = "IE Large Screen";
  477
+parser[2] = 0;
  478
+parser[3] = 0;
  479
+parser[4] = 0;
  480
+exports.browser[67] = parser;
  481
+parser = Object.create(null);
  482
+parser[0] = new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)");
  483
+parser[1] = 0;
  484
+parser[2] = 0;
  485
+parser[3] = 0;
  486
+parser[4] = 0;
  487
+exports.browser[68] = parser;
  488
+parser = Object.create(null);
  489
+parser[0] = new RegExp("(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?");
  490
+parser[1] = 0;
  491
+parser[2] = 0;
  492
+parser[3] = 0;
  493
+parser[4] = 0;
  494
+exports.browser[69] = parser;
  495
+parser = Object.create(null);
  496
+parser[0] = new RegExp("(Obigo)InternetBrowser");
  497
+parser[1] = 0;
  498
+parser[2] = 0;
  499
+parser[3] = 0;
  500
+parser[4] = 0;
  501
+exports.browser[70] = parser;
  502
+parser = Object.create(null);
  503
+parser[0] = new RegExp("(Obigo)\\-Browser");
  504
+parser[1] = 0;
  505
+parser[2] = 0;
  506
+parser[3] = 0;
  507
+parser[4] = 0;
  508
+exports.browser[71] = parser;
  509
+parser = Object.create(null);
  510
+parser[0] = new RegExp("(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?");
  511
+parser[1] = 0;
  512
+parser[2] = 0;
  513
+parser[3] = 0;
  514
+parser[4] = 0;
  515
+exports.browser[72] = parser;
  516
+parser = Object.create(null);
  517
+parser[0] = new RegExp("(MAXTHON|Maxthon) (\\d+)\\.(\\d+)");
  518
+parser[1] = "Maxthon";
  519
+parser[2] = 0;
  520
+parser[3] = 0;
  521
+parser[4] = 0;
  522
+exports.browser[73] = parser;
  523
+parser = Object.create(null);
  524
+parser[0] = new RegExp("(Maxthon|MyIE2|Uzbl|Shiira)");
  525
+parser[1] = 0;
  526
+parser[2] = "0";
  527
+parser[3] = 0;
  528
+parser[4] = 0;
  529
+exports.browser[74] = parser;
  530
+parser = Object.create(null);
  531
+parser[0] = new RegExp("(PLAYSTATION) (\\d+)");
  532
+parser[1] = "PlayStation";
  533
+parser[2] = 0;
  534
+parser[3] = 0;
  535
+parser[4] = 0;
  536
+exports.browser[75] = parser;
  537
+parser = Object.create(null);
  538
+parser[0] = new RegExp("(PlayStation Portable)[^\\d]+(\\d+).(\\d+)");
  539
+parser[1] = 0;
  540
+parser[2] = 0;
  541
+parser[3] = 0;
  542
+parser[4] = 0;
  543
+exports.browser[76] = parser;
  544
+parser = Object.create(null);
  545
+parser[0] = new RegExp("(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)");
  546
+parser[1] = 0;
  547
+parser[2] = 0;
  548
+parser[3] = 0;
  549
+parser[4] = 0;
  550
+exports.browser[77] = parser;
  551
+parser = Object.create(null);
  552
+parser[0] = new RegExp("(POLARIS)/(\\d+)\\.(\\d+)");
  553
+parser[1] = "Polaris";
  554
+parser[2] = 0;
  555
+parser[3] = 0;
  556
+parser[4] = 0;
  557
+exports.browser[78] = parser;
  558
+parser = Object.create(null);
  559
+parser[0] = new RegExp("(Embider)/(\\d+)\\.(\\d+)");
  560
+parser[1] = "Polaris";
  561
+parser[2] = 0;
  562
+parser[3] = 0;
  563
+parser[4] = 0;
  564
+exports.browser[79] = parser;
  565
+parser = Object.create(null);
  566
+parser[0] = new RegExp("(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)");
  567
+parser[1] = "Bon Echo";
  568
+parser[2] = 0;
  569
+parser[3] = 0;
  570
+parser[4] = 0;
  571
+exports.browser[80] = parser;
  572
+parser = Object.create(null);
  573
+parser[0] = new RegExp("(iPod).+Version/(\\d+)\\.(\\d+)\\.(\\d+)");
  574
+parser[1] = "Mobile Safari";
  575
+parser[2] = 0;
  576
+parser[3] = 0;
  577
+parser[4] = 0;
  578
+exports.browser[81] = parser;
  579
+parser = Object.create(null);
  580
+parser[0] = new RegExp("(iPod).*Version/(\\d+)\\.(\\d+)");
  581
+parser[1] = "Mobile Safari";
  582
+parser[2] = 0;
  583
+parser[3] = 0;
  584
+parser[4] = 0;
  585
+exports.browser[82] = parser;
  586
+parser = Object.create(null);
  587
+parser[0] = new RegExp("(iPhone).*Version/(\\d+)\\.(\\d+)\\.(\\d+)");
  588
+parser[1] = "Mobile Safari";
  589
+parser[2] = 0;
  590
+parser[3] = 0;
  591
+parser[4] = 0;
  592
+exports.browser[83] = parser;
  593
+parser = Object.create(null);
  594
+parser[0] = new RegExp("(iPhone).*Version/(\\d+)\\.(\\d+)");
  595
+parser[1] = "Mobile Safari";
  596
+parser[2] = 0;
  597
+parser[3] = 0;
  598
+parser[4] = 0;
  599
+exports.browser[84] = parser;
  600
+parser = Object.create(null);
  601
+parser[0] = new RegExp("(iPad).*Version/(\\d+)\\.(\\d+)\\.(\\d+)");
  602
+parser[1] = "Mobile Safari";
  603
+parser[2] = 0;
  604
+parser[3] = 0;
  605
+parser[4] = 0;
  606
+exports.browser[85] = parser;
  607
+parser = Object.create(null);
  608
+parser[0] = new RegExp("(iPad).*Version/(\\d+)\\.(\\d+)");
  609
+parser[1] = "Mobile Safari";
  610
+parser[2] = 0;
  611
+parser[3] = 0;
  612
+parser[4] = 0;
  613
+exports.browser[86] = parser;
  614
+parser = Object.create(null);
  615
+parser[0] = new RegExp("(iPod|iPhone|iPad);.*CPU.*OS (\\d+)(?:_\\d+)?_(\\d+).*Mobile");
  616
+parser[1] = "Mobile Safari";
  617
+parser[2] = 0;
  618
+parser[3] = 0;
  619
+parser[4] = 0;
  620
+exports.browser[87] = parser;
  621
+parser = Object.create(null);
  622
+parser[0] = new RegExp("(iPod|iPhone|iPad)");
  623
+parser[1] = "Mobile Safari";
  624
+parser[2] = 0;
  625
+parser[3] = 0;
  626
+parser[4] = 0;
  627
+exports.browser[88] = parser;
  628
+parser = Object.create(null);
  629
+parser[0] = new RegExp("(AvantGo) (\\d+).(\\d+)");
  630
+parser[1] = 0;
  631
+parser[2] = 0;
  632
+parser[3] = 0;
  633
+parser[4] = 0;
  634
+exports.browser[89] = parser;
  635
+parser = Object.create(null);
  636
+parser[0] = new RegExp("(Avant)");
  637
+parser[1] = 0;
  638
+parser[2] = "1";
  639
+parser[3] = 0;
  640
+parser[4] = 0;
  641
+exports.browser[90] = parser;
  642
+parser = Object.create(null);
  643
+parser[0] = new RegExp("(QtCarBrowser)");
  644
+parser[1] = 0;
  645
+parser[2] = "1";
  646
+parser[3] = 0;
  647
+parser[4] = 0;
  648
+exports.browser[91] = parser;
  649
+parser = Object.create(null);
  650
+parser[0] = new RegExp("^(Nokia)");
  651
+parser[1] = "Nokia Services (WAP) Browser";
  652
+parser[2] = 0;
  653
+parser[3] = 0;
  654
+parser[4] = 0;
  655
+exports.browser[92] = parser;
  656
+parser = Object.create(null);
  657
+parser[0] = new RegExp("(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)\\.(\\d+)");
  658
+parser[1] = 0;
  659
+parser[2] = 0;
  660
+parser[3] = 0;
  661
+parser[4] = 0;
  662
+exports.browser[93] = parser;
  663
+parser = Object.create(null);
  664
+parser[0] = new RegExp("(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)");
  665
+parser[1] = 0;
  666
+parser[2] = 0;
  667
+parser[3] = 0;
  668
+parser[4] = 0;
  669
+exports.browser[94] = parser;
  670
+parser = Object.create(null);
  671
+parser[0] = new RegExp("(NokiaBrowser)/(\\d+)\\.(\\d+)");
  672
+parser[1] = 0;
  673
+parser[2] = 0;
  674
+parser[3] = 0;
  675
+parser[4] = 0;
  676
+exports.browser[95] = parser;
  677
+parser = Object.create(null);
  678
+parser[0] = new RegExp("(BrowserNG)/(\\d+)\\.(\\d+).(\\d+)");
  679
+parser[1] = "NokiaBrowser";
  680
+parser[2] = 0;
  681
+parser[3] = 0;
  682
+parser[4] = 0;
  683
+exports.browser[96] = parser;
  684
+parser = Object.create(null);
  685
+parser[0] = new RegExp("(Series60)/5\\.0");
  686
+parser[1] = "NokiaBrowser";
  687
+parser[2] = "7";
  688
+parser[3] = "0";
  689
+parser[4] = 0;
  690
+exports.browser[97] = parser;
  691
+parser = Object.create(null);
  692
+parser[0] = new RegExp("(Series60)/(\\d+)\\.(\\d+)");
  693
+parser[1] = "Nokia OSS Browser";
  694
+parser[2] = 0;
  695
+parser[3] = 0;
  696
+parser[4] = 0;
  697
+exports.browser[98] = parser;
  698
+parser = Object.create(null);
  699
+parser[0] = new RegExp("(S40OviBrowser)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)");
  700
+parser[1] = "Nokia Series 40 Ovi Browser";
  701
+parser[2] = 0;
  702
+parser[3] = 0;
  703
+parser[4] = 0;
  704
+exports.browser[99] = parser;
  705
+parser = Object.create(null);
  706
+parser[0] = new RegExp("(Nokia)[EN]?(\\d+)");
  707
+parser[1] = 0;
  708
+parser[2] = 0;
  709
+parser[3] = 0;
  710
+parser[4] = 0;
  711
+exports.browser[100] = parser;
  712
+parser = Object.create(null);
  713
+parser[0] = new RegExp("(BB10);");
  714
+parser[1] = "Blackberry WebKit";
  715
+parser[2] = 0;
  716
+parser[3] = 0;
  717
+parser[4] = 0;
  718
+exports.browser[101] = parser;
  719
+parser = Object.create(null);
  720
+parser[0] = new RegExp("(PlayBook).+RIM Tablet OS (\\d+)\\.(\\d+)\\.(\\d+)");
  721
+parser[1] = "Blackberry WebKit";
  722
+parser[2] = 0;
  723
+parser[3] = 0;
  724
+parser[4] = 0;
  725
+exports.browser[102] = parser;
  726
+parser = Object.create(null);
  727
+parser[0] = new RegExp("(Black[bB]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)");
  728
+parser[1] = "Blackberry WebKit";
  729
+parser[2] = 0;
  730
+parser[3] = 0;
  731
+parser[4] = 0;
  732
+exports.browser[103] = parser;
  733
+parser = Object.create(null);
  734
+parser[0] = new RegExp("(Black[bB]erry)\\s?(\\d+)");
  735
+parser[1] = "Blackberry";
  736
+parser[2] = 0;
  737
+parser[3] = 0;
  738
+parser[4] = 0;
  739
+exports.browser[104] = parser;
  740
+parser = Object.create(null);
  741
+parser[0] = new RegExp("(OmniWeb)/v(\\d+)\\.(\\d+)");
  742
+parser[1] = 0;
  743
+parser[2] = 0;
  744
+parser[3] = 0;
  745
+parser[4] = 0;
  746
+exports.browser[105] = parser;
  747
+parser = Object.create(null);
  748
+parser[0] = new RegExp("(Blazer)/(\\d+)\\.(\\d+)");
  749
+parser[1] = "Palm Blazer";
  750
+parser[2] = 0;
  751
+parser[3] = 0;
  752
+parser[4] = 0;
  753
+exports.browser[106] = parser;
  754
+parser = Object.create(null);
  755
+parser[0] = new RegExp("(Pre)/(\\d+)\\.(\\d+)");
  756
+parser[1] = "Palm Pre";
  757
+parser[2] = 0;
  758
+parser[3] = 0;
  759
+parser[4] = 0;
  760
+exports.browser[107] = parser;
  761
+parser = Object.create(null);
  762
+parser[0] = new RegExp("(Links) \\((\\d+)\\.(\\d+)");
  763
+parser[1] = 0;
  764
+parser[2] = 0;
  765
+parser[3] = 0;
  766
+parser[4] = 0;
  767
+exports.browser[108] = parser;
  768
+parser = Object.create(null);
  769
+parser[0] = new RegExp("(QtWeb) Internet Browser/(\\d+)\\.(\\d+)");
  770
+parser[1] = 0;
  771
+parser[2] = 0;
  772
+parser[3] = 0;
  773
+parser[4] = 0;
  774
+exports.browser[109] = parser;
  775
+parser = Object.create(null);
  776
+parser[0] = new RegExp("(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?");
  777
+parser[1] = "Amazon Silk";
  778
+parser[2] = 0;
  779
+parser[3] = 0;
  780
+parser[4] = 0;
  781
+exports.browser[110] = parser;
  782
+parser = Object.create(null);
  783
+parser[0] = new RegExp("(AppleWebKit)/(\\d+)\\.?(\\d+)?\\+ .* Safari");
  784
+parser[1] = "WebKit Nightly";
  785
+parser[2] = 0;
  786
+parser[3] = 0;
  787
+parser[4] = 0;
  788
+exports.browser[111] = parser;
  789
+parser = Object.create(null);
  790
+parser[0] = new RegExp("(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/");
  791
+parser[1] = "Safari";
  792
+parser[2] = 0;
  793
+parser[3] = 0;
  794
+parser[4] = 0;
  795
+exports.browser[112] = parser;
  796
+parser = Object.create(null);
  797
+parser[0] = new RegExp("(Safari)/\\d+");
  798
+parser[1] = 0;
  799
+parser[2] = 0;
  800
+parser[3] = 0;
  801
+parser[4] = 0;
  802
+exports.browser[113] = parser;
  803
+parser = Object.create(null);
  804
+parser[0] = new RegExp("(OLPC)/Update(\\d+)\\.(\\d+)");
  805
+parser[1] = 0;
  806
+parser[2] = 0;
  807
+parser[3] = 0;
  808
+parser[4] = 0;
  809
+exports.browser[114] = parser;
  810
+parser = Object.create(null);
  811
+parser[0] = new RegExp("(OLPC)/Update()\\.(\\d+)");
  812
+parser[1] = 0;
  813
+parser[2] = "0";
  814
+parser[3] = 0;
  815
+parser[4] = 0;
  816
+exports.browser[115] = parser;
  817
+parser = Object.create(null);
  818
+parser[0] = new RegExp("(SEMC\\-Browser)/(\\d+)\\.(\\d+)");
  819
+parser[1] = 0;
  820
+parser[2] = 0;
  821
+parser[3] = 0;
  822
+parser[4] = 0;
  823
+exports.browser[116] = parser;
  824
+parser = Object.create(null);
  825
+parser[0] = new RegExp("(Teleca)");
  826
+parser[1] = "Teleca Browser";
  827
+parser[2] = 0;
  828
+parser[3] = 0;
  829
+parser[4] = 0;
  830
+exports.browser[117] = parser;
  831
+parser = Object.create(null);
  832
+parser[0] = new RegExp("(MSIE) (\\d+)\\.(\\d+)");
  833
+parser[1] = "IE";
  834
+parser[2] = 0;
  835
+parser[3] = 0;
  836
+parser[4] = 0;
  837
+exports.browser[118] = parser;
  838
+parser = Object.create(null);
  839
+parser[0] = new RegExp("(Nintendo 3DS).* Version/(\\d+)\\.(\\d+)(?:\\.(\\w+))");
  840
+parser[1] = 0;
  841
+parser[2] = 0;
  842
+parser[3] = 0;
  843
+parser[4] = 0;
  844
+exports.browser[119] = parser;
  845
+parser = Object.create(null);
  846
+parser[0] = new RegExp("(python-requests)/(\\d+)\\.(\\d+)");
  847
+parser[1] = "Python Requests";
  848
+parser[2] = 0;
  849
+parser[3] = 0;
  850
+parser[4] = 0;
  851
+exports.browser[120] = parser;
  852
+parser = Object.create(null);
  853
+parser[0] = new RegExp("(Thunderbird)/(\\d+)\\.(\\d+)\\.?(\\d+)?");
  854
+parser[1] = 0;
  855
+parser[2] = 0;
  856
+parser[3] = 0;
  857
+parser[4] = 0;
  858
+exports.browser[121] = parser;
  859
+parser = Object.create(null);
  860
+parser[0] = new RegExp("(Wget)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)");
  861
+parser[1] = 0;
  862
+parser[2] = 0;
  863
+parser[3] = 0;
  864
+parser[4] = 0;
  865
+exports.browser[122] = parser;
  866
+parser = Object.create(null);
  867
+parser[0] = new RegExp("(curl)/(\\d+)\\.(\\d+)\\.(\\d+)");
  868
+parser[1] = "cURL";
  869
+parser[2] = 0;
  870
+parser[3] = 0;
  871
+parser[4] = 0;
  872
+exports.browser[123] = parser;
  873
+
  874
+exports.browser.length = 124;
  875
+
  876
+exports.device = Object.create(null);
  877
+
  878
+parser = Object.create(null);
  879
+parser[0] = new RegExp("HTC ([A-Z][a-z0-9]+) Build");
  880
+parser[1] = "HTC $1";
  881
+parser[2] = 0;
  882
+parser[3] = 0;
  883
+parser[4] = 0;
  884
+exports.device[0] = parser;
  885
+parser = Object.create(null);
  886
+parser[0] = new RegExp("HTC ([A-Z][a-z0-9 ]+) \\d+\\.\\d+\\.\\d+\\.\\d+");
  887
+parser[1] = "HTC $1";
  888
+parser[2] = 0;
  889
+parser[3] = 0;
  890
+parser[4] = 0;
  891
+exports.device[1] = parser;
  892
+parser = Object.create(null);
  893
+parser[0] = new RegExp("HTC_Touch_([A-Za-z0-9]+)");
  894
+parser[1] = "HTC Touch ($1)";
  895
+parser[2] = 0;
  896
+parser[3] = 0;
  897
+parser[4] = 0;
  898
+exports.device[2] = parser;
  899
+parser = Object.create(null);
  900
+parser[0] = new RegExp("USCCHTC(\\d+)");
  901
+parser[1] = "HTC $1 (US Cellular)";
  902
+parser[2] = 0;
  903
+parser[3] = 0;
  904
+parser[4] = 0;
  905
+exports.device[3] = parser;
  906
+parser = Object.create(null);
  907
+parser[0] = new RegExp("Sprint APA(9292)");
  908
+parser[1] = "HTC $1 (Sprint)";
  909
+parser[2] = 0;
  910
+parser[3] = 0;
  911
+parser[4] = 0;
  912
+exports.device[4] = parser;
  913
+parser = Object.create(null);
  914
+parser[0] = new RegExp("HTC ([A-Za-z0-9]+ [A-Z])");
  915
+parser[1] = "HTC $1";
  916
+parser[2] = 0;
  917
+parser[3] = 0;