text: /*
   * vlc.h
   * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org>
   * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
   *
   * This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
   * See http://libmpeg2.sourceforge.net/ for updates.
   *
   * mpeg2dec is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation; either version 2 of the License, or
   * (at your option) any later version.
   *
   * mpeg2dec is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this program; if not, write to the Free Software
   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   *
   * $Id$
   * libmpeg2 sync history:
   * 2008-07-01 - CVS revision 1.12
   */
  
  #define GETWORD(bit_buf, shift, bit_ptr) \
  do {                                                        \
      bit_buf |= ((bit_ptr[0] << 8) | bit_ptr[1]) << (shift); \
      bit_ptr += 2;                                           \
  } while (0)
  
  static inline void bitstream_init (mpeg2_decoder_t * decoder,
                     const uint8_t * start)
  {
      decoder->bitstream_buf =
      (start[0] << 24) | (start[1] << 16) | (start[2] << 8) | start[3];
      decoder->bitstream_ptr = start + 4;
      decoder->bitstream_bits = -16;
  }
  
  /* make sure that there are at least 16 valid bits in bit_buf */
  #define NEEDBITS(bit_buf, bits, bit_ptr) \
  do {                                      \
      if (unlikely (bits > 0)) {            \
          GETWORD (bit_buf, bits, bit_ptr); \
          bits -= 16;                       \
      }                                     \
  } while (0)
  
  /* remove num valid bits from bit_buf */
  #define DUMPBITS(bit_buf, bits, num) \
  do {                   \
      bit_buf <<= (num); \
      bits += (num);     \
  } while (0)
  
  /* take num bits from the high part of bit_buf and zero extend them */
  #define UBITS(bit_buf,num) (((uint32_t)(bit_buf)) >> (32 - (num)))
  
  /* take num bits from the high part of bit_buf and sign extend them */
  #define SBITS(bit_buf,num) (((int32_t)(bit_buf)) >> (32 - (num)))
  
  typedef struct {
      uint8_t modes;
      uint8_t len;
  } MBtab;
  
  typedef struct {
      uint8_t delta;
      uint8_t len;
  } MVtab;
  
  typedef struct {
      int8_t dmv;
      uint8_t len;
  } DMVtab;
  
  typedef struct {
      uint8_t cbp;
      uint8_t len;
  } CBPtab;
  
  typedef struct {
      uint8_t size;
      uint8_t len;
  } DCtab;
  
  typedef struct {
      uint8_t run;
      uint8_t level;
      uint8_t len;
  } DCTtab;
  
  typedef struct {
      uint8_t mba;
      uint8_t len;
  } MBAtab;
  
  
  #define INTRA MACROBLOCK_INTRA
  #define QUANT MACROBLOCK_QUANT
  
  static const MBtab MB_I [] ICONST_ATTR = {
      {INTRA|QUANT, 2}, {INTRA, 1}
  };
  
  #define MC MACROBLOCK_MOTION_FORWARD
  #define CODED MACROBLOCK_PATTERN
  
  static const MBtab MB_P [] ICONST_ATTR = {
      {INTRA|QUANT, 6}, {CODED|QUANT, 5}, {MC|CODED|QUANT, 5}, {INTRA,    5},
      {MC,          3}, {MC,          3}, {MC,             3}, {MC,       3},
      {CODED,       2}, {CODED,       2}, {CODED,          2}, {CODED,    2},
      {CODED,       2}, {CODED,       2}, {CODED,          2}, {CODED,    2},
      {MC|CODED,    1}, {MC|CODED,    1}, {MC|CODED,       1}, {MC|CODED, 1},
      {MC|CODED,    1}, {MC|CODED,    1}, {MC|CODED,       1}, {MC|CODED, 1},
      {MC|CODED,    1}, {MC|CODED,    1}, {MC|CODED,       1}, {MC|CODED, 1},
      {MC|CODED,    1}, {MC|CODED,    1}, {MC|CODED,       1}, {MC|CODED, 1}
  };
  
  #define FWD MACROBLOCK_MOTION_FORWARD
  #define BWD MACROBLOCK_MOTION_BACKWARD
  #define INTER MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD
  
  static const MBtab MB_B [] ICONST_ATTR = {
      {0,                 6}, {INTRA|QUANT,       6},
      {BWD|CODED|QUANT,   6}, {FWD|CODED|QUANT,   6},
      {INTER|CODED|QUANT, 5}, {INTER|CODED|QUANT, 5},
                      {INTRA,       5}, {INTRA,       5},
      {FWD,         4}, {FWD,         4}, {FWD,         4}, {FWD,         4},
      {FWD|CODED,   4}, {FWD|CODED,   4}, {FWD|CODED,   4}, {FWD|CODED,   4},
      {BWD,         3}, {BWD,         3}, {BWD,         3}, {BWD,         3},
      {BWD,         3}, {BWD,         3}, {BWD,         3}, {BWD,         3},
      {BWD|CODED,   3}, {BWD|CODED,   3}, {BWD|CODED,   3}, {BWD|CODED,   3},
      {BWD|CODED,   3}, {BWD|CODED,   3}, {BWD|CODED,   3}, {BWD|CODED,   3},
      {INTER,       2}, {INTER,       2}, {INTER,       2}, {INTER,       2},
      {INTER,       2}, {INTER,       2}, {INTER,       2}, {INTER,       2},
      {INTER,       2}, {INTER,       2}, {INTER,       2}, {INTER,       2},
      {INTER,       2}, {INTER,       2}, {INTER,       2}, {INTER,       2},
      {INTER|CODED, 2}, {INTER|CODED, 2}, {INTER|CODED, 2}, {INTER|CODED, 2},
      {INTER|CODED, 2}, {INTER|CODED, 2}, {INTER|CODED, 2}, {INTER|CODED, 2},
      {INTER|CODED, 2}, {INTER|CODED, 2}, {INTER|CODED, 2}, {INTER|CODED, 2},
      {INTER|CODED, 2}, {INTER|CODED, 2}, {INTER|CODED, 2}, {INTER|CODED, 2}
  };
  
  #undef INTRA
  #undef QUANT
  #undef MC
  #undef CODED
  #undef FWD
  #undef BWD
  #undef INTER
  
  
  static const MVtab MV_4 [] ICONST_ATTR = {
      { 3, 6}, { 2, 4}, { 1, 3}, { 1, 3}, { 0, 2}, { 0, 2}, { 0, 2}, { 0, 2}
  };
  
  static const MVtab MV_10 [] ICONST_ATTR = {
      { 0,10}, { 0,10}, { 0,10}, { 0,10}, { 0,10}, { 0,10}, { 0,10}, { 0,10},
      { 0,10}, { 0,10}, { 0,10}, { 0,10}, {15,10}, {14,10}, {13,10}, {12,10},
      {11,10}, {10,10}, { 9, 9}, { 9, 9}, { 8, 9}, { 8, 9}, { 7, 9}, { 7, 9},
      { 6, 7}, { 6, 7}, { 6, 7}, { 6, 7}, { 6, 7}, { 6, 7}, { 6, 7}, { 6, 7},
      { 5, 7}, { 5, 7}, { 5, 7}, { 5, 7}, { 5, 7}, { 5, 7}, { 5, 7}, { 5, 7},
      { 4, 7}, { 4, 7}, { 4, 7}, { 4, 7}, { 4, 7}, { 4, 7}, { 4, 7}, { 4, 7}
  };
  
  
  static const DMVtab DMV_2 [] ICONST_ATTR = {
      { 0, 1}, { 0, 1}, { 1, 2}, {-1, 2}
  };
  
  
  static const CBPtab CBP_7 [] ICONST_ATTR = {
      {0x11, 7}, {0x12, 7}, {0x14, 7}, {0x18, 7},
      {0x21, 7}, {0x22, 7}, {0x24, 7}, {0x28, 7},
      {0x3f, 6}, {0x3f, 6}, {0x30, 6}, {0x30, 6},
      {0x09, 6}, {0x09, 6}, {0x06, 6}, {0x06, 6},
      {0x1f, 5}, {0x1f, 5}, {0x1f, 5}, {0x1f, 5},
      {0x10, 5}, {0x10, 5}, {0x10, 5}, {0x10, 5},
      {0x2f, 5}, {0x2f, 5}, {0x2f, 5}, {0x2f, 5},
      {0x20, 5}, {0x20, 5}, {0x20, 5}, {0x20, 5},
      {0x07, 5}, {0x07, 5}, {0x07, 5}, {0x07, 5},
      {0x0b, 5}, {0x0b, 5}, {0x0b, 5}, {0x0b, 5},
      {0x0d, 5}, {0x0d, 5}, {0x0d, 5}, {0x0d, 5},
      {0x0e, 5}, {0x0e, 5}, {0x0e, 5}, {0x0e, 5},
      {0x05, 5}, {0x05, 5}, {0x05, 5}, {0x05, 5},
      {0x0a, 5}, {0x0a, 5}, {0x0a, 5}, {0x0a, 5},
      {0x03, 5}, {0x03, 5}, {0x03, 5}, {0x03, 5},
      {0x0c, 5}, {0x0c, 5}, {0x0c, 5}, {0x0c, 5},
      {0x01, 4}, {0x01, 4}, {0x01, 4}, {0x01, 4},
      {0x01, 4}, {0x01, 4}, {0x01, 4}, {0x01, 4},
      {0x02, 4}, {0x02, 4}, {0x02, 4}, {0x02, 4},
      {0x02, 4}, {0x02, 4}, {0x02, 4}, {0x02, 4},
      {0x04, 4}, {0x04, 4}, {0x04, 4}, {0x04, 4},
      {0x04, 4}, {0x04, 4}, {0x04, 4}, {0x04, 4},
      {0x08, 4}, {0x08, 4}, {0x08, 4}, {0x08, 4},
      {0x08, 4}, {0x08, 4}, {0x08, 4}, {0x08, 4},
      {0x0f, 3}, {0x0f, 3}, {0x0f, 3}, {0x0f, 3},
      {0x0f, 3}, {0x0f, 3}, {0x0f, 3}, {0x0f, 3},
      {0x0f, 3}, {0x0f, 3}, {0x0f, 3}, {0x0f, 3},
      {0x0f, 3}, {0x0f, 3}, {0x0f, 3}, {0x0f, 3}
  };
  
  static const CBPtab CBP_9 [] ICONST_ATTR = {
      {0,    9}, {0x00, 9}, {0x39, 9}, {0x36, 9},
      {0x37, 9}, {0x3b, 9}, {0x3d, 9}, {0x3e, 9},
      {0x17, 8}, {0x17, 8}, {0x1b, 8}, {0x1b, 8},
      {0x1d, 8}, {0x1d, 8}, {0x1e, 8}, {0x1e, 8},
      {0x27, 8}, {0x27, 8}, {0x2b, 8}, {0x2b, 8},
      {0x2d, 8}, {0x2d, 8}, {0x2e, 8}, {0x2e, 8},
      {0x19, 8}, {0x19, 8}, {0x16, 8}, {0x16, 8},
      {0x29, 8}, {0x29, 8}, {0x26, 8}, {0x26, 8},
      {0x35, 8}, {0x35, 8}, {0x3a, 8}, {0x3a, 8},
      {0x33, 8}, {0x33, 8}, {0x3c, 8}, {0x3c, 8},
      {0x15, 8}, {0x15, 8}, {0x1a, 8}, {0x1a, 8},
      {0x13, 8}, {0x13, 8}, {0x1c, 8}, {0x1c, 8},
      {0x25, 8}, {0x25, 8}, {0x2a, 8}, {0x2a, 8},
      {0x23, 8}, {0x23, 8}, {0x2c, 8}, {0x2c, 8},
      {0x31, 8}, {0x31, 8}, {0x32, 8}, {0x32, 8},
      {0x34, 8}, {0x34, 8}, {0x38, 8}, {0x38, 8}
  };
  
  
  static const DCtab DC_lum_5 [] ICONST_ATTR = {
      {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2},
      {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2},
      {0, 3}, {0, 3}, {0, 3}, {0, 3}, {3, 3}, {3, 3}, {3, 3}, {3, 3},
      {4, 3}, {4, 3}, {4, 3}, {4, 3}, {5, 4}, {5, 4}, {6, 5}
  };
  
  static const DCtab DC_chrom_5 [] ICONST_ATTR = {
      {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2},
      {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2},
      {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2},
      {3, 3}, {3, 3}, {3, 3}, {3, 3}, {4, 4}, {4, 4}, {5, 5}
  };
  
  static const DCtab DC_long [] ICONST_ATTR = {
      {6, 5}, {6, 5}, {6, 5}, {6, 5}, {6, 5}, {6, 5}, { 6, 5}, { 6, 5},
      {6, 5}, {6, 5}, {6, 5}, {6, 5}, {6, 5}, {6, 5}, { 6, 5}, { 6, 5},
      {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6}, { 7, 6}, { 7, 6},
      {8, 7}, {8, 7}, {8, 7}, {8, 7}, {9, 8}, {9, 8}, {10, 9}, {11, 9}
  };
  
  
  static const DCTtab DCT_16 [] ICONST_ATTR = {
      {129, 0, 0}, {129, 0, 0}, {129, 0, 0}, {129, 0, 0},
      {129, 0, 0}, {129, 0, 0}, {129, 0, 0}, {129, 0, 0},
      {129, 0, 0}, {129, 0, 0}, {129, 0, 0}, {129, 0, 0},
      {129, 0, 0}, {129, 0, 0}, {129, 0, 0}, {129, 0, 0},
      {  2,18, 0}, {  2,17, 0}, {  2,16, 0}, {  2,15, 0},
      {  7, 3, 0}, { 17, 2, 0}, { 16, 2, 0}, { 15, 2, 0},
      { 14, 2, 0}, { 13, 2, 0}, { 12, 2, 0}, { 32, 1, 0},
      { 31, 1, 0}, { 30, 1, 0}, { 29, 1, 0}, { 28, 1, 0}
  };
  
  static const DCTtab DCT_15 [] ICONST_ATTR = {
      {  1,40,15}, {  1,39,15}, {  1,38,15}, {  1,37,15},
      {  1,36,15}, {  1,35,15}, {  1,34,15}, {  1,33,15},
      {  1,32,15}, {  2,14,15}, {  2,13,15}, {  2,12,15},
      {  2,11,15}, {  2,10,15}, {  2, 9,15}, {  2, 8,15},
      {  1,31,14}, {  1,31,14}, {  1,30,14}, {  1,30,14},
      {  1,29,14}, {  1,29,14}, {  1,28,14}, {  1,28,14},
      {  1,27,14}, {  1,27,14}, {  1,26,14}, {  1,26,14},
      {  1,25,14}, {  1,25,14}, {  1,24,14}, {  1,24,14},
      {  1,23,14}, {  1,23,14}, {  1,22,14}, {  1,22,14},
      {  1,21,14}, {  1,21,14}, {  1,20,14}, {  1,20,14},
      {  1,19,14}, {  1,19,14}, {  1,18,14}, {  1,18,14},
      {  1,17,14}, {  1,17,14}, {  1,16,14}, {  1,16,14}
  };
  
  static const DCTtab DCT_13 [] ICONST_ATTR = {
      { 11, 2,13}, { 10, 2,13}, {  6, 3,13}, {  4, 4,13},
      {  3, 5,13}, {  2, 7,13}, {  2, 6,13}, {  1,15,13},
      {  1,14,13}, {  1,13,13}, {  1,12,13}, { 27, 1,13},
      { 26, 1,13}, { 25, 1,13}, { 24, 1,13}, { 23, 1,13},
      {  1,11,12}, {  1,11,12}, {  9, 2,12}, {  9, 2,12},
      {  5, 3,12}, {  5, 3,12}, {  1,10,12}, {  1,10,12},
      {  3, 4,12}, {  3, 4,12}, {  8, 2,12}, {  8, 2,12},
      { 22, 1,12}, { 22, 1,12}, { 21, 1,12}, { 21, 1,12},
      {  1, 9,12}, {  1, 9,12}, { 20, 1,12}, { 20, 1,12},
      { 19, 1,12}, { 19, 1,12}, {  2, 5,12}, {  2, 5,12},
      {  4, 3,12}, {  4, 3,12}, {  1, 8,12}, {  1, 8,12},
      {  7, 2,12}, {  7, 2,12}, { 18, 1,12}, { 18, 1,12}
  };
  
  static const DCTtab DCT_B14_10 [] ICONST_ATTR = {
      { 17, 1,10}, {  6, 2,10}, {  1, 7,10}, {  3, 3,10},
      {  2, 4,10}, { 16, 1,10}, { 15, 1,10}, {  5, 2,10}
  };
  
  static const DCTtab DCT_B14_8 [] ICONST_ATTR = {
      { 65, 0, 12}, { 65, 0, 12}, { 65, 0, 12}, { 65, 0, 12},
      {  3, 2,  7}, {  3, 2,  7}, { 10, 1,  7}, { 10, 1,  7},
      {  1, 4,  7}, {  1, 4,  7}, {  9, 1,  7}, {  9, 1,  7},
      {  8, 1,  6}, {  8, 1,  6}, {  8, 1,  6}, {  8, 1,  6},
      {  7, 1,  6}, {  7, 1,  6}, {  7, 1,  6}, {  7, 1,  6},
      {  2, 2,  6}, {  2, 2,  6}, {  2, 2,  6}, {  2, 2,  6},
      {  6, 1,  6}, {  6, 1,  6}, {  6, 1,  6}, {  6, 1,  6},
      { 14, 1,  8}, {  1, 6,  8}, { 13, 1,  8}, { 12, 1,  8},
      {  4, 2,  8}, {  2, 3,  8}, {  1, 5,  8}, { 11, 1,  8}
  };
  
  static const DCTtab DCT_B14AC_5 [] ICONST_ATTR = {
           {  1, 3, 5}, {  5, 1, 5}, {  4, 1, 5},
      {  1, 2, 4}, {  1, 2, 4}, {  3, 1, 4}, {  3, 1, 4},
      {  2, 1, 3}, {  2, 1, 3}, {  2, 1, 3}, {  2, 1, 3},
      {129, 0, 2}, {129, 0, 2}, {129, 0, 2}, {129, 0, 2},
      {129, 0, 2}, {129, 0, 2}, {129, 0, 2}, {129, 0, 2},
      {  1, 1, 2}, {  1, 1, 2}, {  1, 1, 2}, {  1, 1, 2},
      {  1, 1, 2}, {  1, 1, 2}, {  1, 1, 2}, {  1, 1, 2}
  };
  
  static const DCTtab DCT_B14DC_5 [] ICONST_ATTR = {
           {  1, 3, 5}, {  5, 1, 5}, {  4, 1, 5},
      {  1, 2, 4}, {  1, 2, 4}, {  3, 1, 4}, {  3, 1, 4},
      {  2, 1, 3}, {  2, 1, 3}, {  2, 1, 3}, {  2, 1, 3},
      {  1, 1, 1}, {  1, 1, 1}, {  1, 1, 1}, {  1, 1, 1},
      {  1, 1, 1}, {  1, 1, 1}, {  1, 1, 1}, {  1, 1, 1},
      {  1, 1, 1}, {  1, 1, 1}, {  1, 1, 1}, {  1, 1, 1},
      {  1, 1, 1}, {  1, 1, 1}, {  1, 1, 1}, {  1, 1, 1}
  };
  
  static const DCTtab DCT_B15_10 [] ICONST_ATTR = {
      {  6, 2, 9}, {  6, 2, 9}, { 15, 1, 9}, { 15, 1, 9},
      {  3, 4,10}, { 17, 1,10}, { 16, 1, 9}, { 16, 1, 9}
  };
  
  static const DCTtab DCT_B15_8 [] ICONST_ATTR = {
      { 65, 0, 12}, { 65, 0, 12}, { 65, 0, 12}, { 65, 0, 12},
      {  8, 1,  7}, {  8, 1,  7}, {  9, 1,  7}, {  9, 1,  7},
      {  7, 1,  7}, {  7, 1,  7}, {  3, 2,  7}, {  3, 2,  7},
      {  1, 7,  6}, {  1, 7,  6}, {  1, 7,  6}, {  1, 7,  6},
      {  1, 6,  6}, {  1, 6,  6}, {  1, 6,  6}, {  1, 6,  6},
      {  5, 1,  6}, {  5, 1,  6}, {  5, 1,  6}, {  5, 1,  6},
      {  6, 1,  6}, {  6, 1,  6}, {  6, 1,  6}, {  6, 1,  6},
      {  2, 5,  8}, { 12, 1,  8}, {  1,11,  8}, {  1,10,  8},
      { 14, 1,  8}, { 13, 1,  8}, {  4, 2,  8}, {  2, 4,  8},
      {  3, 1,  5}, {  3, 1,  5}, {  3, 1,  5}, {  3, 1,  5},
      {  3, 1,  5}, {  3, 1,  5}, {  3, 1,  5}, {  3, 1,  5},
      {  2, 2,  5}, {  2, 2,  5}, {  2, 2,  5}, {  2, 2,  5},
      {  2, 2,  5}, {  2, 2,  5}, {  2, 2,  5}, {  2, 2,  5},
      {  4, 1,  5}, {  4, 1,  5}, {  4, 1,  5}, {  4, 1,  5},
      {  4, 1,  5}, {  4, 1,  5}, {  4, 1,  5}, {  4, 1,  5},
      {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3},
      {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3},
      {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3},
      {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3},
      {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3},
      {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3},
      {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3},
      {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3}, {  2, 1,  3},
      {129, 0,  4}, {129, 0,  4}, {129, 0,  4}, {129, 0,  4},
      {129, 0,  4}, {129, 0,  4}, {129, 0,  4}, {129, 0,  4},
      {129, 0,  4}, {129, 0,  4}, {129, 0,  4}, {129, 0,  4},
      {129, 0,  4}, {129, 0,  4}, {129, 0,  4}, {129, 0,  4},
      {  1, 3,  4}, {  1, 3,  4}, {  1, 3,  4}, {  1, 3,  4},
      {  1, 3,  4}, {  1, 3,  4}, {  1, 3,  4}, {  1, 3,  4},
      {  1, 3,  4}, {  1, 3,  4}, {  1, 3,  4}, {  1, 3,  4},
      {  1, 3,  4}, {  1, 3,  4}, {  1, 3,  4}, {  1, 3,  4},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2}, {  1, 1,  2},
      {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3},
      {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3},
      {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3},
      {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3},
      {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3},
      {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3},
      {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3},
      {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3}, {  1, 2,  3},
      {  1, 4,  5}, {  1, 4,  5}, {  1, 4,  5}, {  1, 4,  5},
      {  1, 4,  5}, {  1, 4,  5}, {  1, 4,  5}, {  1, 4,  5},
      {  1, 5,  5}, {  1, 5,  5}, {  1, 5,  5}, {  1, 5,  5},
      {  1, 5,  5}, {  1, 5,  5}, {  1, 5,  5}, {  1, 5,  5},
      { 10, 1,  7}, { 10, 1,  7}, {  2, 3,  7}, {  2, 3,  7},
      { 11, 1,  7}, { 11, 1,  7}, {  1, 8,  7}, {  1, 8,  7},
      {  1, 9,  7}, {  1, 9,  7}, {  1,12,  8}, {  1,13,  8},
      {  3, 3,  8}, {  5, 2,  8}, {  1,14,  8}, {  1,15,  8}
  };
  
  
  static const MBAtab MBA_5 [] ICONST_ATTR = {
              {6, 5}, {5, 5}, {4, 4}, {4, 4}, {3, 4}, {3, 4},
      {2, 3}, {2, 3}, {2, 3}, {2, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
      {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1},
      {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}
  };
  
  static const MBAtab MBA_11 [] ICONST_ATTR = {
      {32, 11}, {31, 11}, {30, 11}, {29, 11},
      {28, 11}, {27, 11}, {26, 11}, {25, 11},
      {24, 11}, {23, 11}, {22, 11}, {21, 11},
      {20, 10}, {20, 10}, {19, 10}, {19, 10},
      {18, 10}, {18, 10}, {17, 10}, {17, 10},
      {16, 10}, {16, 10}, {15, 10}, {15, 10},
      {14,  8}, {14,  8}, {14,  8}, {14,  8},
      {14,  8}, {14,  8}, {14,  8}, {14,  8},
      {13,  8}, {13,  8}, {13,  8}, {13,  8},
      {13,  8}, {13,  8}, {13,  8}, {13,  8},
      {12,  8}, {12,  8}, {12,  8}, {12,  8},
      {12,  8}, {12,  8}, {12,  8}, {12,  8},
      {11,  8}, {11,  8}, {11,  8}, {11,  8},
      {11,  8}, {11,  8}, {11,  8}, {11,  8},
      {10,  8}, {10,  8}, {10,  8}, {10,  8},
      {10,  8}, {10,  8}, {10,  8}, {10,  8},
      { 9,  8}, { 9,  8}, { 9,  8}, { 9,  8},
      { 9,  8}, { 9,  8}, { 9,  8}, { 9,  8},
      { 8,  7}, { 8,  7}, { 8,  7}, { 8,  7},
      { 8,  7}, { 8,  7}, { 8,  7}, { 8,  7},
      { 8,  7}, { 8,  7}, { 8,  7}, { 8,  7},
      { 8,  7}, { 8,  7}, { 8,  7}, { 8,  7},
      { 7,  7}, { 7,  7}, { 7,  7}, { 7,  7},
      { 7,  7}, { 7,  7}, { 7,  7}, { 7,  7},
      { 7,  7}, { 7,  7}, { 7,  7}, { 7,  7},
      { 7,  7}, { 7,  7}, { 7,  7}, { 7,  7}
  };
  