t1_ht_generate_luts.c 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971
  1. //***************************************************************************/
  2. // This software is released under the 2-Clause BSD license, included
  3. // below.
  4. //
  5. // Copyright (c) 2021, Aous Naman
  6. // Copyright (c) 2021, Kakadu Software Pty Ltd, Australia
  7. // Copyright (c) 2021, The University of New South Wales, Australia
  8. //
  9. // Redistribution and use in source and binary forms, with or without
  10. // modification, are permitted provided that the following conditions are
  11. // met:
  12. //
  13. // 1. Redistributions of source code must retain the above copyright
  14. // notice, this list of conditions and the following disclaimer.
  15. //
  16. // 2. Redistributions in binary form must reproduce the above copyright
  17. // notice, this list of conditions and the following disclaimer in the
  18. // documentation and/or other materials provided with the distribution.
  19. //
  20. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  21. // IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
  22. // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  23. // PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  24. // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  25. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
  26. // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  27. // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  28. // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  29. // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  30. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31. //***************************************************************************/
  32. // This file is part of the OpenJpeg software implementation.
  33. // File: t1_ht_generate_luts.c
  34. // Author: Aous Naman
  35. // Date: 01 September 2021
  36. //***************************************************************************/
  37. #include <string.h>
  38. #include <stdio.h>
  39. #include <assert.h>
  40. #include <stdint.h>
  41. typedef int8_t OPJ_INT8;
  42. typedef uint8_t OPJ_UINT8;
  43. typedef int16_t OPJ_INT16;
  44. typedef uint16_t OPJ_UINT16;
  45. typedef int32_t OPJ_INT32;
  46. typedef uint32_t OPJ_UINT32;
  47. typedef int64_t OPJ_INT64;
  48. typedef uint64_t OPJ_UINT64;
  49. typedef int OPJ_BOOL;
  50. #define OPJ_TRUE 1
  51. #define OPJ_FALSE 0
  52. //************************************************************************/
  53. /** @brief HT decoding tables, as given in the standard
  54. *
  55. * Data in the table is arranged in this format:
  56. * c_q is the context for a quad
  57. * rho is the signficance pattern for a quad
  58. * u_off indicate if u value is 0 (u_off is 0), or communicated
  59. * e_k, e_1 EMB patterns
  60. * cwd VLC codeword
  61. * cwd VLC codeword length
  62. */
  63. typedef struct vlc_src_table {
  64. int c_q, rho, u_off, e_k, e_1, cwd, cwd_len;
  65. }
  66. vlc_src_table_t;
  67. // initial quad rows
  68. static vlc_src_table_t tbl0[] = {
  69. {0, 0x1, 0x0, 0x0, 0x0, 0x06, 4},
  70. {0, 0x1, 0x1, 0x1, 0x1, 0x3F, 7},
  71. {0, 0x2, 0x0, 0x0, 0x0, 0x00, 3},
  72. {0, 0x2, 0x1, 0x2, 0x2, 0x7F, 7},
  73. {0, 0x3, 0x0, 0x0, 0x0, 0x11, 5},
  74. {0, 0x3, 0x1, 0x2, 0x2, 0x5F, 7},
  75. {0, 0x3, 0x1, 0x3, 0x1, 0x1F, 7},
  76. {0, 0x4, 0x0, 0x0, 0x0, 0x02, 3},
  77. {0, 0x4, 0x1, 0x4, 0x4, 0x13, 6},
  78. {0, 0x5, 0x0, 0x0, 0x0, 0x0E, 5},
  79. {0, 0x5, 0x1, 0x4, 0x4, 0x23, 6},
  80. {0, 0x5, 0x1, 0x5, 0x1, 0x0F, 7},
  81. {0, 0x6, 0x0, 0x0, 0x0, 0x03, 6},
  82. {0, 0x6, 0x1, 0x0, 0x0, 0x6F, 7},
  83. {0, 0x7, 0x0, 0x0, 0x0, 0x2F, 7},
  84. {0, 0x7, 0x1, 0x2, 0x2, 0x4F, 7},
  85. {0, 0x7, 0x1, 0x2, 0x0, 0x0D, 6},
  86. {0, 0x8, 0x0, 0x0, 0x0, 0x04, 3},
  87. {0, 0x8, 0x1, 0x8, 0x8, 0x3D, 6},
  88. {0, 0x9, 0x0, 0x0, 0x0, 0x1D, 6},
  89. {0, 0x9, 0x1, 0x0, 0x0, 0x2D, 6},
  90. {0, 0xA, 0x0, 0x0, 0x0, 0x01, 5},
  91. {0, 0xA, 0x1, 0x8, 0x8, 0x35, 6},
  92. {0, 0xA, 0x1, 0xA, 0x2, 0x77, 7},
  93. {0, 0xB, 0x0, 0x0, 0x0, 0x37, 7},
  94. {0, 0xB, 0x1, 0x1, 0x1, 0x57, 7},
  95. {0, 0xB, 0x1, 0x1, 0x0, 0x09, 6},
  96. {0, 0xC, 0x0, 0x0, 0x0, 0x1E, 5},
  97. {0, 0xC, 0x1, 0xC, 0xC, 0x17, 7},
  98. {0, 0xC, 0x1, 0xC, 0x4, 0x15, 6},
  99. {0, 0xC, 0x1, 0xC, 0x8, 0x25, 6},
  100. {0, 0xD, 0x0, 0x0, 0x0, 0x67, 7},
  101. {0, 0xD, 0x1, 0x1, 0x1, 0x27, 7},
  102. {0, 0xD, 0x1, 0x5, 0x4, 0x47, 7},
  103. {0, 0xD, 0x1, 0xD, 0x8, 0x07, 7},
  104. {0, 0xE, 0x0, 0x0, 0x0, 0x7B, 7},
  105. {0, 0xE, 0x1, 0x2, 0x2, 0x4B, 7},
  106. {0, 0xE, 0x1, 0xA, 0x8, 0x05, 6},
  107. {0, 0xE, 0x1, 0xE, 0x4, 0x3B, 7},
  108. {0, 0xF, 0x0, 0x0, 0x0, 0x5B, 7},
  109. {0, 0xF, 0x1, 0x9, 0x9, 0x1B, 7},
  110. {0, 0xF, 0x1, 0xB, 0xA, 0x6B, 7},
  111. {0, 0xF, 0x1, 0xF, 0xC, 0x2B, 7},
  112. {0, 0xF, 0x1, 0xF, 0x8, 0x39, 6},
  113. {0, 0xF, 0x1, 0xE, 0x6, 0x73, 7},
  114. {0, 0xF, 0x1, 0xE, 0x2, 0x19, 6},
  115. {0, 0xF, 0x1, 0xF, 0x5, 0x0B, 7},
  116. {0, 0xF, 0x1, 0xF, 0x4, 0x29, 6},
  117. {0, 0xF, 0x1, 0xF, 0x1, 0x33, 7},
  118. {1, 0x0, 0x0, 0x0, 0x0, 0x00, 2},
  119. {1, 0x1, 0x0, 0x0, 0x0, 0x0E, 4},
  120. {1, 0x1, 0x1, 0x1, 0x1, 0x1F, 7},
  121. {1, 0x2, 0x0, 0x0, 0x0, 0x06, 4},
  122. {1, 0x2, 0x1, 0x2, 0x2, 0x3B, 6},
  123. {1, 0x3, 0x0, 0x0, 0x0, 0x1B, 6},
  124. {1, 0x3, 0x1, 0x0, 0x0, 0x3D, 6},
  125. {1, 0x4, 0x0, 0x0, 0x0, 0x0A, 4},
  126. {1, 0x4, 0x1, 0x4, 0x4, 0x2B, 6},
  127. {1, 0x5, 0x0, 0x0, 0x0, 0x0B, 6},
  128. {1, 0x5, 0x1, 0x4, 0x4, 0x33, 6},
  129. {1, 0x5, 0x1, 0x5, 0x1, 0x7F, 7},
  130. {1, 0x6, 0x0, 0x0, 0x0, 0x13, 6},
  131. {1, 0x6, 0x1, 0x0, 0x0, 0x23, 6},
  132. {1, 0x7, 0x0, 0x0, 0x0, 0x3F, 7},
  133. {1, 0x7, 0x1, 0x2, 0x2, 0x5F, 7},
  134. {1, 0x7, 0x1, 0x2, 0x0, 0x03, 6},
  135. {1, 0x8, 0x0, 0x0, 0x0, 0x02, 4},
  136. {1, 0x8, 0x1, 0x8, 0x8, 0x1D, 6},
  137. {1, 0x9, 0x0, 0x0, 0x0, 0x2D, 6},
  138. {1, 0x9, 0x1, 0x0, 0x0, 0x0D, 6},
  139. {1, 0xA, 0x0, 0x0, 0x0, 0x35, 6},
  140. {1, 0xA, 0x1, 0x8, 0x8, 0x15, 6},
  141. {1, 0xA, 0x1, 0xA, 0x2, 0x6F, 7},
  142. {1, 0xB, 0x0, 0x0, 0x0, 0x2F, 7},
  143. {1, 0xB, 0x1, 0x1, 0x1, 0x4F, 7},
  144. {1, 0xB, 0x1, 0x1, 0x0, 0x11, 6},
  145. {1, 0xC, 0x0, 0x0, 0x0, 0x01, 5},
  146. {1, 0xC, 0x1, 0x8, 0x8, 0x25, 6},
  147. {1, 0xC, 0x1, 0xC, 0x4, 0x05, 6},
  148. {1, 0xD, 0x0, 0x0, 0x0, 0x0F, 7},
  149. {1, 0xD, 0x1, 0x1, 0x1, 0x17, 7},
  150. {1, 0xD, 0x1, 0x5, 0x4, 0x39, 6},
  151. {1, 0xD, 0x1, 0xD, 0x8, 0x77, 7},
  152. {1, 0xE, 0x0, 0x0, 0x0, 0x37, 7},
  153. {1, 0xE, 0x1, 0x2, 0x2, 0x57, 7},
  154. {1, 0xE, 0x1, 0xA, 0x8, 0x19, 6},
  155. {1, 0xE, 0x1, 0xE, 0x4, 0x67, 7},
  156. {1, 0xF, 0x0, 0x0, 0x0, 0x07, 7},
  157. {1, 0xF, 0x1, 0xB, 0x8, 0x29, 6},
  158. {1, 0xF, 0x1, 0x8, 0x8, 0x27, 7},
  159. {1, 0xF, 0x1, 0xA, 0x2, 0x09, 6},
  160. {1, 0xF, 0x1, 0xE, 0x4, 0x31, 6},
  161. {1, 0xF, 0x1, 0xF, 0x1, 0x47, 7},
  162. {2, 0x0, 0x0, 0x0, 0x0, 0x00, 2},
  163. {2, 0x1, 0x0, 0x0, 0x0, 0x0E, 4},
  164. {2, 0x1, 0x1, 0x1, 0x1, 0x1B, 6},
  165. {2, 0x2, 0x0, 0x0, 0x0, 0x06, 4},
  166. {2, 0x2, 0x1, 0x2, 0x2, 0x3F, 7},
  167. {2, 0x3, 0x0, 0x0, 0x0, 0x2B, 6},
  168. {2, 0x3, 0x1, 0x1, 0x1, 0x33, 6},
  169. {2, 0x3, 0x1, 0x3, 0x2, 0x7F, 7},
  170. {2, 0x4, 0x0, 0x0, 0x0, 0x0A, 4},
  171. {2, 0x4, 0x1, 0x4, 0x4, 0x0B, 6},
  172. {2, 0x5, 0x0, 0x0, 0x0, 0x01, 5},
  173. {2, 0x5, 0x1, 0x5, 0x5, 0x2F, 7},
  174. {2, 0x5, 0x1, 0x5, 0x1, 0x13, 6},
  175. {2, 0x5, 0x1, 0x5, 0x4, 0x23, 6},
  176. {2, 0x6, 0x0, 0x0, 0x0, 0x03, 6},
  177. {2, 0x6, 0x1, 0x0, 0x0, 0x5F, 7},
  178. {2, 0x7, 0x0, 0x0, 0x0, 0x1F, 7},
  179. {2, 0x7, 0x1, 0x2, 0x2, 0x6F, 7},
  180. {2, 0x7, 0x1, 0x3, 0x1, 0x11, 6},
  181. {2, 0x7, 0x1, 0x7, 0x4, 0x37, 7},
  182. {2, 0x8, 0x0, 0x0, 0x0, 0x02, 4},
  183. {2, 0x8, 0x1, 0x8, 0x8, 0x4F, 7},
  184. {2, 0x9, 0x0, 0x0, 0x0, 0x3D, 6},
  185. {2, 0x9, 0x1, 0x0, 0x0, 0x1D, 6},
  186. {2, 0xA, 0x0, 0x0, 0x0, 0x2D, 6},
  187. {2, 0xA, 0x1, 0x0, 0x0, 0x0D, 6},
  188. {2, 0xB, 0x0, 0x0, 0x0, 0x0F, 7},
  189. {2, 0xB, 0x1, 0x2, 0x2, 0x77, 7},
  190. {2, 0xB, 0x1, 0x2, 0x0, 0x35, 6},
  191. {2, 0xC, 0x0, 0x0, 0x0, 0x15, 6},
  192. {2, 0xC, 0x1, 0x4, 0x4, 0x25, 6},
  193. {2, 0xC, 0x1, 0xC, 0x8, 0x57, 7},
  194. {2, 0xD, 0x0, 0x0, 0x0, 0x17, 7},
  195. {2, 0xD, 0x1, 0x8, 0x8, 0x05, 6},
  196. {2, 0xD, 0x1, 0xC, 0x4, 0x39, 6},
  197. {2, 0xD, 0x1, 0xD, 0x1, 0x67, 7},
  198. {2, 0xE, 0x0, 0x0, 0x0, 0x27, 7},
  199. {2, 0xE, 0x1, 0x2, 0x2, 0x7B, 7},
  200. {2, 0xE, 0x1, 0x2, 0x0, 0x19, 6},
  201. {2, 0xF, 0x0, 0x0, 0x0, 0x47, 7},
  202. {2, 0xF, 0x1, 0xF, 0x1, 0x29, 6},
  203. {2, 0xF, 0x1, 0x1, 0x1, 0x09, 6},
  204. {2, 0xF, 0x1, 0x3, 0x2, 0x07, 7},
  205. {2, 0xF, 0x1, 0x7, 0x4, 0x31, 6},
  206. {2, 0xF, 0x1, 0xF, 0x8, 0x3B, 7},
  207. {3, 0x0, 0x0, 0x0, 0x0, 0x00, 3},
  208. {3, 0x1, 0x0, 0x0, 0x0, 0x04, 4},
  209. {3, 0x1, 0x1, 0x1, 0x1, 0x3D, 6},
  210. {3, 0x2, 0x0, 0x0, 0x0, 0x0C, 5},
  211. {3, 0x2, 0x1, 0x2, 0x2, 0x4F, 7},
  212. {3, 0x3, 0x0, 0x0, 0x0, 0x1D, 6},
  213. {3, 0x3, 0x1, 0x1, 0x1, 0x05, 6},
  214. {3, 0x3, 0x1, 0x3, 0x2, 0x7F, 7},
  215. {3, 0x4, 0x0, 0x0, 0x0, 0x16, 5},
  216. {3, 0x4, 0x1, 0x4, 0x4, 0x2D, 6},
  217. {3, 0x5, 0x0, 0x0, 0x0, 0x06, 5},
  218. {3, 0x5, 0x1, 0x5, 0x5, 0x1A, 5},
  219. {3, 0x5, 0x1, 0x5, 0x1, 0x0D, 6},
  220. {3, 0x5, 0x1, 0x5, 0x4, 0x35, 6},
  221. {3, 0x6, 0x0, 0x0, 0x0, 0x3F, 7},
  222. {3, 0x6, 0x1, 0x4, 0x4, 0x5F, 7},
  223. {3, 0x6, 0x1, 0x6, 0x2, 0x1F, 7},
  224. {3, 0x7, 0x0, 0x0, 0x0, 0x6F, 7},
  225. {3, 0x7, 0x1, 0x6, 0x6, 0x2F, 7},
  226. {3, 0x7, 0x1, 0x6, 0x4, 0x15, 6},
  227. {3, 0x7, 0x1, 0x7, 0x3, 0x77, 7},
  228. {3, 0x7, 0x1, 0x7, 0x1, 0x25, 6},
  229. {3, 0x7, 0x1, 0x7, 0x2, 0x0F, 7},
  230. {3, 0x8, 0x0, 0x0, 0x0, 0x0A, 5},
  231. {3, 0x8, 0x1, 0x8, 0x8, 0x07, 7},
  232. {3, 0x9, 0x0, 0x0, 0x0, 0x39, 6},
  233. {3, 0x9, 0x1, 0x1, 0x1, 0x37, 7},
  234. {3, 0x9, 0x1, 0x9, 0x8, 0x57, 7},
  235. {3, 0xA, 0x0, 0x0, 0x0, 0x19, 6},
  236. {3, 0xA, 0x1, 0x8, 0x8, 0x29, 6},
  237. {3, 0xA, 0x1, 0xA, 0x2, 0x17, 7},
  238. {3, 0xB, 0x0, 0x0, 0x0, 0x67, 7},
  239. {3, 0xB, 0x1, 0xB, 0x1, 0x27, 7},
  240. {3, 0xB, 0x1, 0x1, 0x1, 0x47, 7},
  241. {3, 0xB, 0x1, 0x3, 0x2, 0x09, 6},
  242. {3, 0xB, 0x1, 0xB, 0x8, 0x7B, 7},
  243. {3, 0xC, 0x0, 0x0, 0x0, 0x31, 6},
  244. {3, 0xC, 0x1, 0x4, 0x4, 0x11, 6},
  245. {3, 0xC, 0x1, 0xC, 0x8, 0x3B, 7},
  246. {3, 0xD, 0x0, 0x0, 0x0, 0x5B, 7},
  247. {3, 0xD, 0x1, 0x9, 0x9, 0x1B, 7},
  248. {3, 0xD, 0x1, 0xD, 0x5, 0x2B, 7},
  249. {3, 0xD, 0x1, 0xD, 0x1, 0x21, 6},
  250. {3, 0xD, 0x1, 0xD, 0xC, 0x6B, 7},
  251. {3, 0xD, 0x1, 0xD, 0x4, 0x01, 6},
  252. {3, 0xD, 0x1, 0xD, 0x8, 0x4B, 7},
  253. {3, 0xE, 0x0, 0x0, 0x0, 0x0B, 7},
  254. {3, 0xE, 0x1, 0xE, 0x4, 0x73, 7},
  255. {3, 0xE, 0x1, 0x4, 0x4, 0x13, 7},
  256. {3, 0xE, 0x1, 0xC, 0x8, 0x3E, 6},
  257. {3, 0xE, 0x1, 0xE, 0x2, 0x33, 7},
  258. {3, 0xF, 0x0, 0x0, 0x0, 0x53, 7},
  259. {3, 0xF, 0x1, 0xA, 0xA, 0x0E, 6},
  260. {3, 0xF, 0x1, 0xB, 0x9, 0x63, 7},
  261. {3, 0xF, 0x1, 0xF, 0xC, 0x03, 7},
  262. {3, 0xF, 0x1, 0xF, 0x8, 0x12, 5},
  263. {3, 0xF, 0x1, 0xE, 0x6, 0x23, 7},
  264. {3, 0xF, 0x1, 0xF, 0x5, 0x1E, 6},
  265. {3, 0xF, 0x1, 0xF, 0x4, 0x02, 5},
  266. {3, 0xF, 0x1, 0xF, 0x3, 0x43, 7},
  267. {3, 0xF, 0x1, 0xF, 0x1, 0x1C, 5},
  268. {3, 0xF, 0x1, 0xF, 0x2, 0x2E, 6},
  269. {4, 0x0, 0x0, 0x0, 0x0, 0x00, 2},
  270. {4, 0x1, 0x0, 0x0, 0x0, 0x0E, 4},
  271. {4, 0x1, 0x1, 0x1, 0x1, 0x3F, 7},
  272. {4, 0x2, 0x0, 0x0, 0x0, 0x06, 4},
  273. {4, 0x2, 0x1, 0x2, 0x2, 0x1B, 6},
  274. {4, 0x3, 0x0, 0x0, 0x0, 0x2B, 6},
  275. {4, 0x3, 0x1, 0x2, 0x2, 0x3D, 6},
  276. {4, 0x3, 0x1, 0x3, 0x1, 0x7F, 7},
  277. {4, 0x4, 0x0, 0x0, 0x0, 0x0A, 4},
  278. {4, 0x4, 0x1, 0x4, 0x4, 0x5F, 7},
  279. {4, 0x5, 0x0, 0x0, 0x0, 0x0B, 6},
  280. {4, 0x5, 0x1, 0x0, 0x0, 0x33, 6},
  281. {4, 0x6, 0x0, 0x0, 0x0, 0x13, 6},
  282. {4, 0x6, 0x1, 0x0, 0x0, 0x23, 6},
  283. {4, 0x7, 0x0, 0x0, 0x0, 0x1F, 7},
  284. {4, 0x7, 0x1, 0x4, 0x4, 0x6F, 7},
  285. {4, 0x7, 0x1, 0x4, 0x0, 0x03, 6},
  286. {4, 0x8, 0x0, 0x0, 0x0, 0x02, 4},
  287. {4, 0x8, 0x1, 0x8, 0x8, 0x1D, 6},
  288. {4, 0x9, 0x0, 0x0, 0x0, 0x11, 6},
  289. {4, 0x9, 0x1, 0x0, 0x0, 0x77, 7},
  290. {4, 0xA, 0x0, 0x0, 0x0, 0x01, 5},
  291. {4, 0xA, 0x1, 0xA, 0xA, 0x2F, 7},
  292. {4, 0xA, 0x1, 0xA, 0x2, 0x2D, 6},
  293. {4, 0xA, 0x1, 0xA, 0x8, 0x0D, 6},
  294. {4, 0xB, 0x0, 0x0, 0x0, 0x4F, 7},
  295. {4, 0xB, 0x1, 0xB, 0x2, 0x0F, 7},
  296. {4, 0xB, 0x1, 0x0, 0x0, 0x35, 6},
  297. {4, 0xC, 0x0, 0x0, 0x0, 0x15, 6},
  298. {4, 0xC, 0x1, 0x8, 0x8, 0x25, 6},
  299. {4, 0xC, 0x1, 0xC, 0x4, 0x37, 7},
  300. {4, 0xD, 0x0, 0x0, 0x0, 0x57, 7},
  301. {4, 0xD, 0x1, 0x1, 0x1, 0x07, 7},
  302. {4, 0xD, 0x1, 0x1, 0x0, 0x05, 6},
  303. {4, 0xE, 0x0, 0x0, 0x0, 0x17, 7},
  304. {4, 0xE, 0x1, 0x4, 0x4, 0x39, 6},
  305. {4, 0xE, 0x1, 0xC, 0x8, 0x19, 6},
  306. {4, 0xE, 0x1, 0xE, 0x2, 0x67, 7},
  307. {4, 0xF, 0x0, 0x0, 0x0, 0x27, 7},
  308. {4, 0xF, 0x1, 0x9, 0x9, 0x47, 7},
  309. {4, 0xF, 0x1, 0x9, 0x1, 0x29, 6},
  310. {4, 0xF, 0x1, 0x7, 0x6, 0x7B, 7},
  311. {4, 0xF, 0x1, 0x7, 0x2, 0x09, 6},
  312. {4, 0xF, 0x1, 0xB, 0x8, 0x31, 6},
  313. {4, 0xF, 0x1, 0xF, 0x4, 0x3B, 7},
  314. {5, 0x0, 0x0, 0x0, 0x0, 0x00, 3},
  315. {5, 0x1, 0x0, 0x0, 0x0, 0x1A, 5},
  316. {5, 0x1, 0x1, 0x1, 0x1, 0x7F, 7},
  317. {5, 0x2, 0x0, 0x0, 0x0, 0x0A, 5},
  318. {5, 0x2, 0x1, 0x2, 0x2, 0x1D, 6},
  319. {5, 0x3, 0x0, 0x0, 0x0, 0x2D, 6},
  320. {5, 0x3, 0x1, 0x3, 0x3, 0x5F, 7},
  321. {5, 0x3, 0x1, 0x3, 0x2, 0x39, 6},
  322. {5, 0x3, 0x1, 0x3, 0x1, 0x3F, 7},
  323. {5, 0x4, 0x0, 0x0, 0x0, 0x12, 5},
  324. {5, 0x4, 0x1, 0x4, 0x4, 0x1F, 7},
  325. {5, 0x5, 0x0, 0x0, 0x0, 0x0D, 6},
  326. {5, 0x5, 0x1, 0x4, 0x4, 0x35, 6},
  327. {5, 0x5, 0x1, 0x5, 0x1, 0x6F, 7},
  328. {5, 0x6, 0x0, 0x0, 0x0, 0x15, 6},
  329. {5, 0x6, 0x1, 0x2, 0x2, 0x25, 6},
  330. {5, 0x6, 0x1, 0x6, 0x4, 0x2F, 7},
  331. {5, 0x7, 0x0, 0x0, 0x0, 0x4F, 7},
  332. {5, 0x7, 0x1, 0x6, 0x6, 0x57, 7},
  333. {5, 0x7, 0x1, 0x6, 0x4, 0x05, 6},
  334. {5, 0x7, 0x1, 0x7, 0x3, 0x0F, 7},
  335. {5, 0x7, 0x1, 0x7, 0x2, 0x77, 7},
  336. {5, 0x7, 0x1, 0x7, 0x1, 0x37, 7},
  337. {5, 0x8, 0x0, 0x0, 0x0, 0x02, 5},
  338. {5, 0x8, 0x1, 0x8, 0x8, 0x19, 6},
  339. {5, 0x9, 0x0, 0x0, 0x0, 0x26, 6},
  340. {5, 0x9, 0x1, 0x8, 0x8, 0x17, 7},
  341. {5, 0x9, 0x1, 0x9, 0x1, 0x67, 7},
  342. {5, 0xA, 0x0, 0x0, 0x0, 0x1C, 5},
  343. {5, 0xA, 0x1, 0xA, 0xA, 0x29, 6},
  344. {5, 0xA, 0x1, 0xA, 0x2, 0x09, 6},
  345. {5, 0xA, 0x1, 0xA, 0x8, 0x31, 6},
  346. {5, 0xB, 0x0, 0x0, 0x0, 0x27, 7},
  347. {5, 0xB, 0x1, 0x9, 0x9, 0x07, 7},
  348. {5, 0xB, 0x1, 0x9, 0x8, 0x11, 6},
  349. {5, 0xB, 0x1, 0xB, 0x3, 0x47, 7},
  350. {5, 0xB, 0x1, 0xB, 0x2, 0x21, 6},
  351. {5, 0xB, 0x1, 0xB, 0x1, 0x7B, 7},
  352. {5, 0xC, 0x0, 0x0, 0x0, 0x01, 6},
  353. {5, 0xC, 0x1, 0x8, 0x8, 0x3E, 6},
  354. {5, 0xC, 0x1, 0xC, 0x4, 0x3B, 7},
  355. {5, 0xD, 0x0, 0x0, 0x0, 0x5B, 7},
  356. {5, 0xD, 0x1, 0x9, 0x9, 0x6B, 7},
  357. {5, 0xD, 0x1, 0x9, 0x8, 0x1E, 6},
  358. {5, 0xD, 0x1, 0xD, 0x5, 0x1B, 7},
  359. {5, 0xD, 0x1, 0xD, 0x4, 0x2E, 6},
  360. {5, 0xD, 0x1, 0xD, 0x1, 0x2B, 7},
  361. {5, 0xE, 0x0, 0x0, 0x0, 0x4B, 7},
  362. {5, 0xE, 0x1, 0x6, 0x6, 0x0B, 7},
  363. {5, 0xE, 0x1, 0xE, 0xA, 0x33, 7},
  364. {5, 0xE, 0x1, 0xE, 0x2, 0x0E, 6},
  365. {5, 0xE, 0x1, 0xE, 0xC, 0x73, 7},
  366. {5, 0xE, 0x1, 0xE, 0x8, 0x36, 6},
  367. {5, 0xE, 0x1, 0xE, 0x4, 0x53, 7},
  368. {5, 0xF, 0x0, 0x0, 0x0, 0x13, 7},
  369. {5, 0xF, 0x1, 0x7, 0x7, 0x43, 7},
  370. {5, 0xF, 0x1, 0x7, 0x6, 0x16, 6},
  371. {5, 0xF, 0x1, 0x7, 0x5, 0x63, 7},
  372. {5, 0xF, 0x1, 0xF, 0xC, 0x23, 7},
  373. {5, 0xF, 0x1, 0xF, 0x4, 0x0C, 5},
  374. {5, 0xF, 0x1, 0xD, 0x9, 0x03, 7},
  375. {5, 0xF, 0x1, 0xF, 0xA, 0x3D, 7},
  376. {5, 0xF, 0x1, 0xF, 0x8, 0x14, 5},
  377. {5, 0xF, 0x1, 0xF, 0x3, 0x7D, 7},
  378. {5, 0xF, 0x1, 0xF, 0x2, 0x04, 5},
  379. {5, 0xF, 0x1, 0xF, 0x1, 0x06, 6},
  380. {6, 0x0, 0x0, 0x0, 0x0, 0x00, 3},
  381. {6, 0x1, 0x0, 0x0, 0x0, 0x04, 4},
  382. {6, 0x1, 0x1, 0x1, 0x1, 0x03, 6},
  383. {6, 0x2, 0x0, 0x0, 0x0, 0x0C, 5},
  384. {6, 0x2, 0x1, 0x2, 0x2, 0x0D, 6},
  385. {6, 0x3, 0x0, 0x0, 0x0, 0x1A, 5},
  386. {6, 0x3, 0x1, 0x3, 0x3, 0x3D, 6},
  387. {6, 0x3, 0x1, 0x3, 0x1, 0x1D, 6},
  388. {6, 0x3, 0x1, 0x3, 0x2, 0x2D, 6},
  389. {6, 0x4, 0x0, 0x0, 0x0, 0x0A, 5},
  390. {6, 0x4, 0x1, 0x4, 0x4, 0x3F, 7},
  391. {6, 0x5, 0x0, 0x0, 0x0, 0x35, 6},
  392. {6, 0x5, 0x1, 0x1, 0x1, 0x15, 6},
  393. {6, 0x5, 0x1, 0x5, 0x4, 0x7F, 7},
  394. {6, 0x6, 0x0, 0x0, 0x0, 0x25, 6},
  395. {6, 0x6, 0x1, 0x2, 0x2, 0x5F, 7},
  396. {6, 0x6, 0x1, 0x6, 0x4, 0x1F, 7},
  397. {6, 0x7, 0x0, 0x0, 0x0, 0x6F, 7},
  398. {6, 0x7, 0x1, 0x6, 0x6, 0x4F, 7},
  399. {6, 0x7, 0x1, 0x6, 0x4, 0x05, 6},
  400. {6, 0x7, 0x1, 0x7, 0x3, 0x2F, 7},
  401. {6, 0x7, 0x1, 0x7, 0x1, 0x36, 6},
  402. {6, 0x7, 0x1, 0x7, 0x2, 0x77, 7},
  403. {6, 0x8, 0x0, 0x0, 0x0, 0x12, 5},
  404. {6, 0x8, 0x1, 0x8, 0x8, 0x0F, 7},
  405. {6, 0x9, 0x0, 0x0, 0x0, 0x39, 6},
  406. {6, 0x9, 0x1, 0x1, 0x1, 0x37, 7},
  407. {6, 0x9, 0x1, 0x9, 0x8, 0x57, 7},
  408. {6, 0xA, 0x0, 0x0, 0x0, 0x19, 6},
  409. {6, 0xA, 0x1, 0x2, 0x2, 0x29, 6},
  410. {6, 0xA, 0x1, 0xA, 0x8, 0x17, 7},
  411. {6, 0xB, 0x0, 0x0, 0x0, 0x67, 7},
  412. {6, 0xB, 0x1, 0x9, 0x9, 0x47, 7},
  413. {6, 0xB, 0x1, 0x9, 0x1, 0x09, 6},
  414. {6, 0xB, 0x1, 0xB, 0xA, 0x27, 7},
  415. {6, 0xB, 0x1, 0xB, 0x2, 0x31, 6},
  416. {6, 0xB, 0x1, 0xB, 0x8, 0x7B, 7},
  417. {6, 0xC, 0x0, 0x0, 0x0, 0x11, 6},
  418. {6, 0xC, 0x1, 0xC, 0xC, 0x07, 7},
  419. {6, 0xC, 0x1, 0xC, 0x8, 0x21, 6},
  420. {6, 0xC, 0x1, 0xC, 0x4, 0x3B, 7},
  421. {6, 0xD, 0x0, 0x0, 0x0, 0x5B, 7},
  422. {6, 0xD, 0x1, 0x5, 0x5, 0x33, 7},
  423. {6, 0xD, 0x1, 0x5, 0x4, 0x01, 6},
  424. {6, 0xD, 0x1, 0xC, 0x8, 0x1B, 7},
  425. {6, 0xD, 0x1, 0xD, 0x1, 0x6B, 7},
  426. {6, 0xE, 0x0, 0x0, 0x0, 0x2B, 7},
  427. {6, 0xE, 0x1, 0xE, 0x2, 0x4B, 7},
  428. {6, 0xE, 0x1, 0x2, 0x2, 0x0B, 7},
  429. {6, 0xE, 0x1, 0xE, 0xC, 0x73, 7},
  430. {6, 0xE, 0x1, 0xE, 0x8, 0x3E, 6},
  431. {6, 0xE, 0x1, 0xE, 0x4, 0x53, 7},
  432. {6, 0xF, 0x0, 0x0, 0x0, 0x13, 7},
  433. {6, 0xF, 0x1, 0x6, 0x6, 0x1E, 6},
  434. {6, 0xF, 0x1, 0xE, 0xA, 0x2E, 6},
  435. {6, 0xF, 0x1, 0xF, 0x3, 0x0E, 6},
  436. {6, 0xF, 0x1, 0xF, 0x2, 0x02, 5},
  437. {6, 0xF, 0x1, 0xB, 0x9, 0x63, 7},
  438. {6, 0xF, 0x1, 0xF, 0xC, 0x16, 6},
  439. {6, 0xF, 0x1, 0xF, 0x8, 0x06, 6},
  440. {6, 0xF, 0x1, 0xF, 0x5, 0x23, 7},
  441. {6, 0xF, 0x1, 0xF, 0x1, 0x1C, 5},
  442. {6, 0xF, 0x1, 0xF, 0x4, 0x26, 6},
  443. {7, 0x0, 0x0, 0x0, 0x0, 0x12, 5},
  444. {7, 0x1, 0x0, 0x0, 0x0, 0x05, 6},
  445. {7, 0x1, 0x1, 0x1, 0x1, 0x7F, 7},
  446. {7, 0x2, 0x0, 0x0, 0x0, 0x39, 6},
  447. {7, 0x2, 0x1, 0x2, 0x2, 0x3F, 7},
  448. {7, 0x3, 0x0, 0x0, 0x0, 0x5F, 7},
  449. {7, 0x3, 0x1, 0x3, 0x3, 0x1F, 7},
  450. {7, 0x3, 0x1, 0x3, 0x2, 0x6F, 7},
  451. {7, 0x3, 0x1, 0x3, 0x1, 0x2F, 7},
  452. {7, 0x4, 0x0, 0x0, 0x0, 0x4F, 7},
  453. {7, 0x4, 0x1, 0x4, 0x4, 0x0F, 7},
  454. {7, 0x5, 0x0, 0x0, 0x0, 0x57, 7},
  455. {7, 0x5, 0x1, 0x1, 0x1, 0x19, 6},
  456. {7, 0x5, 0x1, 0x5, 0x4, 0x77, 7},
  457. {7, 0x6, 0x0, 0x0, 0x0, 0x37, 7},
  458. {7, 0x6, 0x1, 0x0, 0x0, 0x29, 6},
  459. {7, 0x7, 0x0, 0x0, 0x0, 0x17, 7},
  460. {7, 0x7, 0x1, 0x6, 0x6, 0x67, 7},
  461. {7, 0x7, 0x1, 0x7, 0x3, 0x27, 7},
  462. {7, 0x7, 0x1, 0x7, 0x2, 0x47, 7},
  463. {7, 0x7, 0x1, 0x7, 0x5, 0x1B, 7},
  464. {7, 0x7, 0x1, 0x7, 0x1, 0x09, 6},
  465. {7, 0x7, 0x1, 0x7, 0x4, 0x07, 7},
  466. {7, 0x8, 0x0, 0x0, 0x0, 0x7B, 7},
  467. {7, 0x8, 0x1, 0x8, 0x8, 0x3B, 7},
  468. {7, 0x9, 0x0, 0x0, 0x0, 0x5B, 7},
  469. {7, 0x9, 0x1, 0x0, 0x0, 0x31, 6},
  470. {7, 0xA, 0x0, 0x0, 0x0, 0x53, 7},
  471. {7, 0xA, 0x1, 0x2, 0x2, 0x11, 6},
  472. {7, 0xA, 0x1, 0xA, 0x8, 0x6B, 7},
  473. {7, 0xB, 0x0, 0x0, 0x0, 0x2B, 7},
  474. {7, 0xB, 0x1, 0x9, 0x9, 0x4B, 7},
  475. {7, 0xB, 0x1, 0xB, 0x3, 0x0B, 7},
  476. {7, 0xB, 0x1, 0xB, 0x1, 0x73, 7},
  477. {7, 0xB, 0x1, 0xB, 0xA, 0x33, 7},
  478. {7, 0xB, 0x1, 0xB, 0x2, 0x21, 6},
  479. {7, 0xB, 0x1, 0xB, 0x8, 0x13, 7},
  480. {7, 0xC, 0x0, 0x0, 0x0, 0x63, 7},
  481. {7, 0xC, 0x1, 0x8, 0x8, 0x23, 7},
  482. {7, 0xC, 0x1, 0xC, 0x4, 0x43, 7},
  483. {7, 0xD, 0x0, 0x0, 0x0, 0x03, 7},
  484. {7, 0xD, 0x1, 0x9, 0x9, 0x7D, 7},
  485. {7, 0xD, 0x1, 0xD, 0x5, 0x5D, 7},
  486. {7, 0xD, 0x1, 0xD, 0x1, 0x01, 6},
  487. {7, 0xD, 0x1, 0xD, 0xC, 0x3D, 7},
  488. {7, 0xD, 0x1, 0xD, 0x4, 0x3E, 6},
  489. {7, 0xD, 0x1, 0xD, 0x8, 0x1D, 7},
  490. {7, 0xE, 0x0, 0x0, 0x0, 0x6D, 7},
  491. {7, 0xE, 0x1, 0x6, 0x6, 0x2D, 7},
  492. {7, 0xE, 0x1, 0xE, 0xA, 0x0D, 7},
  493. {7, 0xE, 0x1, 0xE, 0x2, 0x1E, 6},
  494. {7, 0xE, 0x1, 0xE, 0xC, 0x4D, 7},
  495. {7, 0xE, 0x1, 0xE, 0x8, 0x0E, 6},
  496. {7, 0xE, 0x1, 0xE, 0x4, 0x75, 7},
  497. {7, 0xF, 0x0, 0x0, 0x0, 0x15, 7},
  498. {7, 0xF, 0x1, 0xF, 0xF, 0x06, 5},
  499. {7, 0xF, 0x1, 0xF, 0xD, 0x35, 7},
  500. {7, 0xF, 0x1, 0xF, 0x7, 0x55, 7},
  501. {7, 0xF, 0x1, 0xF, 0x5, 0x1A, 5},
  502. {7, 0xF, 0x1, 0xF, 0xB, 0x25, 7},
  503. {7, 0xF, 0x1, 0xF, 0x3, 0x0A, 5},
  504. {7, 0xF, 0x1, 0xF, 0x9, 0x2E, 6},
  505. {7, 0xF, 0x1, 0xF, 0x1, 0x00, 4},
  506. {7, 0xF, 0x1, 0xF, 0xE, 0x65, 7},
  507. {7, 0xF, 0x1, 0xF, 0x6, 0x36, 6},
  508. {7, 0xF, 0x1, 0xF, 0xA, 0x02, 5},
  509. {7, 0xF, 0x1, 0xF, 0x2, 0x0C, 4},
  510. {7, 0xF, 0x1, 0xF, 0xC, 0x16, 6},
  511. {7, 0xF, 0x1, 0xF, 0x8, 0x04, 4},
  512. {7, 0xF, 0x1, 0xF, 0x4, 0x08, 4}
  513. };
  514. // nono-initial quad rows
  515. static vlc_src_table_t tbl1[] = {
  516. {0, 0x1, 0x0, 0x0, 0x0, 0x00, 3},
  517. {0, 0x1, 0x1, 0x1, 0x1, 0x27, 6},
  518. {0, 0x2, 0x0, 0x0, 0x0, 0x06, 3},
  519. {0, 0x2, 0x1, 0x2, 0x2, 0x17, 6},
  520. {0, 0x3, 0x0, 0x0, 0x0, 0x0D, 5},
  521. {0, 0x3, 0x1, 0x0, 0x0, 0x3B, 6},
  522. {0, 0x4, 0x0, 0x0, 0x0, 0x02, 3},
  523. {0, 0x4, 0x1, 0x4, 0x4, 0x07, 6},
  524. {0, 0x5, 0x0, 0x0, 0x0, 0x15, 5},
  525. {0, 0x5, 0x1, 0x0, 0x0, 0x2B, 6},
  526. {0, 0x6, 0x0, 0x0, 0x0, 0x01, 5},
  527. {0, 0x6, 0x1, 0x0, 0x0, 0x7F, 7},
  528. {0, 0x7, 0x0, 0x0, 0x0, 0x1F, 7},
  529. {0, 0x7, 0x1, 0x0, 0x0, 0x1B, 6},
  530. {0, 0x8, 0x0, 0x0, 0x0, 0x04, 3},
  531. {0, 0x8, 0x1, 0x8, 0x8, 0x05, 5},
  532. {0, 0x9, 0x0, 0x0, 0x0, 0x19, 5},
  533. {0, 0x9, 0x1, 0x0, 0x0, 0x13, 6},
  534. {0, 0xA, 0x0, 0x0, 0x0, 0x09, 5},
  535. {0, 0xA, 0x1, 0x8, 0x8, 0x0B, 6},
  536. {0, 0xA, 0x1, 0xA, 0x2, 0x3F, 7},
  537. {0, 0xB, 0x0, 0x0, 0x0, 0x5F, 7},
  538. {0, 0xB, 0x1, 0x0, 0x0, 0x33, 6},
  539. {0, 0xC, 0x0, 0x0, 0x0, 0x11, 5},
  540. {0, 0xC, 0x1, 0x8, 0x8, 0x23, 6},
  541. {0, 0xC, 0x1, 0xC, 0x4, 0x6F, 7},
  542. {0, 0xD, 0x0, 0x0, 0x0, 0x0F, 7},
  543. {0, 0xD, 0x1, 0x0, 0x0, 0x03, 6},
  544. {0, 0xE, 0x0, 0x0, 0x0, 0x2F, 7},
  545. {0, 0xE, 0x1, 0x4, 0x4, 0x4F, 7},
  546. {0, 0xE, 0x1, 0x4, 0x0, 0x3D, 6},
  547. {0, 0xF, 0x0, 0x0, 0x0, 0x77, 7},
  548. {0, 0xF, 0x1, 0x1, 0x1, 0x37, 7},
  549. {0, 0xF, 0x1, 0x1, 0x0, 0x1D, 6},
  550. {1, 0x0, 0x0, 0x0, 0x0, 0x00, 1},
  551. {1, 0x1, 0x0, 0x0, 0x0, 0x05, 4},
  552. {1, 0x1, 0x1, 0x1, 0x1, 0x7F, 7},
  553. {1, 0x2, 0x0, 0x0, 0x0, 0x09, 4},
  554. {1, 0x2, 0x1, 0x2, 0x2, 0x1F, 7},
  555. {1, 0x3, 0x0, 0x0, 0x0, 0x1D, 5},
  556. {1, 0x3, 0x1, 0x1, 0x1, 0x3F, 7},
  557. {1, 0x3, 0x1, 0x3, 0x2, 0x5F, 7},
  558. {1, 0x4, 0x0, 0x0, 0x0, 0x0D, 5},
  559. {1, 0x4, 0x1, 0x4, 0x4, 0x37, 7},
  560. {1, 0x5, 0x0, 0x0, 0x0, 0x03, 6},
  561. {1, 0x5, 0x1, 0x0, 0x0, 0x6F, 7},
  562. {1, 0x6, 0x0, 0x0, 0x0, 0x2F, 7},
  563. {1, 0x6, 0x1, 0x0, 0x0, 0x4F, 7},
  564. {1, 0x7, 0x0, 0x0, 0x0, 0x0F, 7},
  565. {1, 0x7, 0x1, 0x0, 0x0, 0x77, 7},
  566. {1, 0x8, 0x0, 0x0, 0x0, 0x01, 4},
  567. {1, 0x8, 0x1, 0x8, 0x8, 0x17, 7},
  568. {1, 0x9, 0x0, 0x0, 0x0, 0x0B, 6},
  569. {1, 0x9, 0x1, 0x0, 0x0, 0x57, 7},
  570. {1, 0xA, 0x0, 0x0, 0x0, 0x33, 6},
  571. {1, 0xA, 0x1, 0x0, 0x0, 0x67, 7},
  572. {1, 0xB, 0x0, 0x0, 0x0, 0x27, 7},
  573. {1, 0xB, 0x1, 0x0, 0x0, 0x2B, 7},
  574. {1, 0xC, 0x0, 0x0, 0x0, 0x13, 6},
  575. {1, 0xC, 0x1, 0x0, 0x0, 0x47, 7},
  576. {1, 0xD, 0x0, 0x0, 0x0, 0x07, 7},
  577. {1, 0xD, 0x1, 0x0, 0x0, 0x7B, 7},
  578. {1, 0xE, 0x0, 0x0, 0x0, 0x3B, 7},
  579. {1, 0xE, 0x1, 0x0, 0x0, 0x5B, 7},
  580. {1, 0xF, 0x0, 0x0, 0x0, 0x1B, 7},
  581. {1, 0xF, 0x1, 0x4, 0x4, 0x6B, 7},
  582. {1, 0xF, 0x1, 0x4, 0x0, 0x23, 6},
  583. {2, 0x0, 0x0, 0x0, 0x0, 0x00, 1},
  584. {2, 0x1, 0x0, 0x0, 0x0, 0x09, 4},
  585. {2, 0x1, 0x1, 0x1, 0x1, 0x7F, 7},
  586. {2, 0x2, 0x0, 0x0, 0x0, 0x01, 4},
  587. {2, 0x2, 0x1, 0x2, 0x2, 0x23, 6},
  588. {2, 0x3, 0x0, 0x0, 0x0, 0x3D, 6},
  589. {2, 0x3, 0x1, 0x2, 0x2, 0x3F, 7},
  590. {2, 0x3, 0x1, 0x3, 0x1, 0x1F, 7},
  591. {2, 0x4, 0x0, 0x0, 0x0, 0x15, 5},
  592. {2, 0x4, 0x1, 0x4, 0x4, 0x5F, 7},
  593. {2, 0x5, 0x0, 0x0, 0x0, 0x03, 6},
  594. {2, 0x5, 0x1, 0x0, 0x0, 0x6F, 7},
  595. {2, 0x6, 0x0, 0x0, 0x0, 0x2F, 7},
  596. {2, 0x6, 0x1, 0x0, 0x0, 0x4F, 7},
  597. {2, 0x7, 0x0, 0x0, 0x0, 0x0F, 7},
  598. {2, 0x7, 0x1, 0x0, 0x0, 0x17, 7},
  599. {2, 0x8, 0x0, 0x0, 0x0, 0x05, 5},
  600. {2, 0x8, 0x1, 0x8, 0x8, 0x77, 7},
  601. {2, 0x9, 0x0, 0x0, 0x0, 0x37, 7},
  602. {2, 0x9, 0x1, 0x0, 0x0, 0x57, 7},
  603. {2, 0xA, 0x0, 0x0, 0x0, 0x1D, 6},
  604. {2, 0xA, 0x1, 0xA, 0xA, 0x7B, 7},
  605. {2, 0xA, 0x1, 0xA, 0x2, 0x2D, 6},
  606. {2, 0xA, 0x1, 0xA, 0x8, 0x67, 7},
  607. {2, 0xB, 0x0, 0x0, 0x0, 0x27, 7},
  608. {2, 0xB, 0x1, 0xB, 0x2, 0x47, 7},
  609. {2, 0xB, 0x1, 0x0, 0x0, 0x07, 7},
  610. {2, 0xC, 0x0, 0x0, 0x0, 0x0D, 6},
  611. {2, 0xC, 0x1, 0x0, 0x0, 0x3B, 7},
  612. {2, 0xD, 0x0, 0x0, 0x0, 0x5B, 7},
  613. {2, 0xD, 0x1, 0x0, 0x0, 0x1B, 7},
  614. {2, 0xE, 0x0, 0x0, 0x0, 0x6B, 7},
  615. {2, 0xE, 0x1, 0x4, 0x4, 0x2B, 7},
  616. {2, 0xE, 0x1, 0x4, 0x0, 0x4B, 7},
  617. {2, 0xF, 0x0, 0x0, 0x0, 0x0B, 7},
  618. {2, 0xF, 0x1, 0x4, 0x4, 0x73, 7},
  619. {2, 0xF, 0x1, 0x5, 0x1, 0x33, 7},
  620. {2, 0xF, 0x1, 0x7, 0x2, 0x53, 7},
  621. {2, 0xF, 0x1, 0xF, 0x8, 0x13, 7},
  622. {3, 0x0, 0x0, 0x0, 0x0, 0x00, 2},
  623. {3, 0x1, 0x0, 0x0, 0x0, 0x0A, 4},
  624. {3, 0x1, 0x1, 0x1, 0x1, 0x0B, 6},
  625. {3, 0x2, 0x0, 0x0, 0x0, 0x02, 4},
  626. {3, 0x2, 0x1, 0x2, 0x2, 0x23, 6},
  627. {3, 0x3, 0x0, 0x0, 0x0, 0x0E, 5},
  628. {3, 0x3, 0x1, 0x3, 0x3, 0x7F, 7},
  629. {3, 0x3, 0x1, 0x3, 0x2, 0x33, 6},
  630. {3, 0x3, 0x1, 0x3, 0x1, 0x13, 6},
  631. {3, 0x4, 0x0, 0x0, 0x0, 0x16, 5},
  632. {3, 0x4, 0x1, 0x4, 0x4, 0x3F, 7},
  633. {3, 0x5, 0x0, 0x0, 0x0, 0x03, 6},
  634. {3, 0x5, 0x1, 0x1, 0x1, 0x3D, 6},
  635. {3, 0x5, 0x1, 0x5, 0x4, 0x1F, 7},
  636. {3, 0x6, 0x0, 0x0, 0x0, 0x1D, 6},
  637. {3, 0x6, 0x1, 0x0, 0x0, 0x5F, 7},
  638. {3, 0x7, 0x0, 0x0, 0x0, 0x2D, 6},
  639. {3, 0x7, 0x1, 0x4, 0x4, 0x2F, 7},
  640. {3, 0x7, 0x1, 0x5, 0x1, 0x1E, 6},
  641. {3, 0x7, 0x1, 0x7, 0x2, 0x6F, 7},
  642. {3, 0x8, 0x0, 0x0, 0x0, 0x06, 5},
  643. {3, 0x8, 0x1, 0x8, 0x8, 0x4F, 7},
  644. {3, 0x9, 0x0, 0x0, 0x0, 0x0D, 6},
  645. {3, 0x9, 0x1, 0x0, 0x0, 0x35, 6},
  646. {3, 0xA, 0x0, 0x0, 0x0, 0x15, 6},
  647. {3, 0xA, 0x1, 0x2, 0x2, 0x25, 6},
  648. {3, 0xA, 0x1, 0xA, 0x8, 0x0F, 7},
  649. {3, 0xB, 0x0, 0x0, 0x0, 0x05, 6},
  650. {3, 0xB, 0x1, 0x8, 0x8, 0x39, 6},
  651. {3, 0xB, 0x1, 0xB, 0x3, 0x17, 7},
  652. {3, 0xB, 0x1, 0xB, 0x2, 0x19, 6},
  653. {3, 0xB, 0x1, 0xB, 0x1, 0x77, 7},
  654. {3, 0xC, 0x0, 0x0, 0x0, 0x29, 6},
  655. {3, 0xC, 0x1, 0x0, 0x0, 0x09, 6},
  656. {3, 0xD, 0x0, 0x0, 0x0, 0x37, 7},
  657. {3, 0xD, 0x1, 0x4, 0x4, 0x57, 7},
  658. {3, 0xD, 0x1, 0x4, 0x0, 0x31, 6},
  659. {3, 0xE, 0x0, 0x0, 0x0, 0x67, 7},
  660. {3, 0xE, 0x1, 0x4, 0x4, 0x27, 7},
  661. {3, 0xE, 0x1, 0xC, 0x8, 0x47, 7},
  662. {3, 0xE, 0x1, 0xE, 0x2, 0x6B, 7},
  663. {3, 0xF, 0x0, 0x0, 0x0, 0x11, 6},
  664. {3, 0xF, 0x1, 0x6, 0x6, 0x07, 7},
  665. {3, 0xF, 0x1, 0x7, 0x3, 0x7B, 7},
  666. {3, 0xF, 0x1, 0xF, 0xA, 0x3B, 7},
  667. {3, 0xF, 0x1, 0xF, 0x2, 0x21, 6},
  668. {3, 0xF, 0x1, 0xF, 0x8, 0x01, 6},
  669. {3, 0xF, 0x1, 0xA, 0x8, 0x5B, 7},
  670. {3, 0xF, 0x1, 0xF, 0x5, 0x1B, 7},
  671. {3, 0xF, 0x1, 0xF, 0x1, 0x3E, 6},
  672. {3, 0xF, 0x1, 0xF, 0x4, 0x2B, 7},
  673. {4, 0x0, 0x0, 0x0, 0x0, 0x00, 1},
  674. {4, 0x1, 0x0, 0x0, 0x0, 0x0D, 5},
  675. {4, 0x1, 0x1, 0x1, 0x1, 0x7F, 7},
  676. {4, 0x2, 0x0, 0x0, 0x0, 0x15, 5},
  677. {4, 0x2, 0x1, 0x2, 0x2, 0x3F, 7},
  678. {4, 0x3, 0x0, 0x0, 0x0, 0x5F, 7},
  679. {4, 0x3, 0x1, 0x0, 0x0, 0x6F, 7},
  680. {4, 0x4, 0x0, 0x0, 0x0, 0x09, 4},
  681. {4, 0x4, 0x1, 0x4, 0x4, 0x23, 6},
  682. {4, 0x5, 0x0, 0x0, 0x0, 0x33, 6},
  683. {4, 0x5, 0x1, 0x0, 0x0, 0x1F, 7},
  684. {4, 0x6, 0x0, 0x0, 0x0, 0x13, 6},
  685. {4, 0x6, 0x1, 0x0, 0x0, 0x2F, 7},
  686. {4, 0x7, 0x0, 0x0, 0x0, 0x4F, 7},
  687. {4, 0x7, 0x1, 0x0, 0x0, 0x57, 7},
  688. {4, 0x8, 0x0, 0x0, 0x0, 0x01, 4},
  689. {4, 0x8, 0x1, 0x8, 0x8, 0x0F, 7},
  690. {4, 0x9, 0x0, 0x0, 0x0, 0x77, 7},
  691. {4, 0x9, 0x1, 0x0, 0x0, 0x37, 7},
  692. {4, 0xA, 0x0, 0x0, 0x0, 0x1D, 6},
  693. {4, 0xA, 0x1, 0x0, 0x0, 0x17, 7},
  694. {4, 0xB, 0x0, 0x0, 0x0, 0x67, 7},
  695. {4, 0xB, 0x1, 0x0, 0x0, 0x6B, 7},
  696. {4, 0xC, 0x0, 0x0, 0x0, 0x05, 5},
  697. {4, 0xC, 0x1, 0xC, 0xC, 0x27, 7},
  698. {4, 0xC, 0x1, 0xC, 0x8, 0x47, 7},
  699. {4, 0xC, 0x1, 0xC, 0x4, 0x07, 7},
  700. {4, 0xD, 0x0, 0x0, 0x0, 0x7B, 7},
  701. {4, 0xD, 0x1, 0x0, 0x0, 0x3B, 7},
  702. {4, 0xE, 0x0, 0x0, 0x0, 0x5B, 7},
  703. {4, 0xE, 0x1, 0x2, 0x2, 0x1B, 7},
  704. {4, 0xE, 0x1, 0x2, 0x0, 0x03, 6},
  705. {4, 0xF, 0x0, 0x0, 0x0, 0x2B, 7},
  706. {4, 0xF, 0x1, 0x1, 0x1, 0x4B, 7},
  707. {4, 0xF, 0x1, 0x3, 0x2, 0x0B, 7},
  708. {4, 0xF, 0x1, 0x3, 0x0, 0x3D, 6},
  709. {5, 0x0, 0x0, 0x0, 0x0, 0x00, 2},
  710. {5, 0x1, 0x0, 0x0, 0x0, 0x1E, 5},
  711. {5, 0x1, 0x1, 0x1, 0x1, 0x3B, 6},
  712. {5, 0x2, 0x0, 0x0, 0x0, 0x0A, 5},
  713. {5, 0x2, 0x1, 0x2, 0x2, 0x3F, 7},
  714. {5, 0x3, 0x0, 0x0, 0x0, 0x1B, 6},
  715. {5, 0x3, 0x1, 0x0, 0x0, 0x0B, 6},
  716. {5, 0x4, 0x0, 0x0, 0x0, 0x02, 4},
  717. {5, 0x4, 0x1, 0x4, 0x4, 0x2B, 6},
  718. {5, 0x5, 0x0, 0x0, 0x0, 0x0E, 5},
  719. {5, 0x5, 0x1, 0x4, 0x4, 0x33, 6},
  720. {5, 0x5, 0x1, 0x5, 0x1, 0x7F, 7},
  721. {5, 0x6, 0x0, 0x0, 0x0, 0x13, 6},
  722. {5, 0x6, 0x1, 0x0, 0x0, 0x6F, 7},
  723. {5, 0x7, 0x0, 0x0, 0x0, 0x23, 6},
  724. {5, 0x7, 0x1, 0x2, 0x2, 0x5F, 7},
  725. {5, 0x7, 0x1, 0x2, 0x0, 0x15, 6},
  726. {5, 0x8, 0x0, 0x0, 0x0, 0x16, 5},
  727. {5, 0x8, 0x1, 0x8, 0x8, 0x03, 6},
  728. {5, 0x9, 0x0, 0x0, 0x0, 0x3D, 6},
  729. {5, 0x9, 0x1, 0x0, 0x0, 0x1F, 7},
  730. {5, 0xA, 0x0, 0x0, 0x0, 0x1D, 6},
  731. {5, 0xA, 0x1, 0x0, 0x0, 0x2D, 6},
  732. {5, 0xB, 0x0, 0x0, 0x0, 0x0D, 6},
  733. {5, 0xB, 0x1, 0x1, 0x1, 0x4F, 7},
  734. {5, 0xB, 0x1, 0x1, 0x0, 0x35, 6},
  735. {5, 0xC, 0x0, 0x0, 0x0, 0x06, 5},
  736. {5, 0xC, 0x1, 0x4, 0x4, 0x25, 6},
  737. {5, 0xC, 0x1, 0xC, 0x8, 0x2F, 7},
  738. {5, 0xD, 0x0, 0x0, 0x0, 0x05, 6},
  739. {5, 0xD, 0x1, 0x1, 0x1, 0x77, 7},
  740. {5, 0xD, 0x1, 0x5, 0x4, 0x39, 6},
  741. {5, 0xD, 0x1, 0xD, 0x8, 0x0F, 7},
  742. {5, 0xE, 0x0, 0x0, 0x0, 0x19, 6},
  743. {5, 0xE, 0x1, 0x2, 0x2, 0x57, 7},
  744. {5, 0xE, 0x1, 0xA, 0x8, 0x01, 6},
  745. {5, 0xE, 0x1, 0xE, 0x4, 0x37, 7},
  746. {5, 0xF, 0x0, 0x0, 0x0, 0x1A, 5},
  747. {5, 0xF, 0x1, 0x9, 0x9, 0x17, 7},
  748. {5, 0xF, 0x1, 0xD, 0x5, 0x67, 7},
  749. {5, 0xF, 0x1, 0xF, 0x3, 0x07, 7},
  750. {5, 0xF, 0x1, 0xF, 0x1, 0x29, 6},
  751. {5, 0xF, 0x1, 0x7, 0x6, 0x27, 7},
  752. {5, 0xF, 0x1, 0xF, 0xC, 0x09, 6},
  753. {5, 0xF, 0x1, 0xF, 0x4, 0x31, 6},
  754. {5, 0xF, 0x1, 0xF, 0xA, 0x47, 7},
  755. {5, 0xF, 0x1, 0xF, 0x8, 0x11, 6},
  756. {5, 0xF, 0x1, 0xF, 0x2, 0x21, 6},
  757. {6, 0x0, 0x0, 0x0, 0x0, 0x00, 3},
  758. {6, 0x1, 0x0, 0x0, 0x0, 0x02, 4},
  759. {6, 0x1, 0x1, 0x1, 0x1, 0x03, 6},
  760. {6, 0x2, 0x0, 0x0, 0x0, 0x0C, 4},
  761. {6, 0x2, 0x1, 0x2, 0x2, 0x3D, 6},
  762. {6, 0x3, 0x0, 0x0, 0x0, 0x1D, 6},
  763. {6, 0x3, 0x1, 0x2, 0x2, 0x0D, 6},
  764. {6, 0x3, 0x1, 0x3, 0x1, 0x7F, 7},
  765. {6, 0x4, 0x0, 0x0, 0x0, 0x04, 4},
  766. {6, 0x4, 0x1, 0x4, 0x4, 0x2D, 6},
  767. {6, 0x5, 0x0, 0x0, 0x0, 0x0A, 5},
  768. {6, 0x5, 0x1, 0x4, 0x4, 0x35, 6},
  769. {6, 0x5, 0x1, 0x5, 0x1, 0x2F, 7},
  770. {6, 0x6, 0x0, 0x0, 0x0, 0x15, 6},
  771. {6, 0x6, 0x1, 0x2, 0x2, 0x3F, 7},
  772. {6, 0x6, 0x1, 0x6, 0x4, 0x5F, 7},
  773. {6, 0x7, 0x0, 0x0, 0x0, 0x25, 6},
  774. {6, 0x7, 0x1, 0x2, 0x2, 0x29, 6},
  775. {6, 0x7, 0x1, 0x3, 0x1, 0x1F, 7},
  776. {6, 0x7, 0x1, 0x7, 0x4, 0x6F, 7},
  777. {6, 0x8, 0x0, 0x0, 0x0, 0x16, 5},
  778. {6, 0x8, 0x1, 0x8, 0x8, 0x05, 6},
  779. {6, 0x9, 0x0, 0x0, 0x0, 0x39, 6},
  780. {6, 0x9, 0x1, 0x0, 0x0, 0x19, 6},
  781. {6, 0xA, 0x0, 0x0, 0x0, 0x06, 5},
  782. {6, 0xA, 0x1, 0xA, 0xA, 0x0F, 7},
  783. {6, 0xA, 0x1, 0xA, 0x2, 0x09, 6},
  784. {6, 0xA, 0x1, 0xA, 0x8, 0x4F, 7},
  785. {6, 0xB, 0x0, 0x0, 0x0, 0x0E, 6},
  786. {6, 0xB, 0x1, 0xB, 0x2, 0x77, 7},
  787. {6, 0xB, 0x1, 0x2, 0x2, 0x37, 7},
  788. {6, 0xB, 0x1, 0xA, 0x8, 0x57, 7},
  789. {6, 0xB, 0x1, 0xB, 0x1, 0x47, 7},
  790. {6, 0xC, 0x0, 0x0, 0x0, 0x1A, 5},
  791. {6, 0xC, 0x1, 0xC, 0xC, 0x17, 7},
  792. {6, 0xC, 0x1, 0xC, 0x8, 0x67, 7},
  793. {6, 0xC, 0x1, 0xC, 0x4, 0x27, 7},
  794. {6, 0xD, 0x0, 0x0, 0x0, 0x31, 6},
  795. {6, 0xD, 0x1, 0xD, 0x4, 0x07, 7},
  796. {6, 0xD, 0x1, 0x4, 0x4, 0x7B, 7},
  797. {6, 0xD, 0x1, 0xC, 0x8, 0x3B, 7},
  798. {6, 0xD, 0x1, 0xD, 0x1, 0x2B, 7},
  799. {6, 0xE, 0x0, 0x0, 0x0, 0x11, 6},
  800. {6, 0xE, 0x1, 0xE, 0x4, 0x5B, 7},
  801. {6, 0xE, 0x1, 0x4, 0x4, 0x1B, 7},
  802. {6, 0xE, 0x1, 0xE, 0xA, 0x6B, 7},
  803. {6, 0xE, 0x1, 0xE, 0x8, 0x21, 6},
  804. {6, 0xE, 0x1, 0xE, 0x2, 0x33, 7},
  805. {6, 0xF, 0x0, 0x0, 0x0, 0x01, 6},
  806. {6, 0xF, 0x1, 0x3, 0x3, 0x4B, 7},
  807. {6, 0xF, 0x1, 0x7, 0x6, 0x0B, 7},
  808. {6, 0xF, 0x1, 0xF, 0xA, 0x73, 7},
  809. {6, 0xF, 0x1, 0xF, 0x2, 0x3E, 6},
  810. {6, 0xF, 0x1, 0xB, 0x9, 0x53, 7},
  811. {6, 0xF, 0x1, 0xF, 0xC, 0x63, 7},
  812. {6, 0xF, 0x1, 0xF, 0x8, 0x1E, 6},
  813. {6, 0xF, 0x1, 0xF, 0x5, 0x13, 7},
  814. {6, 0xF, 0x1, 0xF, 0x4, 0x2E, 6},
  815. {6, 0xF, 0x1, 0xF, 0x1, 0x23, 7},
  816. {7, 0x0, 0x0, 0x0, 0x0, 0x04, 4},
  817. {7, 0x1, 0x0, 0x0, 0x0, 0x33, 6},
  818. {7, 0x1, 0x1, 0x1, 0x1, 0x13, 6},
  819. {7, 0x2, 0x0, 0x0, 0x0, 0x23, 6},
  820. {7, 0x2, 0x1, 0x2, 0x2, 0x7F, 7},
  821. {7, 0x3, 0x0, 0x0, 0x0, 0x03, 6},
  822. {7, 0x3, 0x1, 0x1, 0x1, 0x3F, 7},
  823. {7, 0x3, 0x1, 0x3, 0x2, 0x6F, 7},
  824. {7, 0x4, 0x0, 0x0, 0x0, 0x2D, 6},
  825. {7, 0x4, 0x1, 0x4, 0x4, 0x5F, 7},
  826. {7, 0x5, 0x0, 0x0, 0x0, 0x16, 5},
  827. {7, 0x5, 0x1, 0x1, 0x1, 0x3D, 6},
  828. {7, 0x5, 0x1, 0x5, 0x4, 0x1F, 7},
  829. {7, 0x6, 0x0, 0x0, 0x0, 0x1D, 6},
  830. {7, 0x6, 0x1, 0x0, 0x0, 0x77, 7},
  831. {7, 0x7, 0x0, 0x0, 0x0, 0x06, 5},
  832. {7, 0x7, 0x1, 0x7, 0x4, 0x2F, 7},
  833. {7, 0x7, 0x1, 0x4, 0x4, 0x4F, 7},
  834. {7, 0x7, 0x1, 0x7, 0x3, 0x0F, 7},
  835. {7, 0x7, 0x1, 0x7, 0x1, 0x0D, 6},
  836. {7, 0x7, 0x1, 0x7, 0x2, 0x57, 7},
  837. {7, 0x8, 0x0, 0x0, 0x0, 0x35, 6},
  838. {7, 0x8, 0x1, 0x8, 0x8, 0x37, 7},
  839. {7, 0x9, 0x0, 0x0, 0x0, 0x15, 6},
  840. {7, 0x9, 0x1, 0x0, 0x0, 0x27, 7},
  841. {7, 0xA, 0x0, 0x0, 0x0, 0x25, 6},
  842. {7, 0xA, 0x1, 0x0, 0x0, 0x29, 6},
  843. {7, 0xB, 0x0, 0x0, 0x0, 0x1A, 5},
  844. {7, 0xB, 0x1, 0xB, 0x1, 0x17, 7},
  845. {7, 0xB, 0x1, 0x1, 0x1, 0x67, 7},
  846. {7, 0xB, 0x1, 0x3, 0x2, 0x05, 6},
  847. {7, 0xB, 0x1, 0xB, 0x8, 0x7B, 7},
  848. {7, 0xC, 0x0, 0x0, 0x0, 0x39, 6},
  849. {7, 0xC, 0x1, 0x0, 0x0, 0x19, 6},
  850. {7, 0xD, 0x0, 0x0, 0x0, 0x0C, 5},
  851. {7, 0xD, 0x1, 0xD, 0x1, 0x47, 7},
  852. {7, 0xD, 0x1, 0x1, 0x1, 0x07, 7},
  853. {7, 0xD, 0x1, 0x5, 0x4, 0x09, 6},
  854. {7, 0xD, 0x1, 0xD, 0x8, 0x1B, 7},
  855. {7, 0xE, 0x0, 0x0, 0x0, 0x31, 6},
  856. {7, 0xE, 0x1, 0xE, 0x2, 0x3B, 7},
  857. {7, 0xE, 0x1, 0x2, 0x2, 0x5B, 7},
  858. {7, 0xE, 0x1, 0xA, 0x8, 0x3E, 6},
  859. {7, 0xE, 0x1, 0xE, 0x4, 0x0B, 7},
  860. {7, 0xF, 0x0, 0x0, 0x0, 0x00, 3},
  861. {7, 0xF, 0x1, 0xF, 0xF, 0x6B, 7},
  862. {7, 0xF, 0x1, 0xF, 0x7, 0x2B, 7},
  863. {7, 0xF, 0x1, 0xF, 0xB, 0x4B, 7},
  864. {7, 0xF, 0x1, 0xF, 0x3, 0x11, 6},
  865. {7, 0xF, 0x1, 0x7, 0x6, 0x21, 6},
  866. {7, 0xF, 0x1, 0xF, 0xA, 0x01, 6},
  867. {7, 0xF, 0x1, 0xF, 0x2, 0x0A, 5},
  868. {7, 0xF, 0x1, 0xB, 0x9, 0x1E, 6},
  869. {7, 0xF, 0x1, 0xF, 0xC, 0x0E, 6},
  870. {7, 0xF, 0x1, 0xF, 0x8, 0x12, 5},
  871. {7, 0xF, 0x1, 0xF, 0x5, 0x2E, 6},
  872. {7, 0xF, 0x1, 0xF, 0x1, 0x02, 5},
  873. {7, 0xF, 0x1, 0xF, 0x4, 0x1C, 5}
  874. };
  875. //************************************************************************/
  876. /** @defgroup vlc_decoding_tables_grp VLC decoding tables
  877. * @{
  878. * VLC tables to decode VLC codewords to these fields: (in order) \n
  879. * \li \c cwd_len : 3bits -> the codeword length of the VLC codeword;
  880. * the VLC cwd is in the LSB of bitstream \n
  881. * \li \c u_off : 1bit -> u_offset, which is 1 if u value is not 0 \n
  882. * \li \c rho : 4bits -> significant samples within a quad \n
  883. * \li \c e_1 : 4bits -> EMB e_1 \n
  884. * \li \c e_k : 4bits -> EMB e_k \n
  885. * \n
  886. * The table index is 10 bits and composed of two parts: \n
  887. * The 7 LSBs contain a codeword which might be shorter than 7 bits;
  888. * this word is the next decoable bits in the bitstream. \n
  889. * The 3 MSB is the context of for the codeword. \n
  890. */
  891. /// @brief vlc_tbl0 contains decoding information for initial row of quads
  892. int vlc_tbl0[1024] = { 0 };
  893. /// @brief vlc_tbl1 contains decoding information for non-initial row of
  894. /// quads
  895. int vlc_tbl1[1024] = { 0 };
  896. /// @}
  897. //************************************************************************/
  898. /** @ingroup vlc_decoding_tables_grp
  899. * @brief Initializes vlc_tbl0 and vlc_tbl1 tables, from table0.h and
  900. * table1.h
  901. */
  902. OPJ_BOOL vlc_init_tables()
  903. {
  904. const OPJ_BOOL debug = OPJ_FALSE; //useful for checking
  905. // number of entries in the table
  906. size_t tbl0_size = sizeof(tbl0) / sizeof(vlc_src_table_t);
  907. // number of entries in the table
  908. size_t tbl1_size = sizeof(tbl1) / sizeof(vlc_src_table_t);
  909. if (debug) {
  910. memset(vlc_tbl0, 0, sizeof(vlc_tbl0)); //unnecessary
  911. }
  912. // this is to convert table entries into values for decoder look up
  913. // There can be at most 1024 possibilities, not all of them are valid.
  914. //
  915. for (int i = 0; i < 1024; ++i) {
  916. int cwd = i & 0x7F; // from i extract codeword
  917. int c_q = i >> 7; // from i extract context
  918. // See if this case exist in the table, if so then set the entry in
  919. // vlc_tbl0
  920. for (size_t j = 0; j < tbl0_size; ++j)
  921. if (tbl0[j].c_q == c_q) // this is an and operation
  922. if (tbl0[j].cwd == (cwd & ((1 << tbl0[j].cwd_len) - 1))) {
  923. if (debug) {
  924. assert(vlc_tbl0[i] == 0);
  925. }
  926. // Put this entry into the table
  927. vlc_tbl0[i] = (tbl0[j].rho << 4) | (tbl0[j].u_off << 3)
  928. | (tbl0[j].e_k << 12) | (tbl0[j].e_1 << 8) | tbl0[j].cwd_len;
  929. }
  930. }
  931. if (debug) {
  932. memset(vlc_tbl1, 0, sizeof(vlc_tbl1)); //unnecessary
  933. }
  934. // this the same as above but for non-initial rows
  935. for (int i = 0; i < 1024; ++i) {
  936. int cwd = i & 0x7F; //7 bits
  937. int c_q = i >> 7;
  938. for (size_t j = 0; j < tbl1_size; ++j)
  939. if (tbl1[j].c_q == c_q) // this is an and operation
  940. if (tbl1[j].cwd == (cwd & ((1 << tbl1[j].cwd_len) - 1))) {
  941. if (debug) {
  942. assert(vlc_tbl1[i] == 0);
  943. }
  944. vlc_tbl1[i] = (tbl1[j].rho << 4) | (tbl1[j].u_off << 3)
  945. | (tbl1[j].e_k << 12) | (tbl1[j].e_1 << 8) | tbl1[j].cwd_len;
  946. }
  947. }
  948. return OPJ_TRUE;
  949. }
  950. //************************************************************************/
  951. /** @ingroup vlc_decoding_tables_grp
  952. * @brief Initializes VLC tables vlc_tbl0 and vlc_tbl1
  953. */
  954. OPJ_BOOL vlc_tables_initialized = OPJ_FALSE;