FreeRDP
ncrush.c
1 
22 #include <winpr/assert.h>
23 
24 #include <freerdp/config.h>
25 
26 #include <winpr/crt.h>
27 #include <winpr/print.h>
28 #include <winpr/bitstream.h>
29 
30 #include <freerdp/log.h>
31 #include <freerdp/types.h>
32 
33 #include "ncrush.h"
34 
35 #define TAG FREERDP_TAG("codec")
36 
37 struct s_NCRUSH_CONTEXT
38 {
39  ALIGN64 BOOL Compressor;
40  ALIGN64 BYTE* HistoryPtr;
41  ALIGN64 UINT32 HistoryOffset;
42  ALIGN64 UINT32 HistoryEndOffset;
43  ALIGN64 UINT32 HistoryBufferSize;
44  ALIGN64 BYTE HistoryBuffer[65536];
45  ALIGN64 UINT32 HistoryBufferFence;
46  ALIGN64 UINT32 OffsetCache[4];
47  ALIGN64 UINT16 HashTable[65536];
48  ALIGN64 UINT16 MatchTable[65536];
49  ALIGN64 BYTE HuffTableCopyOffset[1024];
50  ALIGN64 BYTE HuffTableLOM[4096];
51 };
52 
53 static const UINT16 HuffTableLEC[8192] = {
54  0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0,
55  0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091,
56  0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035,
57  0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4,
58  0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056,
59  0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071,
60  0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049,
61  0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF,
62  0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023,
63  0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9,
64  0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029,
65  0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7,
66  0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046,
67  0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E,
68  0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F,
69  0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC,
70  0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1,
71  0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D,
72  0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F,
73  0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3,
74  0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064,
75  0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A,
76  0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043,
77  0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9,
78  0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8,
79  0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3,
80  0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030,
81  0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD,
82  0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E,
83  0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A,
84  0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084,
85  0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7,
86  0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0,
87  0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097,
88  0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039,
89  0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB,
90  0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D,
91  0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077,
92  0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059,
93  0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6,
94  0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034,
95  0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0,
96  0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027,
97  0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4,
98  0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B,
99  0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B,
100  0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070,
101  0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9,
102  0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0,
103  0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A,
104  0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C,
105  0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF,
106  0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061,
107  0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D,
108  0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044,
109  0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC,
110  0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC,
111  0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6,
112  0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031,
113  0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1,
114  0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053,
115  0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D,
116  0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088,
117  0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB,
118  0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6,
119  0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094,
120  0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037,
121  0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8,
122  0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A,
123  0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074,
124  0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050,
125  0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3,
126  0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E,
127  0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD,
128  0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A,
129  0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA,
130  0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B,
131  0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086,
132  0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081,
133  0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3,
134  0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2,
135  0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0,
136  0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041,
137  0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6,
138  0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067,
139  0x610C, 0x9026, 0x611E, 0xB0B2, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068,
140  0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042,
141  0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7,
142  0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4,
143  0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1,
144  0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C,
145  0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB,
146  0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C,
147  0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087,
148  0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082,
149  0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5,
150  0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC,
151  0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095,
152  0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038,
153  0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9,
154  0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B,
155  0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075,
156  0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051,
157  0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4,
158  0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F,
159  0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE,
160  0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028,
161  0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5,
162  0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D,
163  0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C,
164  0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078,
165  0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA,
166  0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE,
167  0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B,
168  0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E,
169  0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1,
170  0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062,
171  0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E,
172  0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048,
173  0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD,
174  0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD,
175  0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7,
176  0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033,
177  0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2,
178  0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054,
179  0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E,
180  0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090,
181  0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104,
182  0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0,
183  0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092,
184  0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035,
185  0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5,
186  0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057,
187  0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072,
188  0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049,
189  0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1,
190  0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B,
191  0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA,
192  0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029,
193  0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8,
194  0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047,
195  0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083,
196  0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F,
197  0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED,
198  0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1,
199  0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E,
200  0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F,
201  0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4,
202  0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065,
203  0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B,
204  0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043,
205  0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA,
206  0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8,
207  0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4,
208  0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030,
209  0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE,
210  0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F,
211  0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B,
212  0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084,
213  0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9,
214  0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0,
215  0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098,
216  0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039,
217  0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD,
218  0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E,
219  0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079,
220  0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059,
221  0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7,
222  0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036,
223  0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1,
224  0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xD0AB, 0x510B, 0x611F, 0x610D, 0x9027,
225  0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3,
226  0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A,
227  0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A,
228  0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070,
229  0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8,
230  0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0,
231  0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099,
232  0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C,
233  0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE,
234  0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F,
235  0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C,
236  0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044,
237  0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB,
238  0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC,
239  0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5,
240  0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031,
241  0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF,
242  0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052,
243  0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C,
244  0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088,
245  0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA,
246  0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6,
247  0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093,
248  0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037,
249  0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7,
250  0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058,
251  0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073,
252  0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050,
253  0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2,
254  0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D,
255  0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC,
256  0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A,
257  0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9,
258  0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A,
259  0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085,
260  0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081,
261  0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF,
262  0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2,
263  0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F,
264  0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041,
265  0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5,
266  0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066,
267  0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069,
268  0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042,
269  0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8,
270  0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4,
271  0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2,
272  0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C,
273  0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC,
274  0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D,
275  0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089,
276  0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082,
277  0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6,
278  0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC,
279  0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096,
280  0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038,
281  0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA,
282  0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C,
283  0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076,
284  0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051,
285  0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5,
286  0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032,
287  0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF,
288  0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028,
289  0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6,
290  0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045,
291  0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D,
292  0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078,
293  0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB,
294  0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE,
295  0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C,
296  0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E,
297  0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2,
298  0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063,
299  0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F,
300  0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048,
301  0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE,
302  0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD,
303  0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8,
304  0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033,
305  0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3,
306  0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055,
307  0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F,
308  0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090,
309  0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xB0B2,
310  0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0,
311  0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091,
312  0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035,
313  0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4,
314  0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056,
315  0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071,
316  0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049,
317  0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF,
318  0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023,
319  0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9,
320  0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029,
321  0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7,
322  0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046,
323  0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E,
324  0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F,
325  0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC,
326  0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1,
327  0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D,
328  0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F,
329  0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3,
330  0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064,
331  0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A,
332  0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043,
333  0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9,
334  0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8,
335  0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3,
336  0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030,
337  0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD,
338  0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E,
339  0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A,
340  0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084,
341  0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7,
342  0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0,
343  0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097,
344  0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039,
345  0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB,
346  0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D,
347  0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077,
348  0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059,
349  0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6,
350  0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034,
351  0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0,
352  0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027,
353  0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4,
354  0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B,
355  0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B,
356  0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070,
357  0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9,
358  0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0,
359  0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A,
360  0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C,
361  0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF,
362  0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061,
363  0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D,
364  0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044,
365  0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC,
366  0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC,
367  0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6,
368  0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031,
369  0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1,
370  0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053,
371  0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D,
372  0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088,
373  0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB,
374  0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6,
375  0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094,
376  0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037,
377  0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8,
378  0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A,
379  0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074,
380  0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050,
381  0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3,
382  0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E,
383  0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD,
384  0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A,
385  0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA,
386  0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B,
387  0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086,
388  0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081,
389  0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3,
390  0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2,
391  0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0,
392  0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041,
393  0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6,
394  0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067,
395  0x610C, 0x9026, 0x611E, 0xD101, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068,
396  0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042,
397  0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7,
398  0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4,
399  0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1,
400  0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C,
401  0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB,
402  0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C,
403  0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087,
404  0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082,
405  0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5,
406  0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC,
407  0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095,
408  0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038,
409  0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9,
410  0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B,
411  0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075,
412  0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051,
413  0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4,
414  0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F,
415  0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE,
416  0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028,
417  0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5,
418  0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D,
419  0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C,
420  0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078,
421  0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA,
422  0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE,
423  0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B,
424  0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E,
425  0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1,
426  0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062,
427  0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E,
428  0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048,
429  0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD,
430  0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD,
431  0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7,
432  0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033,
433  0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2,
434  0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054,
435  0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E,
436  0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090,
437  0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104,
438  0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0,
439  0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092,
440  0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035,
441  0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5,
442  0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057,
443  0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072,
444  0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049,
445  0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1,
446  0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B,
447  0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA,
448  0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029,
449  0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8,
450  0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047,
451  0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083,
452  0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F,
453  0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED,
454  0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1,
455  0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E,
456  0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F,
457  0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4,
458  0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065,
459  0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B,
460  0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043,
461  0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA,
462  0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8,
463  0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4,
464  0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030,
465  0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE,
466  0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F,
467  0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B,
468  0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084,
469  0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9,
470  0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0,
471  0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098,
472  0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039,
473  0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD,
474  0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E,
475  0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079,
476  0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059,
477  0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7,
478  0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036,
479  0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1,
480  0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xB0B2, 0x510B, 0x611F, 0x610D, 0x9027,
481  0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3,
482  0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A,
483  0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A,
484  0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070,
485  0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8,
486  0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0,
487  0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099,
488  0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C,
489  0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE,
490  0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F,
491  0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C,
492  0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044,
493  0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB,
494  0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC,
495  0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5,
496  0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031,
497  0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF,
498  0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052,
499  0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C,
500  0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088,
501  0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA,
502  0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6,
503  0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093,
504  0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037,
505  0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7,
506  0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058,
507  0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073,
508  0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050,
509  0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2,
510  0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D,
511  0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC,
512  0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A,
513  0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9,
514  0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A,
515  0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085,
516  0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081,
517  0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF,
518  0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2,
519  0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F,
520  0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041,
521  0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5,
522  0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066,
523  0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069,
524  0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042,
525  0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8,
526  0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4,
527  0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2,
528  0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C,
529  0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC,
530  0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D,
531  0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089,
532  0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082,
533  0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6,
534  0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC,
535  0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096,
536  0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038,
537  0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA,
538  0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C,
539  0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076,
540  0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051,
541  0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5,
542  0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032,
543  0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF,
544  0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028,
545  0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6,
546  0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045,
547  0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D,
548  0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078,
549  0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB,
550  0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE,
551  0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C,
552  0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E,
553  0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2,
554  0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063,
555  0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F,
556  0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048,
557  0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE,
558  0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD,
559  0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8,
560  0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033,
561  0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3,
562  0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055,
563  0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F,
564  0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090,
565  0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xD100,
566  0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0,
567  0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091,
568  0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035,
569  0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4,
570  0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056,
571  0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071,
572  0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049,
573  0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF,
574  0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023,
575  0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9,
576  0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029,
577  0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7,
578  0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046,
579  0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E,
580  0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F,
581  0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC,
582  0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1,
583  0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D,
584  0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F,
585  0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3,
586  0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064,
587  0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A,
588  0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043,
589  0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9,
590  0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8,
591  0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3,
592  0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030,
593  0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD,
594  0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E,
595  0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A,
596  0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084,
597  0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7,
598  0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0,
599  0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097,
600  0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039,
601  0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB,
602  0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D,
603  0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077,
604  0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059,
605  0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6,
606  0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034,
607  0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0,
608  0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027,
609  0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4,
610  0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B,
611  0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B,
612  0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070,
613  0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9,
614  0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0,
615  0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A,
616  0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C,
617  0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF,
618  0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061,
619  0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D,
620  0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044,
621  0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC,
622  0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC,
623  0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6,
624  0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031,
625  0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1,
626  0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053,
627  0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D,
628  0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088,
629  0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB,
630  0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6,
631  0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094,
632  0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037,
633  0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8,
634  0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A,
635  0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074,
636  0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050,
637  0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3,
638  0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E,
639  0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD,
640  0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A,
641  0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA,
642  0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B,
643  0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086,
644  0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081,
645  0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3,
646  0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2,
647  0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0,
648  0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041,
649  0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6,
650  0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067,
651  0x610C, 0x9026, 0x611E, 0xB0B2, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068,
652  0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042,
653  0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7,
654  0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4,
655  0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1,
656  0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C,
657  0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB,
658  0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C,
659  0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087,
660  0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082,
661  0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5,
662  0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC,
663  0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095,
664  0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038,
665  0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9,
666  0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B,
667  0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075,
668  0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051,
669  0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4,
670  0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F,
671  0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE,
672  0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028,
673  0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5,
674  0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D,
675  0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C,
676  0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078,
677  0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA,
678  0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE,
679  0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B,
680  0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E,
681  0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1,
682  0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062,
683  0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E,
684  0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048,
685  0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD,
686  0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD,
687  0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7,
688  0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033,
689  0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2,
690  0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054,
691  0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E,
692  0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090,
693  0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104,
694  0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0,
695  0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092,
696  0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035,
697  0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5,
698  0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057,
699  0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072,
700  0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049,
701  0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1,
702  0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B,
703  0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA,
704  0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029,
705  0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8,
706  0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047,
707  0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083,
708  0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F,
709  0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED,
710  0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1,
711  0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E,
712  0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F,
713  0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4,
714  0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065,
715  0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B,
716  0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043,
717  0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA,
718  0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8,
719  0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4,
720  0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030,
721  0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE,
722  0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F,
723  0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B,
724  0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084,
725  0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9,
726  0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0,
727  0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098,
728  0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039,
729  0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD,
730  0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E,
731  0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079,
732  0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059,
733  0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7,
734  0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036,
735  0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1,
736  0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xD125
737 };
738 
739 static const UINT16 HuffTableLOM[512] = {
740  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
741  0x2001, 0x4006, 0x3004, 0x700D, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B,
742  0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x8012, 0x2001, 0x4000, 0x3002, 0x4008,
743  0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x7010,
744  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009,
745  0x2001, 0x4006, 0x3004, 0x9018, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
746  0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700E, 0x2001, 0x4000, 0x3002, 0x4008,
747  0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9013,
748  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
749  0x2001, 0x4006, 0x3004, 0x800F, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C,
750  0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901C, 0x2001, 0x4000, 0x3002, 0x4008,
751  0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700D,
752  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009,
753  0x2001, 0x4006, 0x3004, 0x8015, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
754  0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x7010, 0x2001, 0x4000, 0x3002, 0x4008,
755  0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901A,
756  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
757  0x2001, 0x4006, 0x3004, 0x700E, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B,
758  0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9016, 0x2001, 0x4000, 0x3002, 0x4008,
759  0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x8011,
760  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009,
761  0x2001, 0x4006, 0x3004, 0x901E, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
762  0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700D, 0x2001, 0x4000, 0x3002, 0x4008,
763  0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x8012,
764  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
765  0x2001, 0x4006, 0x3004, 0x7010, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C,
766  0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9019, 0x2001, 0x4000, 0x3002, 0x4008,
767  0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700E,
768  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009,
769  0x2001, 0x4006, 0x3004, 0x9014, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
770  0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x800F, 0x2001, 0x4000, 0x3002, 0x4008,
771  0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901D,
772  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
773  0x2001, 0x4006, 0x3004, 0x700D, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B,
774  0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x8015, 0x2001, 0x4000, 0x3002, 0x4008,
775  0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x7010,
776  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009,
777  0x2001, 0x4006, 0x3004, 0x901B, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
778  0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700E, 0x2001, 0x4000, 0x3002, 0x4008,
779  0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9017,
780  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
781  0x2001, 0x4006, 0x3004, 0x8011, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C,
782  0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901F
783 };
784 
785 static const BYTE HuffTableMask[39] = {
786  0x11, /* 0 */
787  0x9E, /* 1 */
788  0xA1, /* 2 */
789  0x00, /* 3 */
790  0x00, /* 4 */
791  0x01, /* 5 */
792  0x00, /* 6 */
793  0x03, /* 7 */
794  0x00, /* 8 */
795  0x07, /* 9 */
796  0x00, /* 10 */
797  0x0F, /* 11 */
798  0x00, /* 12 */
799  0x1F, /* 13 */
800  0x00, /* 14 */
801  0x3F, /* 15 */
802  0x00, /* 16 */
803  0x7F, /* 17 */
804  0x00, /* 18 */
805  0xFF, /* 19 */
806  0x00, /* 20 */
807  0xFF, /* 21 */
808  0x01, /* 22 */
809  0xFF, /* 23 */
810  0x03, /* 24 */
811  0xFF, /* 25 */
812  0x07, /* 26 */
813  0xFF, /* 27 */
814  0x0F, /* 28 */
815  0xFF, /* 29 */
816  0x1F, /* 30 */
817  0xFF, /* 31 */
818  0x3F, /* 32 */
819  0xFF, /* 33 */
820  0x7F, /* 34 */
821  0xFF, /* 35 */
822  0xFF, /* 36 */
823  0x00, /* 37 */
824  0x00 /* 38 */
825 };
826 
827 static const BYTE HuffLengthLEC[294] = {
828  6, /* 0 */
829  6, /* 1 */
830  6, /* 2 */
831  7, /* 3 */
832  7, /* 4 */
833  7, /* 5 */
834  7, /* 6 */
835  7, /* 7 */
836  7, /* 8 */
837  7, /* 9 */
838  7, /* 10 */
839  8, /* 11 */
840  8, /* 12 */
841  8, /* 13 */
842  8, /* 14 */
843  8, /* 15 */
844  8, /* 16 */
845  8, /* 17 */
846  9, /* 18 */
847  8, /* 19 */
848  9, /* 20 */
849  9, /* 21 */
850  9, /* 22 */
851  9, /* 23 */
852  8, /* 24 */
853  8, /* 25 */
854  9, /* 26 */
855  9, /* 27 */
856  9, /* 28 */
857  9, /* 29 */
858  9, /* 30 */
859  9, /* 31 */
860  8, /* 32 */
861  9, /* 33 */
862  9, /* 34 */
863  10, /* 35 */
864  9, /* 36 */
865  9, /* 37 */
866  9, /* 38 */
867  9, /* 39 */
868  9, /* 40 */
869  9, /* 41 */
870  9, /* 42 */
871  10, /* 43 */
872  9, /* 44 */
873  10, /* 45 */
874  10, /* 46 */
875  10, /* 47 */
876  9, /* 48 */
877  9, /* 49 */
878  10, /* 50 */
879  9, /* 51 */
880  10, /* 52 */
881  9, /* 53 */
882  10, /* 54 */
883  9, /* 55 */
884  9, /* 56 */
885  9, /* 57 */
886  10, /* 58 */
887  10, /* 59 */
888  9, /* 60 */
889  10, /* 61 */
890  9, /* 62 */
891  9, /* 63 */
892  8, /* 64 */
893  9, /* 65 */
894  9, /* 66 */
895  9, /* 67 */
896  9, /* 68 */
897  10, /* 69 */
898  10, /* 70 */
899  10, /* 71 */
900  9, /* 72 */
901  9, /* 73 */
902  10, /* 74 */
903  10, /* 75 */
904  10, /* 76 */
905  10, /* 77 */
906  10, /* 78 */
907  10, /* 79 */
908  9, /* 80 */
909  9, /* 81 */
910  10, /* 82 */
911  10, /* 83 */
912  10, /* 84 */
913  10, /* 85 */
914  10, /* 86 */
915  10, /* 87 */
916  10, /* 88 */
917  9, /* 89 */
918  10, /* 90 */
919  10, /* 91 */
920  10, /* 92 */
921  10, /* 93 */
922  10, /* 94 */
923  10, /* 95 */
924  8, /* 96 */
925  10, /* 97 */
926  10, /* 98 */
927  10, /* 99 */
928  10, /* 100 */
929  10, /* 101 */
930  10, /* 102 */
931  10, /* 103 */
932  10, /* 104 */
933  10, /* 105 */
934  10, /* 106 */
935  10, /* 107 */
936  10, /* 108 */
937  10, /* 109 */
938  10, /* 110 */
939  10, /* 111 */
940  9, /* 112 */
941  10, /* 113 */
942  10, /* 114 */
943  10, /* 115 */
944  10, /* 116 */
945  10, /* 117 */
946  10, /* 118 */
947  10, /* 119 */
948  9, /* 120 */
949  10, /* 121 */
950  10, /* 122 */
951  10, /* 123 */
952  10, /* 124 */
953  10, /* 125 */
954  10, /* 126 */
955  9, /* 127 */
956  7, /* 128 */
957  9, /* 129 */
958  9, /* 130 */
959  10, /* 131 */
960  9, /* 132 */
961  10, /* 133 */
962  10, /* 134 */
963  10, /* 135 */
964  9, /* 136 */
965  10, /* 137 */
966  10, /* 138 */
967  10, /* 139 */
968  10, /* 140 */
969  10, /* 141 */
970  10, /* 142 */
971  10, /* 143 */
972  9, /* 144 */
973  10, /* 145 */
974  10, /* 146 */
975  10, /* 147 */
976  10, /* 148 */
977  10, /* 149 */
978  10, /* 150 */
979  10, /* 151 */
980  10, /* 152 */
981  10, /* 153 */
982  10, /* 154 */
983  10, /* 155 */
984  10, /* 156 */
985  10, /* 157 */
986  10, /* 158 */
987  10, /* 159 */
988  10, /* 160 */
989  10, /* 161 */
990  10, /* 162 */
991  10, /* 163 */
992  10, /* 164 */
993  10, /* 165 */
994  10, /* 166 */
995  10, /* 167 */
996  10, /* 168 */
997  10, /* 169 */
998  10, /* 170 */
999  13, /* 171 */
1000  10, /* 172 */
1001  10, /* 173 */
1002  10, /* 174 */
1003  10, /* 175 */
1004  10, /* 176 */
1005  10, /* 177 */
1006  11, /* 178 */
1007  10, /* 179 */
1008  10, /* 180 */
1009  10, /* 181 */
1010  10, /* 182 */
1011  10, /* 183 */
1012  10, /* 184 */
1013  10, /* 185 */
1014  10, /* 186 */
1015  10, /* 187 */
1016  10, /* 188 */
1017  10, /* 189 */
1018  10, /* 190 */
1019  10, /* 191 */
1020  9, /* 192 */
1021  10, /* 193 */
1022  10, /* 194 */
1023  10, /* 195 */
1024  10, /* 196 */
1025  10, /* 197 */
1026  9, /* 198 */
1027  10, /* 199 */
1028  10, /* 200 */
1029  10, /* 201 */
1030  10, /* 202 */
1031  10, /* 203 */
1032  9, /* 204 */
1033  10, /* 205 */
1034  10, /* 206 */
1035  10, /* 207 */
1036  9, /* 208 */
1037  10, /* 209 */
1038  10, /* 210 */
1039  10, /* 211 */
1040  10, /* 212 */
1041  10, /* 213 */
1042  10, /* 214 */
1043  10, /* 215 */
1044  10, /* 216 */
1045  10, /* 217 */
1046  10, /* 218 */
1047  10, /* 219 */
1048  10, /* 220 */
1049  10, /* 221 */
1050  10, /* 222 */
1051  10, /* 223 */
1052  9, /* 224 */
1053  10, /* 225 */
1054  10, /* 226 */
1055  10, /* 227 */
1056  10, /* 228 */
1057  10, /* 229 */
1058  10, /* 230 */
1059  10, /* 231 */
1060  10, /* 232 */
1061  10, /* 233 */
1062  10, /* 234 */
1063  10, /* 235 */
1064  10, /* 236 */
1065  10, /* 237 */
1066  9, /* 238 */
1067  10, /* 239 */
1068  8, /* 240 */
1069  9, /* 241 */
1070  9, /* 242 */
1071  10, /* 243 */
1072  9, /* 244 */
1073  10, /* 245 */
1074  10, /* 246 */
1075  10, /* 247 */
1076  9, /* 248 */
1077  10, /* 249 */
1078  10, /* 250 */
1079  10, /* 251 */
1080  9, /* 252 */
1081  9, /* 253 */
1082  8, /* 254 */
1083  7, /* 255 */
1084  13, /* 256 */
1085  13, /* 257 */
1086  7, /* 258 */
1087  7, /* 259 */
1088  10, /* 260 */
1089  7, /* 261 */
1090  7, /* 262 */
1091  6, /* 263 */
1092  6, /* 264 */
1093  6, /* 265 */
1094  6, /* 266 */
1095  5, /* 267 */
1096  6, /* 268 */
1097  6, /* 269 */
1098  6, /* 270 */
1099  5, /* 271 */
1100  6, /* 272 */
1101  5, /* 273 */
1102  6, /* 274 */
1103  6, /* 275 */
1104  6, /* 276 */
1105  6, /* 277 */
1106  6, /* 278 */
1107  6, /* 279 */
1108  6, /* 280 */
1109  6, /* 281 */
1110  6, /* 282 */
1111  6, /* 283 */
1112  6, /* 284 */
1113  6, /* 285 */
1114  6, /* 286 */
1115  6, /* 287 */
1116  8, /* 288 */
1117  5, /* 289 */
1118  6, /* 290 */
1119  7, /* 291 */
1120  7, /* 292 */
1121  13 /* 293 */
1122 };
1123 
1124 static const BYTE HuffCodeLEC[588] = {
1125  0x04, /* 0 */
1126  0x00, /* 1 */
1127  0x24, /* 2 */
1128  0x00, /* 3 */
1129  0x14, /* 4 */
1130  0x00, /* 5 */
1131  0x11, /* 6 */
1132  0x00, /* 7 */
1133  0x51, /* 8 */
1134  0x00, /* 9 */
1135  0x31, /* 10 */
1136  0x00, /* 11 */
1137  0x71, /* 12 */
1138  0x00, /* 13 */
1139  0x09, /* 14 */
1140  0x00, /* 15 */
1141  0x49, /* 16 */
1142  0x00, /* 17 */
1143  0x29, /* 18 */
1144  0x00, /* 19 */
1145  0x69, /* 20 */
1146  0x00, /* 21 */
1147  0x15, /* 22 */
1148  0x00, /* 23 */
1149  0x95, /* 24 */
1150  0x00, /* 25 */
1151  0x55, /* 26 */
1152  0x00, /* 27 */
1153  0xD5, /* 28 */
1154  0x00, /* 29 */
1155  0x35, /* 30 */
1156  0x00, /* 31 */
1157  0xB5, /* 32 */
1158  0x00, /* 33 */
1159  0x75, /* 34 */
1160  0x00, /* 35 */
1161  0x1D, /* 36 */
1162  0x00, /* 37 */
1163  0xF5, /* 38 */
1164  0x00, /* 39 */
1165  0x1D, /* 40 */
1166  0x01, /* 41 */
1167  0x9D, /* 42 */
1168  0x00, /* 43 */
1169  0x9D, /* 44 */
1170  0x01, /* 45 */
1171  0x5D, /* 46 */
1172  0x00, /* 47 */
1173  0x0D, /* 48 */
1174  0x00, /* 49 */
1175  0x8D, /* 50 */
1176  0x00, /* 51 */
1177  0x5D, /* 52 */
1178  0x01, /* 53 */
1179  0xDD, /* 54 */
1180  0x00, /* 55 */
1181  0xDD, /* 56 */
1182  0x01, /* 57 */
1183  0x3D, /* 58 */
1184  0x00, /* 59 */
1185  0x3D, /* 60 */
1186  0x01, /* 61 */
1187  0xBD, /* 62 */
1188  0x00, /* 63 */
1189  0x4D, /* 64 */
1190  0x00, /* 65 */
1191  0xBD, /* 66 */
1192  0x01, /* 67 */
1193  0x7D, /* 68 */
1194  0x00, /* 69 */
1195  0x6B, /* 70 */
1196  0x00, /* 71 */
1197  0x7D, /* 72 */
1198  0x01, /* 73 */
1199  0xFD, /* 74 */
1200  0x00, /* 75 */
1201  0xFD, /* 76 */
1202  0x01, /* 77 */
1203  0x03, /* 78 */
1204  0x00, /* 79 */
1205  0x03, /* 80 */
1206  0x01, /* 81 */
1207  0x83, /* 82 */
1208  0x00, /* 83 */
1209  0x83, /* 84 */
1210  0x01, /* 85 */
1211  0x6B, /* 86 */
1212  0x02, /* 87 */
1213  0x43, /* 88 */
1214  0x00, /* 89 */
1215  0x6B, /* 90 */
1216  0x01, /* 91 */
1217  0x6B, /* 92 */
1218  0x03, /* 93 */
1219  0xEB, /* 94 */
1220  0x00, /* 95 */
1221  0x43, /* 96 */
1222  0x01, /* 97 */
1223  0xC3, /* 98 */
1224  0x00, /* 99 */
1225  0xEB, /* 100 */
1226  0x02, /* 101 */
1227  0xC3, /* 102 */
1228  0x01, /* 103 */
1229  0xEB, /* 104 */
1230  0x01, /* 105 */
1231  0x23, /* 106 */
1232  0x00, /* 107 */
1233  0xEB, /* 108 */
1234  0x03, /* 109 */
1235  0x23, /* 110 */
1236  0x01, /* 111 */
1237  0xA3, /* 112 */
1238  0x00, /* 113 */
1239  0xA3, /* 114 */
1240  0x01, /* 115 */
1241  0x1B, /* 116 */
1242  0x00, /* 117 */
1243  0x1B, /* 118 */
1244  0x02, /* 119 */
1245  0x63, /* 120 */
1246  0x00, /* 121 */
1247  0x1B, /* 122 */
1248  0x01, /* 123 */
1249  0x63, /* 124 */
1250  0x01, /* 125 */
1251  0xE3, /* 126 */
1252  0x00, /* 127 */
1253  0xCD, /* 128 */
1254  0x00, /* 129 */
1255  0xE3, /* 130 */
1256  0x01, /* 131 */
1257  0x13, /* 132 */
1258  0x00, /* 133 */
1259  0x13, /* 134 */
1260  0x01, /* 135 */
1261  0x93, /* 136 */
1262  0x00, /* 137 */
1263  0x1B, /* 138 */
1264  0x03, /* 139 */
1265  0x9B, /* 140 */
1266  0x00, /* 141 */
1267  0x9B, /* 142 */
1268  0x02, /* 143 */
1269  0x93, /* 144 */
1270  0x01, /* 145 */
1271  0x53, /* 146 */
1272  0x00, /* 147 */
1273  0x9B, /* 148 */
1274  0x01, /* 149 */
1275  0x9B, /* 150 */
1276  0x03, /* 151 */
1277  0x5B, /* 152 */
1278  0x00, /* 153 */
1279  0x5B, /* 154 */
1280  0x02, /* 155 */
1281  0x5B, /* 156 */
1282  0x01, /* 157 */
1283  0x5B, /* 158 */
1284  0x03, /* 159 */
1285  0x53, /* 160 */
1286  0x01, /* 161 */
1287  0xD3, /* 162 */
1288  0x00, /* 163 */
1289  0xDB, /* 164 */
1290  0x00, /* 165 */
1291  0xDB, /* 166 */
1292  0x02, /* 167 */
1293  0xDB, /* 168 */
1294  0x01, /* 169 */
1295  0xDB, /* 170 */
1296  0x03, /* 171 */
1297  0x3B, /* 172 */
1298  0x00, /* 173 */
1299  0x3B, /* 174 */
1300  0x02, /* 175 */
1301  0x3B, /* 176 */
1302  0x01, /* 177 */
1303  0xD3, /* 178 */
1304  0x01, /* 179 */
1305  0x3B, /* 180 */
1306  0x03, /* 181 */
1307  0xBB, /* 182 */
1308  0x00, /* 183 */
1309  0xBB, /* 184 */
1310  0x02, /* 185 */
1311  0xBB, /* 186 */
1312  0x01, /* 187 */
1313  0xBB, /* 188 */
1314  0x03, /* 189 */
1315  0x7B, /* 190 */
1316  0x00, /* 191 */
1317  0x2D, /* 192 */
1318  0x00, /* 193 */
1319  0x7B, /* 194 */
1320  0x02, /* 195 */
1321  0x7B, /* 196 */
1322  0x01, /* 197 */
1323  0x7B, /* 198 */
1324  0x03, /* 199 */
1325  0xFB, /* 200 */
1326  0x00, /* 201 */
1327  0xFB, /* 202 */
1328  0x02, /* 203 */
1329  0xFB, /* 204 */
1330  0x01, /* 205 */
1331  0xFB, /* 206 */
1332  0x03, /* 207 */
1333  0x07, /* 208 */
1334  0x00, /* 209 */
1335  0x07, /* 210 */
1336  0x02, /* 211 */
1337  0x07, /* 212 */
1338  0x01, /* 213 */
1339  0x07, /* 214 */
1340  0x03, /* 215 */
1341  0x87, /* 216 */
1342  0x00, /* 217 */
1343  0x87, /* 218 */
1344  0x02, /* 219 */
1345  0x87, /* 220 */
1346  0x01, /* 221 */
1347  0x87, /* 222 */
1348  0x03, /* 223 */
1349  0x33, /* 224 */
1350  0x00, /* 225 */
1351  0x47, /* 226 */
1352  0x00, /* 227 */
1353  0x47, /* 228 */
1354  0x02, /* 229 */
1355  0x47, /* 230 */
1356  0x01, /* 231 */
1357  0x47, /* 232 */
1358  0x03, /* 233 */
1359  0xC7, /* 234 */
1360  0x00, /* 235 */
1361  0xC7, /* 236 */
1362  0x02, /* 237 */
1363  0xC7, /* 238 */
1364  0x01, /* 239 */
1365  0x33, /* 240 */
1366  0x01, /* 241 */
1367  0xC7, /* 242 */
1368  0x03, /* 243 */
1369  0x27, /* 244 */
1370  0x00, /* 245 */
1371  0x27, /* 246 */
1372  0x02, /* 247 */
1373  0x27, /* 248 */
1374  0x01, /* 249 */
1375  0x27, /* 250 */
1376  0x03, /* 251 */
1377  0xA7, /* 252 */
1378  0x00, /* 253 */
1379  0xB3, /* 254 */
1380  0x00, /* 255 */
1381  0x19, /* 256 */
1382  0x00, /* 257 */
1383  0xB3, /* 258 */
1384  0x01, /* 259 */
1385  0x73, /* 260 */
1386  0x00, /* 261 */
1387  0xA7, /* 262 */
1388  0x02, /* 263 */
1389  0x73, /* 264 */
1390  0x01, /* 265 */
1391  0xA7, /* 266 */
1392  0x01, /* 267 */
1393  0xA7, /* 268 */
1394  0x03, /* 269 */
1395  0x67, /* 270 */
1396  0x00, /* 271 */
1397  0xF3, /* 272 */
1398  0x00, /* 273 */
1399  0x67, /* 274 */
1400  0x02, /* 275 */
1401  0x67, /* 276 */
1402  0x01, /* 277 */
1403  0x67, /* 278 */
1404  0x03, /* 279 */
1405  0xE7, /* 280 */
1406  0x00, /* 281 */
1407  0xE7, /* 282 */
1408  0x02, /* 283 */
1409  0xE7, /* 284 */
1410  0x01, /* 285 */
1411  0xE7, /* 286 */
1412  0x03, /* 287 */
1413  0xF3, /* 288 */
1414  0x01, /* 289 */
1415  0x17, /* 290 */
1416  0x00, /* 291 */
1417  0x17, /* 292 */
1418  0x02, /* 293 */
1419  0x17, /* 294 */
1420  0x01, /* 295 */
1421  0x17, /* 296 */
1422  0x03, /* 297 */
1423  0x97, /* 298 */
1424  0x00, /* 299 */
1425  0x97, /* 300 */
1426  0x02, /* 301 */
1427  0x97, /* 302 */
1428  0x01, /* 303 */
1429  0x97, /* 304 */
1430  0x03, /* 305 */
1431  0x57, /* 306 */
1432  0x00, /* 307 */
1433  0x57, /* 308 */
1434  0x02, /* 309 */
1435  0x57, /* 310 */
1436  0x01, /* 311 */
1437  0x57, /* 312 */
1438  0x03, /* 313 */
1439  0xD7, /* 314 */
1440  0x00, /* 315 */
1441  0xD7, /* 316 */
1442  0x02, /* 317 */
1443  0xD7, /* 318 */
1444  0x01, /* 319 */
1445  0xD7, /* 320 */
1446  0x03, /* 321 */
1447  0x37, /* 322 */
1448  0x00, /* 323 */
1449  0x37, /* 324 */
1450  0x02, /* 325 */
1451  0x37, /* 326 */
1452  0x01, /* 327 */
1453  0x37, /* 328 */
1454  0x03, /* 329 */
1455  0xB7, /* 330 */
1456  0x00, /* 331 */
1457  0xB7, /* 332 */
1458  0x02, /* 333 */
1459  0xB7, /* 334 */
1460  0x01, /* 335 */
1461  0xB7, /* 336 */
1462  0x03, /* 337 */
1463  0x77, /* 338 */
1464  0x00, /* 339 */
1465  0x77, /* 340 */
1466  0x02, /* 341 */
1467  0xFF, /* 342 */
1468  0x07, /* 343 */
1469  0x77, /* 344 */
1470  0x01, /* 345 */
1471  0x77, /* 346 */
1472  0x03, /* 347 */
1473  0xF7, /* 348 */
1474  0x00, /* 349 */
1475  0xF7, /* 350 */
1476  0x02, /* 351 */
1477  0xF7, /* 352 */
1478  0x01, /* 353 */
1479  0xF7, /* 354 */
1480  0x03, /* 355 */
1481  0xFF, /* 356 */
1482  0x03, /* 357 */
1483  0x0F, /* 358 */
1484  0x00, /* 359 */
1485  0x0F, /* 360 */
1486  0x02, /* 361 */
1487  0x0F, /* 362 */
1488  0x01, /* 363 */
1489  0x0F, /* 364 */
1490  0x03, /* 365 */
1491  0x8F, /* 366 */
1492  0x00, /* 367 */
1493  0x8F, /* 368 */
1494  0x02, /* 369 */
1495  0x8F, /* 370 */
1496  0x01, /* 371 */
1497  0x8F, /* 372 */
1498  0x03, /* 373 */
1499  0x4F, /* 374 */
1500  0x00, /* 375 */
1501  0x4F, /* 376 */
1502  0x02, /* 377 */
1503  0x4F, /* 378 */
1504  0x01, /* 379 */
1505  0x4F, /* 380 */
1506  0x03, /* 381 */
1507  0xCF, /* 382 */
1508  0x00, /* 383 */
1509  0x0B, /* 384 */
1510  0x00, /* 385 */
1511  0xCF, /* 386 */
1512  0x02, /* 387 */
1513  0xCF, /* 388 */
1514  0x01, /* 389 */
1515  0xCF, /* 390 */
1516  0x03, /* 391 */
1517  0x2F, /* 392 */
1518  0x00, /* 393 */
1519  0x2F, /* 394 */
1520  0x02, /* 395 */
1521  0x0B, /* 396 */
1522  0x01, /* 397 */
1523  0x2F, /* 398 */
1524  0x01, /* 399 */
1525  0x2F, /* 400 */
1526  0x03, /* 401 */
1527  0xAF, /* 402 */
1528  0x00, /* 403 */
1529  0xAF, /* 404 */
1530  0x02, /* 405 */
1531  0xAF, /* 406 */
1532  0x01, /* 407 */
1533  0x8B, /* 408 */
1534  0x00, /* 409 */
1535  0xAF, /* 410 */
1536  0x03, /* 411 */
1537  0x6F, /* 412 */
1538  0x00, /* 413 */
1539  0x6F, /* 414 */
1540  0x02, /* 415 */
1541  0x8B, /* 416 */
1542  0x01, /* 417 */
1543  0x6F, /* 418 */
1544  0x01, /* 419 */
1545  0x6F, /* 420 */
1546  0x03, /* 421 */
1547  0xEF, /* 422 */
1548  0x00, /* 423 */
1549  0xEF, /* 424 */
1550  0x02, /* 425 */
1551  0xEF, /* 426 */
1552  0x01, /* 427 */
1553  0xEF, /* 428 */
1554  0x03, /* 429 */
1555  0x1F, /* 430 */
1556  0x00, /* 431 */
1557  0x1F, /* 432 */
1558  0x02, /* 433 */
1559  0x1F, /* 434 */
1560  0x01, /* 435 */
1561  0x1F, /* 436 */
1562  0x03, /* 437 */
1563  0x9F, /* 438 */
1564  0x00, /* 439 */
1565  0x9F, /* 440 */
1566  0x02, /* 441 */
1567  0x9F, /* 442 */
1568  0x01, /* 443 */
1569  0x9F, /* 444 */
1570  0x03, /* 445 */
1571  0x5F, /* 446 */
1572  0x00, /* 447 */
1573  0x4B, /* 448 */
1574  0x00, /* 449 */
1575  0x5F, /* 450 */
1576  0x02, /* 451 */
1577  0x5F, /* 452 */
1578  0x01, /* 453 */
1579  0x5F, /* 454 */
1580  0x03, /* 455 */
1581  0xDF, /* 456 */
1582  0x00, /* 457 */
1583  0xDF, /* 458 */
1584  0x02, /* 459 */
1585  0xDF, /* 460 */
1586  0x01, /* 461 */
1587  0xDF, /* 462 */
1588  0x03, /* 463 */
1589  0x3F, /* 464 */
1590  0x00, /* 465 */
1591  0x3F, /* 466 */
1592  0x02, /* 467 */
1593  0x3F, /* 468 */
1594  0x01, /* 469 */
1595  0x3F, /* 470 */
1596  0x03, /* 471 */
1597  0xBF, /* 472 */
1598  0x00, /* 473 */
1599  0xBF, /* 474 */
1600  0x02, /* 475 */
1601  0x4B, /* 476 */
1602  0x01, /* 477 */
1603  0xBF, /* 478 */
1604  0x01, /* 479 */
1605  0xAD, /* 480 */
1606  0x00, /* 481 */
1607  0xCB, /* 482 */
1608  0x00, /* 483 */
1609  0xCB, /* 484 */
1610  0x01, /* 485 */
1611  0xBF, /* 486 */
1612  0x03, /* 487 */
1613  0x2B, /* 488 */
1614  0x00, /* 489 */
1615  0x7F, /* 490 */
1616  0x00, /* 491 */
1617  0x7F, /* 492 */
1618  0x02, /* 493 */
1619  0x7F, /* 494 */
1620  0x01, /* 495 */
1621  0x2B, /* 496 */
1622  0x01, /* 497 */
1623  0x7F, /* 498 */
1624  0x03, /* 499 */
1625  0xFF, /* 500 */
1626  0x00, /* 501 */
1627  0xFF, /* 502 */
1628  0x02, /* 503 */
1629  0xAB, /* 504 */
1630  0x00, /* 505 */
1631  0xAB, /* 506 */
1632  0x01, /* 507 */
1633  0x6D, /* 508 */
1634  0x00, /* 509 */
1635  0x59, /* 510 */
1636  0x00, /* 511 */
1637  0xFF, /* 512 */
1638  0x17, /* 513 */
1639  0xFF, /* 514 */
1640  0x0F, /* 515 */
1641  0x39, /* 516 */
1642  0x00, /* 517 */
1643  0x79, /* 518 */
1644  0x00, /* 519 */
1645  0xFF, /* 520 */
1646  0x01, /* 521 */
1647  0x05, /* 522 */
1648  0x00, /* 523 */
1649  0x45, /* 524 */
1650  0x00, /* 525 */
1651  0x34, /* 526 */
1652  0x00, /* 527 */
1653  0x0C, /* 528 */
1654  0x00, /* 529 */
1655  0x2C, /* 530 */
1656  0x00, /* 531 */
1657  0x1C, /* 532 */
1658  0x00, /* 533 */
1659  0x00, /* 534 */
1660  0x00, /* 535 */
1661  0x3C, /* 536 */
1662  0x00, /* 537 */
1663  0x02, /* 538 */
1664  0x00, /* 539 */
1665  0x22, /* 540 */
1666  0x00, /* 541 */
1667  0x10, /* 542 */
1668  0x00, /* 543 */
1669  0x12, /* 544 */
1670  0x00, /* 545 */
1671  0x08, /* 546 */
1672  0x00, /* 547 */
1673  0x32, /* 548 */
1674  0x00, /* 549 */
1675  0x0A, /* 550 */
1676  0x00, /* 551 */
1677  0x2A, /* 552 */
1678  0x00, /* 553 */
1679  0x1A, /* 554 */
1680  0x00, /* 555 */
1681  0x3A, /* 556 */
1682  0x00, /* 557 */
1683  0x06, /* 558 */
1684  0x00, /* 559 */
1685  0x26, /* 560 */
1686  0x00, /* 561 */
1687  0x16, /* 562 */
1688  0x00, /* 563 */
1689  0x36, /* 564 */
1690  0x00, /* 565 */
1691  0x0E, /* 566 */
1692  0x00, /* 567 */
1693  0x2E, /* 568 */
1694  0x00, /* 569 */
1695  0x1E, /* 570 */
1696  0x00, /* 571 */
1697  0x3E, /* 572 */
1698  0x00, /* 573 */
1699  0x01, /* 574 */
1700  0x00, /* 575 */
1701  0xED, /* 576 */
1702  0x00, /* 577 */
1703  0x18, /* 578 */
1704  0x00, /* 579 */
1705  0x21, /* 580 */
1706  0x00, /* 581 */
1707  0x25, /* 582 */
1708  0x00, /* 583 */
1709  0x65, /* 584 */
1710  0x00, /* 585 */
1711  0xFF, /* 586 */
1712  0x1F /* 587 */
1713 };
1714 
1715 static const BYTE HuffLengthLOM[32] = {
1716  4, /* 0 */
1717  2, /* 1 */
1718  3, /* 2 */
1719  4, /* 3 */
1720  3, /* 4 */
1721  4, /* 5 */
1722  4, /* 6 */
1723  5, /* 7 */
1724  4, /* 8 */
1725  5, /* 9 */
1726  5, /* 10 */
1727  6, /* 11 */
1728  6, /* 12 */
1729  7, /* 13 */
1730  7, /* 14 */
1731  8, /* 15 */
1732  7, /* 16 */
1733  8, /* 17 */
1734  8, /* 18 */
1735  9, /* 19 */
1736  9, /* 20 */
1737  8, /* 21 */
1738  9, /* 22 */
1739  9, /* 23 */
1740  9, /* 24 */
1741  9, /* 25 */
1742  9, /* 26 */
1743  9, /* 27 */
1744  9, /* 28 */
1745  9, /* 29 */
1746  9, /* 30 */
1747  9 /* 31 */
1748 };
1749 
1750 static const UINT16 HuffCodeLOM[32] = {
1751  0x0001, /* 0 */
1752  0x0000, /* 1 */
1753  0x0002, /* 2 */
1754  0x0009, /* 3 */
1755  0x0006, /* 4 */
1756  0x0005, /* 5 */
1757  0x000D, /* 6 */
1758  0x000B, /* 7 */
1759  0x0003, /* 8 */
1760  0x001B, /* 9 */
1761  0x0007, /* 10 */
1762  0x0017, /* 11 */
1763  0x0037, /* 12 */
1764  0x000F, /* 13 */
1765  0x004F, /* 14 */
1766  0x006F, /* 15 */
1767  0x002F, /* 16 */
1768  0x00EF, /* 17 */
1769  0x001F, /* 18 */
1770  0x005F, /* 19 */
1771  0x015F, /* 20 */
1772  0x009F, /* 21 */
1773  0x00DF, /* 22 */
1774  0x01DF, /* 23 */
1775  0x003F, /* 24 */
1776  0x013F, /* 25 */
1777  0x00BF, /* 26 */
1778  0x01BF, /* 27 */
1779  0x007F, /* 28 */
1780  0x017F, /* 29 */
1781  0x00FF, /* 30 */
1782  0x01FF /* 31 */
1783 };
1784 
1785 static const UINT32 CopyOffsetBitsLUT[32] = {
1786  0x0, /* 0 */
1787  0x0, /* 1 */
1788  0x0, /* 2 */
1789  0x0, /* 3 */
1790  0x1, /* 4 */
1791  0x1, /* 5 */
1792  0x2, /* 6 */
1793  0x2, /* 7 */
1794  0x3, /* 8 */
1795  0x3, /* 9 */
1796  0x4, /* 10 */
1797  0x4, /* 11 */
1798  0x5, /* 12 */
1799  0x5, /* 13 */
1800  0x6, /* 14 */
1801  0x6, /* 15 */
1802  0x7, /* 16 */
1803  0x7, /* 17 */
1804  0x8, /* 18 */
1805  0x8, /* 19 */
1806  0x9, /* 20 */
1807  0x9, /* 21 */
1808  0xA, /* 22 */
1809  0xA, /* 23 */
1810  0xB, /* 24 */
1811  0xB, /* 25 */
1812  0xC, /* 26 */
1813  0xC, /* 27 */
1814  0xD, /* 28 */
1815  0xD, /* 29 */
1816  0xE, /* 30 */
1817  0xE /* 31 */
1818 };
1819 
1820 static const UINT32 CopyOffsetBaseLUT[32] = {
1821  0x1, /* 0 */
1822  0x2, /* 1 */
1823  0x3, /* 2 */
1824  0x4, /* 3 */
1825  0x5, /* 4 */
1826  0x7, /* 5 */
1827  0x9, /* 6 */
1828  0xD, /* 7 */
1829  0x11, /* 8 */
1830  0x19, /* 9 */
1831  0x21, /* 10 */
1832  0x31, /* 11 */
1833  0x41, /* 12 */
1834  0x61, /* 13 */
1835  0x81, /* 14 */
1836  0xC1, /* 15 */
1837  0x101, /* 16 */
1838  0x181, /* 17 */
1839  0x201, /* 18 */
1840  0x301, /* 19 */
1841  0x401, /* 20 */
1842  0x601, /* 21 */
1843  0x801, /* 22 */
1844  0xC01, /* 23 */
1845  0x1001, /* 24 */
1846  0x1801, /* 25 */
1847  0x2001, /* 26 */
1848  0x3001, /* 27 */
1849  0x4001, /* 28 */
1850  0x6001, /* 29 */
1851  0x8001, /* 30 */
1852  0xC001 /* 31 */
1853 };
1854 
1855 static const UINT32 LOMBitsLUT[30] = {
1856  0x0, /* 0 */
1857  0x0, /* 1 */
1858  0x0, /* 2 */
1859  0x0, /* 3 */
1860  0x0, /* 4 */
1861  0x0, /* 5 */
1862  0x0, /* 6 */
1863  0x0, /* 7 */
1864  0x1, /* 8 */
1865  0x1, /* 9 */
1866  0x1, /* 10 */
1867  0x1, /* 11 */
1868  0x2, /* 12 */
1869  0x2, /* 13 */
1870  0x2, /* 14 */
1871  0x2, /* 15 */
1872  0x3, /* 16 */
1873  0x3, /* 17 */
1874  0x3, /* 18 */
1875  0x3, /* 19 */
1876  0x4, /* 20 */
1877  0x4, /* 21 */
1878  0x4, /* 22 */
1879  0x4, /* 23 */
1880  0x6, /* 24 */
1881  0x6, /* 25 */
1882  0x8, /* 26 */
1883  0x8, /* 27 */
1884  0xE, /* 28 */
1885  0xE /* 29 */
1886 };
1887 
1888 static const UINT32 LOMBaseLUT[30] = {
1889  0x2, /* 0 */
1890  0x3, /* 1 */
1891  0x4, /* 2 */
1892  0x5, /* 3 */
1893  0x6, /* 4 */
1894  0x7, /* 5 */
1895  0x8, /* 6 */
1896  0x9, /* 7 */
1897  0xA, /* 8 */
1898  0xC, /* 9 */
1899  0xE, /* 10 */
1900  0x10, /* 11 */
1901  0x12, /* 12 */
1902  0x16, /* 13 */
1903  0x1A, /* 14 */
1904  0x1E, /* 15 */
1905  0x22, /* 16 */
1906  0x2A, /* 17 */
1907  0x32, /* 18 */
1908  0x3A, /* 19 */
1909  0x42, /* 20 */
1910  0x52, /* 21 */
1911  0x62, /* 22 */
1912  0x72, /* 23 */
1913  0x82, /* 24 */
1914  0xC2, /* 25 */
1915  0x102, /* 26 */
1916  0x202, /* 27 */
1917  0x2, /* 28 */
1918  0x2 /* 29 */
1919 };
1920 
1921 static INLINE UINT16 get_word(const BYTE* data)
1922 {
1923  UINT16 tmp = 0;
1924 
1925  WINPR_ASSERT(data);
1926  tmp = *data++;
1927  tmp |= *data << 8;
1928  return tmp;
1929 }
1930 
1931 static INLINE UINT32 get_dword(const BYTE* data)
1932 {
1933  UINT32 tmp = 0;
1934  WINPR_ASSERT(data);
1935  tmp = *data++;
1936  tmp |= (UINT32)*data++ << 8U;
1937  tmp |= (UINT32)*data++ << 16U;
1938  tmp |= (UINT32)*data++ << 24U;
1939  return tmp;
1940 }
1941 
1942 static INLINE BOOL NCrushFetchBits(const BYTE** SrcPtr, const BYTE** SrcEnd, INT32* nbits,
1943  UINT32* bits)
1944 {
1945  WINPR_ASSERT(SrcPtr);
1946  WINPR_ASSERT(SrcEnd);
1947  WINPR_ASSERT(nbits);
1948  WINPR_ASSERT(bits);
1949 
1950  if (*nbits < 16)
1951  {
1952  if ((*SrcPtr + 1) >= *SrcEnd)
1953  {
1954  if (*SrcPtr >= *SrcEnd)
1955  {
1956  if (*nbits < 0)
1957  return FALSE;
1958  }
1959  else
1960  {
1961  *bits += *(*SrcPtr)++ << *nbits;
1962  *nbits += 8;
1963  }
1964  }
1965  else
1966  {
1967  UINT16 tmp = *(*SrcPtr)++;
1968  tmp |= (*(*SrcPtr)++) << 8;
1969  *bits += tmp << *nbits;
1970  *nbits += 16;
1971  }
1972  }
1973 
1974  return TRUE;
1975 }
1976 
1977 static INLINE void NCrushWriteStart(UINT32* bits, UINT32* offset, UINT32* accumulator)
1978 {
1979  WINPR_ASSERT(bits);
1980  WINPR_ASSERT(offset);
1981  WINPR_ASSERT(accumulator);
1982 
1983  *bits = 0;
1984  *offset = 0;
1985  *accumulator = 0;
1986 }
1987 
1988 static INLINE void NCrushWriteBits(BYTE** DstPtr, UINT32* accumulator, UINT32* offset, UINT32 _bits,
1989  UINT32 _nbits)
1990 {
1991  WINPR_ASSERT(DstPtr);
1992  WINPR_ASSERT(accumulator);
1993  WINPR_ASSERT(offset);
1994 
1995  *accumulator |= _bits << *offset;
1996  *offset += _nbits;
1997 
1998  if (*offset >= 16)
1999  {
2000  *(*DstPtr)++ = (*accumulator & 0xFF);
2001  *(*DstPtr)++ = ((*accumulator >> 8) & 0xFF);
2002  *accumulator >>= 16;
2003  *offset -= 16;
2004  }
2005 }
2006 
2007 static INLINE void NCrushWriteFinish(BYTE** DstPtr, UINT32 accumulator)
2008 {
2009  WINPR_ASSERT(DstPtr);
2010 
2011  *(*DstPtr)++ = accumulator & 0xFF;
2012  *(*DstPtr)++ = (accumulator >> 8) & 0xFF;
2013 }
2014 
2015 int ncrush_decompress(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize,
2016  const BYTE** ppDstData, UINT32* pDstSize, UINT32 flags)
2017 {
2018  UINT32 index = 0;
2019  BYTE Literal = 0;
2020  UINT32 IndexLEC = 0;
2021  UINT32 BitLength = 0;
2022  UINT32 CopyOffset = 0;
2023  UINT32 CopyLength = 0;
2024  UINT32 OldCopyOffset = 0;
2025  const BYTE* CopyOffsetPtr = NULL;
2026  UINT32 LengthOfMatch = 0;
2027  UINT32 CopyOffsetIndex = 0;
2028  UINT32 OffsetCacheIndex = 0;
2029  UINT32 CopyOffsetBits = 0;
2030  UINT32 CopyOffsetBase = 0;
2031  UINT32 LengthOfMatchBits = 0;
2032  UINT32 LengthOfMatchBase = 0;
2033 
2034  WINPR_ASSERT(ncrush);
2035  WINPR_ASSERT(pSrcData);
2036  WINPR_ASSERT(ppDstData);
2037  WINPR_ASSERT(pDstSize);
2038 
2039  if (ncrush->HistoryEndOffset != 65535)
2040  return -1001;
2041 
2042  BYTE* HistoryBuffer = ncrush->HistoryBuffer;
2043  const BYTE* HistoryBufferEnd = &HistoryBuffer[ncrush->HistoryEndOffset];
2044 
2045  if (flags & PACKET_AT_FRONT)
2046  {
2047  if ((ncrush->HistoryPtr - 32768) <= HistoryBuffer)
2048  return -1002;
2049 
2050  MoveMemory(HistoryBuffer, (ncrush->HistoryPtr - 32768), 32768);
2051  ncrush->HistoryPtr = &(HistoryBuffer[32768]);
2052  ZeroMemory(&HistoryBuffer[32768], 32768);
2053  }
2054 
2055  if (flags & PACKET_FLUSHED)
2056  {
2057  ncrush->HistoryPtr = HistoryBuffer;
2058  ZeroMemory(HistoryBuffer, sizeof(ncrush->HistoryBuffer));
2059  ZeroMemory(&(ncrush->OffsetCache), sizeof(ncrush->OffsetCache));
2060  }
2061 
2062  BYTE* HistoryPtr = ncrush->HistoryPtr;
2063 
2064  if (!(flags & PACKET_COMPRESSED))
2065  {
2066  *ppDstData = pSrcData;
2067  *pDstSize = SrcSize;
2068  return 1;
2069  }
2070 
2071  if (SrcSize < 4)
2072  {
2073  WLog_ERR(TAG, "Input size short: SrcSize %" PRIu32 " < 4", SrcSize);
2074  return -1;
2075  }
2076 
2077  const BYTE* SrcEnd = &pSrcData[SrcSize];
2078  const BYTE* SrcPtr = pSrcData + 4;
2079 
2080  INT32 nbits = 32;
2081  UINT32 bits = get_dword(pSrcData);
2082  while (1)
2083  {
2084  while (1)
2085  {
2086  const UINT16 Mask = get_word(&HuffTableMask[29]);
2087  const UINT32 MaskedBits = bits & Mask;
2088  if (MaskedBits >= ARRAYSIZE(HuffTableLEC))
2089  return -1;
2090  IndexLEC = HuffTableLEC[MaskedBits] & 0xFFF;
2091  BitLength = HuffTableLEC[MaskedBits] >> 12;
2092  bits >>= BitLength;
2093  nbits -= BitLength;
2094 
2095  if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2096  return -1;
2097 
2098  if (IndexLEC >= 256)
2099  break;
2100 
2101  if (HistoryPtr >= HistoryBufferEnd)
2102  {
2103  WLog_ERR(TAG, "ncrush_decompress error: HistoryPtr (%p) >= HistoryBufferEnd (%p)",
2104  (const void*)HistoryPtr, (const void*)HistoryBufferEnd);
2105  return -1003;
2106  }
2107 
2108  Literal = (HuffTableLEC[MaskedBits] & 0xFF);
2109  *HistoryPtr++ = Literal;
2110  }
2111 
2112  if (IndexLEC == 256)
2113  break; /* EOS */
2114 
2115  CopyOffsetIndex = IndexLEC - 257;
2116 
2117  if (CopyOffsetIndex >= 32)
2118  {
2119  OffsetCacheIndex = IndexLEC - 289;
2120 
2121  if (OffsetCacheIndex >= 4)
2122  return -1004;
2123 
2124  {
2125  CopyOffset = ncrush->OffsetCache[OffsetCacheIndex];
2126  const UINT16 Mask = get_word(&HuffTableMask[21]);
2127  const UINT32 MaskedBits = bits & Mask;
2128  if (MaskedBits >= ARRAYSIZE(HuffTableLOM))
2129  return -1;
2130  LengthOfMatch = HuffTableLOM[MaskedBits] & 0xFFF;
2131  BitLength = HuffTableLOM[MaskedBits] >> 12;
2132  bits >>= BitLength;
2133  nbits -= BitLength;
2134  }
2135 
2136  if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2137  return -1;
2138 
2139  if (LengthOfMatch >= ARRAYSIZE(LOMBitsLUT))
2140  return -1;
2141 
2142  LengthOfMatchBits = LOMBitsLUT[LengthOfMatch];
2143 
2144  if (LengthOfMatch >= ARRAYSIZE(LOMBaseLUT))
2145  return -1;
2146  LengthOfMatchBase = LOMBaseLUT[LengthOfMatch];
2147 
2148  if (LengthOfMatchBits)
2149  {
2150  const size_t idx = (2ull * LengthOfMatchBits) + 3ull;
2151  if (idx >= ARRAYSIZE(HuffTableMask))
2152  return -1;
2153 
2154  const UINT16 Mask = get_word(&HuffTableMask[idx]);
2155  const UINT32 MaskedBits = bits & Mask;
2156  bits >>= LengthOfMatchBits;
2157  nbits -= LengthOfMatchBits;
2158  LengthOfMatchBase += MaskedBits;
2159 
2160  if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2161  return -1;
2162  }
2163 
2164  OldCopyOffset = ncrush->OffsetCache[OffsetCacheIndex];
2165  ncrush->OffsetCache[OffsetCacheIndex] = ncrush->OffsetCache[0];
2166  ncrush->OffsetCache[0] = OldCopyOffset;
2167  }
2168  else
2169  {
2170  if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBitsLUT))
2171  return -1;
2172 
2173  CopyOffsetBits = CopyOffsetBitsLUT[CopyOffsetIndex];
2174 
2175  if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBaseLUT))
2176  return -1;
2177  CopyOffsetBase = CopyOffsetBaseLUT[CopyOffsetIndex];
2178  CopyOffset = CopyOffsetBase - 1;
2179 
2180  if (CopyOffsetBits)
2181  {
2182  const size_t idx = (2ull * CopyOffsetBits) + 3ull;
2183  if (idx >= ARRAYSIZE(HuffTableMask))
2184  return -1;
2185 
2186  {
2187  const UINT16 Mask = get_word(&HuffTableMask[idx]);
2188  const UINT32 MaskedBits = bits & Mask;
2189  const UINT32 tmp = CopyOffsetBase + MaskedBits;
2190  if (tmp < 1)
2191  return -1;
2192  CopyOffset = tmp - 1;
2193  }
2194  bits >>= CopyOffsetBits;
2195  nbits -= CopyOffsetBits;
2196 
2197  if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2198  return -1;
2199  }
2200  {
2201  const UINT16 Mask = get_word(&HuffTableMask[21]);
2202  const UINT32 MaskedBits = bits & Mask;
2203  if (MaskedBits >= ARRAYSIZE(HuffTableLOM))
2204  return -1;
2205 
2206  LengthOfMatch = HuffTableLOM[MaskedBits] & 0xFFF;
2207  BitLength = HuffTableLOM[MaskedBits] >> 12;
2208  bits >>= BitLength;
2209  nbits -= BitLength;
2210  }
2211  if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2212  return -1;
2213 
2214  if (LengthOfMatch >= ARRAYSIZE(LOMBitsLUT))
2215  return -1;
2216 
2217  LengthOfMatchBits = LOMBitsLUT[LengthOfMatch];
2218 
2219  if (LengthOfMatch >= ARRAYSIZE(LOMBaseLUT))
2220  return -1;
2221  LengthOfMatchBase = LOMBaseLUT[LengthOfMatch];
2222 
2223  if (LengthOfMatchBits)
2224  {
2225  const size_t idx = (2ull * LengthOfMatchBits) + 3ull;
2226  if (idx >= ARRAYSIZE(HuffTableMask))
2227  return -1;
2228 
2229  const UINT16 Mask = get_word(&HuffTableMask[idx]);
2230  const UINT32 MaskedBits = bits & Mask;
2231  bits >>= LengthOfMatchBits;
2232  nbits -= LengthOfMatchBits;
2233  LengthOfMatchBase += MaskedBits;
2234 
2235  if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2236  return -1;
2237  }
2238 
2239  ncrush->OffsetCache[3] = ncrush->OffsetCache[2];
2240  ncrush->OffsetCache[2] = ncrush->OffsetCache[1];
2241  ncrush->OffsetCache[1] = ncrush->OffsetCache[0];
2242  ncrush->OffsetCache[0] = CopyOffset;
2243  }
2244 
2245  CopyOffsetPtr = &HistoryBuffer[(HistoryPtr - HistoryBuffer - CopyOffset) & 0xFFFF];
2246  LengthOfMatch = LengthOfMatchBase;
2247 
2248  if (LengthOfMatch < 2)
2249  return -1005;
2250 
2251  if ((CopyOffsetPtr >= (HistoryBufferEnd - LengthOfMatch)) ||
2252  (HistoryPtr >= (HistoryBufferEnd - LengthOfMatch)))
2253  return -1006;
2254 
2255  CopyOffsetPtr = HistoryPtr - CopyOffset;
2256  index = 0;
2257  CopyLength = (LengthOfMatch > CopyOffset) ? CopyOffset : LengthOfMatch;
2258 
2259  if (CopyOffsetPtr >= HistoryBuffer)
2260  {
2261  while (CopyLength > 0)
2262  {
2263  *HistoryPtr++ = *CopyOffsetPtr++;
2264  CopyLength--;
2265  }
2266 
2267  while (LengthOfMatch > CopyOffset)
2268  {
2269  index = ((index >= CopyOffset)) ? 0 : index;
2270  *HistoryPtr++ = *(CopyOffsetPtr + index++);
2271  LengthOfMatch--;
2272  }
2273  }
2274  else
2275  {
2276  CopyOffsetPtr = HistoryBufferEnd - (CopyOffset - (HistoryPtr - HistoryBuffer));
2277  CopyOffsetPtr++;
2278 
2279  while (CopyLength && (CopyOffsetPtr <= HistoryBufferEnd))
2280  {
2281  *HistoryPtr++ = *CopyOffsetPtr++;
2282  CopyLength--;
2283  }
2284 
2285  CopyOffsetPtr = HistoryBuffer;
2286 
2287  while (LengthOfMatch > CopyOffset)
2288  {
2289  index = ((index >= CopyOffset)) ? 0 : index;
2290  *HistoryPtr++ = *(CopyOffsetPtr + index++);
2291  LengthOfMatch--;
2292  }
2293  }
2294 
2295  LengthOfMatch = LengthOfMatchBase;
2296 
2297  if (LengthOfMatch == 2)
2298  continue;
2299  }
2300 
2301  if (IndexLEC != 256)
2302  return -1;
2303 
2304  if (ncrush->HistoryBufferFence != 0xABABABAB)
2305  {
2306  WLog_ERR(TAG, "NCrushDecompress: history buffer fence was overwritten, potential buffer "
2307  "overflow detected!");
2308  return -1007;
2309  }
2310 
2311  const intptr_t hsize = HistoryPtr - ncrush->HistoryPtr;
2312  WINPR_ASSERT(hsize >= 0);
2313  WINPR_ASSERT(hsize <= UINT32_MAX);
2314  *pDstSize = (UINT32)hsize;
2315  *ppDstData = ncrush->HistoryPtr;
2316  ncrush->HistoryPtr = HistoryPtr;
2317  return 1;
2318 }
2319 
2320 static int ncrush_hash_table_add(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize,
2321  UINT32 HistoryOffset)
2322 {
2323  const BYTE* SrcPtr = pSrcData;
2324  UINT32 Hash = 0;
2325  UINT32 Offset = HistoryOffset;
2326  UINT32 EndOffset = Offset + SrcSize - 8;
2327 
2328  WINPR_ASSERT(ncrush);
2329  WINPR_ASSERT(pSrcData);
2330  WINPR_ASSERT(Offset + SrcSize >= 8);
2331 
2332  while (Offset < EndOffset)
2333  {
2334  Hash = ncrush->HashTable[get_word(SrcPtr)];
2335  ncrush->HashTable[get_word(SrcPtr)] = Offset;
2336  ncrush->MatchTable[Offset] = Hash;
2337  SrcPtr++;
2338  Offset++;
2339  }
2340 
2341  return 1;
2342 }
2343 
2344 static intptr_t ncrush_find_match_length(const BYTE* Ptr1, const BYTE* Ptr2, const BYTE* HistoryPtr)
2345 {
2346  BYTE val1 = 0;
2347  BYTE val2 = 0;
2348  const BYTE* Ptr = Ptr1;
2349 
2350  WINPR_ASSERT(Ptr1);
2351  WINPR_ASSERT(Ptr2);
2352  WINPR_ASSERT(HistoryPtr);
2353 
2354  do
2355  {
2356  if (Ptr1 > HistoryPtr)
2357  break;
2358 
2359  val1 = *Ptr1++;
2360  val2 = *Ptr2++;
2361  } while (val1 == val2);
2362 
2363  return Ptr1 - (Ptr + 1);
2364 }
2365 
2366 static int ncrush_find_best_match(NCRUSH_CONTEXT* ncrush, UINT16 HistoryOffset,
2367  UINT32* pMatchOffset)
2368 {
2369  int Length = 0;
2370 
2371  WINPR_ASSERT(ncrush);
2372  WINPR_ASSERT(pMatchOffset);
2373 
2374  if (!ncrush->MatchTable[HistoryOffset])
2375  return -1;
2376 
2377  int MatchLength = 2;
2378  UINT16 Offset = HistoryOffset;
2379  BYTE* HistoryBuffer = (BYTE*)ncrush->HistoryBuffer;
2380 
2381  ncrush->MatchTable[0] = HistoryOffset;
2382  UINT16 MatchOffset = ncrush->MatchTable[HistoryOffset];
2383  UINT16 NextOffset = ncrush->MatchTable[Offset];
2384  BYTE* MatchPtr = &HistoryBuffer[MatchLength];
2385 
2386  for (int i = 0; i < 4; i++)
2387  {
2388  int j = -1;
2389 
2390  if (j < 0)
2391  {
2392  Offset = ncrush->MatchTable[NextOffset];
2393 
2394  if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength])
2395  j = 0;
2396  }
2397 
2398  if (j < 0)
2399  {
2400  NextOffset = ncrush->MatchTable[Offset];
2401 
2402  if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength])
2403  j = 1;
2404  }
2405 
2406  if (j < 0)
2407  {
2408  Offset = ncrush->MatchTable[NextOffset];
2409 
2410  if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength])
2411  j = 2;
2412  }
2413 
2414  if (j < 0)
2415  {
2416  NextOffset = ncrush->MatchTable[Offset];
2417 
2418  if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength])
2419  j = 3;
2420  }
2421 
2422  if (j < 0)
2423  {
2424  Offset = ncrush->MatchTable[NextOffset];
2425 
2426  if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength])
2427  j = 4;
2428  }
2429 
2430  if (j < 0)
2431  {
2432  NextOffset = ncrush->MatchTable[Offset];
2433 
2434  if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength])
2435  j = 5;
2436  }
2437 
2438  if (j >= 0)
2439  {
2440  if ((j % 2) == 0)
2441  Offset = NextOffset;
2442 
2443  if ((Offset != HistoryOffset) && Offset)
2444  {
2445  const intptr_t len =
2446  ncrush_find_match_length(&HistoryBuffer[HistoryOffset + 2],
2447  &HistoryBuffer[Offset + 2], ncrush->HistoryPtr);
2448  WINPR_ASSERT(len < INT_MAX - 2);
2449  WINPR_ASSERT(len > INT_MIN + 2);
2450 
2451  Length = (int)len + 2;
2452 
2453  if (Length < 2)
2454  return -1;
2455 
2456  if (Length > 16)
2457  break;
2458 
2459  if (Length > MatchLength)
2460  {
2461  MatchLength = Length;
2462  MatchOffset = Offset;
2463  }
2464 
2465  if ((Length <= MatchLength) ||
2466  (&HistoryBuffer[HistoryOffset + 2] < ncrush->HistoryPtr))
2467  {
2468  NextOffset = ncrush->MatchTable[Offset];
2469  MatchPtr = &HistoryBuffer[MatchLength];
2470  continue;
2471  }
2472  }
2473 
2474  break;
2475  }
2476  }
2477 
2478  ncrush->MatchTable[0] = 0;
2479  *pMatchOffset = MatchOffset;
2480  return MatchLength;
2481 }
2482 
2483 static int ncrush_move_encoder_windows(NCRUSH_CONTEXT* ncrush, BYTE* HistoryPtr)
2484 {
2485  WINPR_ASSERT(ncrush);
2486  WINPR_ASSERT(HistoryPtr);
2487 
2488  const size_t history_half = ARRAYSIZE(ncrush->HistoryBuffer) / 2;
2489  if (HistoryPtr < &ncrush->HistoryBuffer[history_half])
2490  return -1;
2491 
2492  if (HistoryPtr > &ncrush->HistoryBuffer[ARRAYSIZE(ncrush->HistoryBuffer)])
2493  return -1;
2494 
2495  MoveMemory(ncrush->HistoryBuffer, HistoryPtr - history_half, history_half * sizeof(BYTE));
2496  const intptr_t hsize = HistoryPtr - history_half - ncrush->HistoryBuffer;
2497  WINPR_ASSERT(hsize <= UINT16_MAX);
2498  WINPR_ASSERT(hsize >= 0);
2499  INT32 HistoryOffset = (INT32)hsize;
2500 
2501  for (size_t i = 0; i < ARRAYSIZE(ncrush->HashTable); i++)
2502  {
2503  INT32 NewHash = ncrush->HashTable[i] - HistoryOffset;
2504  ncrush->HashTable[i] = (NewHash <= 0) ? 0 : NewHash;
2505  }
2506 
2507  const size_t match_half = ARRAYSIZE(ncrush->MatchTable) / 2;
2508  for (size_t j = 0; j < match_half; j++)
2509  {
2510  if (HistoryOffset + j >= ARRAYSIZE(ncrush->MatchTable))
2511  continue;
2512 
2513  INT32 NewMatch = ncrush->MatchTable[HistoryOffset + j] - HistoryOffset;
2514  ncrush->MatchTable[j] = (NewMatch <= 0) ? 0 : NewMatch;
2515  }
2516 
2517  ZeroMemory(&ncrush->MatchTable[match_half], match_half * sizeof(UINT16));
2518  return 1;
2519 }
2520 
2521 int ncrush_compress(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize, BYTE* pDstBuffer,
2522  const BYTE** ppDstData, UINT32* pDstSize, UINT32* pFlags)
2523 {
2524  BYTE Literal = 0;
2525  const BYTE* SrcPtr = NULL;
2526  BYTE* DstPtr = NULL;
2527  UINT32 bits = 0;
2528  UINT32 offset = 0;
2529  UINT16 Mask = 0;
2530  UINT32 MaskedBits = 0;
2531  UINT32 accumulator = 0;
2532  const BYTE* SrcEndPtr = NULL;
2533  BYTE* DstEndPtr = NULL;
2534  BYTE* HistoryPtr = NULL;
2535  BYTE* pDstData = NULL;
2536  UINT32 DstSize = 0;
2537  BOOL PacketAtFront = FALSE;
2538  BOOL PacketFlushed = FALSE;
2539  UINT32 MatchLength = 0;
2540  UINT32 IndexLEC = 0;
2541  UINT32 IndexLOM = 0;
2542  UINT32 IndexCO = 0;
2543  UINT32 CodeLEC = 0;
2544  UINT32 BitLength = 0;
2545  UINT32 CopyOffset = 0;
2546  UINT32 MatchOffset = 0;
2547  UINT32 OldCopyOffset = 0;
2548  UINT32* OffsetCache = NULL;
2549  UINT32 OffsetCacheIndex = 0;
2550  UINT32 HistoryOffset = 0;
2551  BYTE* HistoryBuffer = NULL;
2552  UINT32 HistoryBufferSize = 0;
2553  BYTE* HistoryBufferEndPtr = NULL;
2554  UINT32 CopyOffsetIndex = 0;
2555  UINT32 CopyOffsetBits = 0;
2556  UINT32 CompressionLevel = 2;
2557 
2558  WINPR_ASSERT(ncrush);
2559 
2560  WINPR_ASSERT(ncrush);
2561  WINPR_ASSERT(pSrcData);
2562  WINPR_ASSERT(pDstBuffer);
2563  WINPR_ASSERT(ppDstData);
2564  WINPR_ASSERT(pDstSize);
2565  WINPR_ASSERT(pFlags);
2566 
2567  HistoryBuffer = ncrush->HistoryBuffer;
2568  *pFlags = 0;
2569 
2570  if ((SrcSize + ncrush->HistoryOffset) >= 65529)
2571  {
2572  if (ncrush->HistoryOffset == (ncrush->HistoryBufferSize + 1))
2573  {
2574  ncrush->HistoryOffset = 0;
2575  ncrush->HistoryPtr = HistoryBuffer;
2576  PacketFlushed = TRUE;
2577  }
2578  else
2579  {
2580  if (ncrush_move_encoder_windows(ncrush, &(HistoryBuffer[ncrush->HistoryOffset])) < 0)
2581  return -1001;
2582 
2583  ncrush->HistoryPtr = &HistoryBuffer[32768];
2584  ncrush->HistoryOffset = 32768;
2585  PacketAtFront = TRUE;
2586  }
2587  }
2588  else
2589  {
2590  *pFlags = 0;
2591  }
2592 
2593  pDstData = pDstBuffer;
2594  *ppDstData = pDstBuffer;
2595 
2596  if (!pDstData)
2597  return -1002;
2598 
2599  DstSize = *pDstSize;
2600 
2601  if (DstSize < SrcSize)
2602  return -1003;
2603 
2604  DstSize = SrcSize;
2605  NCrushWriteStart(&bits, &offset, &accumulator);
2606  DstPtr = pDstData;
2607  SrcPtr = pSrcData;
2608  SrcEndPtr = &pSrcData[SrcSize];
2609  DstEndPtr = &pDstData[DstSize - 1];
2610  OffsetCache = ncrush->OffsetCache;
2611  HistoryPtr = &HistoryBuffer[ncrush->HistoryOffset];
2612  HistoryBufferEndPtr = &HistoryBuffer[65536];
2613  HistoryBufferSize = ncrush->HistoryBufferSize;
2614  CopyOffset = 0;
2615  MatchOffset = 0;
2616  const intptr_t thsize = HistoryPtr - HistoryBuffer;
2617  WINPR_ASSERT(thsize >= 0);
2618  WINPR_ASSERT(thsize <= UINT32_MAX);
2619  ncrush_hash_table_add(ncrush, pSrcData, SrcSize, (UINT32)thsize);
2620  CopyMemory(HistoryPtr, pSrcData, SrcSize);
2621  ncrush->HistoryPtr = &HistoryPtr[SrcSize];
2622 
2623  while (SrcPtr < (SrcEndPtr - 2))
2624  {
2625  MatchLength = 0;
2626  const intptr_t hsize = HistoryPtr - HistoryBuffer;
2627  WINPR_ASSERT(hsize <= UINT32_MAX);
2628  WINPR_ASSERT(hsize >= 0);
2629  HistoryOffset = (UINT32)hsize;
2630 
2631  if (ncrush->HistoryPtr && (HistoryPtr > ncrush->HistoryPtr))
2632  return -1;
2633 
2634  if (HistoryOffset >= 65536)
2635  return -1004;
2636 
2637  if (ncrush->MatchTable[HistoryOffset])
2638  {
2639  int rc = 0;
2640 
2641  MatchOffset = 0;
2642  rc = ncrush_find_best_match(ncrush, HistoryOffset, &MatchOffset);
2643 
2644  if (rc < 0)
2645  return -1005;
2646  MatchLength = (UINT32)rc;
2647  }
2648 
2649  if (MatchLength)
2650  CopyOffset = (HistoryBufferSize - 1) & (HistoryPtr - &HistoryBuffer[MatchOffset]);
2651 
2652  if ((MatchLength == 2) && (CopyOffset >= 64))
2653  MatchLength = 0;
2654 
2655  if (MatchLength == 0)
2656  {
2657  /* Literal */
2658  Literal = *SrcPtr++;
2659  HistoryPtr++;
2660 
2661  if ((DstPtr + 2) > DstEndPtr) /* PACKET_FLUSH #1 */
2662  {
2663  ncrush_context_reset(ncrush, TRUE);
2664  *pFlags = PACKET_FLUSHED;
2665  *pFlags |= CompressionLevel;
2666  *ppDstData = pSrcData;
2667  *pDstSize = SrcSize;
2668  return 1;
2669  }
2670 
2671  IndexLEC = Literal;
2672  if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2673  return -1;
2674  BitLength = HuffLengthLEC[IndexLEC];
2675 
2676  if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2677  return -1;
2678  CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2679 
2680  if (BitLength > 15)
2681  return -1006;
2682 
2683  NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2684  }
2685  else
2686  {
2687  HistoryPtr += MatchLength;
2688  SrcPtr += MatchLength;
2689 
2690  if (!MatchLength)
2691  return -1007;
2692 
2693  if ((DstPtr + 8) > DstEndPtr) /* PACKET_FLUSH #2 */
2694  {
2695  ncrush_context_reset(ncrush, TRUE);
2696  *pFlags = PACKET_FLUSHED;
2697  *pFlags |= CompressionLevel;
2698  *ppDstData = pSrcData;
2699  *pDstSize = SrcSize;
2700  return 1;
2701  }
2702 
2703  OffsetCacheIndex = 5;
2704 
2705  if ((CopyOffset == OffsetCache[0]) || (CopyOffset == OffsetCache[1]) ||
2706  (CopyOffset == OffsetCache[2]) || (CopyOffset == OffsetCache[3]))
2707  {
2708  if (CopyOffset == OffsetCache[3])
2709  {
2710  OldCopyOffset = OffsetCache[3];
2711  OffsetCache[3] = OffsetCache[0];
2712  OffsetCache[0] = OldCopyOffset;
2713  OffsetCacheIndex = 3;
2714  }
2715  else
2716  {
2717  if (CopyOffset == OffsetCache[2])
2718  {
2719  OldCopyOffset = OffsetCache[2];
2720  OffsetCache[2] = OffsetCache[0];
2721  OffsetCache[0] = OldCopyOffset;
2722  OffsetCacheIndex = 2;
2723  }
2724  else
2725  {
2726  if (CopyOffset == OffsetCache[1])
2727  {
2728  OldCopyOffset = OffsetCache[1];
2729  OffsetCache[1] = OffsetCache[0];
2730  OffsetCache[0] = OldCopyOffset;
2731  OffsetCacheIndex = 1;
2732  }
2733  else
2734  {
2735  if (CopyOffset == OffsetCache[0])
2736  {
2737  OffsetCacheIndex = 0;
2738  }
2739  }
2740  }
2741  }
2742  }
2743  else
2744  {
2745  OffsetCache[3] = OffsetCache[2];
2746  OffsetCache[2] = OffsetCache[1];
2747  OffsetCache[1] = OffsetCache[0];
2748  OffsetCache[0] = CopyOffset;
2749  }
2750 
2751  if (OffsetCacheIndex >= 4)
2752  {
2753  /* CopyOffset not in OffsetCache */
2754  if (CopyOffset >= 256)
2755  bits = (CopyOffset >> 7) + 256;
2756  else
2757  bits = CopyOffset;
2758 
2759  CopyOffsetIndex = ncrush->HuffTableCopyOffset[bits + 2];
2760 
2761  if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBitsLUT))
2762  return -1;
2763 
2764  CopyOffsetBits = CopyOffsetBitsLUT[CopyOffsetIndex];
2765  IndexLEC = 257 + CopyOffsetIndex;
2766  if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2767  return -1;
2768  BitLength = HuffLengthLEC[IndexLEC];
2769 
2770  if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2771  return -1;
2772  CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2773 
2774  if (BitLength > 15)
2775  return -1008;
2776 
2777  if (CopyOffsetBits > 18)
2778  return -1009;
2779 
2780  NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2781  Mask = ((1 << CopyOffsetBits) - 1);
2782  MaskedBits = CopyOffset & Mask;
2783  NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, CopyOffsetBits);
2784 
2785  if ((MatchLength - 2) >= 768)
2786  IndexCO = 28;
2787  else
2788  IndexCO = ncrush->HuffTableLOM[MatchLength];
2789 
2790  if (IndexCO >= ARRAYSIZE(HuffLengthLOM))
2791  return -1;
2792  BitLength = HuffLengthLOM[IndexCO];
2793 
2794  if (IndexCO >= ARRAYSIZE(LOMBitsLUT))
2795  return -1;
2796  IndexLOM = LOMBitsLUT[IndexCO];
2797 
2798  if (IndexCO >= ARRAYSIZE(HuffCodeLOM))
2799  return -1;
2800  NCrushWriteBits(&DstPtr, &accumulator, &offset, HuffCodeLOM[IndexCO], BitLength);
2801  Mask = ((1 << IndexLOM) - 1);
2802  MaskedBits = (MatchLength - 2) & Mask;
2803  NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, IndexLOM);
2804 
2805  if (IndexCO >= ARRAYSIZE(LOMBaseLUT))
2806  return -1;
2807  if ((MaskedBits + LOMBaseLUT[IndexCO]) != MatchLength)
2808  return -1010;
2809  }
2810  else
2811  {
2812  /* CopyOffset in OffsetCache */
2813  IndexLEC = 289 + OffsetCacheIndex;
2814  if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2815  return -1;
2816  BitLength = HuffLengthLEC[IndexLEC];
2817  if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2818  return -1;
2819  CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2820 
2821  if (BitLength >= 15)
2822  return -1011;
2823 
2824  NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2825 
2826  if ((MatchLength - 2) >= 768)
2827  IndexCO = 28;
2828  else
2829  IndexCO = ncrush->HuffTableLOM[MatchLength];
2830 
2831  if (IndexCO >= ARRAYSIZE(HuffLengthLOM))
2832  return -1;
2833 
2834  BitLength = HuffLengthLOM[IndexCO];
2835 
2836  if (IndexCO >= ARRAYSIZE(LOMBitsLUT))
2837  return -1;
2838  IndexLOM = LOMBitsLUT[IndexCO];
2839 
2840  if (IndexCO >= ARRAYSIZE(HuffCodeLOM))
2841  return -1;
2842  NCrushWriteBits(&DstPtr, &accumulator, &offset, HuffCodeLOM[IndexCO], BitLength);
2843  Mask = ((1 << IndexLOM) - 1);
2844  MaskedBits = (MatchLength - 2) & Mask;
2845  NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, IndexLOM);
2846 
2847  if (IndexCO >= ARRAYSIZE(LOMBaseLUT))
2848  return -1;
2849  if ((MaskedBits + LOMBaseLUT[IndexCO]) != MatchLength)
2850  return -1012;
2851  }
2852  }
2853 
2854  if (HistoryPtr >= HistoryBufferEndPtr)
2855  return -1013;
2856  }
2857 
2858  while (SrcPtr < SrcEndPtr)
2859  {
2860  if ((DstPtr + 2) > DstEndPtr) /* PACKET_FLUSH #3 */
2861  {
2862  ncrush_context_reset(ncrush, TRUE);
2863  *pFlags = PACKET_FLUSHED;
2864  *pFlags |= CompressionLevel;
2865  *ppDstData = pSrcData;
2866  *pDstSize = SrcSize;
2867  return 1;
2868  }
2869 
2870  Literal = *SrcPtr++;
2871  HistoryPtr++;
2872  IndexLEC = Literal;
2873  if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2874  return -1;
2875  if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2876  return -1;
2877  BitLength = HuffLengthLEC[IndexLEC];
2878  CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2879 
2880  if (BitLength > 15)
2881  return -1014;
2882 
2883  NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2884  }
2885 
2886  if ((DstPtr + 4) >= DstEndPtr) /* PACKET_FLUSH #4 */
2887  {
2888  ncrush_context_reset(ncrush, TRUE);
2889  *pFlags = PACKET_FLUSHED;
2890  *pFlags |= CompressionLevel;
2891  *ppDstData = pSrcData;
2892  *pDstSize = SrcSize;
2893  return 1;
2894  }
2895 
2896  IndexLEC = 256;
2897  BitLength = HuffLengthLEC[IndexLEC];
2898 
2899  if (BitLength > 15)
2900  return -1015;
2901 
2902  bits = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2903  NCrushWriteBits(&DstPtr, &accumulator, &offset, bits, BitLength);
2904  NCrushWriteFinish(&DstPtr, accumulator);
2905  const intptr_t dsize = DstPtr - pDstData;
2906  WINPR_ASSERT(dsize <= UINT32_MAX);
2907  WINPR_ASSERT(dsize >= 0);
2908  *pDstSize = (UINT32)dsize;
2909 
2910  if (*pDstSize > SrcSize)
2911  return -1016;
2912 
2913  *pFlags |= PACKET_COMPRESSED;
2914  *pFlags |= CompressionLevel;
2915 
2916  if (PacketAtFront)
2917  *pFlags |= PACKET_AT_FRONT;
2918 
2919  if (PacketFlushed)
2920  *pFlags |= PACKET_FLUSHED;
2921 
2922  const intptr_t diff = HistoryPtr - HistoryBuffer;
2923  if (diff > UINT32_MAX)
2924  return -1;
2925 
2926  ncrush->HistoryOffset = (UINT32)diff;
2927 
2928  if (ncrush->HistoryOffset >= ncrush->HistoryBufferSize)
2929  return -1;
2930 
2931  return 1;
2932 }
2933 
2934 static int ncrush_generate_tables(NCRUSH_CONTEXT* context)
2935 {
2936  WINPR_ASSERT(context);
2937  WINPR_ASSERT(28 < ARRAYSIZE(LOMBitsLUT));
2938 
2939  UINT32 cnt = 0;
2940  for (int i = 0; i < 28; i++)
2941  {
2942  for (int j = 0; j < 1 << LOMBitsLUT[i]; j++)
2943  {
2944  size_t l = (cnt++) + 2ull;
2945  context->HuffTableLOM[l] = i;
2946  }
2947  }
2948 
2949  for (UINT32 k = 2; k < 4096; k++)
2950  {
2951  size_t i = 28;
2952  if ((k - 2) < 768)
2953  i = context->HuffTableLOM[k];
2954 
2955  if (i >= ARRAYSIZE(LOMBitsLUT))
2956  return -1;
2957  if (i >= ARRAYSIZE(LOMBaseLUT))
2958  return -1;
2959 
2960  if (((((1 << LOMBitsLUT[i]) - 1) & (k - 2)) + LOMBaseLUT[i]) != k)
2961  return -1;
2962  }
2963 
2964  size_t k = 0;
2965  for (int i = 0; i < 16; i++)
2966  {
2967  for (int j = 0; j < 1 << CopyOffsetBitsLUT[i]; j++)
2968  {
2969  size_t l = k++ + 2ull;
2970  context->HuffTableCopyOffset[l] = i;
2971  }
2972  }
2973 
2974  k /= 128;
2975 
2976  for (int i = 16; i < 32; i++)
2977  {
2978  for (int j = 0; j < 1 << (CopyOffsetBitsLUT[i] - 7); j++)
2979  {
2980  size_t l = k++ + 2 + 256ull;
2981  context->HuffTableCopyOffset[l] = i;
2982  }
2983  }
2984 
2985  if ((k + 256) > 1024)
2986  return -1;
2987 
2988  return 1;
2989 }
2990 
2991 void ncrush_context_reset(NCRUSH_CONTEXT* ncrush, BOOL flush)
2992 {
2993  WINPR_ASSERT(ncrush);
2994 
2995  ZeroMemory(&(ncrush->HistoryBuffer), sizeof(ncrush->HistoryBuffer));
2996  ZeroMemory(&(ncrush->OffsetCache), sizeof(ncrush->OffsetCache));
2997  ZeroMemory(&(ncrush->MatchTable), sizeof(ncrush->MatchTable));
2998  ZeroMemory(&(ncrush->HashTable), sizeof(ncrush->HashTable));
2999 
3000  if (flush)
3001  ncrush->HistoryOffset = ncrush->HistoryBufferSize + 1;
3002  else
3003  ncrush->HistoryOffset = 0;
3004 
3005  ncrush->HistoryPtr = &(ncrush->HistoryBuffer[ncrush->HistoryOffset]);
3006 }
3007 
3008 NCRUSH_CONTEXT* ncrush_context_new(BOOL Compressor)
3009 {
3010  NCRUSH_CONTEXT* ncrush = (NCRUSH_CONTEXT*)calloc(1, sizeof(NCRUSH_CONTEXT));
3011 
3012  if (!ncrush)
3013  goto fail;
3014 
3015  ncrush->Compressor = Compressor;
3016  ncrush->HistoryBufferSize = 65536;
3017  ncrush->HistoryEndOffset = ncrush->HistoryBufferSize - 1;
3018  ncrush->HistoryBufferFence = 0xABABABAB;
3019  ncrush->HistoryOffset = 0;
3020  ncrush->HistoryPtr = &(ncrush->HistoryBuffer[ncrush->HistoryOffset]);
3021 
3022  if (ncrush_generate_tables(ncrush) < 0)
3023  {
3024  WLog_DBG(TAG, "ncrush_context_new: failed to initialize tables");
3025  goto fail;
3026  }
3027 
3028  ncrush_context_reset(ncrush, FALSE);
3029 
3030  return ncrush;
3031 fail:
3032  ncrush_context_free(ncrush);
3033  return NULL;
3034 }
3035 
3036 void ncrush_context_free(NCRUSH_CONTEXT* ncrush)
3037 {
3038  free(ncrush);
3039 }