update user agent library for more browsers, OSes, and bots
authorRobert Kaiser <kairo@kairo.at>
Tue, 29 Sep 2009 15:16:22 +0000 (17:16 +0200)
committerRobert Kaiser <kairo@kairo.at>
Tue, 29 Sep 2009 15:16:22 +0000 (17:16 +0200)
include/classes/useragent.php-class
testbed/ua_list_raw.txt

index be512f46c98dce52b7cf04f754d001747919a63a..f87badba4b5c0d98a62c697f1a877182c2d470c9 100755 (executable)
@@ -212,16 +212,66 @@ class userAgent {
       $this->version = $regs[1];
       $this->bot = false;
     }
+    elseif (preg_match('|BonEcho/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
+      $this->brand = 'Bon Echo';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
+    elseif (preg_match('|GranParadiso/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
+      $this->brand = 'Gran Paradiso';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
+    elseif (preg_match('|Shiretoko/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
+      $this->brand = 'Shiretoko';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
+    elseif (preg_match('|Namoroka/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
+      $this->brand = 'Namoroka';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
     elseif (preg_match('|Minefield/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
       $this->brand = 'Minefield';
       $this->version = $regs[1];
       $this->bot = false;
     }
+    elseif (preg_match('|PmWFx/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
+      $this->brand = 'PmW-Firefox';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
+    elseif (preg_match('|BeZillaBrowser/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
+      $this->brand = 'BeZillaBrowser';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
+    elseif (preg_match('|Songbird/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
+      $this->brand = 'Songbird';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
+    elseif (preg_match('|Shredder/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
+      $this->brand = 'Shredder';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
+    elseif (preg_match('|prism/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
+      $this->brand = 'Prism';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
     elseif (preg_match('|Minimo/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
       $this->brand = 'Minimo';
       $this->version = $regs[1];
       $this->bot = false;
     }
+    elseif (preg_match('|Fennec/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
+      $this->brand = 'Fennec';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
     elseif (preg_match('|Galeon/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
       $this->brand = 'Galeon';
       $this->version = $regs[1];
@@ -297,11 +347,31 @@ class userAgent {
       $this->version = $regs[1];
       $this->bot = false;
     }
+    elseif (preg_match('|Spinn3r ([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { /* looks like Gecko! */
+      $this->brand = 'Spinn3r';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
+    elseif (preg_match('|Butterfly/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { /* looks like Gecko! */
+      $this->brand = 'Butterfly';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
+    elseif (preg_match('|Googlebot/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { /* looks like Gecko! */
+      $this->brand = 'Googlebot';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
     elseif (preg_match('|Firefox/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
       $this->brand = 'Firefox';
       $this->version = $regs[1];
       $this->bot = false;
     }
+    elseif (preg_match('|Thunderbird/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
+      $this->brand = 'Thunderbird';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
     elseif (preg_match('|rv:([0-9a-zA-Z\.+]+)|', $this->uastring, $regs) &&
             strstr($this->uastring, "Mozilla/") && strstr($this->uastring, "Gecko/")) {
       $this->brand = 'Mozilla';
@@ -314,6 +384,26 @@ class userAgent {
       $this->version = 'M'.$regs[1];
       $this->bot = false;
     }
+    elseif (preg_match('|Baiduspider|i', $this->uastring)) {
+      $this->brand = 'BaiDuSpider';
+      $this->version = null;
+      $this->bot = true;
+    }
+    elseif (preg_match('|YodaoBot-Mobile/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { /* looks like Gecko! */
+      $this->brand = 'YodaoBot-Mobile';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
+    elseif (preg_match('|Googlebot-Mobile/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { /* looks like Gecko! */
+      $this->brand = 'Googlebot-Mobile';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
+    elseif (preg_match('|FASTMobileCrawl/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { /* looks like Gecko! */
+      $this->brand = 'FASTMobileCrawl';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
     elseif (preg_match('|MSFrontPage/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
       $this->brand = 'Microsoft FrontPage';
       $this->version = $regs[1];
@@ -384,6 +474,11 @@ class userAgent {
       $this->version = $regs[1];
       $this->bot = false;
     }
+    elseif (preg_match('|Browser/Obigo-([0-9A-Z]+/[0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'Obigo';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
     elseif (preg_match('|Nokia([0-9a-zA-Z]+/[0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
       $this->brand = 'Nokia';
       $this->version = $regs[1];
@@ -409,6 +504,16 @@ class userAgent {
       $this->version = $regs[1];
       $this->bot = false;
     }
+    elseif (preg_match('|NewsFox/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'NewsFox';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
+    elseif (preg_match('|rdfbot/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'rdfbot';
+      $this->version = $regs[1];
+      $this->bot = false;
+    }
     elseif (preg_match('|IBM-WebExplorer-DLL/v([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
       $this->brand = 'WebExplorer';
       $this->version = $regs[1];
@@ -474,7 +579,32 @@ class userAgent {
       $this->version = $regs[1];
       $this->bot = true;
     }
-    elseif (preg_match('|([0-9a-zA-Z\.+]+bot)/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
+    elseif (preg_match('|heritrix([0-9a-zA-Z\.+-]+)|', $this->uastring, $regs)) {
+      $this->brand = 'Heritrix';
+      $this->version = str_replace('-', '.', $regs[1]);
+      $this->bot = true;
+    }
+    elseif (preg_match('|SBSearch/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'SBSearch';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
+    elseif (preg_match('|Powermarks/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'Powermarks';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
+    elseif (preg_match('|TopBlogsInfo/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'TopBlogsInfo';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
+    elseif (preg_match('|picmole/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'picmole';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
+    elseif (preg_match('|([0-9a-zA-Z\._+-]+bot)/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) {
       $this->brand = $regs[1];
       $this->version = $regs[2];
       $this->bot = true;
@@ -504,11 +634,6 @@ class userAgent {
       $this->version = $regs[1];
       $this->bot = true;
     }
-    elseif (preg_match('|Powermarks/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
-      $this->brand = 'Powermarks';
-      $this->version = $regs[1];
-      $this->bot = true;
-    }
     elseif (preg_match('|Gulper Web Bot ([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
       $this->brand = 'Gulper Web Bot';
       $this->version = $regs[1];
@@ -519,11 +644,41 @@ class userAgent {
       $this->version = $regs[1];
       $this->bot = true;
     }
+    elseif (preg_match('|Advista Crawler ([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'HTTrack';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
+    elseif (preg_match('|Seznam screenshot-generator ([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'Seznam screenshot-generator';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
+    elseif (preg_match('|Yahoo! SearchMonkey ([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'Yahoo! SearchMonkey';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
+    elseif (preg_match('|Yahoo Pipes ([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'Yahoo! Pipes';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
+    elseif (preg_match('|Firebat ([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'Firebat';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
     elseif (preg_match('|Twiceler-([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
       $this->brand = 'Twiceler';
       $this->version = $regs[1];
       $this->bot = true;
     }
+    elseif (preg_match('|Nu_?tch-([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'Nutch';
+      $this->version = $regs[1];
+      $this->bot = true;
+    }
     elseif (preg_match('|Microsoft URL Control - ([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
       $this->brand = 'Microsoft URL Control';
       $this->version = $regs[1];
@@ -544,6 +699,21 @@ class userAgent {
       $this->version = null;
       $this->bot = true;
     }
+    elseif (preg_match('|ICCrawler|i', $this->uastring, $regs)) {
+      $this->brand = 'ICCrawler';
+      $this->version = null;
+      $this->bot = true;
+    }
+    elseif (preg_match('|KaloogaBot|', $this->uastring, $regs)) {
+      $this->brand = 'KaloogaBot';
+      $this->version = null;
+      $this->bot = true;
+    }
+    elseif (preg_match('|ScoutJet|', $this->uastring, $regs)) {
+      $this->brand = 'ScoutJet';
+      $this->version = null;
+      $this->bot = true;
+    }
     elseif (preg_match('|http://www.livedir.net|', $this->uastring, $regs)) {
       $this->brand = 'livedir.net';
       $this->version = null;
@@ -554,6 +724,11 @@ class userAgent {
       $this->version = null;
       $this->bot = true;
     }
+    elseif (preg_match('|newstin.com|', $this->uastring, $regs)) {
+      $this->brand = 'newstin.com';
+      $this->version = null;
+      $this->bot = true;
+    }
     elseif (preg_match('|http://www.almaden.ibm.com/cs/crawler|', $this->uastring)) {
       $this->brand = 'almaden crawler';
       $this->version = null;
@@ -595,11 +770,6 @@ class userAgent {
       $this->version = null;
       $this->bot = true;
     }
-    elseif (preg_match('|Baiduspider|i', $this->uastring)) {
-      $this->brand = 'BaiDuSpider';
-      $this->version = null;
-      $this->bot = true;
-    }
     elseif (preg_match('|Indy Library|', $this->uastring)) {
       $this->brand = 'Indy Library';
       $this->version = null;
@@ -726,7 +896,8 @@ class userAgent {
                       'NetResearchServer','LinkWalker','Zeus','W3C_Validator','ZyBorg','Ask Jeeves','ia_archiver',
                       'PingALink Monitoring Services','IlTrovatore-Setaccio','Nutch','Mercator','search.ch',
                       'appie','larbin','NutchCVS','Webchat','Mediapartners-Google','sitecheck.internetseer.com',
-                      'FavOrg','findlinks','DataCha0s','ichiro','Francis','','','','','');
+                      'FavOrg','findlinks','DataCha0s','ichiro','Francis','CoralWebPrx','DoCoMo','Ocelli','Sogou Video',
+                      'Yandex','Yeti','Austronaut-URL-Checker');
 
     if (in_array($this->brand, $botArray)) {
       $this->bot = true;
@@ -759,57 +930,61 @@ class userAgent {
     if (!isset($this->uadata['engine'])) {
       $this->uadata['engine'] = 'unknown';
       $this->uadata['geckodate'] = null;
-      if (preg_match('|Gecko/([0-9]+)|', $this->uastring, $regs) && (strpos($this->brand, 'Opera') === false)) {
-        $this->uadata['engine'] = 'gecko';
-        $this->uadata['geckodate'] = $regs[1];
-      }
-      elseif ((strpos($this->brand, 'Internet Explorer') !== false) ||  (strpos($this->brand, 'FrontPage') !== false)) {
-        if ((strpos(strtolower($this->uastring), 'mac') !== false) && (intval($this->getVersion()) >= 5)) {
-          $this->uadata['engine'] = 'tasman';
+      if (!$this->bot) {
+        if (preg_match('|Gecko/([0-9]+)|', $this->uastring, $regs) && (strpos($this->brand, 'Opera') === false)) {
+          $this->uadata['engine'] = 'gecko';
+          $this->uadata['geckodate'] = $regs[1];
         }
-        else {
-          $this->uadata['engine'] = 'trident';
+        elseif ((strpos($this->brand, 'Internet Explorer') !== false) ||  (strpos($this->brand, 'FrontPage') !== false)) {
+          if ((strpos(strtolower($this->uastring), 'mac') !== false) && (intval($this->getVersion()) >= 5)) {
+            $this->uadata['engine'] = 'tasman';
+          }
+          else {
+            $this->uadata['engine'] = 'trident';
+          }
         }
-      }
-      elseif ((strpos($this->brand, 'Konqueror') !== false) || (strpos($this->brand, 'Safari') !== false) ||
-              (strpos($this->brand, 'Shiira') !== false) || (strpos($this->brand, 'Chrome') !== false) ||
-              (strpos($this->brand, 'AppleWebKit') !== false) || (strpos($this->brand, 'OmniWeb') !== false)) {
-        $this->uadata['engine'] = 'khtml';
-      }
-      elseif (strpos($this->brand, 'Netscape') !== false) {
-        // non-Gecko Netscape browsers
-        if (intval($this->version) <= 4) {
-          $this->uadata['engine'] = 'nscp';
+        elseif ((strpos($this->brand, 'Konqueror') !== false) || (strpos($this->uastring, 'WebKit/') !== false) ||
+                (strpos($this->brand, 'OmniWeb') !== false)) {
+          $this->uadata['engine'] = 'khtml';
+        }
+        elseif (strpos($this->brand, 'Netscape') !== false) {
+          // non-Gecko Netscape browsers
+          if (intval($this->version) <= 4) {
+            $this->uadata['engine'] = 'nscp';
+          }
+          elseif (strpos($this->uastring, 'MSIE') !== false) {
+            $this->uadata['engine'] = 'trident';
+          }
         }
-        elseif (strpos($this->uastring, 'MSIE') !== false) {
+        elseif (strpos($this->brand, 'Opera') !== false) {
+          $this->uadata['engine'] = 'presto';
+        }
+        elseif (strpos($this->brand, 'Dillo') !== false) {
+          $this->uadata['engine'] = 'gzilla';
+        }
+        elseif ((strpos($this->brand, 'ELinks') !== false) || (strpos($this->brand, 'Links') !== false)) {
+          $this->uadata['engine'] = 'links';
+        }
+        elseif ((strpos($this->brand, 'Lynx') !== false)) {
+          $this->uadata['engine'] = 'lynx';
+        }
+        elseif ((strpos($this->brand, 'ICEbrowser') !== false) || (strpos($this->brand, 'ICE Browser') !== false)) {
+          $this->uadata['engine'] = 'icestorm';
+        }
+        elseif ((strpos($this->brand, 'PlayStation') !== false) || (strpos($this->brand, 'NetFront') !== false)) {
+          $this->uadata['engine'] = 'netfront';
+        }
+        elseif ((strpos($this->brand, 'Avant') !== false) || (strpos($this->brand, 'Crazy Browser') !== false) ||
+                (strpos($this->brand, 'AOL') !== false) || (strpos($this->brand, 'MSN') !== false) ||
+                (strpos($this->brand, 'MyIE2') !== false) || (strpos($this->brand, 'Maxthon') !== false)) {
           $this->uadata['engine'] = 'trident';
         }
-      }
-      elseif (strpos($this->brand, 'Opera') !== false) {
-        $this->uadata['engine'] = 'presto';
-      }
-      elseif (strpos($this->brand, 'Dillo') !== false) {
-        $this->uadata['engine'] = 'gzilla';
-      }
-      elseif ((strpos($this->brand, 'ELinks') !== false) || (strpos($this->brand, 'Links') !== false)) {
-        $this->uadata['engine'] = 'links';
-      }
-      elseif ((strpos($this->brand, 'ICEbrowser') !== false) || (strpos($this->brand, 'ICE Browser') !== false)) {
-        $this->uadata['engine'] = 'icestorm';
-      }
-      elseif ((strpos($this->brand, 'PlayStation') !== false) || (strpos($this->brand, 'NetFront') !== false)) {
-        $this->uadata['engine'] = 'netfront';
-      }
-      elseif ((strpos($this->brand, 'Avant') !== false) || (strpos($this->brand, 'Crazy Browser') !== false) ||
-              (strpos($this->brand, 'AOL') !== false) || (strpos($this->brand, 'MSN') !== false) ||
-              (strpos($this->brand, 'MyIE2') !== false) || (strpos($this->brand, 'Maxthon') !== false)) {
-        $this->uadata['engine'] = 'trident';
-      }
-      elseif (strpos($this->brand, 'Galeon') !== false) {
-        $this->uadata['engine'] = 'gecko';
-      }
-      elseif (strpos($this->brand, 'WebPro') !== false) {
-        $this->uadata['engine'] = 'nscp';
+        elseif (strpos($this->brand, 'Galeon') !== false) {
+          $this->uadata['engine'] = 'gecko';
+        }
+        elseif (strpos($this->brand, 'WebPro') !== false) {
+          $this->uadata['engine'] = 'nscp';
+        }
       }
     }
   return $this->uadata['engine'];
@@ -829,258 +1004,286 @@ class userAgent {
   public function getOS() {
     if (!isset($this->uadata['os'])) {
       $this->uadata['os'] = null;
-      if ($this->hasEngine('gecko')) {
-        if (preg_match('|Mozilla/5.0 \(([^;]+); [^;]+; ([^;]+); ([^;]+); rv:([^\);]+)(; [^\)]+)?\)|', $this->uastring, $regs)) {
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = (strpos($regs[3],'chrome://')===false)?$regs[3]:null;
-          $this->uadata['eng_version'] = $regs[4];
+      if (!$this->bot) {
+        if ($this->hasEngine('gecko')) {
+          if (preg_match('|Mozilla/5.0 \(([^;]+); [^;]+; ([^;]+); ([^;]+); rv:([^\);]+)(; [^\)]+)?\)|', $this->uastring, $regs)) {
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = (strpos($regs[3],'chrome://')===false)?$regs[3]:null;
+            $this->uadata['eng_version'] = $regs[4];
+          }
+          elseif (preg_match('|Mozilla/5.0 \(([^;]+); [^;]+; ([^;]+); rv:([^\);]+)(; [^\)]+)?\)|', $this->uastring, $regs)) {
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = null;
+            $this->uadata['eng_version'] = $regs[3];
+          }
+          elseif (preg_match('|Mozilla/5.0 \(([^;]+); [^;]+; ([^;]+); ([^;]+); m([^\);]+)\)|', $this->uastring, $regs)) {
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = $regs[3];
+            $this->uadata['eng_version'] = 'M'.$regs[4];
+          }
+          elseif (preg_match('|Mozilla/5.0 \(([^;]+); [^;]+; ([^;]+); m([^\);]+)\)|', $this->uastring, $regs)) {
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = $regs[2];
+            $this->uadata['eng_version'] = 'M'.$regs[3];
+          }
+          elseif (preg_match('|Mozilla/5.0 \(([^;]+); [^;]+; ([^;]+); ([^\);]+)\)|', $this->uastring, $regs)) {
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = $regs[3];
+            $this->uadata['eng_version'] = null;
+          }
+          elseif (preg_match('|Mozilla/5.0 \(([^;]+); ([^;]+); rv:([^\);]+)\)|', $this->uastring, $regs)) {
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = null;
+            $this->uadata['eng_version'] = $regs[3];
+          }
+          elseif (preg_match('|Mozilla/5.0 \(([^;]+); [^;]+; ([^\);]+)\)|', $this->uastring, $regs)) {
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = null;
+            $this->uadata['eng_version'] = null;
+          }
+          elseif (preg_match('|Mozilla/5.0 Galeon/[^\(]+ \(([^;]+); ([^;]+);[^\)]+\)|', $this->uastring, $regs)) {
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = null;
+            $this->uadata['eng_version'] = null;
+          }
+          elseif (preg_match('|Debian/|', $this->uastring, $regs)) {
+            $this->uadata['os'] = 'Debian Linux';
+            $this->uadata['lang'] = null;
+            $this->uadata['eng_version'] = null;
+          }
         }
-        elseif (preg_match('|Mozilla/5.0 \(([^;]+); [^;]+; ([^;]+); rv:([^\);]+)(; [^\)]+)?\)|', $this->uastring, $regs)) {
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = null;
-          $this->uadata['eng_version'] = $regs[3];
+        elseif ($this->hasEngine('trident') || $this->hasEngine('tasman')) {
+          if (preg_match('/Mozilla\/[^\(]+ \(compatible *; MSP?IE ([^;]+)[^\)]*; ?((?:Mac|Win)[^;]+)[^\)]*\)/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = (strpos($this->uastring,'MSPIE')!==false)?null:$regs[1];
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = null;
+          }
+          elseif (preg_match('/Mozilla\/[^\(]+ \(compatible *; MSIE ([^;]+)[^\)]*\)/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $regs[1];
+            $this->uadata['os'] = null;
+            $this->uadata['lang'] = null;
+          }
+          elseif (preg_match('/Microsoft Internet Explorer\/[^\s]+ \(((?:Mac|Win)[^;\)]+)\)/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $this->getVersion();
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = null;
+          }
+          elseif (preg_match('/Microsoft Pocket Internet Explorer\/[^\s]+/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = null;
+            $this->uadata['os'] = 'Windows CE';
+            $this->uadata['lang'] = null;
+          }
         }
-        elseif (preg_match('|Mozilla/5.0 \(([^;]+); [^;]+; ([^;]+); ([^;]+); m([^\);]+)\)|', $this->uastring, $regs)) {
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = $regs[3];
-          $this->uadata['eng_version'] = 'M'.$regs[4];
-        }
-        elseif (preg_match('|Mozilla/5.0 \(([^;]+); [^;]+; ([^;]+); m([^\);]+)\)|', $this->uastring, $regs)) {
-          $this->uadata['os'] = $regs[1];
-          $this->uadata['lang'] = $regs[2];
-          $this->uadata['eng_version'] = 'M'.$regs[3];
-        }
-        elseif (preg_match('|Mozilla/5.0 \(([^;]+); [^;]+; ([^;]+); ([^\);]+)\)|', $this->uastring, $regs)) {
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = $regs[3];
-          $this->uadata['eng_version'] = null;
+        elseif ($this->hasEngine('khtml')) {
+          if (preg_match('/Mozilla\/[^\(]+ \(compatible; Konqueror\/([^;]+); ([^;]+); ([^;]+); ([^;]+); ([^\);]+)\)(?: KHTML\/([0-9a-zA-Z\.+]+))?/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = strlen($regs[6])?$regs[6]:$regs[1];
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = $regs[5];
+          }
+          elseif (preg_match('/Mozilla\/[^\(]+ \(compatible; Konqueror\/([^;]+); ([^\);]+)[^\)]*\)(?: KHTML\/([0-9a-zA-Z\.+]+))?/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = strlen($regs[3])?$regs[3]:$regs[1];
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = null;
+          }
+          elseif (preg_match('|Mozilla/5.0 \(([^;]+); U; ([^;]+); ([^\);]+)\)|', $this->uastring, $regs)) {
+            if (strpos($regs[3], '/') !== false) {
+              $this->uadata['os'] = $regs[1];
+              $this->uadata['lang'] = null;
+          }
+            else {
+              $this->uadata['os'] = $regs[2];
+              $this->uadata['lang'] = $regs[3];
+            }
+            $this->uadata['eng_version'] = null;
+          }
+          elseif (preg_match('|Mozilla/5.0 \(([^;]+); U; ([^\);]+)\)|', $this->uastring, $regs)) {
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = $regs[2];
+            $this->uadata['eng_version'] = null;
+          }
+          elseif (preg_match('/Mozilla\/[^\(]+ \(compatible; [^;]+; ([^\);]+)\)/i', $this->uastring, $regs)) {
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = null;
+            $this->uadata['eng_version'] = null;
+          }
+          elseif (preg_match('/Midori\/[^\(]+ \((?:X11; )?([^;]+); U; ([^\)]+)\) WebKit/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = null;
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = $regs[2];
+          }
         }
-        elseif (preg_match('|Mozilla/5.0 \(([^;]+); ([^;]+); rv:([^\);]+)\)|', $this->uastring, $regs)) {
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = null;
-          $this->uadata['eng_version'] = $regs[3];
-        }
-        elseif (preg_match('|Mozilla/5.0 \(([^;]+); [^;]+; ([^\);]+)\)|', $this->uastring, $regs)) {
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = null;
-          $this->uadata['eng_version'] = null;
-        }
-        elseif (preg_match('|Mozilla/5.0 Galeon/[^\(]+ \(([^;]+); ([^;]+);[^\)]+\)|', $this->uastring, $regs)) {
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = null;
-          $this->uadata['eng_version'] = null;
-        }
-        elseif (preg_match('|Debian/|', $this->uastring, $regs)) {
-          $this->uadata['os'] = 'Debian Linux';
-          $this->uadata['lang'] = null;
-          $this->uadata['eng_version'] = null;
-        }
-      }
-      elseif ($this->hasEngine('trident') || $this->hasEngine('tasman')) {
-        if (preg_match('/Mozilla\/[^\(]+ \(compatible *; MSP?IE ([^;]+)[^\)]*; ?((?:Mac|Win)[^;]+)[^\)]*\)/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = (strpos($this->uastring,'MSPIE')!==false)?null:$regs[1];
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = null;
+        elseif ($this->hasEngine('presto')) {
+          // Opera < 8
+          if (preg_match('/Opera\/[^\(]+ \((?:X11; )?([^;]+)[^\)]+\) +\[([a-z_-]+)\]/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $this->getVersion();
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = $regs[2];
+          }
+          elseif (preg_match('/Mozilla\/[^\(]+ \(compatible; MSIE [^;]+; (?:X11; )?([^;\)]+)[^\)]*\) Opera [^ ]+\s+\[([a-z_-]+)\]/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $this->getVersion();
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = $regs[2];
+          }
+          elseif (preg_match('/Mozilla\/[^\(]+ \((?:X11; )?([^;]+);.+\) Opera [^ ]+\s+\[([a-z_-]+)\]/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $this->getVersion();
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = $regs[2];
+          }
+          // Opera mini
+          elseif (preg_match('/Opera\/([^\(]+) \((?:X11; )?([^;]+); Opera Mini; ([a-z_-]+); /i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = null;
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = $regs[3];
+          }
+          elseif (preg_match('/Opera\/([^\(]+) \((?:X11; )?([^;]+); Opera Mini\/[^;]+; ([a-z_-]+); /i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $regs[1];
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = $regs[3];
+          }
+          // Opera >= 8
+          elseif (preg_match('/Opera\/[^\(]+ \((?:X11; )?([^;]+); [^\)]+; ([a-z_-]+)\)/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $this->getVersion();
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = $regs[2];
+          }
+          elseif (preg_match('/Mozilla\/[^\(]+ \(compatible; MSIE [^;]+; (?:X11; )?([^;]+); ([a-z_-]+)\) Opera [^ ]+/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $this->getVersion();
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = $regs[2];
+          }
+          elseif (preg_match('/Mozilla\/[^\(]+ \((?:X11; )?([^;]+);.+; ([a-z_-]+)\) Opera [^ ]+/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $this->getVersion();
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = $regs[2];
+          }
+          // Opera 9 Firefox-spoofing
+          elseif (preg_match('/Mozilla\/[^\(]+ \((?:X11; )?([^;]+);.+; ([a-z_-]+); rv:([^\);]+)\) Gecko\/\d+ Firefox\/[0-9a-zA-Z\.+]+ Opera [^ ]+/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $this->getVersion();
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = $regs[2];
+          }
         }
-        elseif (preg_match('/Mozilla\/[^\(]+ \(compatible *; MSIE ([^;]+)[^\)]*\)/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = $regs[1];
-          $this->uadata['os'] = null;
-          $this->uadata['lang'] = null;
+        elseif ($this->hasEngine('nscp')) {
+          if (preg_match('/Mozilla\/([0-9a-zA-Z\.+]+) (?:\[([a-z_-]+)\][^\(]+)?\(X11; [^;]+; ([^\)]+)\)/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $regs[1];
+            $this->uadata['os'] = $regs[3];
+            $this->uadata['lang'] = $regs[2];
+          }
+          elseif (preg_match('/Mozilla\/([0-9a-zA-Z\.+]+) (?:\[([a-z_-]+)\][^\(]+)?\(([^;]+);[^\)]+\)/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $regs[1];
+            $this->uadata['os'] = $regs[3];
+            $this->uadata['lang'] = $regs[2];
+          }
+          elseif (preg_match('/Mozilla\/([0-9a-zA-Z\.+]+)[^\(]+\(([^;]+);[^\)]+\)/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $regs[1];
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = null;
+          }
         }
-        elseif (preg_match('/Microsoft Internet Explorer\/[^\s]+ \(((?:Mac|Win)[^;\)]+)\)/i', $this->uastring, $regs)) {
+        elseif ($this->hasEngine('gzilla')) {
           $this->uadata['eng_version'] = $this->getVersion();
-          $this->uadata['os'] = $regs[1];
-          $this->uadata['lang'] = null;
-        }
-        elseif (preg_match('/Microsoft Pocket Internet Explorer\/[^\s]+/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = null;
-          $this->uadata['os'] = 'Windows CE';
-          $this->uadata['lang'] = null;
-        }
-      }
-      elseif ($this->hasEngine('khtml')) {
-        if (preg_match('/Mozilla\/[^\(]+ \(compatible; Konqueror\/([^;]+); ([^;]+); ([^;]+); ([^;]+); ([^\);]+)\)(?: KHTML\/([0-9a-zA-Z\.+]+))?/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = strlen($regs[6])?$regs[6]:$regs[1];
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = $regs[5];
-        }
-        elseif (preg_match('/Mozilla\/[^\(]+ \(compatible; Konqueror\/([^;]+); ([^\);]+)[^\)]*\)(?: KHTML\/([0-9a-zA-Z\.+]+))?/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = strlen($regs[3])?$regs[3]:$regs[1];
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = null;
-        }
-        elseif (preg_match('|Mozilla/5.0 \(([^;]+); U; ([^;]+); ([^\);]+)\)|', $this->uastring, $regs)) {
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = $regs[3];
-          $this->uadata['eng_version'] = null;
-        }
-        elseif (preg_match('|Mozilla/5.0 \(([^;]+); U; ([^\);]+)\)|', $this->uastring, $regs)) {
-          $this->uadata['os'] = $regs[1];
-          $this->uadata['lang'] = $regs[2];
-          $this->uadata['eng_version'] = null;
-        }
-        elseif (preg_match('/Mozilla\/[^\(]+ \(compatible; [^;]+; ([^\);]+)\)/i', $this->uastring, $regs)) {
-          $this->uadata['os'] = $regs[1];
+          $this->uadata['os'] = null;
           $this->uadata['lang'] = null;
-          $this->uadata['eng_version'] = null;
-        }
-      }
-      elseif ($this->hasEngine('presto')) {
-        // Opera < 8
-        if (preg_match('/Opera\/[^\(]+ \((?:X11; )?([^;]+)[^\)]+\) +\[([a-z_-]+)\]/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = $this->getVersion();
-          $this->uadata['os'] = $regs[1];
-          $this->uadata['lang'] = $regs[2];
-        }
-        elseif (preg_match('/Mozilla\/[^\(]+ \(compatible; MSIE [^;]+; (?:X11; )?([^;\)]+)[^\)]*\) Opera [^ ]+ +\[([a-z_-]+)\]/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = $this->getVersion();
-          $this->uadata['os'] = $regs[1];
-          $this->uadata['lang'] = $regs[2];
-        }
-        elseif (preg_match('/Mozilla\/[^\(]+ \((?:X11; )?([^;]+);.+\) Opera [^ ]+ \[([a-z_-]+)\]/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = $this->getVersion();
-          $this->uadata['os'] = $regs[1];
-          $this->uadata['lang'] = $regs[2];
         }
-        // Opera mini
-        elseif (preg_match('/Opera\/([^\(]+) \((?:X11; )?([^;]+); Opera Mini; ([a-z_-]+); /i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = null;
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = $regs[3];
-        }
-        elseif (preg_match('/Opera\/([^\(]+) \((?:X11; )?([^;]+); Opera Mini\/[^;]+; ([a-z_-]+); /i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = $regs[1];
-          $this->uadata['os'] = $regs[2];
-          $this->uadata['lang'] = $regs[3];
-        }
-        // Opera >= 8
-        elseif (preg_match('/Opera\/[^\(]+ \((?:X11; )?([^;]+); [^\)]+; ([a-z_-]+)\)/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = $this->getVersion();
-          $this->uadata['os'] = $regs[1];
-          $this->uadata['lang'] = $regs[2];
+        elseif ($this->hasEngine('links')) {
+          if (preg_match('/E?Links[^\(]+\([^;]+; ([^;]+)[^\)]+\)/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = null;
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = null;
+          }
         }
-        elseif (preg_match('/Mozilla\/[^\(]+ \(compatible; MSIE [^;]+; (?:X11; )?([^;]+); ([a-z_-]+)\) Opera [^ ]+/i', $this->uastring, $regs)) {
+        elseif ($this->hasEngine('lynx')) {
           $this->uadata['eng_version'] = $this->getVersion();
-          $this->uadata['os'] = $regs[1];
-          $this->uadata['lang'] = $regs[2];
-        }
-        elseif (preg_match('/Mozilla\/[^\(]+ \((?:X11; )?([^;]+);.+; ([a-z_-]+)\) Opera [^ ]+/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = $this->getVersion();
-          $this->uadata['os'] = $regs[1];
-          $this->uadata['lang'] = $regs[2];
-        }
-        // Opera 9 Firefox-spoofing
-        elseif (preg_match('/Mozilla\/[^\(]+ \((?:X11; )?([^;]+);.+; ([a-z_-]+); rv:([^\);]+)\) Gecko\/\d+ Firefox\/[0-9a-zA-Z\.+]+ Opera [^ ]+/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = $this->getVersion();
-          $this->uadata['os'] = $regs[1];
-          $this->uadata['lang'] = $regs[2];
-        }
-      }
-      elseif ($this->hasEngine('nscp')) {
-        if (preg_match('/Mozilla\/([0-9a-zA-Z\.+]+) (?:\[([a-z_-]+)\][^\(]+)?\(X11; [^;]+; ([^\)]+)\)/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = $regs[1];
-          $this->uadata['os'] = $regs[3];
-          $this->uadata['lang'] = $regs[2];
-        }
-        elseif (preg_match('/Mozilla\/([0-9a-zA-Z\.+]+) (?:\[([a-z_-]+)\][^\(]+)?\(([^;]+);[^\)]+\)/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = $regs[1];
-          $this->uadata['os'] = $regs[3];
-          $this->uadata['lang'] = $regs[2];
-        }
-        elseif (preg_match('/Mozilla\/([0-9a-zA-Z\.+]+)[^\(]+\(([^;]+);[^\)]+\)/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = $regs[1];
-          $this->uadata['os'] = $regs[2];
+          $this->uadata['os'] = null;
           $this->uadata['lang'] = null;
         }
-      }
-      elseif ($this->hasEngine('gzilla')) {
-        $this->uadata['eng_version'] = $this->getVersion();
-        $this->uadata['os'] = null;
-        $this->uadata['lang'] = null;
-      }
-      elseif ($this->hasEngine('links')) {
-        if (preg_match('/E?Links[^\(]+\([^;]+; ([^;]+)[^\)]+\)/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = null;
-          $this->uadata['os'] = $regs[1];
-          $this->uadata['lang'] = null;
+        elseif ($this->hasEngine('icestorm')) {
+          if (preg_match('/ICE Browser\/v?([0-9a-zA-Z\._+]+) \(Java [^;]+; ([^\)]+)\)/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = str_replace('_', '.', $regs[1]);
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = null;
+          }
+          elseif (preg_match('/Mozilla\/[^\(]+ \((?:X11; )?([^;]+);.+; ([a-z_-]+)\).* ICEbrowser\/([0-9a-zA-Z\._+]+)/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $regs[3];
+            $this->uadata['os'] = $regs[1];
+            $this->uadata['lang'] = $regs[2];
+          }
         }
-      }
-      elseif ($this->hasEngine('icestorm')) {
-        if (preg_match('/ICE Browser\/v?([0-9a-zA-Z\._+]+) \(Java [^;]+; ([^\)]+)\)/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = str_replace('_', '.', $regs[1]);
-          $this->uadata['os'] = $regs[2];
+        else {
+          $this->uadata['eng_version'] = null;
           $this->uadata['lang'] = null;
+          if (preg_match('/AmigaOS/i', $this->uastring, $regs)) {
+            $this->uadata['os'] = 'AmigaOS';
+          }
+          if (preg_match('/Commodore 64/i', $this->uastring, $regs)) {
+            $this->uadata['os'] = 'Commodore 64';
+          }
+          elseif (preg_match('/curl\/[^\(]+\(([^\);]+)/i', $this->uastring, $regs)) {
+            $this->uadata['os'] = $regs[1];
+          }
+          elseif (preg_match('/NCSA[_ ]Mosaic\/[^\(]+\((?:.*;)?([^\);]+)/i', $this->uastring, $regs)) {
+            $this->uadata['os'] = trim($regs[1]);
+          }
+          elseif (preg_match('/iCab.*(Mac[^\);]+).*?\)/i', $this->uastring, $regs)) {
+            $this->uadata['os'] = trim($regs[1]);
+          }
+          elseif (preg_match('/SymbianOS\/([^ ]+)/i', $this->uastring, $regs)) {
+            $this->uadata['os'] = 'SymbianOS '.$regs[1];
+          }
         }
-        elseif (preg_match('/Mozilla\/[^\(]+ \((?:X11; )?([^;]+);.+; ([a-z_-]+)\).* ICEbrowser\/([0-9a-zA-Z\._+]+)/i', $this->uastring, $regs)) {
-          $this->uadata['eng_version'] = $regs[3];
-          $this->uadata['os'] = $regs[1];
-          $this->uadata['lang'] = $regs[2];
-        }
-      }
-      else {
-        $this->uadata['eng_version'] = null;
-        $this->uadata['lang'] = null;
-        if (preg_match('/AmigaOS/i', $this->uastring, $regs)) {
-          $this->uadata['os'] = 'AmigaOS';
-        }
-        if (preg_match('/Commodore 64/i', $this->uastring, $regs)) {
-          $this->uadata['os'] = 'Commodore 64';
-        }
-        elseif (preg_match('/curl\/[^\(]+\(([^\);]+)/i', $this->uastring, $regs)) {
-          $this->uadata['os'] = $regs[1];
-        }
-        elseif (preg_match('/NCSA[_ ]Mosaic\/[^\(]+\((?:.*;)?([^\);]+)/i', $this->uastring, $regs)) {
-          $this->uadata['os'] = trim($regs[1]);
-        }
-        elseif (preg_match('/iCab.*(Mac[^\);]+).*?\)/i', $this->uastring, $regs)) {
-          $this->uadata['os'] = trim($regs[1]);
-        }
-        elseif (preg_match('/SymbianOS\/([^ ]+)/i', $this->uastring, $regs)) {
-          $this->uadata['os'] = 'SymbianOS '.$regs[1];
-        }
-      }
-      if ($this->uadata['os'] == 'Win 9x 4.90') { $this->uadata['os'] = 'Windows ME'; }
-      elseif ($this->uadata['os'] == 'WinNT4.0') { $this->uadata['os'] = 'Windows NT 4.0'; }
-      elseif ($this->uadata['os'] == 'Windows NT 5.0') { $this->uadata['os'] = 'Windows 2000'; }
-      elseif ($this->uadata['os'] == 'Windows NT 5.1') { $this->uadata['os'] = 'Windows XP'; }
-      elseif ($this->uadata['os'] == 'Windows NT 5.2') { $this->uadata['os'] = 'Windows 2003'; }
-      elseif ($this->uadata['os'] == 'Windows NT 5.2 x64') { $this->uadata['os'] = 'Windows 2003 (64bit)'; }
-      elseif ($this->uadata['os'] == 'Windows NT 6.0') { $this->uadata['os'] = 'Windows Vista'; }
-      elseif ($this->uadata['os'] == 'Win95') { $this->uadata['os'] = 'Windows 95'; }
-      elseif ($this->uadata['os'] == 'Win98') { $this->uadata['os'] = 'Windows 98'; }
-      elseif ($this->uadata['os'] == 'WinNT') { $this->uadata['os'] = 'Windows NT'; }
-      elseif ($this->uadata['os'] == 'Win32') { $this->uadata['os'] = 'Windows (32bit)'; }
-      elseif ($this->uadata['os'] == 'Win64') { $this->uadata['os'] = 'Windows (64bit)'; }
-      elseif (preg_match('/Mac ?OS ?X/i',$this->uadata['os'])) { $this->uadata['os'] = 'MacOS X'; }
-      elseif (preg_match('/Mac_P(ower|)PC/i',$this->uadata['os'])) { $this->uadata['os'] = 'MacOS'; }
-      elseif (strpos($this->uadata['os'], 'darwin') !== false) { $this->uadata['os'] = 'MacOS X'; }
-      elseif (strpos($this->uadata['os'], 'Darwin') !== false) { $this->uadata['os'] = 'MacOS X'; }
-      elseif (strpos($this->uadata['os'], 'apple') !== false) { $this->uadata['os'] = 'MacOS'; }
-      elseif (strpos($this->uadata['os'], 'Macintosh') !== false) { $this->uadata['os'] = 'MacOS'; }
-      elseif (strpos($this->uadata['os'], 'linux') !== false) { $this->uadata['os'] = 'Linux'; }
-      elseif (preg_match('/Symbian ?OS/i',$this->uadata['os'])) { $this->uadata['os'] = 'SymbianOS'; }
+        if ($this->uadata['os'] == 'Win 9x 4.90') { $this->uadata['os'] = 'Windows ME'; }
+        elseif ($this->uadata['os'] == 'WinNT4.0') { $this->uadata['os'] = 'Windows NT 4.0'; }
+        elseif ($this->uadata['os'] == 'Windows NT 5.0') { $this->uadata['os'] = 'Windows 2000'; }
+        elseif ($this->uadata['os'] == 'Windows NT 5.1') { $this->uadata['os'] = 'Windows XP'; }
+        elseif ($this->uadata['os'] == 'Windows NT 5.2') { $this->uadata['os'] = 'Windows 2003'; }
+        elseif ($this->uadata['os'] == 'Windows NT 5.2 x64') { $this->uadata['os'] = 'Windows 2003 (64bit)'; }
+        elseif ($this->uadata['os'] == 'Windows NT 6.0') { $this->uadata['os'] = 'Windows Vista'; }
+        elseif ($this->uadata['os'] == 'Windows NT 6.1') { $this->uadata['os'] = 'Windows 7'; }
+        elseif ($this->uadata['os'] == 'Win95') { $this->uadata['os'] = 'Windows 95'; }
+        elseif ($this->uadata['os'] == 'Win98') { $this->uadata['os'] = 'Windows 98'; }
+        elseif ($this->uadata['os'] == 'WinNT') { $this->uadata['os'] = 'Windows NT'; }
+        elseif ($this->uadata['os'] == 'Win32') { $this->uadata['os'] = 'Windows (32bit)'; }
+        elseif ($this->uadata['os'] == 'Win64') { $this->uadata['os'] = 'Windows (64bit)'; }
+        elseif (preg_match('/Mac ?OS ?X/i',$this->uadata['os'])) { $this->uadata['os'] = 'MacOS X'; }
+        elseif (preg_match('/Mac_P(ower|)PC/i',$this->uadata['os'])) { $this->uadata['os'] = 'MacOS'; }
+        elseif (strpos($this->uadata['os'], 'darwin') !== false) { $this->uadata['os'] = 'MacOS X'; }
+        elseif (strpos($this->uadata['os'], 'Darwin') !== false) { $this->uadata['os'] = 'MacOS X'; }
+        elseif (strpos($this->uadata['os'], 'apple') !== false) { $this->uadata['os'] = 'MacOS'; }
+        elseif (strpos($this->uadata['os'], 'Macintosh') !== false) { $this->uadata['os'] = 'MacOS'; }
+        elseif (strpos($this->uadata['os'], 'linux') !== false) { $this->uadata['os'] = 'Linux'; }
+        elseif (preg_match('/SymbianOS[\/ ]([0-9a-zA-Z\._+]+)/i', $this->uastring, $regs)) { $this->uadata['os'] = 'SymbianOS '.$regs[1]; }
+        elseif (preg_match('/Symbian ?OS/i',$this->uadata['os'])) { $this->uadata['os'] = 'SymbianOS'; }
 
-      if (strpos($this->uadata['os'], 'Win') !== false) { $this->uadata['platform'] = 'Windows'; }
-      elseif (strpos($this->uadata['os'], 'Mac') !== false) { $this->uadata['platform'] = 'Macintosh'; }
-      elseif (strpos($this->uadata['os'], 'Linux') !== false) { $this->uadata['platform'] = 'Linux'; }
-      elseif (strpos($this->uadata['os'], 'Solaris') !== false) { $this->uadata['platform'] = 'Solaris'; }
-      elseif (strpos($this->uadata['os'], 'SunOS') !== false) { $this->uadata['platform'] = 'Solaris'; }
-      elseif (strpos($this->uadata['os'], 'BeOS') !== false) { $this->uadata['platform'] = 'BeOS'; }
-      elseif (strpos($this->uadata['os'], 'FreeBSD') !== false) { $this->uadata['platform'] = 'FreeBSD'; }
-      elseif (strpos($this->uadata['os'], 'OpenBSD') !== false) { $this->uadata['platform'] = 'OpenBSD'; }
-      elseif (strpos($this->uadata['os'], 'NetBSD') !== false) { $this->uadata['platform'] = 'NetBSD'; }
-      elseif (strpos($this->uadata['os'], 'AIX') !== false) { $this->uadata['platform'] = 'AIX'; }
-      elseif (strpos($this->uadata['os'], 'IRIX') !== false) { $this->uadata['platform'] = 'IRIX'; }
-      elseif (strpos($this->uadata['os'], 'HP-UX') !== false) { $this->uadata['platform'] = 'HP-UX'; }
-      elseif (strpos($this->uadata['os'], 'AmigaOS') !== false) { $this->uadata['platform'] = 'Amiga'; }
-      elseif (strpos($this->uadata['os'], 'Commodore 64') !== false) { $this->uadata['platform'] = 'C64'; }
-      elseif (strpos($this->uadata['os'], 'OpenVMS') !== false) { $this->uadata['platform'] = 'OpenVMS'; }
-      elseif (strpos($this->uadata['os'], 'Warp') !== false) { $this->uadata['platform'] = 'OS/2'; }
-      elseif (strpos($this->uadata['os'], 'SymbianOS') !== false) { $this->uadata['platform'] = 'SymbianOS'; }
-      elseif (strpos($this->uadata['os'], 'CYGWIN') !== false) { $this->uadata['platform'] = 'Windows'; }
-      else { $this->uadata['platform'] = $this->uadata['os']; }
+        if (strpos($this->uadata['os'], 'Win') !== false) { $this->uadata['platform'] = 'Windows'; }
+        elseif (strpos($this->uadata['os'], 'Mac') !== false) { $this->uadata['platform'] = 'Macintosh'; }
+        elseif (strpos($this->uadata['os'], 'Linux') !== false) { $this->uadata['platform'] = 'Linux'; }
+        elseif (strpos($this->uadata['os'], 'Solaris') !== false) { $this->uadata['platform'] = 'Solaris'; }
+        elseif (strpos($this->uadata['os'], 'SunOS') !== false) { $this->uadata['platform'] = 'Solaris'; }
+        elseif (strpos($this->uadata['os'], 'BeOS') !== false) { $this->uadata['platform'] = 'BeOS'; }
+        elseif (strpos($this->uadata['os'], 'BePC') !== false) { $this->uadata['platform'] = 'BeOS'; }
+        elseif (strpos($this->uadata['os'], 'FreeBSD') !== false) { $this->uadata['platform'] = 'FreeBSD'; }
+        elseif (strpos($this->uadata['os'], 'OpenBSD') !== false) { $this->uadata['platform'] = 'OpenBSD'; }
+        elseif (strpos($this->uadata['os'], 'NetBSD') !== false) { $this->uadata['platform'] = 'NetBSD'; }
+        elseif (strpos($this->uadata['os'], 'AIX') !== false) { $this->uadata['platform'] = 'AIX'; }
+        elseif (strpos($this->uadata['os'], 'IRIX') !== false) { $this->uadata['platform'] = 'IRIX'; }
+        elseif (strpos($this->uadata['os'], 'HP-UX') !== false) { $this->uadata['platform'] = 'HP-UX'; }
+        elseif (strpos($this->uadata['os'], 'AmigaOS') !== false) { $this->uadata['platform'] = 'Amiga'; }
+        elseif (strpos($this->uadata['os'], 'webOS') !== false) { $this->uadata['platform'] = 'webOS'; }
+        elseif (strpos($this->uadata['os'], 'Commodore 64') !== false) { $this->uadata['platform'] = 'C64'; }
+        elseif (strpos($this->uadata['os'], 'OpenVMS') !== false) { $this->uadata['platform'] = 'OpenVMS'; }
+        elseif (strpos($this->uadata['os'], 'Warp') !== false) { $this->uadata['platform'] = 'OS/2'; }
+        elseif (strpos($this->uadata['os'], 'OS/2') !== false) { $this->uadata['platform'] = 'OS/2'; }
+        elseif (strpos($this->uadata['os'], 'SymbianOS') !== false) { $this->uadata['platform'] = 'SymbianOS'; }
+        elseif (strpos($this->uadata['os'], 'Gameboy') !== false) { $this->uadata['platform'] = 'Nintendo'; }
+        elseif (strpos($this->uadata['os'], 'Wii') !== false) { $this->uadata['platform'] = 'Nintendo'; }
+        elseif (strpos($this->uadata['os'], 'Nintendo') !== false) { $this->uadata['platform'] = 'Nintendo'; }
+        elseif (strpos($this->uadata['os'], 'J2ME') !== false) { $this->uadata['platform'] = 'Java'; }
+        elseif (strpos($this->uadata['os'], 'CYGWIN') !== false) { $this->uadata['platform'] = 'Windows'; }
+        elseif (strpos($this->uadata['os'], 'mingw') !== false) { $this->uadata['platform'] = 'Windows'; }
+        else { $this->uadata['platform'] = $this->uadata['os']; }
 
-      $this->uadata['lang'] = str_replace('_', '-', $this->uadata['lang']);
+        $this->uadata['lang'] = str_replace('_', '-', $this->uadata['lang']);
+      }
     }
   return $this->uadata['os'];
   }
index e698c998246921a23a4241b74dcfccb0be3380c3..443fbd3bb6cb07c786a9543e756b1973e33bd617 100755 (executable)
@@ -32,8 +32,16 @@ Mozilla/5.0 (Gameboy Color; U; Gameboy OS 2005; de-DE) Gecko/20041107 Firefox/1.
 Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.7.5) Gecko/20041111 Firefox/1.0
 Mozilla/5.0 (X11; Linux i686; rv:1.7.5) Gecko/20041108 Firefox/1.0
 Mozilla/5.0 (X11; U; Linux i686; chrome://navigator/locale/navigator.properties; rv:1.7.5) Gecko/20041107 Firefox/1.0
+Mozilla/5.0 (Windows; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090402 Firefox/3.6a1pre
 Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.5) Gecko/20041217 Firefox/1.0.4
 Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a6pre) Gecko/20070702 Minefield/3.0a6pre
+Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.22pre) Gecko/20090415 BonEcho/2.0.0.22pre (.NET CLR 3.5.30729)
+Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.15pre) Gecko/2009090911 GranParadiso/3.0.15pre (.NET CLR 3.5.30729)
+Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.4pre) Gecko/20090923 Shiretoko/3.5.4pre
+Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2a2pre) Gecko/20090917 Namoroka/3.6a2pre
+Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a9pre) Gecko/2007110108 prism/0.8
+Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1.4pre) Gecko/20090928 Lightning/1.0pre Shredder/3.0pre
+Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.19) Gecko/20081209 Thunderbird/2.0.0.19 Mnenhy/0.7.5.0
 Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.8b2) Gecko/20050324 SeaMonkey/1.0a
 Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9a6pre) Gecko/20070628 Firefox/2.0.0.4 SeaMonkey/2.0a1pre PrivatelyFakedUA/0.0
 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.0.1) Gecko/20021109 Chimera/0.6+
@@ -41,8 +49,13 @@ Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7b) Gecko/20040302 C
 Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en; rv:1.8.1.5) Gecko/20070614 Camino/1.6 (like Firefox/2.0.0.4)
 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031016 K-Meleon/0.8.1
 Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.7.13) Gecko/20050610 K-Meleon/0.9
+Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.11) Gecko/2009061613 Songbird/1.3.0a (20090624013030)
 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.0.1) Gecko/20020730 AOL/7.0
 Mozilla/5.0 (Windows; U; Windows CE 4.21; rv:1.8b4) Gecko/20050720 Minimo/0.007
+Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2a1pre) Gecko/20090317 Fennec/1.0b1
+Mozilla/5.0 (X11; U; Linux armv7l; en-US; rv:1.9.2b1pre) Gecko/20090924 Fennec/1.0b4pre
+Mozilla/5.0 (BeOS; U; Haiku BePC; en-US; rv:1.8.1.22pre) Gecko/20090908 BeZillaBrowser/2.0.0.22pre
+Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.8.1.21) Gecko/20090410 PmWFx/2.0.0.21
 Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061031 Firefox/1.5.0.7 Flock/0.7.7
 Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20061024 Iceweasel/2.0 (Debian-2.0+dfsg-1)
 Mozilla/5.0 (X11; U; Linux armv6l; en-GB; rv:1.9a6pre) Gecko/20071128 Firefox/3.0a1 Tablet browser 0.2.2 RX-34+RX-44_2008SE_2.2007.48-9
@@ -106,7 +119,11 @@ Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Geck
 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.51
 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/418 (KHTML, like Gecko) Shiira/1.2.2 Safari/125
 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
+Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Nokia5800d-1/21.0.025; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413
 Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413
+Mozilla/5.0 (webOS/1.1; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Pre/1.0
+Midori/0.1.9 (X11; Linux i686; U; en-us) WebKit/532+
+Mozilla/5.0 (X11; U; Linux x86_64; cs-cz) AppleWebKit/531.2+ (KHTML, like Gecko) Safari/531.2+ Epiphany/2.27.91 SUSE/2.27.91-1.2
 Opera/5.12 (Windows 2000; U)  [de]
 Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 6.05 [ja]
 Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i586) Opera 7.23 [en]
@@ -116,9 +133,11 @@ Mozilla/5.0 (Windows NT 5.0; U; en) Opera 8.0
 Mozilla/4.0 (compatible; MSIE 6.0; Mac_PowerPC Mac OS X; en) Opera 8.0
 Opera/8.00 (Windows NT 5.1; U; en)
 Opera/8.01 (X11; Linux i686; U; de)
+Opera/9.30 (Nintendo Wii; U; ; 3642; en)
 Mozilla/5.0 (X11; Linux i686; U; en) Opera 8.01
 Mozilla/5.0 (Windows NT 5.2; U; cs; rv:1.8.0) Gecko/20060728 Firefox/1.5.0 Opera 9.20
 Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) Opera 6.0  [de]
+Mozilla/5.0 (X11; Linux i686; U) Opera 7.54  [de]
 Mozilla/4.1 (compatible; MSIE 5.0; Symbian OS; Nokia 6600;423) Opera 6.10 [de]
 Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; Nokia 6630/4.03.38; 6937) Opera 8.50 [es]
 Mozilla/4.0 (compatible; MSIE 6.0; ; Linux armv5tejl; U) Opera 8.02 [en_US] Maemo browser 0.4.31 N770/SU-18
@@ -126,6 +145,7 @@ Mozilla/4.0 (compatible; MSIE 6.0; Nitro) Opera 8.50 [ja]
 Opera/9.00 (Wii; U; ; 1038-58; Wii Shop Channel/1.0; en)
 Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1316; fi; U; ssr)
 Opera/2.0.3920 (J2ME/MIDP; Opera Mini; en; U; ssr)
+Opera/9.60 (J2ME/MIDP; Opera Mini/4.2.14881Mod.by.Handler/960; U; en) Presto/2.2.0
 Mozilla/4.75 [de] (Win98; U)
 Mozilla/1.6 [en] (Windows NT 5.1; U)
 Mozilla/1.0 (CP/M; 8-bit .NET)
@@ -143,10 +163,11 @@ Links (0.92; Linux 2.2.14-5.0 i586)
 Links (2.1pre14; FreeBSD 4.9-RELEASE i386; x)
 Links (2.1pre15; CYGWIN_NT-5.0 1.3.1(0.38/3/2) i686; x)
 Links (1.00pre12; Linux 2.6.10-grsec i686; 139x54) (Debian pkg 0.99+1.00pre12-1)
+Lynx/2.8.4rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6g
 Mozilla/5.0 (compatible; iCab 2.9.8; Macintosh; U, PPC; Mac OS X)
 iCab/2.9.8 (Macintosh; U; PPC)
 Mozilla/4.5 (compatible; iCab 2.9.8; Macintosh; U; PPC)
-Lynx/2.8.4rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6g
+Evolution/2.26; Evolution-RSS/0.1.2
 NCSA_Mosaic/2.0 (Windows 3.1)
 NCSA_Mosaic/1.0 (X11; FreeBSD 1.2.0 i286) via proxy gateway CERN-HTTPD/1.0
 NCSA Mosaic/2-7-6 (X11;OpenVMS V7.2 VAX)
@@ -178,6 +199,7 @@ Java/1.4.1_02
 LWP::Simple/5.79
 PHP/4.2.3
 w3m/0.5.1
+BlackBerry8120/4.3.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/135
 SonyEricssonK700i/R2AE SEMC-Browser/4.0.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.2.3.15.0 (Google WAP Proxy/1.0)
 SonyEricssonT610/R201 Profile/MIDP-1.0 Configuration/CLDC-1.0 (Google WAP Proxy/1.0)
 Nokia3510i/1.0 (04.01) Profile/MIDP-1.0 Configuration/CLDC-1.0 UP.Link/5.1.1.5a (Google WAP Proxy/1.0)
@@ -185,14 +207,15 @@ Nokia7650/1.0 SymbianOS/6.1 Series60/0.9 Profile/MIDP-1.0 Configuration/CLDC-1.0
 Nokia6630/1.0 (3.45.113) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1 (Google WAP Proxy/1.0)
 SIE-C60/12 UP.Browser/6.1.0.5.c.6 (GUI) MMP/1.0 (Google WAP Proxy/1.0)
 OPWV-SDK/62 UP.Browser/6.2.2.1.208 (GUI) MMP/2.0
+Vodafone/1.0/LG-HB620T/V10a Browser/Obigo-Q05A/3.12 MMS/LG-MMS-V1.0/1.2 Java/ASVM/1.1 Profile/MIDP-2.1 Configuration/CLDC-1.1
 Mozilla/4.0 (MobilePhone MM-8300/US/1.0) NetFront/3.1 MMP/2.0
-Mozilla/4.0 (MobilePhone SCP-5500/US/1.0) NetFront/3.0 MMP/2.0 FAKE (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
 Samsung-SPHA920 AU-MIC-A920/2.0 MMP/2.0
 MOT-E398/0E.20.59R MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.0
 Mozilla/4.0 (compatible; 240x320) IXI/Q05A2.4
 Mozilla/4.0 (compatible; AvantGo 6.0; FreeBSD)
 curl/7.7.2 (powerpc-apple-darwin6.0) libcurl 7.7.2 (OpenSSL 0.9.6b)
 curl/7.10.6 (i386-redhat-linux-gnu) libcurl/7.10.6 OpenSSL/0.9.7a ipv6 zlib/1.2.0.7
+curl/7.19.3 (i586-pc-mingw32msvc) libcurl/7.19.3 zlib/1.2.3
 amaya/8.3 libwww/5.4.0
 Python-urllib/1.15
 w3m/0.3.1
@@ -208,16 +231,42 @@ Anonymisiert durch Steganos Internet Anonym Pro 6
 Mozilla/4.0 (compatible; BorderManager 3.0)
 Mozilla/5.0 WebWasher 3.4
 Mozilla/5.0 (SaferSurf) Firefox 1.5
+# feed readers:
+Akregator/1.5.1; syndication SUSE
+Bloglines/3.1 (http://www.bloglines.com; 1 subscriber)
+Liferea/1.7.1-svn (Linux; en_US.UTF-8; http://liferea.sf.net/)
+LiveJournal.com (webmaster@livejournal.com; for http://www.livejournal.com/users/kairo_at/; 1 readers)
+Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=1257454742140558029)
+FeedDemon/3.0 (http://www.feeddemon.com/; Microsoft Windows XP)
+FeedHub FeedDiscovery/1.0 (http://www.feedhub.com)
+FeedHub FeedFetcher/1.0 (http://www.feedhub.com)
+FeedHub MetaDataFetcher/1.0 (http://www.feedhub.com)
+Feed43 Proxy/1.0 (www.feed43.com)   Feed4
+Mozilla/5.0 NewsFox/1.0.5.2
+NetNewsWire/3.2b28 (Mac OS X; http://www.newsgator.com/Individuals/NetNewsWire/)
+newsbeuter/0.9.1 (Linux 2.6.26-2-686; i686; http://synflood.at/newsbeuter.html) libcurl/7.18.2 GnuTLS/2.4.2 zlib/1.2.3.3 libidn/1.8
+NewsGator/2.0 Bot (http://www.newsgator.com)
+NewsGatorOnline/2.0 (http://www.newsgator.com; 2 subscribers)
+OutlookConnector/1.9 (TmstmpExt)
+rdfbot/1.0 (rdfbotsupport AT rediffmailpro DOT com)
+RssBandit/1.8.0.870 (.NET CLR 2.0.50727.3082; WinNT 5.1.2600 Service Pack 3; http://www.rssbandit.org)
+RSSOwl/2.0.0.200903042053 (Windows; U; en)
+The MultiZilla Feed Reader/Viewer
+UniversalFeedParser/4.2-pre-293-svn +http://feedparser.org/
+WordPress/2.7
+GreatNews/1.0
 # search bots:
 W3C_Validator/1.305.2.12 libwww-perl/5.64
 Scooter/3.3
 Spinne/2.0 med_AH
 Vagabondo/2.0 MT (webagent at wise-guys dot nl)
 TurnitinBot/1.5 ( ">http://www.turnitin.com/robot/crawlerinfo.html)
+TurnitinBot/2.1 (http://www.turnitin.com/robot/crawlerinfo.html)
 FAST-WebCrawler/3.x Multimedia (mm dash crawler at fast dot no)
 Firefly/1.0 (compatible; Mozilla 4.0; MSIE 5.5)
 Googlebot/2.1 (+ ">http://www.googlebot.com/bot.html)
 Googlebot (+http://www.google.com/bot.html)
+Googlebot-Image/1.0
 Scrubby/2.2 ( ">http://www.scrubtheweb.com/)
 psbot/0.1 (+ ">http://www.picsearch.com/bot.html)
 NutchCVS/0.06-dev (Nutch; http://www.nutch.org/docs/en/bot.html; nutch-agent@lists.sourceforge.net)
@@ -235,11 +284,25 @@ msnbot/1.0 (+http://search.msn.com/msnbot.htm)
 Gigabot/2.0
 Mediapartners-Google/2.1
 Schmozilla/v9.14 Platinum
+Austronaut-URL-Checker/0.1 by ThScho
 OmniExplorer_Bot/1.07 (+http://www.omni-explorer.com) Internet Categorizer
 findlinks/0.926 (+http://wortschatz.uni-leipzig.de/findlinks/)
 DataCha0s/2.0
 Amfibibot/0.07 (Amfibi Robot; http://www.amfibi.com; agent@amfibi.com)
 aipbot/1.0 (aipbot; http://www.aipbot.com; aipbot@aipbot.com)
+CoralWebPrx/0.1.20 (See http://coralcdn.org/)
+DoCoMo/1.0/N505i/c20/TB/W20H10 (compatible; RFCrawler-Mobile/1.0; +http://www.rfms.jp/crawler.html)
+ichiro/3.0 (http://help.goo.ne.jp/door/crawler.html)
+Jyxobot/1
+OOZBOT/0.20 ( http://www.setooz.com/oozbot.html ; agentname at setooz dot_com )
+Ocelli/1.4 (http://www.globalspec.com/Ocelli)
+SeznamBot/2.0 (+http://fulltext.sblog.cz/robot/)
+Sogou Video /3.0(+http://www.sogou.com/docs/help/webmasters.htm#07)
+Snapbot/1.0 (Snap Shots, +http://www.snap.com)
+Yandex/1.01.001 (compatible; Win16; I)
+Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)
+Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1; aggregator:Spinn3r (Spinn3r 3.1); http://spinn3r.com/robot) Gecko/20021130
+Mozilla/5.0 (compatible; Butterfly/1.0; +http://labs.topsy.com/butterfly.html) Gecko/2009032608 Firefox/3.0.8
 Mozilla/4.0 compatible ZyBorg/1.0 Daily Refresh Beta-d03 (wn.zyborg@looksmart.net;
 Mozilla/2.0 (compatible; Ask Jeeves/Teoma)
 Mozilla/5.0 (Slurp/si; slurp@inktomi.com; ">http://www.inktomi.com/slurp.html)
@@ -259,11 +322,15 @@ Mozilla/5.0 (Twiceler-0.9 http://www.cuill.com/twiceler/robot.html)
 Mozilla/4.0 (compatible; Arachmo)
 Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.)
 Mozilla/5.0 (compatible; heritrix/1.12.0 +http://www.accelobot.com)
+Mozilla/5.0 (compatible; heritrix1-10-0;+http://www.webintegration.at)
 Mozilla/2.0 compatible; Check&amp;Get 1.14 (Windows NT)
 Mozilla/3.0 (compatible; WebCapture 2.0; Auto; Windows)
 Mozilla/3.0 (compatible; WebMon 1.0.11; Windows XP)
 Mozilla/4.0 (compatible; Powermarks/3.5; Windows 95/98/2000/NT)
 Mozilla/3.0 (compatible; Linkman)
+Mozilla/5.0 (compatible; arste.info_bot/1.1; +http://www.arste.info)
+Mozilla/5.0 (compatible; askpeter_bot/5.1; +http://www.askpeter.info)
+Mozilla/5.0 (compatible; Feedtrace-bot/0.2; bot@feedtrace.com)
 Mozilla/5.0 (Sage)
 Mozilla/5.0 (compatible; http://www.livedir.net)
 Mozilla/4.0 (WebClipping.com)
@@ -271,6 +338,22 @@ Mozilla/5.0 (compatible; OsO; http://oso.octopodus.com/abot.html)
 Mozilla/5.0 (compatible; Yoono; http://www.yoono.com/)
 Mozilla/3.0 (compatible; Indy Library)
 Mozilla/5.0 (compatible; Google Desktop)
+Mozilla/5.0 (compatible; iCcrawler - iCjobs Stellenangebote Jobs; http://www.icjobs.de)
+Mozilla/5.0 (compatible; KaloogaBot; http://www.kalooga.com/info.html?page=crawler)
+Mozilla/5.0 (compatible; SecretSerachEngineLabs.com-SBSearch/0.9; http://www.secretsearchenginelabs.com/secret-web-crawler.php)
+Mozilla/5.0 (compatible; ScoutJet; +http://www.scoutjet.com/)
+Mozilla/5.0 (compatible; seexie.com_bot/4.1; +http://www.seexie.com)
+Mozilla/5.0 (compatible; Seznam screenshot-generator 2.0; +http://fulltext.sblog.cz/screenshot/)
+Mozilla/5.0 (compatible; TopBlogsInfo/2.0; +topblogsinfo@gmail.com)
+Mozilla/5.0 (compatible; Yahoo! SearchMonkey 1.0; http://developer.yahoo.com/searchmonkey/useragent)
+Mozilla/5.0 (compatible;archive.org_bot/1.7.0; Archive-It; +http://www.archive-it.org)
+Mozilla/5.0 (compatible;picmole/1.0 +http://www.picmole.com)
+Mozilla/5.0 (X11; compatible; crawler@newstin.com; HTTPClient 3.1)
+Mozilla/4.0 (MobilePhone SCP-5500/US/1.0) NetFront/3.0 MMP/2.0 FAKE (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
+Nokia6681/1.0 (2.30.0) Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1 (compatible; baiduspider; +http://www.baidu.com/search/spider.html)
+Nokia3650/1.0 SymbianOS/6.1 Series60/1.2 Profile/MIDP-1.0 Configuration/CLDC-1.0/ (compatible; YodaoBot-Mobile/1.0; http://www.youdao.com/help/webmaster/spider/; )
+NokiaN70/. FASTMobileCrawl/6.6 Profile/MIDP-2.0 Configuration/CLDC-1.1
+SAMSUNG-SGH-E250/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)
 PingALink Monitoring Services 1.0 (http://www.pingalink.com)
 IlTrovatore-Setaccio (+ ">http://www.iltrovatore.it)
 Mercator-2.0
@@ -282,19 +365,39 @@ NASA Search 1.0
 search.ch V1.4.2 (spiderman@search.ch;
 WebFilter Robot 1.0
 WWWeasel Robot v1.00 (http://wwweasel.de)
+Advista Crawler 2.02
+Yahoo Pipes 1.0
+DevCore Search Engine 0.0.4 http://devcore.eu.org/search/
+Firebat 2.9.1 (http://lms.virtual-presence.org)
+GiNDev/Nutch-0.9 (Germanistik im Netz; http://www.germanistik-im-netz.de/gin-www-search/gin-www-search-about.html; D dot Eichner at ub dot uni-frankfurt dot de)
+Nutch/Nutch-0.8.1 (Nutch; Nutch; Nutch)
+Iceweasel2.0.0.16/Nutch-1.0 (Webbrowser; http://iceweasel.com; info@iceweasel.com)
+nu_tch-princeton/Nu_tch-1.0-dev (princeton crawler for cass project; http://www.cs.princeton.edu/cass/; zhewang a_t cs ddot princeton dot edu)
+larbin_2.6.3 larbin2.6.3@unspecified.mail
 2.0_AC-Plug - http://www.iOpus.com
 Openfind data gatherer, Openbot/3.0+(robot-response@openfind.com.tw;+
 MSRBOT (http://research.microsoft.com/research/sv/msrbot)
+MLBot (www.metadatalabs.com/mlbot)
 ICCrawler - ICjobs (http://www.icjobs.de/bot.htm)
+ICC-Crawler/2.0 (Mozilla-compatible; ; http://kc.nict.go.jp/project1/crawl.html)
 Baiduspider+(+http://www.baidu.com/search/spider.htm)
+BaiduImagespider+(+http://www.baidu.jp/spider/)
 BaiDuSpider
+Sosospider+(+http://help.soso.com/webspider.htm)
+Sosoimagespider+(+http://help.soso.com/soso-image-spider.htm)
+Cityreview Robot (+http://www.cityreview.org/crawler/)
+Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/)
 LinkWalker
+yacybot (amd64 Linux 2.6.28-15-generic; java 1.6.0_16; Europe/de) http://yacy.net/bot.html
+webcrawler (compatible; heritrix/1.14.3 ++http://www.onb.ac.at/about/webarchivierung.htm)
 Internet Explorer 5.5
 Mozilla/4.0 (compatible; B-l-i-t-z-B-O-T)
+LargeSmall Crawler (LargeSmall; http://onespot.com; info@onespot.com)
 B l i t z B O T @ t r i c u s . n e t (Mozilla compatible)
 sitecheck.internetseer.com (For more info see: ">http://sitecheck.internetseer.com)
 http://www.almaden.ibm.com/cs/crawler   [c01]
 ia_archiver
+ia_archiver (+http://www.alexa.com/site/help/webmasters; crawler@alexa.com)
 Nutch
 NutchCVS
 Mozilla