Bidi stability work. I _think_ I've now removed all the failures of
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Tue, 7 Dec 2004 18:10:09 +0000 (18:10 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Tue, 7 Dec 2004 18:10:09 +0000 (18:10 +0000)
array bounds checking.

git-svn-id: svn://svn.tartarus.org/sgt/putty@4951 cda61777-01e9-0310-a592-d414129be87e

minibidi.c
minibidi.h

index d48dbff..566f3fd 100644 (file)
@@ -31,6 +31,8 @@
 
 #include "minibidi.h"
 
+#define lenof(x) ( sizeof((x)) / sizeof(*(x)) )
+
 /*
  * Flips the text buffer, according to max level, and
  * all higher levels
@@ -110,17 +112,25 @@ unsigned char setOverrideBits(unsigned char level, unsigned char override)
     return level;
 }
 
-/* Dont remember what this was used for :-) */
-unsigned char getPreviousLevel(unsigned char* level, int from)
+/*
+ * Find the most recent run of the same value in `level', and
+ * return the value _before_ it. Used to process U+202C POP
+ * DIRECTIONAL FORMATTING.
+ */
+int getPreviousLevel(unsigned char* level, int from)
 {
-    unsigned char current;
-    from--;
-    current = level[from];
-    while(from>0 && level[from] == current)
-    {
-       from--;
-    }
-    return level[++from];
+    if (from > 0) {
+        unsigned char current = level[--from];
+
+        while (from >= 0 && level[from] == current)
+            from--;
+
+        if (from >= 0)
+            return level[from];
+
+        return -1;
+    } else
+        return -1;
 }
 
 /*
@@ -151,19 +161,16 @@ unsigned char leastGreaterEven(unsigned char x)
  */
 unsigned char getRLE(wchar_t ch)
 {
-    int offset, i, freq;
+    int offset, i;
 
-    freq = offset = 0;
-    for(i=0; i<0xFFFF; i++)
+    offset = 0;
+    for(i=0; i<lenof(RLE_table); i++)
     {
-       freq = ((RLENode*)RLE_table)[i].f;
-       offset += freq;
-       if(offset == ch)
-           return ((RLENode*)RLE_table)[i].d;
-       else if(offset > ch)
-           return ((RLENode*)RLE_table)[i-1].d;
+       offset += RLE_table[i].f;
+       if(ch < offset)
+           return RLE_table[i].d;
     }
-    /* this is here to stop compiler nagging */
+    /* anything beyond the end of the table is unknown */
     return ON;
 }
 
@@ -191,7 +198,7 @@ int do_shape(bidi_char *line, bidi_char *to, int count)
            break;
 
          case SR:
-           tempShape = STYPE(line[i+1].wc);
+           tempShape = (i+1 < count ? STYPE(line[i+1].wc) : SU);
            if((tempShape == SL) || (tempShape == SD) || (tempShape == SC))
                to[i].wc = SFINAL((SISOLATED(line[i].wc)));
            else
@@ -201,10 +208,10 @@ int do_shape(bidi_char *line, bidi_char *to, int count)
 
          case SD:
            /* Make Ligatures */
-           tempShape = STYPE(line[i+1].wc);
+           tempShape = (i+1 < count ? STYPE(line[i+1].wc) : SU);
            if(line[i].wc == 0x644)
            {
-               switch(line[i-1].wc)
+               if (i > 0) switch(line[i-1].wc)
                {
                  case 0x622:
                    ligFlag = 1;
@@ -245,7 +252,7 @@ int do_shape(bidi_char *line, bidi_char *to, int count)
 
            if((tempShape == SL) || (tempShape == SD) || (tempShape == SC))
            {
-               tempShape = STYPE(line[i-1].wc);
+                tempShape = (i > 0 ? STYPE(line[i-1].wc) : SU);
                if((tempShape == SR) || (tempShape == SD) || (tempShape == SC))
                    to[i].wc = SMEDIAL( (SISOLATED(line[i].wc)) );
                else
@@ -253,7 +260,7 @@ int do_shape(bidi_char *line, bidi_char *to, int count)
                break;
            }
 
-           tempShape = STYPE(line[i-1].wc);
+            tempShape = (i > 0 ? STYPE(line[i-1].wc) : SU);
            if((tempShape == SR) || (tempShape == SD) || (tempShape == SC))
                to[i].wc = SINITIAL((SISOLATED(line[i].wc)));
            else
@@ -380,9 +387,17 @@ int do_bidi(bidi_char *line, int count)
            break;
 
          case PDF:
-           currentEmbedding = getPreviousLevel(levels, i);
-           currentOverride = currentEmbedding & OMASK;
-           currentEmbedding = currentEmbedding & ~OMASK;
+            {
+                int prevlevel = getPreviousLevel(levels, i);
+
+                if (prevlevel == -1) {
+                    currentEmbedding = paragraphLevel;
+                    currentOverride = ON;
+                } else {
+                    currentOverride = currentEmbedding & OMASK;
+                    currentEmbedding = currentEmbedding & ~OMASK;
+                }
+            }
            levels[i] = currentEmbedding;
            break;
 
@@ -487,7 +502,7 @@ int do_bidi(bidi_char *line, int count)
      * to a European number. A single common separator between two numbers
      * of the same type changes to that type.
      */
-    for( i=0; i<(count-1); i++)
+    for( i=1; i<(count-1); i++)
     {
        if(types[i] == ES)
        {
@@ -512,15 +527,15 @@ int do_bidi(bidi_char *line, int count)
     {
        if(types[i] == ET)
        {
-           if(types[i-1] == EN)
+           if(i > 0 && types[i-1] == EN)
            {
                types[i] = EN;
                continue;
-           }else if(types[i+1] == EN)
+           }else if(i < count-1 && types[i+1] == EN)
                {
                    types[i] = EN;
                    continue;
-               }else if(types[i+1] == ET)
+               }else if(i < count-1 && types[i+1] == ET)
                    {
                        j=i;
                        while(j <count && types[j] == ET)
@@ -579,7 +594,7 @@ int do_bidi(bidi_char *line, int count)
      * strong text if the text on both sides has the same direction. European
      * and Arabic numbers are treated as though they were R.
      */
-    if(types[0] == ON)
+    if(count >= 2 && types[0] == ON)
     {
        if((types[1] == R) || (types[1] == EN) || (types[1] == AN))
            types[0] = R;
@@ -628,7 +643,7 @@ int do_bidi(bidi_char *line, int count)
                }
        }
     }
-    if(types[count-1] == ON)
+    if(count >= 2 && types[count-1] == ON)
     {
        if(types[count-2] == R || types[count-2] == EN || types[count-2] == AN)
            types[count-1] = R;
index a6b0984..b0dcd63 100644 (file)
@@ -55,7 +55,7 @@ void flipThisRun(bidi_char *from, unsigned char* level, int max, int count);
 int findIndexOfRun(unsigned char* level , int start, int count, int tlevel);
 unsigned char getType(wchar_t ch);
 unsigned char setOverrideBits(unsigned char level, unsigned char override);
-unsigned char getPreviousLevel(unsigned char* level, int from);
+int getPreviousLevel(unsigned char* level, int from);
 unsigned char leastGreaterOdd(unsigned char x);
 unsigned char leastGreaterEven(unsigned char x);
 unsigned char getRLE(wchar_t ch);
@@ -157,299 +157,242 @@ const shape_node shapetypes[] = {
  */
 typedef struct
 {
-   unsigned char f;
    unsigned char d;
+   unsigned char f;
 }RLENode;
 
 
 /* This is an array of RLENodes, which is the
  * Compressed unicode types table
  */
-const unsigned char RLE_table[] =
+const RLENode RLE_table[] =
 {
-   0x09, 0x10, 0x01, 0x0F, 0x01, 0x10, 0x01, 0x11,
-   0x01, 0x0F, 0x01, 0x0E, 0x0E, 0x0F, 0x03, 0x10,
-   0x01, 0x11, 0x01, 0x12, 0x02, 0x0A, 0x03, 0x12,
-   0x05, 0x0A, 0x01, 0x0C, 0x01, 0x0A, 0x01, 0x0C,
-   0x01, 0x09, 0x01, 0x08, 0x0A, 0x0C, 0x01, 0x12,
-   0x06, 0x00, 0x1A, 0x12, 0x06, 0x00, 0x1A, 0x12,
-   0x04, 0x0E, 0x06, 0x0F, 0x01, 0x0E, 0x1A, 0x0C,
-   0x01, 0x12, 0x01, 0x0A, 0x04, 0x12, 0x04, 0x00,
-   0x01, 0x12, 0x05, 0x0A, 0x02, 0x08, 0x02, 0x12,
-   0x01, 0x00, 0x01, 0x12, 0x03, 0x08, 0x01, 0x00,
-   0x01, 0x12, 0x05, 0x00, 0x17, 0x12, 0x01, 0x00,
-   0x1F, 0x12, 0x01, 0x00, 0xFF, 0x00, 0x2A, 0x12,
-   0x01, 0x00, 0x12, 0x12, 0x1C, 0x00, 0x5E, 0x12,
-   0x02, 0x00, 0x09, 0x12, 0x02, 0x00, 0x07, 0x12,
-   0x0E, 0x00, 0x02, 0x12, 0x0E, 0x00, 0x05, 0x12,
-   0x09, 0x00, 0x01, 0x12, 0x11, 0x0D, 0x50, 0x12,
-   0x10, 0x0D, 0x10, 0x12, 0x0A, 0x00, 0x01, 0x12,
-   0x0B, 0x00, 0x01, 0x12, 0x01, 0x00, 0x03, 0x12,
-   0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x14, 0x12,
-   0x01, 0x00, 0x2C, 0x12, 0x01, 0x00, 0x26, 0x12,
-   0x0A, 0x00, 0x83, 0x0D, 0x04, 0x12, 0x01, 0x0D,
-   0x02, 0x00, 0x45, 0x12, 0x01, 0x00, 0x26, 0x12,
-   0x02, 0x00, 0x02, 0x12, 0x06, 0x00, 0x10, 0x12,
-   0x21, 0x00, 0x26, 0x12, 0x02, 0x00, 0x07, 0x12,
-   0x01, 0x00, 0x27, 0x12, 0x01, 0x00, 0x01, 0x12,
-   0x07, 0x0D, 0x11, 0x12, 0x01, 0x0D, 0x17, 0x12,
-   0x01, 0x0D, 0x03, 0x03, 0x01, 0x0D, 0x01, 0x03,
-   0x01, 0x0D, 0x02, 0x03, 0x01, 0x0D, 0x01, 0x12,
-   0x0B, 0x03, 0x1B, 0x12, 0x05, 0x03, 0x05, 0x12,
-   0x17, 0x0C, 0x01, 0x12, 0x0E, 0x04, 0x01, 0x12,
-   0x03, 0x04, 0x01, 0x12, 0x01, 0x04, 0x1A, 0x12,
-   0x05, 0x04, 0x0B, 0x0D, 0x0B, 0x12, 0x0A, 0x0B,
-   0x0A, 0x0A, 0x01, 0x0B, 0x02, 0x04, 0x03, 0x0D,
-   0x01, 0x04, 0x65, 0x0D, 0x07, 0x04, 0x01, 0x0D,
-   0x07, 0x04, 0x02, 0x0D, 0x02, 0x12, 0x01, 0x0D,
-   0x04, 0x12, 0x02, 0x08, 0x0A, 0x04, 0x05, 0x12,
-   0x01, 0x04, 0x0E, 0x12, 0x01, 0x0E, 0x01, 0x04,
-   0x01, 0x0D, 0x01, 0x04, 0x1B, 0x12, 0x03, 0x0D,
-   0x1B, 0x12, 0x35, 0x04, 0x26, 0x0D, 0x0B, 0x04,
-   0x01, 0x12, 0xFF, 0x12, 0x50, 0x0D, 0x02, 0x00,
-   0x01, 0x12, 0x01, 0x00, 0x35, 0x12, 0x02, 0x0D,
-   0x01, 0x00, 0x04, 0x0D, 0x08, 0x00, 0x04, 0x0D,
-   0x01, 0x12, 0x02, 0x00, 0x01, 0x0D, 0x04, 0x12,
-   0x03, 0x00, 0x0A, 0x0D, 0x02, 0x00, 0x0D, 0x12,
-   0x10, 0x0D, 0x01, 0x00, 0x02, 0x12, 0x01, 0x00,
-   0x08, 0x12, 0x02, 0x00, 0x02, 0x12, 0x02, 0x00,
-   0x16, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,
-   0x01, 0x12, 0x03, 0x00, 0x04, 0x12, 0x02, 0x0D,
-   0x01, 0x12, 0x01, 0x00, 0x03, 0x0D, 0x04, 0x12,
-   0x02, 0x00, 0x02, 0x12, 0x02, 0x00, 0x02, 0x0D,
-   0x01, 0x12, 0x09, 0x00, 0x01, 0x12, 0x04, 0x00,
-   0x02, 0x12, 0x01, 0x00, 0x03, 0x0D, 0x02, 0x12,
-   0x02, 0x00, 0x0C, 0x0A, 0x02, 0x00, 0x07, 0x12,
-   0x07, 0x0D, 0x01, 0x12, 0x02, 0x00, 0x06, 0x12,
-   0x04, 0x00, 0x02, 0x12, 0x02, 0x00, 0x16, 0x12,
-   0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x02, 0x12,
-   0x01, 0x00, 0x02, 0x12, 0x01, 0x00, 0x02, 0x12,
-   0x02, 0x0D, 0x01, 0x12, 0x01, 0x00, 0x03, 0x0D,
-   0x02, 0x12, 0x04, 0x0D, 0x02, 0x12, 0x02, 0x0D,
-   0x03, 0x12, 0x0B, 0x00, 0x04, 0x12, 0x01, 0x00,
-   0x01, 0x12, 0x07, 0x00, 0x0A, 0x0D, 0x02, 0x00,
-   0x03, 0x12, 0x0C, 0x0D, 0x02, 0x00, 0x01, 0x12,
-   0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x01, 0x12,
-   0x01, 0x00, 0x03, 0x12, 0x01, 0x00, 0x16, 0x12,
-   0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x02, 0x12,
-   0x01, 0x00, 0x05, 0x12, 0x02, 0x0D, 0x01, 0x00,
-   0x04, 0x0D, 0x05, 0x12, 0x01, 0x0D, 0x02, 0x00,
-   0x01, 0x12, 0x01, 0x00, 0x02, 0x0D, 0x01, 0x12,
-   0x02, 0x00, 0x01, 0x12, 0x0F, 0x00, 0x01, 0x12,
-   0x05, 0x00, 0x0A, 0x12, 0x11, 0x0D, 0x01, 0x00,
-   0x02, 0x12, 0x01, 0x00, 0x08, 0x12, 0x02, 0x00,
-   0x02, 0x12, 0x02, 0x00, 0x16, 0x12, 0x01, 0x00,
-   0x07, 0x12, 0x01, 0x00, 0x02, 0x12, 0x02, 0x00,
-   0x04, 0x12, 0x02, 0x0D, 0x01, 0x00, 0x02, 0x0D,
-   0x01, 0x00, 0x01, 0x0D, 0x03, 0x12, 0x03, 0x00,
-   0x02, 0x12, 0x02, 0x00, 0x02, 0x0D, 0x01, 0x12,
-   0x08, 0x0D, 0x01, 0x00, 0x01, 0x12, 0x04, 0x00,
-   0x02, 0x12, 0x01, 0x00, 0x03, 0x12, 0x04, 0x00,
-   0x0B, 0x12, 0x11, 0x0D, 0x01, 0x00, 0x01, 0x12,
-   0x01, 0x00, 0x06, 0x12, 0x03, 0x00, 0x03, 0x12,
-   0x01, 0x00, 0x04, 0x12, 0x03, 0x00, 0x02, 0x12,
-   0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x02, 0x12,
-   0x03, 0x00, 0x02, 0x12, 0x03, 0x00, 0x03, 0x12,
-   0x03, 0x00, 0x08, 0x12, 0x01, 0x00, 0x03, 0x12,
-   0x04, 0x00, 0x02, 0x0D, 0x01, 0x00, 0x02, 0x12,
-   0x03, 0x00, 0x03, 0x12, 0x01, 0x00, 0x03, 0x0D,
-   0x01, 0x12, 0x09, 0x00, 0x01, 0x12, 0x0F, 0x00,
-   0x0C, 0x12, 0x0E, 0x00, 0x03, 0x12, 0x01, 0x00,
-   0x08, 0x12, 0x01, 0x00, 0x03, 0x12, 0x01, 0x00,
-   0x17, 0x12, 0x01, 0x00, 0x0A, 0x12, 0x01, 0x00,
-   0x05, 0x12, 0x04, 0x0D, 0x03, 0x00, 0x04, 0x12,
-   0x01, 0x0D, 0x03, 0x12, 0x01, 0x0D, 0x04, 0x12,
-   0x07, 0x0D, 0x02, 0x12, 0x09, 0x00, 0x02, 0x12,
-   0x04, 0x00, 0x0A, 0x12, 0x12, 0x00, 0x02, 0x12,
-   0x01, 0x00, 0x08, 0x12, 0x01, 0x00, 0x03, 0x12,
-   0x01, 0x00, 0x17, 0x12, 0x01, 0x00, 0x0A, 0x12,
-   0x01, 0x00, 0x05, 0x12, 0x04, 0x00, 0x01, 0x0D,
-   0x01, 0x00, 0x05, 0x12, 0x01, 0x0D, 0x01, 0x00,
-   0x02, 0x12, 0x01, 0x00, 0x02, 0x0D, 0x02, 0x12,
-   0x07, 0x00, 0x02, 0x12, 0x07, 0x00, 0x01, 0x12,
-   0x01, 0x00, 0x02, 0x12, 0x04, 0x00, 0x0A, 0x12,
-   0x12, 0x00, 0x02, 0x12, 0x01, 0x00, 0x08, 0x12,
-   0x01, 0x00, 0x03, 0x12, 0x01, 0x00, 0x17, 0x12,
-   0x01, 0x00, 0x10, 0x12, 0x04, 0x00, 0x03, 0x0D,
-   0x03, 0x12, 0x02, 0x00, 0x03, 0x12, 0x01, 0x00,
-   0x03, 0x0D, 0x01, 0x12, 0x09, 0x00, 0x01, 0x12,
-   0x08, 0x00, 0x02, 0x12, 0x04, 0x00, 0x0A, 0x12,
-   0x12, 0x00, 0x02, 0x12, 0x01, 0x00, 0x12, 0x12,
-   0x03, 0x00, 0x18, 0x12, 0x01, 0x00, 0x09, 0x12,
-   0x01, 0x00, 0x01, 0x12, 0x02, 0x00, 0x07, 0x12,
-   0x03, 0x0D, 0x01, 0x12, 0x04, 0x00, 0x03, 0x0D,
-   0x03, 0x12, 0x01, 0x0D, 0x01, 0x12, 0x01, 0x00,
-   0x08, 0x12, 0x12, 0x00, 0x03, 0x12, 0x0C, 0x00,
-   0x30, 0x0D, 0x01, 0x00, 0x02, 0x0D, 0x07, 0x12,
-   0x04, 0x0A, 0x01, 0x00, 0x07, 0x0D, 0x08, 0x00,
-   0x0D, 0x12, 0x25, 0x00, 0x02, 0x12, 0x01, 0x00,
-   0x01, 0x12, 0x02, 0x00, 0x02, 0x12, 0x01, 0x00,
-   0x01, 0x12, 0x02, 0x00, 0x01, 0x12, 0x06, 0x00,
-   0x04, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,
-   0x03, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
-   0x01, 0x12, 0x02, 0x00, 0x02, 0x12, 0x01, 0x00,
-   0x04, 0x0D, 0x01, 0x00, 0x02, 0x0D, 0x06, 0x12,
-   0x01, 0x0D, 0x02, 0x00, 0x01, 0x12, 0x02, 0x00,
-   0x05, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x0D,
-   0x06, 0x12, 0x02, 0x00, 0x0A, 0x12, 0x02, 0x00,
-   0x02, 0x12, 0x22, 0x00, 0x18, 0x0D, 0x02, 0x00,
-   0x1B, 0x0D, 0x01, 0x00, 0x01, 0x0D, 0x01, 0x00,
-   0x01, 0x0D, 0x01, 0x12, 0x04, 0x00, 0x0A, 0x12,
-   0x01, 0x00, 0x22, 0x12, 0x06, 0x0D, 0x0E, 0x00,
-   0x01, 0x0D, 0x05, 0x00, 0x01, 0x0D, 0x02, 0x00,
-   0x04, 0x12, 0x04, 0x0D, 0x08, 0x12, 0x01, 0x0D,
-   0x24, 0x12, 0x01, 0x00, 0x08, 0x0D, 0x01, 0x00,
-   0x06, 0x12, 0x02, 0x00, 0x01, 0x12, 0x30, 0x00,
-   0x22, 0x12, 0x01, 0x00, 0x05, 0x12, 0x01, 0x00,
-   0x02, 0x12, 0x01, 0x00, 0x01, 0x0D, 0x04, 0x00,
-   0x01, 0x0D, 0x01, 0x12, 0x03, 0x0D, 0x02, 0x00,
-   0x01, 0x0D, 0x01, 0x12, 0x06, 0x00, 0x18, 0x0D,
-   0x02, 0x12, 0x46, 0x00, 0x26, 0x12, 0x0A, 0x00,
-   0x29, 0x12, 0x02, 0x00, 0x01, 0x12, 0x04, 0x00,
-   0x5A, 0x12, 0x05, 0x00, 0x44, 0x12, 0x05, 0x00,
-   0x52, 0x12, 0x06, 0x00, 0x07, 0x12, 0x01, 0x00,
-   0x3F, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
-   0x04, 0x12, 0x02, 0x00, 0x07, 0x12, 0x01, 0x00,
-   0x01, 0x12, 0x01, 0x00, 0x04, 0x12, 0x02, 0x00,
-   0x27, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
-   0x04, 0x12, 0x02, 0x00, 0x1F, 0x12, 0x01, 0x00,
-   0x01, 0x12, 0x01, 0x00, 0x04, 0x12, 0x02, 0x00,
-   0x07, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
-   0x04, 0x12, 0x02, 0x00, 0x07, 0x12, 0x01, 0x00,
-   0x07, 0x12, 0x01, 0x00, 0x17, 0x12, 0x01, 0x00,
-   0x1F, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
-   0x04, 0x12, 0x02, 0x00, 0x07, 0x12, 0x01, 0x00,
-   0x27, 0x12, 0x01, 0x00, 0x13, 0x12, 0x06, 0x00,
-   0x1C, 0x12, 0x23, 0x00, 0x55, 0x12, 0x0C, 0x00,
-   0xFF, 0x00, 0xFF, 0x00, 0x78, 0x12, 0x09, 0x11,
-   0x01, 0x00, 0x1A, 0x12, 0x05, 0x00, 0x51, 0x12,
-   0x0F, 0x00, 0x0D, 0x12, 0x01, 0x00, 0x04, 0x0D,
-   0x03, 0x12, 0x0B, 0x00, 0x12, 0x0D, 0x03, 0x00,
-   0x02, 0x12, 0x09, 0x00, 0x12, 0x0D, 0x02, 0x12,
-   0x0C, 0x00, 0x0D, 0x12, 0x01, 0x00, 0x03, 0x12,
-   0x01, 0x0D, 0x02, 0x12, 0x0C, 0x00, 0x37, 0x0D,
-   0x07, 0x00, 0x08, 0x0D, 0x01, 0x00, 0x02, 0x0D,
-   0x0B, 0x00, 0x07, 0x0A, 0x01, 0x00, 0x01, 0x12,
-   0x03, 0x00, 0x0A, 0x12, 0x21, 0x0D, 0x03, 0x0E,
-   0x01, 0x12, 0x01, 0x00, 0x0A, 0x12, 0x06, 0x00,
-   0x58, 0x12, 0x08, 0x00, 0x29, 0x0D, 0x01, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0x5B, 0x00, 0x9C, 0x12, 0x04, 0x00,
-   0x5A, 0x12, 0x06, 0x00, 0x16, 0x12, 0x02, 0x00,
-   0x06, 0x12, 0x02, 0x00, 0x26, 0x12, 0x02, 0x00,
-   0x06, 0x12, 0x02, 0x00, 0x08, 0x12, 0x01, 0x00,
-   0x01, 0x12, 0x01, 0x00, 0x01, 0x12, 0x01, 0x00,
-   0x01, 0x12, 0x01, 0x00, 0x1F, 0x12, 0x02, 0x00,
-   0x35, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,
-   0x01, 0x12, 0x03, 0x00, 0x03, 0x12, 0x01, 0x00,
-   0x07, 0x12, 0x03, 0x00, 0x04, 0x12, 0x02, 0x00,
-   0x06, 0x12, 0x04, 0x00, 0x0D, 0x12, 0x05, 0x00,
-   0x03, 0x12, 0x01, 0x00, 0x07, 0x12, 0x03, 0x11,
-   0x0B, 0x0E, 0x03, 0x00, 0x01, 0x03, 0x01, 0x12,
-   0x18, 0x11, 0x01, 0x0F, 0x01, 0x01, 0x01, 0x05,
-   0x01, 0x07, 0x01, 0x02, 0x01, 0x06, 0x01, 0x11,
-   0x01, 0x0A, 0x05, 0x12, 0x2A, 0x11, 0x01, 0x0E,
-   0x04, 0x12, 0x06, 0x0E, 0x06, 0x08, 0x01, 0x00,
-   0x01, 0x12, 0x02, 0x08, 0x06, 0x0A, 0x02, 0x12,
-   0x03, 0x00, 0x01, 0x08, 0x0A, 0x0A, 0x02, 0x12,
-   0x14, 0x0A, 0x12, 0x12, 0x1E, 0x0D, 0x1B, 0x12,
-   0x17, 0x00, 0x01, 0x12, 0x04, 0x00, 0x01, 0x12,
-   0x02, 0x00, 0x0A, 0x12, 0x01, 0x00, 0x01, 0x12,
-   0x03, 0x00, 0x05, 0x12, 0x06, 0x00, 0x01, 0x12,
-   0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x01, 0x12,
-   0x01, 0x00, 0x04, 0x0A, 0x01, 0x00, 0x03, 0x12,
-   0x01, 0x00, 0x07, 0x12, 0x03, 0x00, 0x03, 0x12,
-   0x05, 0x00, 0x05, 0x12, 0x16, 0x00, 0x24, 0x12,
-   0x8E, 0x0A, 0x02, 0x12, 0xFF, 0x12, 0x23, 0x00,
-   0x45, 0x12, 0x1A, 0x00, 0x01, 0x12, 0xCA, 0x08,
-   0x3C, 0x00, 0x4E, 0x08, 0x01, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0x20, 0x11, 0x01, 0x12,
-   0x04, 0x00, 0x03, 0x12, 0x19, 0x00, 0x09, 0x0D,
-   0x06, 0x12, 0x01, 0x00, 0x05, 0x12, 0x02, 0x00,
-   0x05, 0x12, 0x04, 0x00, 0x56, 0x12, 0x02, 0x0D,
-   0x02, 0x12, 0x02, 0x00, 0x03, 0x12, 0x01, 0x00,
-   0x5A, 0x12, 0x01, 0x00, 0x04, 0x12, 0x05, 0x00,
-   0x28, 0x12, 0x04, 0x00, 0x5E, 0x12, 0x01, 0x00,
-   0x28, 0x12, 0x38, 0x00, 0x2D, 0x12, 0x03, 0x00,
-   0x24, 0x12, 0x1C, 0x00, 0x1C, 0x12, 0x03, 0x00,
-   0x32, 0x12, 0x0F, 0x00, 0x0C, 0x12, 0x04, 0x00,
-   0x2F, 0x12, 0x01, 0x00, 0x77, 0x12, 0x04, 0x00,
-   0x63, 0x12, 0x02, 0x00, 0x1F, 0x12, 0x01, 0x00,
-   0x01, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xCD, 0x00, 0x01, 0x12,
-   0x4A, 0x00, 0x01, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xF5, 0x00,
-   0x01, 0x12, 0x5A, 0x00, 0xFF, 0x00, 0xFF, 0x00,
-   0xFF, 0x00, 0xFF, 0x00, 0x91, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0x7A, 0x00, 0x01, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xCD, 0x00,
-   0x01, 0x12, 0x5C, 0x00, 0x01, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0x81, 0x00, 0x02, 0x12,
-   0x7E, 0x00, 0x02, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0x02, 0x00, 0x02, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
-   0xFF, 0x12, 0x17, 0x00, 0xFF, 0x00, 0x30, 0x12,
-   0x02, 0x00, 0x3B, 0x12, 0x95, 0x00, 0x07, 0x12,
-   0x0C, 0x00, 0x05, 0x12, 0x05, 0x03, 0x01, 0x0D,
-   0x01, 0x03, 0x0A, 0x0A, 0x01, 0x03, 0x0D, 0x12,
-   0x01, 0x03, 0x05, 0x12, 0x01, 0x03, 0x01, 0x12,
-   0x01, 0x03, 0x02, 0x12, 0x01, 0x03, 0x02, 0x12,
-   0x01, 0x03, 0x0A, 0x04, 0x62, 0x12, 0x21, 0x04,
-   0xFF, 0x04, 0x6C, 0x12, 0x12, 0x04, 0x40, 0x12,
-   0x02, 0x04, 0x36, 0x12, 0x28, 0x04, 0x0D, 0x12,
-   0x03, 0x0D, 0x10, 0x12, 0x10, 0x0D, 0x04, 0x12,
-   0x2C, 0x0C, 0x01, 0x12, 0x01, 0x0C, 0x01, 0x12,
-   0x02, 0x0C, 0x01, 0x12, 0x09, 0x0A, 0x01, 0x12,
-   0x02, 0x0A, 0x02, 0x12, 0x05, 0x0A, 0x02, 0x12,
-   0x05, 0x04, 0x05, 0x12, 0x01, 0x04, 0x87, 0x12,
-   0x02, 0x0E, 0x01, 0x12, 0x03, 0x0A, 0x03, 0x12,
-   0x05, 0x0A, 0x01, 0x0C, 0x01, 0x0A, 0x01, 0x0C,
-   0x01, 0x09, 0x01, 0x08, 0x0A, 0x0C, 0x01, 0x12,
-   0x06, 0x00, 0x1A, 0x12, 0x06, 0x00, 0x1A, 0x12,
-   0x0B, 0x00, 0x59, 0x12, 0x03, 0x00, 0x06, 0x12,
-   0x02, 0x00, 0x06, 0x12, 0x02, 0x00, 0x06, 0x12,
-   0x02, 0x00, 0x03, 0x12, 0x03, 0x0A, 0x02, 0x12,
-   0x03, 0x0A, 0x02, 0x12, 0x09, 0x00, 0x0E, 0x00,
+    { BN,   9}, {  S,   1}, {  B,   1}, {  S,   1}, { WS,   1},
+    {  B,   1}, { BN,  14}, {  B,   3}, {  S,   1}, { WS,   1},
+    { ON,   2}, { ET,   3}, { ON,   5}, { ET,   1}, { CS,   1},
+    { ET,   1}, { CS,   1}, { ES,   1}, { EN,  10}, { CS,   1},
+    { ON,   6}, {  L,  26}, { ON,   6}, {  L,  26}, { ON,   4},
+    { BN,   6}, {  B,   1}, { BN,  26}, { CS,   1}, { ON,   1},
+    { ET,   4}, { ON,   4}, {  L,   1}, { ON,   5}, { ET,   2},
+    { EN,   2}, { ON,   1}, {  L,   1}, { ON,   3}, { EN,   1},
+    {  L,   1}, { ON,   5}, {  L,  23}, { ON,   1}, {  L,  31},
+    { ON,   1}, {  L, 255}, {  L,  42}, { ON,   1}, {  L,  18},
+    { ON,  28}, {  L,  94}, { ON,   2}, {  L,   9}, { ON,   2},
+    {  L,   7}, { ON,  14}, {  L,   2}, { ON,  14}, {  L,   5},
+    { ON,   9}, {  L,   1}, { ON,  17}, {NSM,  80}, { ON,  16},
+    {NSM,  16}, { ON,  10}, {  L,   1}, { ON,  11}, {  L,   1},
+    { ON,   1}, {  L,   3}, { ON,   1}, {  L,   1}, { ON,   1},
+    {  L,  20}, { ON,   1}, {  L,  44}, { ON,   1}, {  L,  38},
+    { ON,  10}, {  L, 131}, {NSM,   4}, { ON,   1}, {NSM,   2},
+    {  L,  69}, { ON,   1}, {  L,  38}, { ON,   2}, {  L,   2},
+    { ON,   6}, {  L,  16}, { ON,  33}, {  L,  38}, { ON,   2},
+    {  L,   7}, { ON,   1}, {  L,  39}, { ON,   1}, {  L,   1},
+    { ON,   7}, {NSM,  17}, { ON,   1}, {NSM,  23}, { ON,   1},
+    {NSM,   3}, {  R,   1}, {NSM,   1}, {  R,   1}, {NSM,   2},
+    {  R,   1}, {NSM,   1}, { ON,  11}, {  R,  27}, { ON,   5},
+    {  R,   5}, { ON,  23}, { CS,   1}, { ON,  14}, { AL,   1},
+    { ON,   3}, { AL,   1}, { ON,   1}, { AL,  26}, { ON,   5},
+    { AL,  11}, {NSM,  11}, { ON,  10}, { AN,  10}, { ET,   1},
+    { AN,   2}, { AL,   3}, {NSM,   1}, { AL, 101}, {NSM,   7},
+    { AL,   1}, {NSM,   7}, { AL,   2}, {NSM,   2}, { ON,   1},
+    {NSM,   4}, { ON,   2}, { EN,  10}, { AL,   5}, { ON,   1},
+    { AL,  14}, { ON,   1}, { BN,   1}, { AL,   1}, {NSM,   1},
+    { AL,  27}, { ON,   3}, {NSM,  27}, { ON,  53}, { AL,  38},
+    {NSM,  11}, { AL,   1}, { ON, 255}, { ON,  80}, {NSM,   2},
+    {  L,   1}, { ON,   1}, {  L,  53}, { ON,   2}, {NSM,   1},
+    {  L,   4}, {NSM,   8}, {  L,   4}, {NSM,   1}, { ON,   2},
+    {  L,   1}, {NSM,   4}, { ON,   3}, {  L,  10}, {NSM,   2},
+    {  L,  13}, { ON,  16}, {NSM,   1}, {  L,   2}, { ON,   1},
+    {  L,   8}, { ON,   2}, {  L,   2}, { ON,   2}, {  L,  22},
+    { ON,   1}, {  L,   7}, { ON,   1}, {  L,   1}, { ON,   3},
+    {  L,   4}, { ON,   2}, {NSM,   1}, { ON,   1}, {  L,   3},
+    {NSM,   4}, { ON,   2}, {  L,   2}, { ON,   2}, {  L,   2},
+    {NSM,   1}, { ON,   9}, {  L,   1}, { ON,   4}, {  L,   2},
+    { ON,   1}, {  L,   3}, {NSM,   2}, { ON,   2}, {  L,  12},
+    { ET,   2}, {  L,   7}, { ON,   7}, {NSM,   1}, { ON,   2},
+    {  L,   6}, { ON,   4}, {  L,   2}, { ON,   2}, {  L,  22},
+    { ON,   1}, {  L,   7}, { ON,   1}, {  L,   2}, { ON,   1},
+    {  L,   2}, { ON,   1}, {  L,   2}, { ON,   2}, {NSM,   1},
+    { ON,   1}, {  L,   3}, {NSM,   2}, { ON,   4}, {NSM,   2},
+    { ON,   2}, {NSM,   3}, { ON,  11}, {  L,   4}, { ON,   1},
+    {  L,   1}, { ON,   7}, {  L,  10}, {NSM,   2}, {  L,   3},
+    { ON,  12}, {NSM,   2}, {  L,   1}, { ON,   1}, {  L,   7},
+    { ON,   1}, {  L,   1}, { ON,   1}, {  L,   3}, { ON,   1},
+    {  L,  22}, { ON,   1}, {  L,   7}, { ON,   1}, {  L,   2},
+    { ON,   1}, {  L,   5}, { ON,   2}, {NSM,   1}, {  L,   4},
+    {NSM,   5}, { ON,   1}, {NSM,   2}, {  L,   1}, { ON,   1},
+    {  L,   2}, {NSM,   1}, { ON,   2}, {  L,   1}, { ON,  15},
+    {  L,   1}, { ON,   5}, {  L,  10}, { ON,  17}, {NSM,   1},
+    {  L,   2}, { ON,   1}, {  L,   8}, { ON,   2}, {  L,   2},
+    { ON,   2}, {  L,  22}, { ON,   1}, {  L,   7}, { ON,   1},
+    {  L,   2}, { ON,   2}, {  L,   4}, { ON,   2}, {NSM,   1},
+    {  L,   2}, {NSM,   1}, {  L,   1}, {NSM,   3}, { ON,   3},
+    {  L,   2}, { ON,   2}, {  L,   2}, {NSM,   1}, { ON,   8},
+    {NSM,   1}, {  L,   1}, { ON,   4}, {  L,   2}, { ON,   1},
+    {  L,   3}, { ON,   4}, {  L,  11}, { ON,  17}, {NSM,   1},
+    {  L,   1}, { ON,   1}, {  L,   6}, { ON,   3}, {  L,   3},
+    { ON,   1}, {  L,   4}, { ON,   3}, {  L,   2}, { ON,   1},
+    {  L,   1}, { ON,   1}, {  L,   2}, { ON,   3}, {  L,   2},
+    { ON,   3}, {  L,   3}, { ON,   3}, {  L,   8}, { ON,   1},
+    {  L,   3}, { ON,   4}, {  L,   2}, {NSM,   1}, {  L,   2},
+    { ON,   3}, {  L,   3}, { ON,   1}, {  L,   3}, {NSM,   1},
+    { ON,   9}, {  L,   1}, { ON,  15}, {  L,  12}, { ON,  14},
+    {  L,   3}, { ON,   1}, {  L,   8}, { ON,   1}, {  L,   3},
+    { ON,   1}, {  L,  23}, { ON,   1}, {  L,  10}, { ON,   1},
+    {  L,   5}, { ON,   4}, {NSM,   3}, {  L,   4}, { ON,   1},
+    {NSM,   3}, { ON,   1}, {NSM,   4}, { ON,   7}, {NSM,   2},
+    { ON,   9}, {  L,   2}, { ON,   4}, {  L,  10}, { ON,  18},
+    {  L,   2}, { ON,   1}, {  L,   8}, { ON,   1}, {  L,   3},
+    { ON,   1}, {  L,  23}, { ON,   1}, {  L,  10}, { ON,   1},
+    {  L,   5}, { ON,   4}, {  L,   1}, {NSM,   1}, {  L,   5},
+    { ON,   1}, {NSM,   1}, {  L,   2}, { ON,   1}, {  L,   2},
+    {NSM,   2}, { ON,   7}, {  L,   2}, { ON,   7}, {  L,   1},
+    { ON,   1}, {  L,   2}, { ON,   4}, {  L,  10}, { ON,  18},
+    {  L,   2}, { ON,   1}, {  L,   8}, { ON,   1}, {  L,   3},
+    { ON,   1}, {  L,  23}, { ON,   1}, {  L,  16}, { ON,   4},
+    {  L,   3}, {NSM,   3}, { ON,   2}, {  L,   3}, { ON,   1},
+    {  L,   3}, {NSM,   1}, { ON,   9}, {  L,   1}, { ON,   8},
+    {  L,   2}, { ON,   4}, {  L,  10}, { ON,  18}, {  L,   2},
+    { ON,   1}, {  L,  18}, { ON,   3}, {  L,  24}, { ON,   1},
+    {  L,   9}, { ON,   1}, {  L,   1}, { ON,   2}, {  L,   7},
+    { ON,   3}, {NSM,   1}, { ON,   4}, {  L,   3}, {NSM,   3},
+    { ON,   1}, {NSM,   1}, { ON,   1}, {  L,   8}, { ON,  18},
+    {  L,   3}, { ON,  12}, {  L,  48}, {NSM,   1}, {  L,   2},
+    {NSM,   7}, { ON,   4}, { ET,   1}, {  L,   7}, {NSM,   8},
+    {  L,  13}, { ON,  37}, {  L,   2}, { ON,   1}, {  L,   1},
+    { ON,   2}, {  L,   2}, { ON,   1}, {  L,   1}, { ON,   2},
+    {  L,   1}, { ON,   6}, {  L,   4}, { ON,   1}, {  L,   7},
+    { ON,   1}, {  L,   3}, { ON,   1}, {  L,   1}, { ON,   1},
+    {  L,   1}, { ON,   2}, {  L,   2}, { ON,   1}, {  L,   4},
+    {NSM,   1}, {  L,   2}, {NSM,   6}, { ON,   1}, {NSM,   2},
+    {  L,   1}, { ON,   2}, {  L,   5}, { ON,   1}, {  L,   1},
+    { ON,   1}, {NSM,   6}, { ON,   2}, {  L,  10}, { ON,   2},
+    {  L,   2}, { ON,  34}, {  L,  24}, {NSM,   2}, {  L,  27},
+    {NSM,   1}, {  L,   1}, {NSM,   1}, {  L,   1}, {NSM,   1},
+    { ON,   4}, {  L,  10}, { ON,   1}, {  L,  34}, { ON,   6},
+    {NSM,  14}, {  L,   1}, {NSM,   5}, {  L,   1}, {NSM,   2},
+    {  L,   4}, { ON,   4}, {NSM,   8}, { ON,   1}, {NSM,  36},
+    { ON,   1}, {  L,   8}, {NSM,   1}, {  L,   6}, { ON,   2},
+    {  L,   1}, { ON,  48}, {  L,  34}, { ON,   1}, {  L,   5},
+    { ON,   1}, {  L,   2}, { ON,   1}, {  L,   1}, {NSM,   4},
+    {  L,   1}, {NSM,   1}, { ON,   3}, {NSM,   2}, {  L,   1},
+    {NSM,   1}, { ON,   6}, {  L,  24}, {NSM,   2}, { ON,  70},
+    {  L,  38}, { ON,  10}, {  L,  41}, { ON,   2}, {  L,   1},
+    { ON,   4}, {  L,  90}, { ON,   5}, {  L,  68}, { ON,   5},
+    {  L,  82}, { ON,   6}, {  L,   7}, { ON,   1}, {  L,  63},
+    { ON,   1}, {  L,   1}, { ON,   1}, {  L,   4}, { ON,   2},
+    {  L,   7}, { ON,   1}, {  L,   1}, { ON,   1}, {  L,   4},
+    { ON,   2}, {  L,  39}, { ON,   1}, {  L,   1}, { ON,   1},
+    {  L,   4}, { ON,   2}, {  L,  31}, { ON,   1}, {  L,   1},
+    { ON,   1}, {  L,   4}, { ON,   2}, {  L,   7}, { ON,   1},
+    {  L,   1}, { ON,   1}, {  L,   4}, { ON,   2}, {  L,   7},
+    { ON,   1}, {  L,   7}, { ON,   1}, {  L,  23}, { ON,   1},
+    {  L,  31}, { ON,   1}, {  L,   1}, { ON,   1}, {  L,   4},
+    { ON,   2}, {  L,   7}, { ON,   1}, {  L,  39}, { ON,   1},
+    {  L,  19}, { ON,   6}, {  L,  28}, { ON,  35}, {  L,  85},
+    { ON,  12}, {  L, 255}, {  L, 255}, {  L, 120}, { ON,   9},
+    { WS,   1}, {  L,  26}, { ON,   5}, {  L,  81}, { ON,  15},
+    {  L,  13}, { ON,   1}, {  L,   4}, {NSM,   3}, { ON,  11},
+    {  L,  18}, {NSM,   3}, {  L,   2}, { ON,   9}, {  L,  18},
+    {NSM,   2}, { ON,  12}, {  L,  13}, { ON,   1}, {  L,   3},
+    { ON,   1}, {NSM,   2}, { ON,  12}, {  L,  55}, {NSM,   7},
+    {  L,   8}, {NSM,   1}, {  L,   2}, {NSM,  11}, {  L,   7},
+    { ET,   1}, {  L,   1}, { ON,   3}, {  L,  10}, { ON,  33},
+    {NSM,   3}, { BN,   1}, { ON,   1}, {  L,  10}, { ON,   6},
+    {  L,  88}, { ON,   8}, {  L,  41}, {NSM,   1}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON,  91},
+    {  L, 156}, { ON,   4}, {  L,  90}, { ON,   6}, {  L,  22},
+    { ON,   2}, {  L,   6}, { ON,   2}, {  L,  38}, { ON,   2},
+    {  L,   6}, { ON,   2}, {  L,   8}, { ON,   1}, {  L,   1},
+    { ON,   1}, {  L,   1}, { ON,   1}, {  L,   1}, { ON,   1},
+    {  L,  31}, { ON,   2}, {  L,  53}, { ON,   1}, {  L,   7},
+    { ON,   1}, {  L,   1}, { ON,   3}, {  L,   3}, { ON,   1},
+    {  L,   7}, { ON,   3}, {  L,   4}, { ON,   2}, {  L,   6},
+    { ON,   4}, {  L,  13}, { ON,   5}, {  L,   3}, { ON,   1},
+    {  L,   7}, { ON,   3}, { WS,  11}, { BN,   3}, {  L,   1},
+    {  R,   1}, { ON,  24}, { WS,   1}, {  B,   1}, {LRE,   1},
+    {RLE,   1}, {PDF,   1}, {LRO,   1}, {RLO,   1}, { WS,   1},
+    { ET,   5}, { ON,  42}, { WS,   1}, { BN,   4}, { ON,   6},
+    { BN,   6}, { EN,   1}, {  L,   1}, { ON,   2}, { EN,   6},
+    { ET,   2}, { ON,   3}, {  L,   1}, { EN,  10}, { ET,   2},
+    { ON,  20}, { ET,  18}, { ON,  30}, {NSM,  27}, { ON,  23},
+    {  L,   1}, { ON,   4}, {  L,   1}, { ON,   2}, {  L,  10},
+    { ON,   1}, {  L,   1}, { ON,   3}, {  L,   5}, { ON,   6},
+    {  L,   1}, { ON,   1}, {  L,   1}, { ON,   1}, {  L,   1},
+    { ON,   1}, {  L,   4}, { ET,   1}, {  L,   3}, { ON,   1},
+    {  L,   7}, { ON,   3}, {  L,   3}, { ON,   5}, {  L,   5},
+    { ON,  22}, {  L,  36}, { ON, 142}, { ET,   2}, { ON, 255},
+    { ON,  35}, {  L,  69}, { ON,  26}, {  L,   1}, { ON, 202},
+    { EN,  60}, {  L,  78}, { EN,   1}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON,  32},
+    { WS,   1}, { ON,   4}, {  L,   3}, { ON,  25}, {  L,   9},
+    {NSM,   6}, { ON,   1}, {  L,   5}, { ON,   2}, {  L,   5},
+    { ON,   4}, {  L,  86}, { ON,   2}, {NSM,   2}, { ON,   2},
+    {  L,   3}, { ON,   1}, {  L,  90}, { ON,   1}, {  L,   4},
+    { ON,   5}, {  L,  40}, { ON,   4}, {  L,  94}, { ON,   1},
+    {  L,  40}, { ON,  56}, {  L,  45}, { ON,   3}, {  L,  36},
+    { ON,  28}, {  L,  28}, { ON,   3}, {  L,  50}, { ON,  15},
+    {  L,  12}, { ON,   4}, {  L,  47}, { ON,   1}, {  L, 119},
+    { ON,   4}, {  L,  99}, { ON,   2}, {  L,  31}, { ON,   1},
+    {  L,   1}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 205}, {  L,   1}, { ON,  74}, {  L,   1},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 245}, {  L,   1}, { ON,  90}, {  L, 255},
+    {  L, 255}, {  L, 255}, {  L, 255}, {  L, 145}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 122}, {  L,   1}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 205}, {  L,   1}, { ON,  92}, {  L,   1},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 129}, {  L,   2},
+    { ON, 126}, {  L,   2}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON,   2}, {  L,   2}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
+    { ON, 255}, { ON, 255}, { ON, 255}, { ON,  23}, {  L, 255},
+    {  L,  48}, { ON,   2}, {  L,  59}, { ON, 149}, {  L,   7},
+    { ON,  12}, {  L,   5}, { ON,   5}, {  R,   1}, {NSM,   1},
+    {  R,  10}, { ET,   1}, {  R,  13}, { ON,   1}, {  R,   5},
+    { ON,   1}, {  R,   1}, { ON,   1}, {  R,   2}, { ON,   1},
+    {  R,   2}, { ON,   1}, {  R,  10}, { AL,  98}, { ON,  33},
+    { AL, 255}, { AL, 108}, { ON,  18}, { AL,  64}, { ON,   2},
+    { AL,  54}, { ON,  40}, { AL,  13}, { ON,   3}, {NSM,  16},
+    { ON,  16}, {NSM,   4}, { ON,  44}, { CS,   1}, { ON,   1},
+    { CS,   1}, { ON,   2}, { CS,   1}, { ON,   9}, { ET,   1},
+    { ON,   2}, { ET,   2}, { ON,   5}, { ET,   2}, { ON,   5},
+    { AL,   5}, { ON,   1}, { AL, 135}, { ON,   2}, { BN,   1},
+    { ON,   3}, { ET,   3}, { ON,   5}, { ET,   1}, { CS,   1},
+    { ET,   1}, { CS,   1}, { ES,   1}, { EN,  10}, { CS,   1},
+    { ON,   6}, {  L,  26}, { ON,   6}, {  L,  26}, { ON,  11},
+    {  L,  89}, { ON,   3}, {  L,   6}, { ON,   2}, {  L,   6},
+    { ON,   2}, {  L,   6}, { ON,   2}, {  L,   3}, { ON,   3},
+    { ET,   2}, { ON,   3}, { ET,   2}, { ON,   9}, {  L,  14},
 };