diff --git a/Network/HPACK.hs b/Network/HPACK.hs
--- a/Network/HPACK.hs
+++ b/Network/HPACK.hs
@@ -3,12 +3,8 @@
   -- * Encoding and decoding
     HPACKEncoding
   , HPACKDecoding
-  -- * Request
-  , encodeRequestHeader
-  , decodeRequestHeader
-  -- * Response
-  , encodeResponseHeader
-  , decodeResponseHeader
+  , encodeHeader
+  , decodeHeader
   -- * Contenxt
   , Context
   , newContextForEncoding
@@ -35,7 +31,6 @@
 import Control.Exception (throwIO)
 import Network.HPACK.Context (Context, newContextForEncoding, newContextForDecoding, HeaderSet)
 import Network.HPACK.HeaderBlock (toHeaderBlock, fromHeaderBlock, toByteStream, fromByteStream)
-import Network.HPACK.Huffman (huffmanEncodeInRequest, huffmanDecodeInRequest, huffmanEncodeInResponse, huffmanDecodeInResponse)
 import Network.HPACK.Table (Size)
 import Network.HPACK.Types
 
@@ -50,35 +45,15 @@
 ----------------------------------------------------------------
 
 -- | Converting 'HeaderSet' for HTTP request to the low level format.
-encodeRequestHeader :: EncodeStrategy -> HPACKEncoding
-encodeRequestHeader stgy ctx hs = second toBS <$> toHeaderBlock algo ctx hs
+encodeHeader :: EncodeStrategy -> HPACKEncoding
+encodeHeader stgy ctx hs = second toBS <$> toHeaderBlock algo ctx hs
   where
     algo = compressionAlgo stgy
-    toBS
-      | useHuffman stgy = toByteStream huffmanEncodeInRequest True
-      | otherwise       = toByteStream id                     False
+    toBS = toByteStream (useHuffman stgy)
 
 -- | Converting the low level format for HTTP request to 'HeaderSet'.
 --   'DecodeError' would be thrown.
-decodeRequestHeader :: HPACKDecoding
-decodeRequestHeader ctx bs = either throwIO (fromHeaderBlock ctx) ehb
-  where
-    ehb = fromByteStream huffmanDecodeInRequest bs
-
-----------------------------------------------------------------
-
--- | Converting 'HeaderSet' for HTTP response to the low level format.
-encodeResponseHeader :: EncodeStrategy -> HPACKEncoding
-encodeResponseHeader stgy ctx hs = second toBS <$> toHeaderBlock algo ctx hs
-  where
-    algo = compressionAlgo stgy
-    toBS
-      | useHuffman stgy = toByteStream huffmanEncodeInResponse True
-      | otherwise       = toByteStream id                      False
-
--- | Converting the low level format for HTTP response to 'HeaderSet'.
---   'DecodeError' would be thrown.
-decodeResponseHeader :: HPACKDecoding
-decodeResponseHeader ctx bs = either throwIO (fromHeaderBlock ctx) ehb
+decodeHeader :: HPACKDecoding
+decodeHeader ctx bs = either throwIO (fromHeaderBlock ctx) ehb
   where
-    ehb = fromByteStream huffmanDecodeInResponse bs
+    ehb = fromByteStream bs
diff --git a/Network/HPACK/HeaderBlock/Decode.hs b/Network/HPACK/HeaderBlock/Decode.hs
--- a/Network/HPACK/HeaderBlock/Decode.hs
+++ b/Network/HPACK/HeaderBlock/Decode.hs
@@ -10,29 +10,27 @@
 import Network.HPACK.HeaderBlock.HeaderField
 import qualified Network.HPACK.HeaderBlock.Integer as I
 import qualified Network.HPACK.HeaderBlock.String as S
-import Network.HPACK.Huffman
 import Network.HPACK.Types
 
 ----------------------------------------------------------------
 
 -- | Converting the low level format to 'HeaderBlock'.
-fromByteStream :: HuffmanDecoding -> ByteStream
-               -> Either DecodeError HeaderBlock
-fromByteStream hd inp = go inp empty
+fromByteStream :: ByteStream -> Either DecodeError HeaderBlock
+fromByteStream inp = go inp empty
   where
     go bs builder
       | BS.null bs = Right $ run builder
       | otherwise  = do
-        (hf, bs') <- toHeaderField hd bs
+        (hf, bs') <- toHeaderField bs
         go bs' (builder << hf)
 
-toHeaderField :: HuffmanDecoding -> ByteString
+toHeaderField :: ByteString
               -> Either DecodeError (HeaderField, ByteString)
-toHeaderField hd bs
+toHeaderField bs
   | BS.null bs    = Left EmptyBlock
   | w `testBit` 7 = Right $ indexed w bs'
-  | w `testBit` 6 = withoutIndexing hd w bs'
-  | otherwise     = incrementalIndexing hd w bs'
+  | w `testBit` 6 = withoutIndexing w bs'
+  | otherwise     = incrementalIndexing w bs'
   where
     w = BS.head bs
     bs' = BS.tail bs
@@ -45,24 +43,24 @@
     w' = clearBit w 7
     (idx, ws') = I.parseInteger 7 w' ws
 
-withoutIndexing :: HuffmanDecoding -> Word8 -> ByteString
+withoutIndexing :: Word8 -> ByteString
                 -> Either DecodeError (HeaderField, ByteString)
-withoutIndexing hd w ws
-  | isIndexedName w = indexedName NotAdd hd w ws
-  | otherwise       = newName NotAdd hd ws
+withoutIndexing w ws
+  | isIndexedName w = indexedName NotAdd w ws
+  | otherwise       = newName NotAdd ws
 
-incrementalIndexing :: HuffmanDecoding -> Word8 -> ByteString
+incrementalIndexing :: Word8 -> ByteString
                     -> Either DecodeError (HeaderField, ByteString)
-incrementalIndexing hd w ws
-  | isIndexedName w = indexedName Add hd w ws
-  | otherwise       = newName Add hd ws
+incrementalIndexing w ws
+  | isIndexedName w = indexedName Add w ws
+  | otherwise       = newName Add ws
 
 ----------------------------------------------------------------
 
-indexedName :: Indexing -> HuffmanDecoding -> Word8 -> ByteString
+indexedName :: Indexing -> Word8 -> ByteString
             -> Either DecodeError (HeaderField, ByteString)
-indexedName indexing hd w ws = do
-    (val,ws'') <- headerStuff hd ws'
+indexedName indexing w ws = do
+    (val,ws'') <- headerStuff ws'
     let hf = Literal indexing (Idx idx) val
     return (hf, ws'')
   where
@@ -70,21 +68,21 @@
     (idx,ws') = I.parseInteger 6 p ws
 
 
-newName :: Indexing -> HuffmanDecoding -> ByteString
+newName :: Indexing -> ByteString
         -> Either DecodeError (HeaderField, ByteString)
-newName indexing hd ws = do
-    (key,ws')  <- headerStuff hd ws
-    (val,ws'') <- headerStuff hd ws'
+newName indexing ws = do
+    (key,ws')  <- headerStuff ws
+    (val,ws'') <- headerStuff ws'
     let hf = Literal indexing (Lit key) val
     return (hf, ws'')
 
 ----------------------------------------------------------------
 
-headerStuff :: HuffmanDecoding -> ByteString
+headerStuff :: ByteString
             -> Either DecodeError (HeaderStuff, ByteString)
-headerStuff hd bs
+headerStuff bs
   | BS.null bs  = Left EmptyEncodedString
-  | otherwise   = S.parseString hd huff len bs''
+  | otherwise   = S.parseString huff len bs''
   where
     w = BS.head bs
     bs' = BS.tail bs
diff --git a/Network/HPACK/HeaderBlock/Encode.hs b/Network/HPACK/HeaderBlock/Encode.hs
--- a/Network/HPACK/HeaderBlock/Encode.hs
+++ b/Network/HPACK/HeaderBlock/Encode.hs
@@ -12,23 +12,22 @@
 import Network.HPACK.HeaderBlock.HeaderField
 import qualified Network.HPACK.HeaderBlock.Integer as I
 import qualified Network.HPACK.HeaderBlock.String as S
-import Network.HPACK.Huffman
 import Network.HPACK.Types
 
 ----------------------------------------------------------------
 
 -- | Converting 'HeaderBlock' to the low level format.
-toByteStream :: HuffmanEncoding -> Bool -> HeaderBlock -> ByteStream
-toByteStream he huff hbs = BB.toByteString $ foldl' (<>) mempty $ map toBB hbs
+toByteStream :: Bool -> HeaderBlock -> ByteStream
+toByteStream huff hbs = BB.toByteString $ foldl' (<>) mempty $ map toBB hbs
   where
-    toBB = fromHeaderField he huff
+    toBB = fromHeaderField huff
 
-fromHeaderField :: HuffmanEncoding -> Bool -> HeaderField -> Builder
-fromHeaderField _  _    (Indexed idx)                = index idx
-fromHeaderField he huff (Literal NotAdd (Idx idx) v) = indexedName he huff set01 idx v
-fromHeaderField he huff (Literal NotAdd (Lit key) v) = newName     he huff set01 key v
-fromHeaderField he huff (Literal Add    (Idx idx) v) = indexedName he huff set00 idx v
-fromHeaderField he huff (Literal Add    (Lit key) v) = newName     he huff set00 key v
+fromHeaderField :: Bool -> HeaderField -> Builder
+fromHeaderField _    (Indexed idx)                = index idx
+fromHeaderField huff (Literal NotAdd (Idx idx) v) = indexedName huff set01 idx v
+fromHeaderField huff (Literal NotAdd (Lit key) v) = newName     huff set01 key v
+fromHeaderField huff (Literal Add    (Idx idx) v) = indexedName huff set00 idx v
+fromHeaderField huff (Literal Add    (Lit key) v) = newName     huff set00 key v
 
 ----------------------------------------------------------------
 
@@ -39,12 +38,12 @@
     w' = set1 w
 
 -- Using Huffman encoding
-indexedName :: HuffmanEncoding -> Bool -> Setter -> Int -> HeaderValue -> Builder
-indexedName he huff set idx v = pre <> vlen <> val
+indexedName :: Bool -> Setter -> Int -> HeaderValue -> Builder
+indexedName huff set idx v = pre <> vlen <> val
   where
     (p:ps) = I.encode 6 idx
     pre = BB.fromWord8s $ set p : ps
-    value = S.encode he v
+    value = S.encode huff v
     valueLen = BS.length value
     vlen
       | huff      = BB.fromWord8s $ setH $ I.encode 7 valueLen
@@ -52,13 +51,13 @@
     val = BB.fromByteString value
 
 -- Using Huffman encoding
-newName :: HuffmanEncoding -> Bool -> Setter -> HeaderName -> HeaderValue -> Builder
-newName he huff set k v = pre <> klen <> key <> vlen <> val
+newName :: Bool -> Setter -> HeaderName -> HeaderValue -> Builder
+newName huff set k v = pre <> klen <> key <> vlen <> val
   where
     pre = BB.fromWord8 $ set 0
-    key0 = S.encode he k
+    key0 = S.encode huff k
     keyLen = BS.length key0
-    value = S.encode he v
+    value = S.encode huff v
     valueLen = BS.length value
     klen
       | huff      = BB.fromWord8s $ setH $ I.encode 7 keyLen
diff --git a/Network/HPACK/HeaderBlock/String.hs b/Network/HPACK/HeaderBlock/String.hs
--- a/Network/HPACK/HeaderBlock/String.hs
+++ b/Network/HPACK/HeaderBlock/String.hs
@@ -1,26 +1,31 @@
-module Network.HPACK.HeaderBlock.String where
+module Network.HPACK.HeaderBlock.String (
+    encode
+  , parseString
+  ) where
 
 import Data.ByteString (ByteString)
 import qualified Data.ByteString as BS
-import Network.HPACK.Huffman
+import qualified Network.HPACK.Huffman as Huffman
 import Network.HPACK.Types
 
 -- | Encoding 'HeaderStuff' to 'ByteString' according to 'HuffmanEncoding'.
-encode :: HuffmanEncoding -> HeaderStuff -> ByteString
-encode he h = he h
+encode :: Bool -> HeaderStuff -> ByteString
+encode True h = Huffman.encode h
+encode _    h = h
 
+-- fixme: removing
 -- | Decoding 'ByteString' to 'HeaderStuff' according to 'HuffmanDecoding'.
-decode :: HuffmanDecoding -> ByteString -> Either DecodeError HeaderStuff
-decode hd ws = hd ws
+decode :: ByteString -> Either DecodeError HeaderStuff
+decode ws = Huffman.decode ws
 
 -- | Parsing 'HeaderStuff' from 'ByteString'.
 --   The second 'Bool' is whether or not huffman encoding is used.
 --   The third 'Int' is the length of the encoded string.
-parseString :: HuffmanDecoding -> Bool -> Int -> ByteString
+parseString :: Bool -> Int -> ByteString
             -> Either DecodeError (HeaderStuff, ByteString)
-parseString _  False len bs = Right (es, bs')
+parseString False len bs = Right (es, bs')
   where
     (es, bs') = BS.splitAt len bs
-parseString hd True  len bs = decode hd es >>= \x -> return (x,bs')
+parseString True  len bs = decode es >>= \x -> return (x,bs')
   where
     (es, bs') = BS.splitAt len bs
diff --git a/Network/HPACK/HeaderBlock/To.hs b/Network/HPACK/HeaderBlock/To.hs
--- a/Network/HPACK/HeaderBlock/To.hs
+++ b/Network/HPACK/HeaderBlock/To.hs
@@ -20,6 +20,7 @@
               -> HeaderSet
               -> IO (Context, HeaderBlock)
 toHeaderBlock Naive  !ctx hs = reset ctx >>= encodeLoop naiveStep  hs
+toHeaderBlock Static !ctx hs = reset ctx >>= encodeLoop staticStep hs
 toHeaderBlock Linear !ctx hs = reset ctx >>= encodeLoop linearStep hs
 toHeaderBlock Diff   !ctx hs = encodeLoop diffStep hs (ctx, empty)
 
@@ -53,6 +54,20 @@
 naiveStep :: Step
 naiveStep (!ctx,!builder) (k,v) = do
     let builder' = builder << Literal NotAdd (Lit k) v
+    return (ctx, builder')
+
+----------------------------------------------------------------
+
+staticStep :: Step
+staticStep (!ctx,!builder) h@(k,v) = do
+    let cache = lookupHeader h ctx
+        b = case cache of
+            None                     -> Literal NotAdd (Lit k) v
+            KeyOnly  InStaticTable i -> Literal NotAdd (Idx i) v
+            KeyOnly  InHeaderTable _ -> Literal NotAdd (Lit k) v
+            KeyValue InStaticTable i -> Literal NotAdd (Idx i) v
+            KeyValue InHeaderTable _ -> Literal NotAdd (Lit k) v
+    let builder' = builder << b
     return (ctx, builder')
 
 ----------------------------------------------------------------
diff --git a/Network/HPACK/Huffman.hs b/Network/HPACK/Huffman.hs
--- a/Network/HPACK/Huffman.hs
+++ b/Network/HPACK/Huffman.hs
@@ -3,13 +3,9 @@
     HuffmanEncoding
   , HuffmanDecoding
   -- * Encoding/decoding
-  , huffmanEncodeInRequest
-  , huffmanDecodeInRequest
-  , huffmanEncodeInResponse
-  , huffmanDecodeInResponse
+  , encode
+  , decode
   ) where
 
 import Network.HPACK.Huffman.Decode
 import Network.HPACK.Huffman.Encode
-import Network.HPACK.Huffman.Request
-import Network.HPACK.Huffman.Response
diff --git a/Network/HPACK/Huffman/Decode.hs b/Network/HPACK/Huffman/Decode.hs
--- a/Network/HPACK/Huffman/Decode.hs
+++ b/Network/HPACK/Huffman/Decode.hs
@@ -1,8 +1,6 @@
 module Network.HPACK.Huffman.Decode (
   -- * Huffman decoding
-    Decoder
-  , toDecoder
-  , HuffmanDecoding
+    HuffmanDecoding
   , decode
   ) where
 
@@ -13,6 +11,7 @@
 import Network.HPACK.Huffman.Bit
 import Network.HPACK.Huffman.ByteString
 import Network.HPACK.Huffman.Params
+import Network.HPACK.Huffman.Table
 import Network.HPACK.Huffman.Tree
 import Network.HPACK.Types (DecodeError(..))
 
@@ -35,18 +34,16 @@
 next :: Way16 -> Word8 -> Pin
 next (Way16 _ a16) w = a16 ! w
 
-newtype Decoder = Decoder Way256
-
 ----------------------------------------------------------------
 
 -- | Huffman decoding.
-decode :: Decoder -> HuffmanDecoding
-decode (Decoder way256) bs = dec way256 qs
+decode :: HuffmanDecoding
+decode bs = dec qs
   where
     qs = unpack4bits bs
 
-dec :: Way256 -> [Word8] -> Either DecodeError ByteString
-dec way256 inp = go (way256 ! 0) inp w8empty
+dec :: [Word8] -> Either DecodeError ByteString
+dec inp = go (way256 ! 0) inp w8empty
   where
     go :: Way16 -> [Word8] -> Word8Builder -> Either DecodeError ByteString
     go (Way16 Nothing  _) [] _       = Left IllegalEos
@@ -60,11 +57,11 @@
 
 ----------------------------------------------------------------
 
-toDecoder :: [Bits] -> Decoder
-toDecoder = construct . toHTree
+way256 :: Way256
+way256 = construct $ toHTree huffmanTable
 
-construct :: HTree -> Decoder
-construct decoder = Decoder $ listArray (0,255) $ map to16ways $ flatten decoder
+construct :: HTree -> Way256
+construct decoder = listArray (0,255) $ map to16ways $ flatten decoder
   where
     to16ways x = Way16 ei a16
       where
diff --git a/Network/HPACK/Huffman/Encode.hs b/Network/HPACK/Huffman/Encode.hs
--- a/Network/HPACK/Huffman/Encode.hs
+++ b/Network/HPACK/Huffman/Encode.hs
@@ -2,9 +2,7 @@
 
 module Network.HPACK.Huffman.Encode (
   -- * Huffman encoding
-    Encoder
-  , toEncoder
-  , HuffmanEncoding
+    HuffmanEncoding
   , encode
   ) where
 
@@ -21,12 +19,12 @@
 import Network.HPACK.Huffman.Bit
 import Network.HPACK.Huffman.ByteString
 import Network.HPACK.Huffman.Params
+import Network.HPACK.Huffman.Table
 import System.IO.Unsafe (unsafePerformIO)
 
 ----------------------------------------------------------------
 
--- | Type for Huffman encoding.
-newtype Encoder = Encoder (Array Int ShiftedArray) deriving Show
+type AOSA = Array Int ShiftedArray
 
 type ShiftedArray = Array Int Shifted
 
@@ -37,9 +35,8 @@
 
 ----------------------------------------------------------------
 
--- | Creating 'Encoder'.
-toEncoder :: [Bits] -> Encoder
-toEncoder bss = Encoder $ listArray (0,idxEos) $ map toShiftedArray bss
+aosa :: AOSA
+aosa = listArray (0,idxEos) $ map toShiftedArray huffmanTable
 
 -- fixme
 -- |
@@ -78,8 +75,8 @@
 type HuffmanEncoding = ByteString -> ByteString
 
 -- | Huffman encoding.
-encode :: Encoder -> HuffmanEncoding
-encode (Encoder aoa) (PS fptr off len) = unsafePerformIO $ withForeignPtr fptr $ \ptr -> do
+encode :: HuffmanEncoding
+encode (PS fptr off len) = unsafePerformIO $ withForeignPtr fptr $ \ptr -> do
     let beg = ptr `plusPtr` off
         end = beg `plusPtr` len
     size <- accumSize beg end 0 0
@@ -90,7 +87,7 @@
       | src == lim = return acc
       | otherwise  = do
           i <- fromIntegral <$> peek src
-          let Shifted l n' _ = (aoa ! i) ! n
+          let Shifted l n' _ = (aosa ! i) ! n
           let !acc'
                | n == 0    = acc + l
                | otherwise = acc + l - 1
@@ -99,13 +96,13 @@
     go dst n src lim
       | src == lim = do
           when (n /= 0) $ do
-              let Shifted _ _ bs = (aoa ! idxEos) ! n
+              let Shifted _ _ bs = (aosa ! idxEos) ! n
               w0 <- peek dst
               let w1 = BS.head bs
               poke dst (w0 .|. w1)
       | otherwise  = do
           i <- fromIntegral <$> peek src
-          let Shifted l n' bs = (aoa ! i) ! n
+          let Shifted l n' bs = (aosa ! i) ! n
           if n == 0 then
               copy dst bs
             else do
diff --git a/Network/HPACK/Huffman/Request.hs b/Network/HPACK/Huffman/Request.hs
deleted file mode 100644
--- a/Network/HPACK/Huffman/Request.hs
+++ /dev/null
@@ -1,289 +0,0 @@
-module Network.HPACK.Huffman.Request (
-    huffmanEncodeInRequest
-  , huffmanDecodeInRequest
-  ) where
-
-import Network.HPACK.Huffman.Bit
-import Network.HPACK.Huffman.Decode
-import Network.HPACK.Huffman.Encode
-
-----------------------------------------------------------------
-
-encoderForRequest :: Encoder
-encoderForRequest = toEncoder huffmanRequest
-
--- | Hoffman encoding in HTTP/2.0 request.
-huffmanEncodeInRequest :: HuffmanEncoding
-huffmanEncodeInRequest = encode encoderForRequest
-
-----------------------------------------------------------------
-
-decoderForRequest :: Decoder
-decoderForRequest = toDecoder huffmanRequest
-
--- | Hoffman decoding in HTTP/2.0 request.
-huffmanDecodeInRequest :: HuffmanDecoding
-huffmanDecodeInRequest = decode decoderForRequest
-
-----------------------------------------------------------------
-
-huffmanRequest :: [Bits]
-huffmanRequest = [
-    [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,T]
-  , [T,T,T,F,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,F,T]
-  , [T,F,F,T,F,F]
-  , [T,T,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,F,T,F,F,T]
-  , [T,F,F,T,F,T]
-  , [F,F,T,F,F]
-  , [F,F,F,F]
-  , [F,F,T,F,T]
-  , [F,F,T,T,F]
-  , [F,F,T,T,T]
-  , [T,F,F,T,T,F]
-  , [T,F,F,T,T,T]
-  , [T,F,T,F,F,F]
-  , [T,F,T,F,F,T]
-  , [T,F,T,F,T,F]
-  , [T,F,T,F,T,T]
-  , [T,F,T,T,F,F]
-  , [T,T,T,T,F,T,T,F,F]
-  , [T,T,T,F,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
-  , [T,F,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,F,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,F,T,T]
-  , [T,T,F,T,T,T,T]
-  , [T,T,T,F,T,F,T,T]
-  , [T,T,T,F,T,T,F,F]
-  , [T,T,T,F,T,T,F,T]
-  , [T,T,T,F,T,T,T,F]
-  , [T,T,T,F,F,F,F]
-  , [T,T,T,T,F,T,T,T,F]
-  , [T,T,T,T,F,T,T,T,T]
-  , [T,T,T,T,T,F,F,F,F]
-  , [T,T,T,T,T,F,F,F,T]
-  , [T,T,T,T,T,T,T,F,T,T]
-  , [T,T,T,T,T,F,F,T,F]
-  , [T,T,T,F,T,T,T,T]
-  , [T,T,T,T,T,F,F,T,T]
-  , [T,T,T,T,T,F,T,F,F]
-  , [T,T,T,T,T,F,T,F,T]
-  , [T,T,T,T,T,F,T,T,F]
-  , [T,T,T,T,T,F,T,T,T]
-  , [T,T,T,T,F,F,F,F]
-  , [T,T,T,T,F,F,F,T]
-  , [T,T,T,T,T,T,F,F,F]
-  , [T,T,T,T,T,T,F,F,T]
-  , [T,T,T,T,T,T,F,T,F]
-  , [T,T,T,T,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,F,T]
-  , [T,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
-  , [F,T,F,F,F]
-  , [T,F,T,T,T,T]
-  , [F,T,F,F,T]
-  , [T,T,F,F,F,F]
-  , [F,F,F,T]
-  , [T,T,F,F,F,T]
-  , [T,T,F,F,T,F]
-  , [T,T,F,F,T,T]
-  , [F,T,F,T,F]
-  , [T,T,T,F,F,F,T]
-  , [T,T,T,F,F,T,F]
-  , [F,T,F,T,T]
-  , [T,T,F,T,F,F]
-  , [F,T,T,F,F]
-  , [F,T,T,F,T]
-  , [F,T,T,T,F]
-  , [T,T,T,T,F,F,T,F]
-  , [F,T,T,T,T]
-  , [T,F,F,F,F]
-  , [T,F,F,F,T]
-  , [T,T,F,T,F,T]
-  , [T,T,T,F,F,T,T]
-  , [T,T,F,T,T,F]
-  , [T,T,T,T,F,F,T,T]
-  , [T,T,T,T,F,T,F,F]
-  , [T,T,T,T,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,F]
-  ]
diff --git a/Network/HPACK/Huffman/Response.hs b/Network/HPACK/Huffman/Response.hs
deleted file mode 100644
--- a/Network/HPACK/Huffman/Response.hs
+++ /dev/null
@@ -1,288 +0,0 @@
-module Network.HPACK.Huffman.Response (
-    huffmanEncodeInResponse
-  , huffmanDecodeInResponse
-  ) where
-
-import Network.HPACK.Huffman.Bit
-import Network.HPACK.Huffman.Decode
-import Network.HPACK.Huffman.Encode
-
-----------------------------------------------------------------
-
-encoderForResponse :: Encoder
-encoderForResponse = toEncoder huffmanResponse
-
--- | Hoffman encoding in HTTP/2.0 request.
-huffmanEncodeInResponse :: HuffmanEncoding
-huffmanEncodeInResponse = encode encoderForResponse
-
-----------------------------------------------------------------
-
-decoderForResponse :: Decoder
-decoderForResponse = toDecoder huffmanResponse
-
--- | Hoffman decoding in HTTP/2.0 request.
-huffmanDecodeInResponse :: HuffmanDecoding
-huffmanDecodeInResponse = decode decoderForResponse
-
-----------------------------------------------------------------
-
-huffmanResponse :: [Bits]
-huffmanResponse = [
-    [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,T]
-  , [F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,F,T,F]
-  , [T,T,F,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,F,T,T,F,F]
-  , [T,T,T,T,T,T,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,F,T,T]
-  , [T,T,T,T,F,T,T,F,T]
-  , [T,T,T,T,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,F,T,F]
-  , [T,F,F,F,T,F]
-  , [T,F,F,F,T,T]
-  , [T,F,F,T,F,F]
-  , [T,T,F,T,F,T,T]
-  , [F,F,F,T]
-  , [F,F,T,F]
-  , [F,F,T,T]
-  , [F,T,F,F,F]
-  , [F,T,F,F,T]
-  , [F,T,F,T,F]
-  , [T,F,F,T,F,T]
-  , [T,F,F,T,T,F]
-  , [F,T,F,T,T]
-  , [F,T,T,F,F]
-  , [F,T,T,F,T]
-  , [T,T,T,T,F,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F]
-  , [T,T,F,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T]
-  , [T,T,F,T,T,F,T]
-  , [T,T,T,F,T,F,T,F]
-  , [T,T,T,F,T,F,T,T]
-  , [T,T,T,F,T,T,F,F]
-  , [T,T,T,F,T,T,F,T]
-  , [T,T,T,F,T,T,T,F]
-  , [T,F,F,T,T,T]
-  , [T,T,T,T,T,F,F,F,F]
-  , [T,T,T,F,T,T,T,T]
-  , [T,T,T,T,F,F,F,F]
-  , [T,T,T,T,T,T,T,F,F,T]
-  , [T,T,T,T,T,F,F,F,T]
-  , [T,F,T,F,F,F]
-  , [T,T,T,T,F,F,F,T]
-  , [T,T,T,T,F,F,T,F]
-  , [T,T,T,T,T,F,F,T,F]
-  , [T,T,T,T,T,T,T,F,T,F]
-  , [T,T,T,T,T,F,F,T,T]
-  , [T,F,T,F,F,T]
-  , [F,T,T,T,F]
-  , [T,T,T,T,T,F,T,F,F]
-  , [T,T,T,T,T,F,T,F,T]
-  , [T,T,T,T,F,F,T,T]
-  , [T,T,T,T,T,T,T,F,T,T]
-  , [T,T,T,T,T,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
-  , [F,T,T,T,T]
-  , [T,T,F,T,T,T,F]
-  , [T,F,T,F,T,F]
-  , [T,F,T,F,T,T]
-  , [T,F,F,F,F]
-  , [T,T,F,T,T,T,T]
-  , [T,T,T,F,F,F,F]
-  , [T,T,T,F,F,F,T]
-  , [T,F,T,T,F,F]
-  , [T,T,T,T,T,T,F,F,F]
-  , [T,T,T,T,T,T,F,F,T]
-  , [T,T,T,F,F,T,F]
-  , [T,F,T,T,F,T]
-  , [T,F,T,T,T,F]
-  , [T,F,T,T,T,T]
-  , [T,T,F,F,F,F]
-  , [T,T,T,T,T,T,F,T,F]
-  , [T,T,F,F,F,T]
-  , [T,T,F,F,T,F]
-  , [T,T,F,F,T,T]
-  , [T,T,F,T,F,F]
-  , [T,T,T,F,F,T,T]
-  , [T,T,T,T,F,T,F,F]
-  , [T,T,T,F,T,F,F]
-  , [T,T,T,T,F,T,F,T]
-  , [T,T,T,T,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,T]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,F]
-  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T]]
diff --git a/Network/HPACK/Huffman/Table.hs b/Network/HPACK/Huffman/Table.hs
new file mode 100644
--- /dev/null
+++ b/Network/HPACK/Huffman/Table.hs
@@ -0,0 +1,266 @@
+module Network.HPACK.Huffman.Table where
+
+import Network.HPACK.Huffman.Bit
+
+huffmanTable :: [Bits]
+huffmanTable = [
+    [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,T]
+  , [T,T,T,F,T,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,F,T]
+  , [T,F,F,T,F,F]
+  , [T,T,F,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,F,T,T]
+  , [T,T,T,T,T,T,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,F,F]
+  , [T,T,T,F,T,F,F,T]
+  , [T,F,F,T,F,T]
+  , [F,F,T,F,F]
+  , [F,F,F,F]
+  , [F,F,T,F,T]
+  , [F,F,T,T,F]
+  , [F,F,T,T,T]
+  , [T,F,F,T,T,F]
+  , [T,F,F,T,T,T]
+  , [T,F,T,F,F,F]
+  , [T,F,T,F,F,T]
+  , [T,F,T,F,T,F]
+  , [T,F,T,F,T,T]
+  , [T,F,T,T,F,F]
+  , [T,T,T,T,F,T,T,F,F]
+  , [T,T,T,F,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
+  , [T,F,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F]
+  , [T,T,T,T,F,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,F,T,T]
+  , [T,T,F,T,T,T,T]
+  , [T,T,T,F,T,F,T,T]
+  , [T,T,T,F,T,T,F,F]
+  , [T,T,T,F,T,T,F,T]
+  , [T,T,T,F,T,T,T,F]
+  , [T,T,T,F,F,F,F]
+  , [T,T,T,T,F,T,T,T,F]
+  , [T,T,T,T,F,T,T,T,T]
+  , [T,T,T,T,T,F,F,F,F]
+  , [T,T,T,T,T,F,F,F,T]
+  , [T,T,T,T,T,T,T,F,T,T]
+  , [T,T,T,T,T,F,F,T,F]
+  , [T,T,T,F,T,T,T,T]
+  , [T,T,T,T,T,F,F,T,T]
+  , [T,T,T,T,T,F,T,F,F]
+  , [T,T,T,T,T,F,T,F,T]
+  , [T,T,T,T,T,F,T,T,F]
+  , [T,T,T,T,T,F,T,T,T]
+  , [T,T,T,T,F,F,F,F]
+  , [T,T,T,T,F,F,F,T]
+  , [T,T,T,T,T,T,F,F,F]
+  , [T,T,T,T,T,T,F,F,T]
+  , [T,T,T,T,T,T,F,T,F]
+  , [T,T,T,T,T,T,F,T,T]
+  , [T,T,T,T,T,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,F,T]
+  , [T,F,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
+  , [F,T,F,F,F]
+  , [T,F,T,T,T,T]
+  , [F,T,F,F,T]
+  , [T,T,F,F,F,F]
+  , [F,F,F,T]
+  , [T,T,F,F,F,T]
+  , [T,T,F,F,T,F]
+  , [T,T,F,F,T,T]
+  , [F,T,F,T,F]
+  , [T,T,T,F,F,F,T]
+  , [T,T,T,F,F,T,F]
+  , [F,T,F,T,T]
+  , [T,T,F,T,F,F]
+  , [F,T,T,F,F]
+  , [F,T,T,F,T]
+  , [F,T,T,T,F]
+  , [T,T,T,T,F,F,T,F]
+  , [F,T,T,T,T]
+  , [T,F,F,F,F]
+  , [T,F,F,F,T]
+  , [T,T,F,T,F,T]
+  , [T,T,T,F,F,T,T]
+  , [T,T,F,T,T,F]
+  , [T,T,T,T,F,F,T,T]
+  , [T,T,T,T,F,T,F,F]
+  , [T,T,T,T,F,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,T,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,F,T,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,F,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,F]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,F,T,T]
+  , [T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T,T,T,F,F]
+  ]
+
+
diff --git a/Network/HPACK/Types.hs b/Network/HPACK/Types.hs
--- a/Network/HPACK/Types.hs
+++ b/Network/HPACK/Types.hs
@@ -40,6 +40,7 @@
 
 -- | Compression algorithms for HPACK encoding.
 data CompressionAlgo = Naive  -- ^ No compression
+                     | Static -- ^ Using the static table only
                      | Linear -- ^ Using indices only
                      | Diff   -- ^ Calculating difference
 
diff --git a/http2.cabal b/http2.cabal
--- a/http2.cabal
+++ b/http2.cabal
@@ -1,12 +1,12 @@
 Name:                   http2
-Version:                0.1.2
+Version:                0.2.0
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
 License-File:           LICENSE
 Synopsis:               HTTP/2.0 library including HPACK
 Description:            HTTP/2.0 library including HPACK.
-                        Currently only (coming) HPACK 06 is supported.
+                        Currently only HPACK 06 is supported.
 Category:               Network
 Cabal-Version:          >= 1.10
 Build-Type:             Simple
@@ -26,8 +26,7 @@
                         Network.HPACK.Huffman.Decode
                         Network.HPACK.Huffman.Encode
                         Network.HPACK.Huffman.Params
-                        Network.HPACK.Huffman.Request
-                        Network.HPACK.Huffman.Response
+                        Network.HPACK.Huffman.Table
                         Network.HPACK.Huffman.Tree
                         Network.HPACK.HeaderBlock
                         Network.HPACK.HeaderBlock.Decode
@@ -55,6 +54,7 @@
   HS-Source-Dirs:       test-hpack, .
   GHC-Options:          -Wall
   Main-Is:              hpack-encode.hs
+  Other-Modules:        HPACKEncode
   Build-Depends:        base >= 4 && < 5
                       , PSQueue
                       , aeson
@@ -85,6 +85,26 @@
                       , vector
                       , word8
 
+Executable hpack-stat
+  Default-Language:     Haskell2010
+  HS-Source-Dirs:       test-hpack, .
+  GHC-Options:          -Wall
+  Main-Is:              hpack-stat.hs
+  Build-Depends:        base >= 4 && < 5
+                      , PSQueue
+                      , aeson
+                      , aeson-pretty
+                      , array
+                      , blaze-builder
+                      , bytestring
+                      , containers
+                      , directory
+                      , filepath
+                      , text
+                      , unordered-containers
+                      , vector
+                      , word8
+
 Test-Suite doctest
   Type:                 exitcode-stdio-1.0
   Default-Language:     Haskell2010
@@ -104,8 +124,7 @@
                         HeaderBlock
                         HeaderBlockSpec
                         HexString
-                        HuffmanRequestSpec
-                        HuffmanResponseSpec
+                        HuffmanSpec
                         IntegerSpec
   Build-Depends:        base
                       , PSQueue
@@ -123,7 +142,7 @@
   HS-Source-Dirs:       test-hpack, .
   Ghc-Options:          -Wall
   Main-Is:              Spec.hs
-  Other-Modules:        HPACK
+  Other-Modules:        HPACKDecode
                         HPACKSpec
                         HexString
                         Types
diff --git a/test-hpack/HPACK.hs b/test-hpack/HPACK.hs
deleted file mode 100644
--- a/test-hpack/HPACK.hs
+++ /dev/null
@@ -1,106 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
-module HPACK (run
-           , Result(..)
-           , EncodeStrategy(..)
-           , defaultEncodeStrategy
-           , CompressionAlgo(..)
-           ) where
-
-import Control.Exception
-import Control.Monad (when)
-import Data.ByteString (ByteString)
-import qualified Data.ByteString.Char8 as B8
-import Data.List (sort)
-import Network.HPACK
-import Network.HPACK.Context
-import Network.HPACK.Context.HeaderSet
-import Network.HPACK.HeaderBlock
-import Network.HPACK.Huffman
-
-import HexString
-import Types
-
-data Conf = Conf {
-    debug :: Bool
-  , enc :: HPACKEncoding
-  , dec :: HPACKDecoding
-  , hbk :: ByteStream -> Either DecodeError HeaderBlock
-  }
-
-data Result = Pass [ByteString] | Fail String deriving (Eq,Show)
-
-run :: Bool -> EncodeStrategy -> Test -> IO Result
-run _ _    (Test _ _        _ [])        = return $ Pass []
-run d stgy (Test _ reqOrRsp _ ccs@(c:_)) = do
-    let siz = size c
-    dctx <- newContextForDecoding siz
-    ectx <- newContextForEncoding siz
-    let conf
-          | reqOrRsp == "request" = Conf {
-                debug = d
-              , enc = encodeRequestHeader stgy
-              , dec = decodeRequestHeader
-              , hbk = fromByteStream huffmanDecodeInRequest
-              }
-          | otherwise = Conf {
-                debug = d
-              , enc = encodeResponseHeader stgy
-              , dec = decodeResponseHeader
-              , hbk = fromByteStream huffmanDecodeInResponse
-              }
-    testLoop conf ccs dctx ectx []
-
-testLoop :: Conf
-         -> [Case]
-         -> Context
-         -> Context
-         -> [ByteString]
-         -> IO Result
-testLoop _    []     _    _    hexs = return $ Pass $ reverse hexs
-testLoop conf (c:cs) dctx ectx hexs = do
-    res <- test conf c dctx ectx
-    case res of
-        Right (dctx', ectx', hex) -> testLoop conf cs dctx' ectx' (hex:hexs)
-        Left e                    -> return $ Fail e
-
-test :: Conf
-     -> Case
-     -> Context
-     -> Context
-     -> IO (Either String (Context, Context, ByteString))
-test conf c dctx ectx = do
-    -- context is destructive!!!
-    when (debug conf) $ do
-        putStrLn "--------------------------------"
-        putStrLn "---- Input headerset"
-        printHeaderSet $ sort hs
-        putStrLn "---- Input context"
-        printContext dctx
-        putStrLn "---- Input Hex"
-        B8.putStrLn hex
-        putStrLn "---- Input header block"
-        print hd
-    x <- try $ dec conf dctx inp
-    case x of
-        Left e -> return $ Left $ show (e :: DecodeError)
-        Right (dctx',hs') -> do
-            -- This is for hpack-encoding only.
-            (ectx',out) <- enc conf ectx hs
-            let pass = sort hs == sort hs'
-                hex' = toHexString out
-            when (debug conf) $ do
-                putStrLn "---- Output headerset"
-                printHeaderSet $ sort hs'
-                putStrLn "---- Output context"
-                printContext dctx'
-                putStrLn "--------------------------------"
-            if pass then
-                return $ Right (dctx', ectx', hex')
-              else
-                return $ Left $ "Headers are different in " ++ B8.unpack hex ++ ":\n" ++ show hd ++ "\n" ++ show hs ++ "\n" ++ show hs'
-  where
-    hex = wire c
-    inp = fromHexString hex
-    hs = headers c
-    hd = hbk conf inp
diff --git a/test-hpack/HPACKDecode.hs b/test-hpack/HPACKDecode.hs
new file mode 100644
--- /dev/null
+++ b/test-hpack/HPACKDecode.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module HPACKDecode (
+    run
+  , Result(..)
+  , EncodeStrategy(..)
+  , defaultEncodeStrategy
+  , CompressionAlgo(..)
+  ) where
+
+import Control.Exception
+import Control.Monad (when)
+import qualified Data.ByteString.Char8 as B8
+import Data.List (sort)
+import Network.HPACK
+import Network.HPACK.Context
+import Network.HPACK.Context.HeaderSet
+import Network.HPACK.HeaderBlock
+
+import HexString
+import Types
+
+data Conf = Conf {
+    debug :: Bool
+  }
+
+data Result = Pass | Fail String deriving (Eq,Show)
+
+run :: Bool -> Test -> IO Result
+run _ (Test _ _ _ [])        = return $ Pass
+run d (Test _ _ _ ccs@(c:_)) = do
+    let siz = size c
+    dctx <- newContextForDecoding siz
+    let conf = Conf { debug = d }
+    testLoop conf ccs dctx
+
+testLoop :: Conf
+         -> [Case]
+         -> Context
+         -> IO Result
+testLoop _    []     _    = return $ Pass
+testLoop conf (c:cs) dctx  = do
+    res <- test conf c dctx
+    case res of
+        Right dctx' -> testLoop conf cs dctx'
+        Left  e     -> return $ Fail e
+
+test :: Conf
+     -> Case
+     -> Context
+     -> IO (Either String Context)
+test conf c dctx = do
+    -- context is destructive!!!
+    when (debug conf) $ do
+        putStrLn "--------------------------------"
+        putStrLn "---- Input headerset"
+        printHeaderSet $ sort hs
+        putStrLn "---- Input context"
+        printContext dctx
+        putStrLn "---- Input Hex"
+        B8.putStrLn hex
+        putStrLn "---- Input header block"
+        print hd
+    x <- try $ decodeHeader dctx inp
+    case x of
+        Left e -> return $ Left $ show (e :: DecodeError)
+        Right (dctx',hs') -> do
+            let pass = sort hs == sort hs'
+            if pass then
+                return $ Right (dctx')
+              else
+                return $ Left $ "Headers are different in " ++ B8.unpack hex ++ ":\n" ++ show hd ++ "\n" ++ show hs ++ "\n" ++ show hs'
+  where
+    hex = wire c
+    inp = fromHexString hex
+    hs = headers c
+    hd = fromByteStream inp
diff --git a/test-hpack/HPACKEncode.hs b/test-hpack/HPACKEncode.hs
new file mode 100644
--- /dev/null
+++ b/test-hpack/HPACKEncode.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module HPACKEncode (
+    run
+  , EncodeStrategy(..)
+  , defaultEncodeStrategy
+  , CompressionAlgo(..)
+  ) where
+
+import Control.Monad (when)
+import Data.ByteString (ByteString)
+import Network.HPACK
+import Network.HPACK.Context
+
+import HexString
+import Types
+
+data Conf = Conf {
+    debug :: Bool
+  , enc :: HPACKEncoding
+  }
+
+run :: Bool -> EncodeStrategy -> Test -> IO [ByteString]
+run _ _    (Test _ _        _ [])        = return []
+run d stgy (Test _ _ _ ccs@(c:_)) = do
+    let siz = size c
+    ectx <- newContextForEncoding siz
+    let conf = Conf { debug = d, enc = encodeHeader stgy }
+    testLoop conf ccs ectx []
+
+testLoop :: Conf
+         -> [Case]
+         -> Context
+         -> [ByteString]
+         -> IO [ByteString]
+testLoop _    []     _    hexs = return $ reverse hexs
+testLoop conf (c:cs) ectx hexs = do
+    (ectx',hex) <- test conf c ectx
+    testLoop conf cs ectx' (hex:hexs)
+
+test :: Conf
+     -> Case
+     -> Context
+     -> IO (Context, ByteString)
+test conf c ectx = do
+    (ectx',out) <- enc conf ectx hs
+    let hex' = toHexString out
+    when (debug conf) $ do
+        putStrLn "---- Output context"
+        printContext ectx'
+        putStrLn "--------------------------------"
+    return (ectx', hex')
+  where
+    hs = headers c
diff --git a/test-hpack/HPACKSpec.hs b/test-hpack/HPACKSpec.hs
--- a/test-hpack/HPACKSpec.hs
+++ b/test-hpack/HPACKSpec.hs
@@ -10,7 +10,7 @@
 import Test.Hspec
 
 import Types
-import HPACK
+import HPACKDecode
 
 testDir :: FilePath
 testDir = "test-hpack/hpack-test-case"
@@ -37,9 +37,9 @@
     case etc of
         Left e   -> return $ Just $ file ++ ": " ++ e
         Right tc -> do
-            res <- run False defaultEncodeStrategy tc
+            res <- run False tc
             case res of
-                Pass _ -> return Nothing
+                Pass   -> return Nothing
                 Fail e -> return $ Just $ file ++ ": " ++ e
 
 spec :: Spec
diff --git a/test-hpack/Types.hs b/test-hpack/Types.hs
--- a/test-hpack/Types.hs
+++ b/test-hpack/Types.hs
@@ -41,6 +41,7 @@
     size :: Int
   , wire :: ByteString
   , headers :: HeaderSet
+  , seqno :: Maybe Int
   } deriving Show
 
 instance FromJSON Test where
@@ -61,13 +62,15 @@
     parseJSON (Object o) = Case <$> o .: "header_table_size"
                                 <*> (textToByteString <$> (o .: "wire"))
                                 <*> o .: "headers"
+                                <*> o .:? "seqno"
     parseJSON _          = mzero
 
 instance ToJSON Case where
-    toJSON (Case siz w hs) = object ["header_table_size" .= siz
-                                    ,"wire" .= byteStringToText w
-                                    ,"headers" .= hs
-                                    ]
+    toJSON (Case siz w hs no) = object ["header_table_size" .= siz
+                                       ,"wire" .= byteStringToText w
+                                       ,"headers" .= hs
+                                       ,"seqno" .= no
+                                       ]
 
 instance FromJSON HeaderSet where
     parseJSON (Array a) = mapM parseJSON $ V.toList a
diff --git a/test-hpack/hpack-debug.hs b/test-hpack/hpack-debug.hs
--- a/test-hpack/hpack-debug.hs
+++ b/test-hpack/hpack-debug.hs
@@ -4,7 +4,7 @@
 import qualified Data.ByteString.Lazy as BL
 
 import Types
-import HPACK
+import HPACKDecode
 
 main :: IO ()
 main = do
@@ -13,8 +13,8 @@
     res <- case etc of
         Left e   -> return $ Just e
         Right tc -> do
-            res <- run True defaultEncodeStrategy tc
+            res <- run True tc
             case res of
-                Pass _ -> return Nothing
+                Pass   -> return Nothing
                 Fail e -> return $ Just e
     print res
diff --git a/test-hpack/hpack-encode.hs b/test-hpack/hpack-encode.hs
--- a/test-hpack/hpack-encode.hs
+++ b/test-hpack/hpack-encode.hs
@@ -8,35 +8,36 @@
 import System.Exit (exitFailure)
 import System.IO (hPutStrLn, stderr)
 
-import HPACK
+import HPACKEncode
 import Types
 
 main :: IO ()
 main = do
     args <- getArgs
-    when (length args /= 2) $ do
-        hPutStrLn stderr "hpack-encode on/off naive|linear|diff"
+    when (length args /= 3) $ do
+        hPutStrLn stderr "hpack-encode on/off naive|linear|diff <desc>"
         exitFailure
-    let [arg1,arg2] = args
+    let [arg1,arg2,desc] = args
         huffman
           | arg1 == "on" = True
           | otherwise = False
         algo
           | arg2 == "naive"  = Naive
+          | arg2 == "static" = Static
           | arg2 == "linear" = Linear
           | otherwise        = Diff
         stgy = EncodeStrategy algo huffman
-    hpackEncode stgy
+    hpackEncode stgy desc
 
-hpackEncode :: EncodeStrategy -> IO ()
-hpackEncode stgy = do
+hpackEncode :: EncodeStrategy -> String -> IO ()
+hpackEncode stgy desc = do
     bs <- BL.getContents
     let Just tc = decode bs :: Maybe Test
-    Pass hexs <- run False stgy tc
+    hexs <- run False stgy tc
     let cs = cases tc
         cs' = zipWith update cs hexs
         tc' = tc {
-            description = "Encoded by the http2 library in Haskell. First clear the reference set and encode all headers"
+            description = desc
           , cases = cs'
           }
     BL.putStrLn $ encodePretty tc'
diff --git a/test-hpack/hpack-stat.hs b/test-hpack/hpack-stat.hs
new file mode 100644
--- /dev/null
+++ b/test-hpack/hpack-stat.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module Main where
+
+import Control.Applicative
+import Data.Aeson
+import qualified Data.ByteString as BS
+import qualified Data.ByteString.Lazy.Char8 as BL
+import Data.List
+import System.Directory
+import System.FilePath
+import Control.Monad
+
+import Types
+
+hdir :: FilePath
+hdir = "test-hpack/hpack-test-case/haskell-http2"
+
+wdir1 :: FilePath
+wdir1 = "test-hpack/hpack-test-case/haskell-http2-naive"
+
+wdir2 :: FilePath
+wdir2 = "test-hpack/hpack-test-case/haskell-http2-naive-huffman"
+
+wdir3 :: FilePath
+wdir3 = "test-hpack/hpack-test-case/haskell-http2-linear"
+
+wdir4 :: FilePath
+wdir4 = "test-hpack/hpack-test-case/haskell-http2-linear-huffman"
+
+wdir5 :: FilePath
+wdir5 = "test-hpack/hpack-test-case/haskell-http2-diff"
+
+wdir6 :: FilePath
+wdir6 = "test-hpack/hpack-test-case/haskell-http2-diff-huffman"
+
+
+main :: IO ()
+main = do
+    hs  <- get getHeaderSize hdir
+    hlen <- get getHeaderLen hdir
+    ws1 <- get getWireSize wdir1
+    ws2 <- get getWireSize wdir2
+    ws3 <- get getWireSize wdir3
+    ws4 <- get getWireSize wdir4
+    ws5 <- get getWireSize wdir5
+    ws6 <- get getWireSize wdir6
+    let h  :: Float = fromIntegral $ sum hs
+        w1 :: Float = fromIntegral $ sum ws1
+        w2 :: Float = fromIntegral $ sum ws2
+        w3 :: Float = fromIntegral $ sum ws3
+        w4 :: Float = fromIntegral $ sum ws4
+        w5 :: Float = fromIntegral $ sum ws5
+        w6 :: Float = fromIntegral $ sum ws6
+        hl :: Float = fromIntegral $ sum hlen
+    print (w1 / h
+          ,w2 / h
+          ,w3 / h
+          ,w4 / h
+          ,w5 / h
+          ,w6 / h)
+    print ((w4 - w6) / hl)
+
+get :: (FilePath -> IO Int) -> String -> IO [Int]
+get func dir = do
+    files0 <- valid . sort <$> getDirectoryContents dir
+    files1 <- filterM doesFileExist files0
+    mapM func files1
+  where
+    valid = map (dir </>) . filter (isSuffixOf ".json")
+
+getHeaderSize :: FilePath -> IO Int
+getHeaderSize file = do
+    bs <- BL.readFile file
+    let Just tc = decode bs :: Maybe Test
+    let len = sum $ map toT $ cases tc
+    return len
+  where
+    toT (Case _ _ hs _) = sum $ map (\(x,y) -> BS.length x + BS.length y) hs
+
+getHeaderLen :: FilePath -> IO Int
+getHeaderLen file = do
+    bs <- BL.readFile file
+    let Just tc = decode bs :: Maybe Test
+    let len = length $ cases tc
+    return len
+
+getWireSize :: FilePath -> IO Int
+getWireSize file = do
+    bs <- BL.readFile file
+    let Just tc = decode bs :: Maybe Test
+    let len = sum $ map toT $ cases tc
+    return len
+  where
+    toT (Case _ w _ _) = BS.length w `div` 2
diff --git a/test/HeaderBlock.hs b/test/HeaderBlock.hs
--- a/test/HeaderBlock.hs
+++ b/test/HeaderBlock.hs
@@ -82,12 +82,11 @@
         ]
 
 e51b :: ByteStream
-e51b = fromHexString "0882409f1886c31b39bf387f2292a2fba20320f2ab303124018b490d3209e8773093e39e7864dd7afd3d3d248747db87284955f6ff"
+e51b = fromHexString "088298a7188573d5cd111f2298ef6b3a7a0e6e8fa263d0729a6e8397d869bd873747bbbfc73090ce31743d801b6db107cd1a396244b74f"
 
 e52 :: HeaderBlock
 e52 = [
-    Indexed 4
-  , Indexed 12
+    Indexed 12
   ]
 
 e52h :: HeaderSet
@@ -98,12 +97,11 @@
         ]
 
 e52b :: ByteStream
-e52b = fromHexString "848c"
+e52b = fromHexString "8c"
 
 e53 :: HeaderBlock
 e53 = [
-    Indexed 3
-  , Indexed 4
+    Indexed 4
   , Indexed 4
   , Literal Add (Idx 3) "Mon, 21 Oct 2013 20:13:22 GMT"
   , Literal Add (Idx 29) "gzip"
@@ -111,7 +109,7 @@
   , Indexed 4
   , Indexed 3
   , Indexed 3
-  , Literal Add (Idx 58) "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"
+  ,Literal Add (Idx 58) "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"
   ]
 
 e53h :: HeaderSet
@@ -123,4 +121,4 @@
         ,("set-cookie","foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1")]
 
 e53b :: ByteStream
-e53b = fromHexString "8384840392a2fba20320f2ab303124018b490d3309e8771d84e1fbb30f848483833ab3df7dfb36d3d9e1fcfc3fafe7abfcfefcbfaf3edf2f977fd36ff7fd79f6f977fd3de16bfa46fe10d889447de1ce18e565f76c2f"
+e53b = fromHexString "84840398ef6b3a7a0e6e8fa263d0729a6e8397d869bd873f47bbbfc71d83cbd54e848483833ab3c5adb77f876fc7fbf7fdbfbebff3f7f4fb7ebbbe9f5f87e37fefedfaeefa7c3f1d5d1a23ce546436cd494bd5d1cc5f0535969b"
diff --git a/test/HeaderBlockSpec.hs b/test/HeaderBlockSpec.hs
--- a/test/HeaderBlockSpec.hs
+++ b/test/HeaderBlockSpec.hs
@@ -4,7 +4,6 @@
 
 import qualified Data.ByteString.Char8 as BS
 import Network.HPACK.HeaderBlock
-import Network.HPACK.Huffman
 import Test.Hspec
 import Test.Hspec.QuickCheck
 
@@ -14,30 +13,28 @@
 spec = do
     describe "toByteStream" $ do
         it "encodes HeaderBlock" $ do
-            toByteStream huffmanEncodeInRequest  True e31 `shouldBe` e31b
-            toByteStream huffmanEncodeInRequest  True e32 `shouldBe` e32b
-            toByteStream huffmanEncodeInRequest  True e33 `shouldBe` e33b
-            toByteStream huffmanEncodeInResponse True e51 `shouldBe` e51b
-            toByteStream huffmanEncodeInResponse True e52 `shouldBe` e52b
-            toByteStream huffmanEncodeInResponse True e53 `shouldBe` e53b
+            toByteStream True e31 `shouldBe` e31b
+            toByteStream True e32 `shouldBe` e32b
+            toByteStream True e33 `shouldBe` e33b
+            toByteStream True e51 `shouldBe` e51b
+            toByteStream True e52 `shouldBe` e52b
+            toByteStream True e53 `shouldBe` e53b
 
     describe "fromByteStream" $ do
         it "encodes HeaderBlock" $ do
-            fromByteStream huffmanDecodeInRequest  e31b `shouldBe` Right e31
-            fromByteStream huffmanDecodeInRequest  e32b `shouldBe` Right e32
-            fromByteStream huffmanDecodeInRequest  e33b `shouldBe` Right e33
-            fromByteStream huffmanDecodeInResponse e51b `shouldBe` Right e51
-            fromByteStream huffmanDecodeInResponse e52b `shouldBe` Right e52
-            fromByteStream huffmanDecodeInResponse e53b `shouldBe` Right e53
+            fromByteStream e31b `shouldBe` Right e31
+            fromByteStream e32b `shouldBe` Right e32
+            fromByteStream e33b `shouldBe` Right e33
+            fromByteStream e51b `shouldBe` Right e51
+            fromByteStream e52b `shouldBe` Right e52
+            fromByteStream e53b `shouldBe` Right e53
     describe "toByteStream & fromByteStream" $ do
         prop "duality for request" $ \k v -> do
             let key = BS.pack ('k':k)
                 val = BS.pack ('v':v)
                 hb = [Literal Add (Lit key) val]
-            fromByteStream huffmanDecodeInRequest
-                (toByteStream huffmanEncodeInRequest True hb) `shouldBe` Right hb
+            fromByteStream (toByteStream True hb) `shouldBe` Right hb
         prop "duality for response" $ \v -> do
             let val = BS.pack ('v':v)
                 hb = [Literal Add (Idx 3) val]
-            fromByteStream huffmanDecodeInResponse
-                (toByteStream huffmanEncodeInResponse True hb) `shouldBe` Right hb
+            fromByteStream (toByteStream True hb) `shouldBe` Right hb
diff --git a/test/HuffmanRequestSpec.hs b/test/HuffmanRequestSpec.hs
deleted file mode 100644
--- a/test/HuffmanRequestSpec.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
-module HuffmanRequestSpec where
-
-import Data.ByteString (ByteString)
-import qualified Data.ByteString as BS
-import Network.HPACK.Huffman.Request
-import Network.HPACK.Types
-import Test.Hspec
-import Test.Hspec.QuickCheck
-
-import HexString
-
-shouldBeEncoded :: ByteString -> ByteString -> Expectation
-shouldBeEncoded inp out = enc inp `shouldBe` out
-  where
-    enc = toHexString . huffmanEncodeInRequest
-
-shouldBeDecoded :: ByteString -> Either DecodeError ByteString -> Expectation
-shouldBeDecoded inp out = dec inp `shouldBe` out
-  where
-    dec x = huffmanDecodeInRequest (fromHexString x)
-
-spec :: Spec
-spec = do
-    describe "huffmanEncodeInRequest and huffmanDecodeInRequest" $ do
-        prop "duality" $ \cs ->
-            let bs = BS.pack cs
-            in huffmanDecodeInRequest (huffmanEncodeInRequest bs) == Right bs
-    describe "huffmanEncodeInRequest" $ do
-        it "encodes in request" $ do
-            "www.example.com" `shouldBeEncoded` "db6d883e68d1cb1225ba7f"
-            "no-cache" `shouldBeEncoded` "63654a1398ff"
-            "custom-key" `shouldBeEncoded` "4eb08b749790fa7f"
-            "custom-value" `shouldBeEncoded` "4eb08b74979a17a8ff"
-            "" `shouldBeEncoded` ""
-    describe "huffmanDecodeInRequest" $ do
-        it "decodes in request" $ do
-            "db6d883e68d1cb1225ba7f" `shouldBeDecoded` Right "www.example.com"
-            "63654a1398ff" `shouldBeDecoded` Right "no-cache"
-            "4eb08b749790fa7f" `shouldBeDecoded` Right "custom-key"
-            "4eb08b74979a17a8ff" `shouldBeDecoded` Right "custom-value"
-            "ff" `shouldBeDecoded` Left TooLongEos
-            "fffff77f" `shouldBeDecoded` Right "\1"
-            "fffff77fff" `shouldBeDecoded` Left TooLongEos
diff --git a/test/HuffmanResponseSpec.hs b/test/HuffmanResponseSpec.hs
deleted file mode 100644
--- a/test/HuffmanResponseSpec.hs
+++ /dev/null
@@ -1,44 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
-module HuffmanResponseSpec where
-
-import Data.ByteString (ByteString)
-import qualified Data.ByteString as BS
-import Network.HPACK.Huffman.Response
-import Test.Hspec
-import Test.Hspec.QuickCheck
-
-import HexString
-
-shouldBeEncoded :: ByteString -> ByteString -> Expectation
-shouldBeEncoded inp out = enc inp `shouldBe` out
-  where
-    enc = toHexString . huffmanEncodeInResponse
-
-shouldBeDecoded :: ByteString -> ByteString -> Expectation
-shouldBeDecoded inp out = dec inp `shouldBe` Right out
-  where
-    dec x = huffmanDecodeInResponse (fromHexString x)
-
-spec :: Spec
-spec = do
-    describe "huffmanEncodeInResponse and huffmanDecodeInResponse" $ do
-        prop "duality" $ \cs ->
-            let bs = BS.pack cs
-            in huffmanDecodeInResponse (huffmanEncodeInResponse bs) == Right bs
-    describe "huffmanEncodeInResponse" $ do
-        it "encodes in response" $ do
-            "private" `shouldBeEncoded` "c31b39bf387f"
-            "Mon, 21 Oct 2013 20:13:21 GMT" `shouldBeEncoded` "a2fba20320f2ab303124018b490d3209e877"
-            "https://www.example.com" `shouldBeEncoded` "e39e7864dd7afd3d3d248747db87284955f6ff"
-            "Mon, 21 Oct 2013 20:13:22 GMT" `shouldBeEncoded` "a2fba20320f2ab303124018b490d3309e877"
-            "gzip" `shouldBeEncoded` "e1fbb30f"
-            "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1" `shouldBeEncoded` "df7dfb36d3d9e1fcfc3fafe7abfcfefcbfaf3edf2f977fd36ff7fd79f6f977fd3de16bfa46fe10d889447de1ce18e565f76c2f"
-    describe "huffmanDecodeInResponse" $ do
-        it "decodes in response" $ do
-            "c31b39bf387f" `shouldBeDecoded` "private"
-            "a2fba20320f2ab303124018b490d3209e877"`shouldBeDecoded` "Mon, 21 Oct 2013 20:13:21 GMT"
-            "e39e7864dd7afd3d3d248747db87284955f6ff" `shouldBeDecoded` "https://www.example.com"
-            "a2fba20320f2ab303124018b490d3309e877" `shouldBeDecoded` "Mon, 21 Oct 2013 20:13:22 GMT"
-            "e1fbb30f" `shouldBeDecoded` "gzip"
-            "df7dfb36d3d9e1fcfc3fafe7abfcfefcbfaf3edf2f977fd36ff7fd79f6f977fd3de16bfa46fe10d889447de1ce18e565f76c2f" `shouldBeDecoded` "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"
diff --git a/test/HuffmanSpec.hs b/test/HuffmanSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/HuffmanSpec.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module HuffmanSpec where
+
+import Data.ByteString (ByteString)
+import qualified Data.ByteString as BS
+import Network.HPACK
+import Network.HPACK.Huffman
+import Test.Hspec
+import Test.Hspec.QuickCheck
+
+import HexString
+
+testData :: [(ByteString, ByteString)]
+testData = [
+    ("", "")
+  , ("www.example.com", "db6d883e68d1cb1225ba7f")
+  , ("no-cache", "63654a1398ff")
+  , ("custom-key", "4eb08b749790fa7f")
+  , ("custom-value", "4eb08b74979a17a8ff")
+  , ("private", "73d5cd111f")
+  , ("Mon, 21 Oct 2013 20:13:21 GMT", "ef6b3a7a0e6e8fa263d0729a6e8397d869bd873747bbbfc7")
+  , ("https://www.example.com", "ce31743d801b6db107cd1a396244b74f")
+  , ("Mon, 21 Oct 2013 20:13:22 GMT", "ef6b3a7a0e6e8fa263d0729a6e8397d869bd873f47bbbfc7")
+  , ("gzip", "cbd54e")
+  , ("foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1", "c5adb77f876fc7fbf7fdbfbebff3f7f4fb7ebbbe9f5f87e37fefedfaeefa7c3f1d5d1a23ce546436cd494bd5d1cc5f0535969b")
+  ]
+
+shouldBeEncoded :: ByteString -> ByteString -> Expectation
+shouldBeEncoded inp out = enc inp `shouldBe` out
+  where
+    enc = toHexString . encode
+
+shouldBeDecoded :: ByteString -> Either DecodeError ByteString -> Expectation
+shouldBeDecoded inp out = dec inp `shouldBe` out
+  where
+    dec = decode . fromHexString
+
+spec :: Spec
+spec = do
+    describe "encode and decode" $ do
+        prop "duality" $ \cs ->
+            let bs = BS.pack cs
+            in decode (encode bs) == Right bs
+    describe "encode" $ do
+        it "encodes" $ do
+            mapM_ (\(x,y) -> x `shouldBeEncoded` y) testData
+    describe "decode" $ do
+        it "decodes" $ do
+            "ff" `shouldBeDecoded` Left TooLongEos
+            "fffff77f" `shouldBeDecoded` Right "\1"
+            "fffff77fff" `shouldBeDecoded` Left TooLongEos
+            mapM_ (\(x,y) -> y `shouldBeDecoded` Right x) testData
