/*
 * Copyright (c) 1997-2004 Alexandros Eleftheriadis, Danny Hong and
 * Yuntai Kyong.
 * 
 * This file is part of Flavor, developed at Columbia University
 * (www.ee.columbia.edu/flavor).
 *
 * Flavor is free software; you can redistribute it and/or modify
 * it under the terms of the Flavor Artistic License as described in
 * the file COPYING.txt. 
 *
 */

/* 
 * Authors:
 * Danny Hong <danny@ee.columbia.edu>
 * Chun Hao(Tony) Wang <tony@ee.columbia.edu>
 *
 */

/*
 * Variable length code tables for MPEG-1 Video sequence
 * 
 * (ISO/IEC 11172-2 1993(E) Tables B.1, B.2, B.3, B.4, B.5)
 *
 */


/* Table B.1 */
map TableB1(int) {
    0b1,            1,
    0b011,          2,
    0b010,          3,
    0b0011,         4,
    0b0010,         5,
    0b00011,        6,
    0b00010,        7,
    0b0000111,      8,
    0b0000110,      9,
    0b00001011,     10,
    0b00001010,     11,
    0b00001001,     12,
    0b00001000,     13,
    0b00000111,     14,
    0b00000110,     15,
    0b0000010111,   16,
    0b0000010110,   17,
    0b0000010101,   18,
    0b0000010100,   19,
    0b0000010011,   20,
    0b0000010010,   21,
    0b00000100011,  22,
    0b00000100010,  23,
    0b00000100001,  24,
    0b00000100000,  25,
    0b00000011111,  26,
    0b00000011110,  27,
    0b00000011101,  28,
    0b00000011100,  29,
    0b00000011011,  30,
    0b00000011010,  31,
    0b00000011001,  32,
    0b00000011000,  33,
    0b00000001111,  34, 
    0b00000001000,  35  
}

/* Table B.2 */
class MacroblockTypes {
    int quant;
    int motion_forward;
    int motion_backward;
    int pattern;
    int intra;
}

map TableB2a(MacroblockTypes) {
    0b1,        {0,0,0,0,1},
    0b01,       {1,0,0,0,1}
}

map TableB2b(MacroblockTypes) {
    0b1,        {0,1,0,1,0},
    0b01,       {0,0,0,1,0},
    0b001,      {0,1,0,0,0},
    0b00011,    {0,0,0,0,1},
    0b00010,    {1,1,0,1,0},
    0b00001,    {1,0,0,1,0},
    0b000001,   {1,0,0,0,1}
}

map TableB2c(MacroblockTypes) {
    0b10,       {0,1,1,0,0},
    0b11,       {0,1,1,1,0},
    0b010,      {0,0,1,0,0},
    0b011,      {0,0,1,1,0},
    0b0010,     {0,1,0,0,0},
    0b0011,     {0,1,0,1,0},
    0b00011,    {0,0,0,0,1},
    0b00010,    {1,1,1,1,0},
    0b000011,   {1,1,0,1,0},
    0b000010,   {1,0,1,1,0},
    0b000001,   {1,0,0,0,1}
}

map TableB2d(MacroblockTypes) {
    0b1,        {0,0,0,0,1}
}

/* Table B.3 */
map TableB3(int) {
    0b111,          60,
    0b1101,         4,
    0b1100,         8,
    0b1011,         16,
    0b1010,         32,
    0b10011,        12,
    0b10010,        48,
    0b10001,        20,
    0b10000,        40,
    0b01111,        28,
    0b01110,        44,
    0b01101,        52,
    0b01100,        56,
    0b01011,        1,
    0b01010,        61,
    0b01001,        2,
    0b01000,        62,
    0b001111,       24,
    0b001110,       36,
    0b001101,       3,
    0b001100,       63,
    0b0010111,      5,
    0b0010110,      9,
    0b0010101,      17,
    0b0010100,      33,
    0b0010011,      6,
    0b0010010,      10,
    0b0010001,      18,
    0b0010000,      34,
    0b00011111,     7,
    0b00011110,     11,
    0b00011101,     19,
    0b00011100,     35,
    0b00011011,     13,
    0b00011010,     49,
    0b00011001,     21,
    0b00011000,     41,
    0b00010111,     14,
    0b00010110,     50,
    0b00010101,     22,
    0b00010100,     42,
    0b00010011,     15,
    0b00010010,     51,
    0b00010001,     23,
    0b00010000,     43,
    0b00001111,     25,
    0b00001110,     37,
    0b00001101,     26,
    0b00001100,     38,
    0b00001011,     29,
    0b00001010,     45,
    0b00001001,     53,
    0b00001000,     57,
    0b00000111,     30,
    0b00000110,     46,
    0b00000101,     54,
    0b00000100,     58,
    0b000000111,    31,
    0b000000110,    47,
    0b000000101,    55,
    0b000000100,    59,
    0b000000011,    27,
    0b000000010,    39
}

/* Table B.4 */
map TableB4(int) {
    0b00000011001,  -16,
    0b00000011011,  -15,
    0b00000011101,  -14,
    0b00000011111,  -13,
    0b00000100001,  -12,
    0b00000100011,  -11,
    0b0000010011,   -10,
    0b0000010101,   -9,
    0b0000010111,   -8,
    0b00000111,     -7,
    0b00001001,     -6,
    0b00001011,     -5,
    0b0000111,      -4,
    0b00011,        -3,
    0b0011,         -2,
    0b011,          -1,
    0b1,            0,
    0b010,          1,
    0b0010,         2,
    0b00010,        3,
    0b0000110,      4,
    0b00001010,     5,
    0b00001000,     6,
    0b00000110,     7,
    0b0000010110,   8,
    0b0000010100,   9,
    0b0000010010,   10,
    0b00000100010,  11,
    0b00000100000,  12,
    0b00000011110,  13,
    0b00000011100,  14,
    0b00000011010,  15,
    0b00000011000,  16
}

/* Table B.5a */
map TableB5a(int) {
    0b100,      0,
    0b00,       1,
    0b01,       2,
    0b101,      3,
    0b110,      4,
    0b1110,     5,
    0b11110,    6,
    0b111110,   7,
    0b1111110,  8
}

/* Table B.5b */
map TableB5b(int) {
    0b00,       0,
    0b01,       1,
    0b10,       2,
    0b110,      3,
    0b1110,     4,
    0b11110,    5,
    0b111110,   6,
    0b1111110,  7,
    0b11111110, 8
}

/* Table B.5c,d,e */
class DCTCoeff {
    unsigned int run;
    int level;
}

map FirstCoeffTable(DCTCoeff) {
    0b10,                       {0, 1},	
    0b11,                       {0, -1},	
    0b0110,                     {1, 1},
    0b0111,                     {1, -1},
    0b0100.0,                   {0, 2},
    0b0100.1,                   {0, -2},
    0b0101.0,                   {2, 1},
    0b0101.1,                   {2, -1},
    0b0010.10,                  {0, 3},
    0b0010.11,                  {0, -3},
    0b0011.10,                  {3, 1},
    0b0011.11,                  {3, -1},
    0b0011.00,                  {4, 1},
    0b0011.01,                  {4, -1},
    0b0001.100,                 {1, 2},
    0b0001.101,                 {1, -2},
    0b0001.110,                 {5, 1},
    0b0001.111,                 {5, -1},
    0b0001.010,                 {6, 1},
    0b0001.011,                 {6, -1},
    0b0001.000,                 {7, 1},
    0b0001.001,                 {7, -1},
    0b0000.1100,                {0, 4},
    0b0000.1101,                {0, -4},
    0b0000.1000,                {2, 2},
    0b0000.1001,                {2, -2},
    0b0000.1110,                {8, 1},
    0b0000.1111,                {8, -1},
    0b0000.1010,                {9, 1},
    0b0000.1011,                {9, -1},
    0b0000.01,                  {unsigned int(6), int(8)}, 
    0b0010.0110.0,              {0, 5},
    0b0010.0110.1,              {0, -5},
    0b0010.0001.0,              {0, 6},
    0b0010.0001.1,              {0, -6},
    0b0010.0101.0,              {1, 3},
    0b0010.0101.1,              {1, -3},
    0b0010.0100.0,              {3, 2},
    0b0010.0100.1,              {3, -2},
    0b0010.0111.0,              {10, 1},
    0b0010.0111.1,              {10, -1},
    0b0010.0011.0,              {11, 1},
    0b0010.0011.1,              {11, -1},
    0b0010.0010.0,              {12, 1},
    0b0010.0010.1,              {12, -1},
    0b0010.0000.0,              {13, 1},
    0b0010.0000.1,              {13, -1},
    0b0000.0010.100,            {0, 7},
    0b0000.0010.101,            {0, -7},
    0b0000.0011.000,            {1, 4},
    0b0000.0011.001,            {1, -4},
    0b0000.0010.110,            {2, 3},
    0b0000.0010.111,            {2, -3},
    0b0000.0011.110,            {4, 2},
    0b0000.0011.111,            {4, -2},
    0b0000.0010.010,            {5, 2},
    0b0000.0010.011,            {5, -2},
    0b0000.0011.100,            {14, 1},
    0b0000.0011.101,            {14, -1},
    0b0000.0011.010,            {15, 1},
    0b0000.0011.011,            {15, -1},
    0b0000.0010.000,            {16, 1},
    0b0000.0010.001,            {16, -1},
    0b0000.0001.1101.0,         {0, 8},
    0b0000.0001.1101.1,         {0, -8},
    0b0000.0001.1000.0,         {0, 9},
    0b0000.0001.1000.1,         {0, -9},
    0b0000.0001.0011.0,         {0, 10},
    0b0000.0001.0011.1,         {0, -10},
    0b0000.0001.0000.0,         {0, 11},
    0b0000.0001.0000.1,         {0, -11},
    0b0000.0001.1011.0,         {1, 5},
    0b0000.0001.1011.1,         {1, -5},
    0b0000.0001.0100.0,         {2, 4},
    0b0000.0001.0100.1,         {2, -4},
    0b0000.0001.1100.0,         {3, 3},
    0b0000.0001.1100.1,         {3, -3},
    0b0000.0001.0010.0,         {4, 3},
    0b0000.0001.0010.1,         {4, -3},
    0b0000.0001.1110.0,         {6, 2},
    0b0000.0001.1110.1,         {6, -2},
    0b0000.0001.0101.0,         {7, 2},
    0b0000.0001.0101.1,         {7, -2},
    0b0000.0001.0001.0,         {8, 2},
    0b0000.0001.0001.1,         {8, -2},
    0b0000.0001.1111.0,         {17, 1},
    0b0000.0001.1111.1,         {17, -1},
    0b0000.0001.1010.0,         {18, 1},
    0b0000.0001.1010.1,         {18, -1},
    0b0000.0001.1001.0,         {19, 1},
    0b0000.0001.1001.1,         {19, -1},
    0b0000.0001.0111.0,         {20, 1},
    0b0000.0001.0111.1,         {20, -1},
    0b0000.0001.0110.0,         {21, 1},
    0b0000.0001.0110.1,         {21, -1},
    0b0000.0000.1101.00,        {0, 12},
    0b0000.0000.1101.01,        {0, -12},
    0b0000.0000.1100.10,        {0, 13},
    0b0000.0000.1100.11,        {0, -13},
    0b0000.0000.1100.00,        {0, 14},
    0b0000.0000.1100.01,        {0, -14},
    0b0000.0000.1011.10,        {0, 15},
    0b0000.0000.1011.11,        {0, -15},
    0b0000.0000.1011.00,        {1, 6},
    0b0000.0000.1011.01,        {1, -6},
    0b0000.0000.1010.10,        {1, 7},
    0b0000.0000.1010.11,        {1, -7},
    0b0000.0000.1010.00,        {2, 5},
    0b0000.0000.1010.01,        {2, -5},
    0b0000.0000.1001.10,        {3, 4},
    0b0000.0000.1001.11,        {3, -4},
    0b0000.0000.1001.00,        {5, 3},
    0b0000.0000.1001.01,        {5, -3},
    0b0000.0000.1000.10,        {9, 2},
    0b0000.0000.1000.11,        {9, -2},
    0b0000.0000.1000.00,        {10, 2},
    0b0000.0000.1000.01,        {10, -2},
    0b0000.0000.1111.10,        {22, 1},
    0b0000.0000.1111.11,        {22, -1},
    0b0000.0000.1111.00,        {23, 1},
    0b0000.0000.1111.01,        {23, -1},
    0b0000.0000.1110.10,        {24, 1},
    0b0000.0000.1110.11,        {24, -1},
    0b0000.0000.1110.00,        {25, 1},
    0b0000.0000.1110.01,        {25, -1},
    0b0000.0000.1101.10,        {26, 1},
    0b0000.0000.1101.11,        {26, -1},
    0b0000.0000.0111.110,       {0, 16},
    0b0000.0000.0111.111,       {0, -16},
    0b0000.0000.0111.100,       {0, 17},
    0b0000.0000.0111.101,       {0, -17},
    0b0000.0000.0111.010,       {0, 18},
    0b0000.0000.0111.011,       {0, -18},
    0b0000.0000.0111.000,       {0, 19},
    0b0000.0000.0111.001,       {0, -19},
    0b0000.0000.0110.110,       {0, 20},
    0b0000.0000.0110.111,       {0, -20},
    0b0000.0000.0110.100,       {0, 21},
    0b0000.0000.0110.101,       {0, -21},
    0b0000.0000.0110.010,       {0, 22},
    0b0000.0000.0110.011,       {0, -22},
    0b0000.0000.0110.000,       {0, 23},
    0b0000.0000.0110.001,       {0, -23},
    0b0000.0000.0101.110,       {0, 24},
    0b0000.0000.0101.111,       {0, -24},
    0b0000.0000.0101.100,       {0, 25},
    0b0000.0000.0101.101,       {0, -25},
    0b0000.0000.0101.010,       {0, 26},
    0b0000.0000.0101.011,       {0, -26},
    0b0000.0000.0101.000,       {0, 27},
    0b0000.0000.0101.001,       {0, -27},
    0b0000.0000.0100.110,       {0, 28},
    0b0000.0000.0100.111,       {0, -28},
    0b0000.0000.0100.100,       {0, 29},
    0b0000.0000.0100.101,       {0, -29},
    0b0000.0000.0100.010,       {0, 30},
    0b0000.0000.0100.011,       {0, -30},
    0b0000.0000.0100.000,       {0, 31},
    0b0000.0000.0100.001,       {0, -31},
    0b0000.0000.0011.0000,      {0, 32},
    0b0000.0000.0011.0001,      {0, -32},
    0b0000.0000.0010.1110,      {0, 33},
    0b0000.0000.0010.1111,      {0, -33},
    0b0000.0000.0010.1100,      {0, 34},
    0b0000.0000.0010.1101,      {0, -34},
    0b0000.0000.0010.1010,      {0, 35},
    0b0000.0000.0010.1011,      {0, -35},
    0b0000.0000.0010.1000,      {0, 36},
    0b0000.0000.0010.1001,      {0, -36},
    0b0000.0000.0010.0110,      {0, 37},
    0b0000.0000.0010.0111,      {0, -37},
    0b0000.0000.0010.0100,      {0, 38},
    0b0000.0000.0010.0101,      {0, -38},
    0b0000.0000.0010.0010,      {0, 39},
    0b0000.0000.0010.0011,      {0, -39},
    0b0000.0000.0010.0000,      {0, 40},
    0b0000.0000.0010.0001,      {0, -40},
    0b0000.0000.0011.1110,      {1, 8},
    0b0000.0000.0011.1111,      {1, -8},
    0b0000.0000.0011.1100,      {1, 9},
    0b0000.0000.0011.1101,      {1, -9},
    0b0000.0000.0011.1010,      {1, 10},
    0b0000.0000.0011.1011,      {1, -10},
    0b0000.0000.0011.1000,      {1, 11},
    0b0000.0000.0011.1001,      {1, -11},
    0b0000.0000.0011.0110,      {1, 12},
    0b0000.0000.0011.0111,      {1, -12},
    0b0000.0000.0011.0100,      {1, 13},
    0b0000.0000.0011.0101,      {1, -13},
    0b0000.0000.0011.0010,      {1, 14},
    0b0000.0000.0011.0011,      {1, -14},
    0b0000.0000.0001.0011.0,    {1, 15},
    0b0000.0000.0001.0011.1,    {1, -15},
    0b0000.0000.0001.0010.0,    {1, 16},
    0b0000.0000.0001.0010.1,    {1, -16},
    0b0000.0000.0001.0001.0,    {1, 17},
    0b0000.0000.0001.0001.1,    {1, -17},
    0b0000.0000.0001.0000.0,    {1, 18},
    0b0000.0000.0001.0000.1,    {1, -18},
    0b0000.0000.0001.0100.0,    {6, 3},
    0b0000.0000.0001.0100.1,    {6, -3},
    0b0000.0000.0001.1010.0,    {11, 2},
    0b0000.0000.0001.1010.1,    {11, -2},
    0b0000.0000.0001.1001.0,    {12, 2},
    0b0000.0000.0001.1001.1,    {12, -2},
    0b0000.0000.0001.1000.0,    {13, 2},
    0b0000.0000.0001.1000.1,    {13, -2},
    0b0000.0000.0001.0111.0,    {14, 2},
    0b0000.0000.0001.0111.1,    {14, -2},
    0b0000.0000.0001.0110.0,    {15, 2},
    0b0000.0000.0001.0110.1,    {15, -2},
    0b0000.0000.0001.0101.0,    {16, 2},
    0b0000.0000.0001.0101.1,    {16, -2},
    0b0000.0000.0001.1111.0,    {27, 1},
    0b0000.0000.0001.1111.1,    {27, -1},
    0b0000.0000.0001.1110.0,    {28, 1},
    0b0000.0000.0001.1110.1,    {28, -1},
    0b0000.0000.0001.1101.0,    {29, 1},
    0b0000.0000.0001.1101.1,    {29, -1},
    0b0000.0000.0001.1100.0,    {30, 1},
    0b0000.0000.0001.1100.1,    {30, -1},
    0b0000.0000.0001.1011.0,    {31, 1},
    0b0000.0000.0001.1011.1,    {31, -1}
}

map NextCoeffTable(DCTCoeff) {
    0b110,                      {0, 1},	
    0b111,                      {0, -1},	
    0b0110,                     {1, 1},
    0b0111,                     {1, -1},
    0b0100.0,                   {0, 2},
    0b0100.1,                   {0, -2},
    0b0101.0,                   {2, 1},
    0b0101.1,                   {2, -1},
    0b0010.10,                  {0, 3},
    0b0010.11,                  {0, -3},
    0b0011.10,                  {3, 1},
    0b0011.11,                  {3, -1},
    0b0011.00,                  {4, 1},
    0b0011.01,                  {4, -1},
    0b0001.100,                 {1, 2},
    0b0001.101,                 {1, -2},
    0b0001.110,                 {5, 1},
    0b0001.111,                 {5, -1},
    0b0001.010,                 {6, 1},
    0b0001.011,                 {6, -1},
    0b0001.000,                 {7, 1},
    0b0001.001,                 {7, -1},
    0b0000.1100,                {0, 4},
    0b0000.1101,                {0, -4},
    0b0000.1000,                {2, 2},
    0b0000.1001,                {2, -2},
    0b0000.1110,                {8, 1},
    0b0000.1111,                {8, -1},
    0b0000.1010,                {9, 1},
    0b0000.1011,                {9, -1},
    0b0000.01,                  {unsigned int(6), int(8)}, 
    0b0010.0110.0,              {0, 5},
    0b0010.0110.1,              {0, -5},
    0b0010.0001.0,              {0, 6},
    0b0010.0001.1,              {0, -6},
    0b0010.0101.0,              {1, 3},
    0b0010.0101.1,              {1, -3},
    0b0010.0100.0,              {3, 2},
    0b0010.0100.1,              {3, -2},
    0b0010.0111.0,              {10, 1},
    0b0010.0111.1,              {10, -1},
    0b0010.0011.0,              {11, 1},
    0b0010.0011.1,              {11, -1},
    0b0010.0010.0,              {12, 1},
    0b0010.0010.1,              {12, -1},
    0b0010.0000.0,              {13, 1},
    0b0010.0000.1,              {13, -1},
    0b0000.0010.100,            {0, 7},
    0b0000.0010.101,            {0, -7},
    0b0000.0011.000,            {1, 4},
    0b0000.0011.001,            {1, -4},
    0b0000.0010.110,            {2, 3},
    0b0000.0010.111,            {2, -3},
    0b0000.0011.110,            {4, 2},
    0b0000.0011.111,            {4, -2},
    0b0000.0010.010,            {5, 2},
    0b0000.0010.011,            {5, -2},
    0b0000.0011.100,            {14, 1},
    0b0000.0011.101,            {14, -1},
    0b0000.0011.010,            {15, 1},
    0b0000.0011.011,            {15, -1},
    0b0000.0010.000,            {16, 1},
    0b0000.0010.001,            {16, -1},
    0b0000.0001.1101.0,         {0, 8},
    0b0000.0001.1101.1,         {0, -8},
    0b0000.0001.1000.0,         {0, 9},
    0b0000.0001.1000.1,         {0, -9},
    0b0000.0001.0011.0,         {0, 10},
    0b0000.0001.0011.1,         {0, -10},
    0b0000.0001.0000.0,         {0, 11},
    0b0000.0001.0000.1,         {0, -11},
    0b0000.0001.1011.0,         {1, 5},
    0b0000.0001.1011.1,         {1, -5},
    0b0000.0001.0100.0,         {2, 4},
    0b0000.0001.0100.1,         {2, -4},
    0b0000.0001.1100.0,         {3, 3},
    0b0000.0001.1100.1,         {3, -3},
    0b0000.0001.0010.0,         {4, 3},
    0b0000.0001.0010.1,         {4, -3},
    0b0000.0001.1110.0,         {6, 2},
    0b0000.0001.1110.1,         {6, -2},
    0b0000.0001.0101.0,         {7, 2},
    0b0000.0001.0101.1,         {7, -2},
    0b0000.0001.0001.0,         {8, 2},
    0b0000.0001.0001.1,         {8, -2},
    0b0000.0001.1111.0,         {17, 1},
    0b0000.0001.1111.1,         {17, -1},
    0b0000.0001.1010.0,         {18, 1},
    0b0000.0001.1010.1,         {18, -1},
    0b0000.0001.1001.0,         {19, 1},
    0b0000.0001.1001.1,         {19, -1},
    0b0000.0001.0111.0,         {20, 1},
    0b0000.0001.0111.1,         {20, -1},
    0b0000.0001.0110.0,         {21, 1},
    0b0000.0001.0110.1,         {21, -1},
    0b0000.0000.1101.00,        {0, 12},
    0b0000.0000.1101.01,        {0, -12},
    0b0000.0000.1100.10,        {0, 13},
    0b0000.0000.1100.11,        {0, -13},
    0b0000.0000.1100.00,        {0, 14},
    0b0000.0000.1100.01,        {0, -14},
    0b0000.0000.1011.10,        {0, 15},
    0b0000.0000.1011.11,        {0, -15},
    0b0000.0000.1011.00,        {1, 6},
    0b0000.0000.1011.01,        {1, -6},
    0b0000.0000.1010.10,        {1, 7},
    0b0000.0000.1010.11,        {1, -7},
    0b0000.0000.1010.00,        {2, 5},
    0b0000.0000.1010.01,        {2, -5},
    0b0000.0000.1001.10,        {3, 4},
    0b0000.0000.1001.11,        {3, -4},
    0b0000.0000.1001.00,        {5, 3},
    0b0000.0000.1001.01,        {5, -3},
    0b0000.0000.1000.10,        {9, 2},
    0b0000.0000.1000.11,        {9, -2},
    0b0000.0000.1000.00,        {10, 2},
    0b0000.0000.1000.01,        {10, -2},
    0b0000.0000.1111.10,        {22, 1},
    0b0000.0000.1111.11,        {22, -1},
    0b0000.0000.1111.00,        {23, 1},
    0b0000.0000.1111.01,        {23, -1},
    0b0000.0000.1110.10,        {24, 1},
    0b0000.0000.1110.11,        {24, -1},
    0b0000.0000.1110.00,        {25, 1},
    0b0000.0000.1110.01,        {25, -1},
    0b0000.0000.1101.10,        {26, 1},
    0b0000.0000.1101.11,        {26, -1},
    0b0000.0000.0111.110,       {0, 16},
    0b0000.0000.0111.111,       {0, -16},
    0b0000.0000.0111.100,       {0, 17},
    0b0000.0000.0111.101,       {0, -17},
    0b0000.0000.0111.010,       {0, 18},
    0b0000.0000.0111.011,       {0, -18},
    0b0000.0000.0111.000,       {0, 19},
    0b0000.0000.0111.001,       {0, -19},
    0b0000.0000.0110.110,       {0, 20},
    0b0000.0000.0110.111,       {0, -20},
    0b0000.0000.0110.100,       {0, 21},
    0b0000.0000.0110.101,       {0, -21},
    0b0000.0000.0110.010,       {0, 22},
    0b0000.0000.0110.011,       {0, -22},
    0b0000.0000.0110.000,       {0, 23},
    0b0000.0000.0110.001,       {0, -23},
    0b0000.0000.0101.110,       {0, 24},
    0b0000.0000.0101.111,       {0, -24},
    0b0000.0000.0101.100,       {0, 25},
    0b0000.0000.0101.101,       {0, -25},
    0b0000.0000.0101.010,       {0, 26},
    0b0000.0000.0101.011,       {0, -26},
    0b0000.0000.0101.000,       {0, 27},
    0b0000.0000.0101.001,       {0, -27},
    0b0000.0000.0100.110,       {0, 28},
    0b0000.0000.0100.111,       {0, -28},
    0b0000.0000.0100.100,       {0, 29},
    0b0000.0000.0100.101,       {0, -29},
    0b0000.0000.0100.010,       {0, 30},
    0b0000.0000.0100.011,       {0, -30},
    0b0000.0000.0100.000,       {0, 31},
    0b0000.0000.0100.001,       {0, -31},
    0b0000.0000.0011.0000,      {0, 32},
    0b0000.0000.0011.0001,      {0, -32},
    0b0000.0000.0010.1110,      {0, 33},
    0b0000.0000.0010.1111,      {0, -33},
    0b0000.0000.0010.1100,      {0, 34},
    0b0000.0000.0010.1101,      {0, -34},
    0b0000.0000.0010.1010,      {0, 35},
    0b0000.0000.0010.1011,      {0, -35},
    0b0000.0000.0010.1000,      {0, 36},
    0b0000.0000.0010.1001,      {0, -36},
    0b0000.0000.0010.0110,      {0, 37},
    0b0000.0000.0010.0111,      {0, -37},
    0b0000.0000.0010.0100,      {0, 38},
    0b0000.0000.0010.0101,      {0, -38},
    0b0000.0000.0010.0010,      {0, 39},
    0b0000.0000.0010.0011,      {0, -39},
    0b0000.0000.0010.0000,      {0, 40},
    0b0000.0000.0010.0001,      {0, -40},
    0b0000.0000.0011.1110,      {1, 8},
    0b0000.0000.0011.1111,      {1, -8},
    0b0000.0000.0011.1100,      {1, 9},
    0b0000.0000.0011.1101,      {1, -9},
    0b0000.0000.0011.1010,      {1, 10},
    0b0000.0000.0011.1011,      {1, -10},
    0b0000.0000.0011.1000,      {1, 11},
    0b0000.0000.0011.1001,      {1, -11},
    0b0000.0000.0011.0110,      {1, 12},
    0b0000.0000.0011.0111,      {1, -12},
    0b0000.0000.0011.0100,      {1, 13},
    0b0000.0000.0011.0101,      {1, -13},
    0b0000.0000.0011.0010,      {1, 14},
    0b0000.0000.0011.0011,      {1, -14},
    0b0000.0000.0001.0011.0,    {1, 15},
    0b0000.0000.0001.0011.1,    {1, -15},
    0b0000.0000.0001.0010.0,    {1, 16},
    0b0000.0000.0001.0010.1,    {1, -16},
    0b0000.0000.0001.0001.0,    {1, 17},
    0b0000.0000.0001.0001.1,    {1, -17},
    0b0000.0000.0001.0000.0,    {1, 18},
    0b0000.0000.0001.0000.1,    {1, -18},
    0b0000.0000.0001.0100.0,    {6, 3},
    0b0000.0000.0001.0100.1,    {6, -3},
    0b0000.0000.0001.1010.0,    {11, 2},
    0b0000.0000.0001.1010.1,    {11, -2},
    0b0000.0000.0001.1001.0,    {12, 2},
    0b0000.0000.0001.1001.1,    {12, -2},
    0b0000.0000.0001.1000.0,    {13, 2},
    0b0000.0000.0001.1000.1,    {13, -2},
    0b0000.0000.0001.0111.0,    {14, 2},
    0b0000.0000.0001.0111.1,    {14, -2},
    0b0000.0000.0001.0110.0,    {15, 2},
    0b0000.0000.0001.0110.1,    {15, -2},
    0b0000.0000.0001.0101.0,    {16, 2},
    0b0000.0000.0001.0101.1,    {16, -2},
    0b0000.0000.0001.1111.0,    {27, 1},
    0b0000.0000.0001.1111.1,    {27, -1},
    0b0000.0000.0001.1110.0,    {28, 1},
    0b0000.0000.0001.1110.1,    {28, -1},
    0b0000.0000.0001.1101.0,    {29, 1},
    0b0000.0000.0001.1101.1,    {29, -1},
    0b0000.0000.0001.1100.0,    {30, 1},
    0b0000.0000.0001.1100.1,    {30, -1},
    0b0000.0000.0001.1011.0,    {31, 1},
    0b0000.0000.0001.1011.1,    {31, -1}
}