changeset 7:93ff6d1ef647

stable standalone scanner module
author carl
date Thu, 22 Apr 2004 08:38:07 -0700
parents cea50d98a6cf
children dbe18921f741
files src/scanner.cpp
diffstat 1 files changed, 317 insertions(+), 300 deletions(-) [+]
line wrap: on
line diff
--- a/src/scanner.cpp	Wed Apr 21 22:39:46 2004 -0700
+++ b/src/scanner.cpp	Thu Apr 22 08:38:07 2004 -0700
@@ -25,291 +25,301 @@
              black,     // blacklisted by envelope from or to
              reject};   // rejected by a dns list
 
-enum state {//u_init,         // url  decoder states
+enum state {// url  decoder states
+            u_init,
+            u_http,
+            u_sla,
+            u_url,
 
-            m_init,         // mime decoder states
+            // html entity decoder states
+            e_init,
+            e_amp,
+            e_num,
+
+            // mime decoder states
+            m_init,
             m_eq,
             m_1,
 
-            e_init,         // html entity decoder states
-            e_amp,
-            e_num,
-
-            b_init,         // base64 decoder states
+            // base64 decoder states
+            b_init,
             b_lf,
             b_lf2,
             b_64,
 
-            end_state,      // counter for number of columns in the table
+            // counter for number of columns in the table
+            end_state,
 
-            m_2,            // temporary mime states
+            // temporary mime states
+            u_reco,
+            e_semi,
+            m_2,
             m_cr,
             m_nl,
-            e_semi,
             b_cr,
            };
 
 typedef state PARSE[end_state];
 
 static PARSE parse_table[256] = {
-  // m_init,    m_eq,   m_1,    e_init, e_amp,  e_num,  b_init, b_lf,   b_lf2,  b_64
+  // u_init, u_http, u_sla , u_url,  e_init, e_amp,  e_num,  m_init, m_eq,   m_1,    b_init, b_lf,   b_lf2,  b_64
 
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x00
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x01
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x02
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x03
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x04
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x05
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x06
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x07
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x08
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x09
-    {m_init,    m_nl,   m_init, e_init, e_init, e_init, b_lf,   b_init, b_lf2,  b_init,  },  // 0x0a <lf>
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x0b
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x0c
-    {m_init,    m_cr,   m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_cr,    },  // 0x0d <cr>
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x0e
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x0f
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x10
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x11 xon char
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x12
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x13 xoff char
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x14
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x15
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x16
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x17
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x18
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x19
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x1a
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x1b
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x1c
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x1d
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x1e
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x1f
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x20 space
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x21 !
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x22 ""
-    {m_init,    m_init, m_init, e_init, e_num,  e_init, b_init, b_init, b_init, b_init,  },  // 0x23 #
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x24 $
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x25 %
-    {m_init,    m_init, m_init, e_amp,  e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x26 &
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x27 '
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x28 (
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x29 )
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x2A *
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x2B +
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x2C ,
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x2D -
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x2E .
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x2F /
-    {m_init,    m_1,    m_2,    e_init, e_init, e_num,  b_init, b_64,   b_64,   b_64,    },  // 0x30 0
-    {m_init,    m_1,    m_2,    e_init, e_init, e_num,  b_init, b_64,   b_64,   b_64,    },  // 0x31 1
-    {m_init,    m_1,    m_2,    e_init, e_init, e_num,  b_init, b_64,   b_64,   b_64,    },  // 0x32 2
-    {m_init,    m_1,    m_2,    e_init, e_init, e_num,  b_init, b_64,   b_64,   b_64,    },  // 0x33 3
-    {m_init,    m_1,    m_2,    e_init, e_init, e_num,  b_init, b_64,   b_64,   b_64,    },  // 0x34 4
-    {m_init,    m_1,    m_2,    e_init, e_init, e_num,  b_init, b_64,   b_64,   b_64,    },  // 0x35 5
-    {m_init,    m_1,    m_2,    e_init, e_init, e_num,  b_init, b_64,   b_64,   b_64,    },  // 0x36 6
-    {m_init,    m_1,    m_2,    e_init, e_init, e_num,  b_init, b_64,   b_64,   b_64,    },  // 0x37 7
-    {m_init,    m_1,    m_2,    e_init, e_init, e_num,  b_init, b_64,   b_64,   b_64,    },  // 0x38 8
-    {m_init,    m_1,    m_2,    e_init, e_init, e_num,  b_init, b_64,   b_64,   b_64,    },  // 0x39 9
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x3A :
-    {m_init,    m_init, m_init, e_init, e_init, e_semi, b_init, b_init, b_init, b_init,  },  // 0x3B ;
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x3C <
-    {m_eq,      m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x3D =
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x3E >
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x3F ?
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x40 @
-    {m_init,    m_1,    m_2,    e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x41 A
-    {m_init,    m_1,    m_2,    e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x42 B
-    {m_init,    m_1,    m_2,    e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x43 C
-    {m_init,    m_1,    m_2,    e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x44 D
-    {m_init,    m_1,    m_2,    e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x45 E
-    {m_init,    m_1,    m_2,    e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x46 F
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x47 G
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x48 H
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x49 I
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x4A J
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x4B K
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x4C L
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x4D M
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x4E N
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x4F O
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x50 P
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x51 Q
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x52 R
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x53 S
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x54 T
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x55 U
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x56 V
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x57 W
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x58 X
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x59 Y
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x5A Z
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x5B [
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x5C brace
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x5D ]
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x5E ^
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x5F _
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x60 `
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x61 a
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x62 b
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x63 c
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x64 d
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x65 e
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x66 f
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x67 g
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x68 h
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x69 i
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x6A j
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x6B k
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x6C l
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x6D m
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x6E n
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x6F o
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x70 p
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x71 q
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x72 r
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x73 s
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x74 t
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x75 u
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x76 v
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x77 w
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x78 x
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x79 y
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_64,   b_64,   b_64,    },  // 0x7A z
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x7B {
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x7C |
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x7D }
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x7E ~
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x7f
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x80
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x81
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x82
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x83
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x84
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x85
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x86
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x87
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x88
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x89
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x8a
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x8b
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x8c
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x8d
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x8e
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x8f
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x90
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x91
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x92
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x93
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x94
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x95
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x96
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x97
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x98
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x99
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x9a
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x9b
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x9c
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x9d
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x9e
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0x9f
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xa0
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xa1
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xa2
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xa3
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xa4
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xa5
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xa6
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xa7
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xa8
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xa9
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xaa
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xab
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xac
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xad
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xae
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xaf
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xb0
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xb1
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xb2
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xb3
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xb4
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xb5
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xb6
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xb7
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xb8
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xb9
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xba
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xbb
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xbc
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xbd
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xbe
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xbf
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xc0
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xc1
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xc2
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xc3
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xc4
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xc5
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xc6
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xc7
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xc8
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xc9
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xca
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xcb
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xcc
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xcd
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xce
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xcf
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xd0
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xd1
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xd2
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xd3
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xd4
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xd5
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xd6
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xd7
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xd8
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xd9
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xda
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xdb
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xdc
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xdd
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xde
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xdf
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xe0
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xe1
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xe2
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xe3
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xe4
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xe5
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xe6
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xe7
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xe8
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xe9
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xea
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xeb
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xec
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xed
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xee
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xef
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xf0
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xf1
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xf2
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xf3
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xf4
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xf5
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xf6
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xf7
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xf8
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xf9
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xfa
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xfb
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xfc
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xfd
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xfe
-    {m_init,    m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init,  },  // 0xff
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x00
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x01
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x02
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x03
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x04
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x05
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x06
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x07
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x08
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x09 <tab>
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_nl,   m_init, b_lf,   b_init, b_lf2,  b_init,  },  // 0x0a <lf>
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x0b
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x0c
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_cr,   m_init, b_init, b_init, b_init, b_cr,    },  // 0x0d <cr>
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x0e
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x0f
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x10
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x11 xon char
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x12
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x13 xoff char
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x14
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x15
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x16
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x17
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x18
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x19
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1a
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1b
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1c
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1d
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1e
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x1f
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x20 space
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x21 !
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x22 ""
+    {u_init, u_init, u_init, u_reco, e_init, e_num,  e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x23 #
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x24 $
+    {u_init, u_init, u_init, u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x25 %
+    {u_init, u_init, u_init, u_reco, e_amp,  e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x26 &
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x27 '
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x28 (
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x29 )
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x2A *
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x2B +
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x2C ,
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x2D -
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x2E .
+    {u_init, u_sla,  u_sla,  u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x2F /
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x30 0
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x31 1
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x32 2
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x33 3
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x34 4
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x35 5
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x36 6
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x37 7
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x38 8
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_num,  m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x39 9
+    {u_http, u_http, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3A :
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_semi, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3B ;
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3C <
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_eq,   m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x3D =
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3E >
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x3F ?
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x40 @
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x41 A
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x42 B
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x43 C
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x44 D
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x45 E
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x46 F
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x47 G
+    {u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x48 H
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x49 I
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4A J
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4B K
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4C L
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4D M
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4E N
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x4F O
+    {u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x50 P
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x51 Q
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x52 R
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x53 S
+    {u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x54 T
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x55 U
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x56 V
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x57 W
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x58 X
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x59 Y
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x5A Z
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5B [
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5C brace
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5D ]
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5E ^
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x5F _
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x60 `
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x61 a
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x62 b
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x63 c
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x64 d
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x65 e
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_1,    m_2,    b_init, b_64,   b_64,   b_64,    },  // 0x66 f
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x67 g
+    {u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x68 h
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x69 i
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6A j
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6B k
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6C l
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6D m
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6E n
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x6F o
+    {u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x70 p
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x71 q
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x72 r
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x73 s
+    {u_http, u_http, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x74 t
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x75 u
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x76 v
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x77 w
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x78 x
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x79 y
+    {u_init, u_init, u_url,  u_url,  e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64,   b_64,   b_64,    },  // 0x7A z
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7B {
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7C |
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7D }
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7E ~
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x7f
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x80
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x81
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x82
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x83
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x84
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x85
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x86
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x87
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x88
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x89
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8a
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8b
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8c
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8d
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8e
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x8f
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x90
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x91
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x92
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x93
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x94
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x95
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x96
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x97
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x98
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x99
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9a
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9b
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9c
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9d
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9e
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0x9f
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa0
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa1
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa2
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa3
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa4
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa5
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa6
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa7
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa8
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xa9
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xaa
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xab
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xac
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xad
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xae
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xaf
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb0
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb1
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb2
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb3
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb4
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb5
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb6
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb7
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb8
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xb9
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xba
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbb
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbc
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbd
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbe
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xbf
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc0
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc1
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc2
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc3
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc4
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc5
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc6
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc7
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc8
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xc9
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xca
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xcb
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xcc
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xcd
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xce
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xcf
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd0
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd1
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd2
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd3
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd4
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd5
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd6
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd7
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd8
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xd9
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xda
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xdb
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xdc
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xdd
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xde
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xdf
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe0
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe1
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe2
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe3
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe4
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe5
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe6
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe7
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe8
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xe9
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xea
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xeb
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xec
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xed
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xee
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xef
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf0
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf1
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf2
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf3
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf4
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf5
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf6
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf7
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf8
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xf9
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfa
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfb
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfc
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfd
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xfe
+    {u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init,  },  // 0xff
 };
 
 
@@ -323,11 +333,11 @@
     0,  // 0x06
     0,  // 0x07
     0,  // 0x08
-    0,  // 0x09
-    0,  // 0x0a
+    0,  // 0x09 <tab>
+    0,  // 0x0a <lf>
     0,  // 0x0b
     0,  // 0x0c
-    0,  // 0x0d
+    0,  // 0x0d <cr>
     0,  // 0x0e
     0,  // 0x0f
     0,  // 0x10
@@ -581,11 +591,11 @@
     0,  // 0x06
     0,  // 0x07
     0,  // 0x08
-    0,  // 0x09
-    0,  // 0x0a
+    0,  // 0x09 <tab>
+    0,  // 0x0a <lf>
     0,  // 0x0b
     0,  // 0x0c
-    0,  // 0x0d
+    0,  // 0x0d <cr>
     0,  // 0x0e
     0,  // 0x0f
     0,  // 0x10
@@ -855,10 +865,6 @@
         // guard against buffer overflow
         if (count == PENDING_LIMIT-1) {
             if (next) next->push(pending, count);
-            else {
-                pending[count] = 0;
-                fprintf(stdout, "%s", (char*)pending);
-            }
             count = 0;
             st    = init;
         }
@@ -867,6 +873,25 @@
         switch (st) {
 
             //////////////////////////////
+            //  url recognizer
+            case u_sla: {
+                if ((count < 6) || (7 < count)) {
+                    count = 0;
+                    st    = u_init;
+                }
+                } break;
+
+            case u_reco: {
+                pending[count-1] = 0;
+                if (strncasecmp((const char *)pending, "http://", 7) == 0) fprintf(stdout, "%s\n", pending);
+                }   // fall thru
+
+            case u_init: {
+                count = 0;  // discard all characters
+                } break;
+
+
+            //////////////////////////////
             //  mime decoder
             case m_2: {
                 pending[0] = hex_decode[pending[1]] * 16 + hex_decode[pending[2]];
@@ -876,10 +901,6 @@
 
             case m_init: {
                 if (next) next->push(pending, count);
-                else {
-                    pending[count] = 0;
-                    fprintf(stdout, "%s", (char*)pending);
-                }
                 count = 0;
                 } break;
 
@@ -904,10 +925,6 @@
 
             case e_init: {
                 if (next) next->push(pending, count);
-                else {
-                    pending[count] = 0;
-                    fprintf(stdout, "%s", (char*)pending);
-                }
                 count = 0;
                 } break;
 
@@ -943,15 +960,13 @@
             case b_lf:
             case b_init: {
                 if (next) next->push(pending, count);
-                else {
-                    pending[count] = 0;
-                    fprintf(stdout, "%s", (char*)pending);
-                }
                 count = 0;
                 } break;
 
             //////////////////////////////
             //  states that just accumulate characters in the pending buffer
+            case u_http:
+            case u_url:
             case e_amp:
             case e_num:
             case b_64:
@@ -1028,7 +1043,8 @@
 int main(int argc, char**argv)
 {
     char *fn = argv[1];
-    fsa *html_parser = new fsa(e_init, NULL);
+    fsa *urls_parser = new fsa(u_init, NULL);
+    fsa *html_parser = new fsa(e_init, urls_parser);
     fsa *mime_parser = new fsa(m_init, html_parser);
     fsa *b64_parser  = new fsa(b_init, mime_parser);
     if (fn) scan_file(fn, *b64_parser);