1 /*
2  * Library DEFLATE decompression testing program
3  *
4  * Copyright (C) 2018-2021, Joachim Metz <joachim.metz@gmail.com>
5  *
6  * Refer to AUTHORS for acknowledgements.
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20  */
21 
22 #include <common.h>
23 #include <memory.h>
24 #include <file_stream.h>
25 #include <types.h>
26 
27 #if defined( HAVE_STDLIB_H ) || defined( WINAPI )
28 #include <stdlib.h>
29 #endif
30 
31 #include "fsapfs_test_libcerror.h"
32 #include "fsapfs_test_libcnotify.h"
33 #include "fsapfs_test_libfsapfs.h"
34 #include "fsapfs_test_macros.h"
35 #include "fsapfs_test_unused.h"
36 
37 #include "../libfsapfs/libfsapfs_deflate.h"
38 
39 /* Define to make fsapfs_test_deflate generate verbose output
40 #define FSAPFS_TEST_DEFLATE
41  */
42 
43 uint8_t fsapfs_test_deflate_compressed_byte_stream[ 2627 ] = {
44 	0x78, 0xda, 0xbd, 0x59, 0x6d, 0x8f, 0xdb, 0xb8, 0x11, 0xfe, 0x7c, 0xfa, 0x15, 0xc4, 0x7e, 0xb9,
45 	0x5d, 0xc0, 0x75, 0x5e, 0x7b, 0x45, 0x0f, 0x45, 0x81, 0xed, 0xde, 0x26, 0xdd, 0x62, 0x2f, 0x0d,
46 	0xb2, 0x97, 0x16, 0xfd, 0x48, 0x4b, 0xb4, 0xcd, 0x46, 0x12, 0x5d, 0x52, 0x5a, 0xc7, 0xfd, 0xf5,
47 	0x7d, 0x66, 0x86, 0x94, 0x28, 0xd9, 0xde, 0xec, 0xe1, 0x80, 0x06, 0x38, 0x5c, 0x62, 0x93, 0xc3,
48 	0x79, 0x7d, 0xe6, 0x99, 0xf1, 0x77, 0xdf, 0x29, 0xa5, 0xde, 0x7f, 0xf8, 0xac, 0xee, 0x6f, 0x1f,
49 	0x1e, 0x6e, 0x3f, 0xa9, 0xf7, 0xb7, 0x1f, 0x6e, 0x3f, 0x5d, 0xdf, 0xab, 0x8f, 0x9f, 0xff, 0x72,
50 	0x7f, 0x77, 0xa3, 0xf0, 0xdf, 0xed, 0x87, 0x87, 0xdb, 0x42, 0x9d, 0xfe, 0xf3, 0x0f, 0xe3, 0x83,
51 	0x75, 0xad, 0x7a, 0xb3, 0x50, 0xaf, 0xff, 0xa8, 0xfe, 0xd6, 0xb7, 0x46, 0xbd, 0x7e, 0xf9, 0xf2,
52 	0x0f, 0x45, 0xa1, 0x6e, 0xdc, 0xee, 0xe0, 0xed, 0x66, 0xdb, 0xa9, 0xcb, 0x9b, 0x2b, 0xfe, 0x50,
53 	0xbd, 0xf3, 0xc6, 0xa8, 0x07, 0xb7, 0xee, 0xf6, 0xda, 0x1b, 0xf5, 0xce, 0xf5, 0x6d, 0xa5, 0x3b,
54 	0xdc, 0x5e, 0xa8, 0xbb, 0xb6, 0x5c, 0xaa, 0x3f, 0x6d, 0xbb, 0x6e, 0xf7, 0xe3, 0x8b, 0x17, 0xeb,
55 	0xb0, 0x5e, 0x3a, 0xbf, 0x79, 0xf1, 0xe7, 0x42, 0xdd, 0x3e, 0x1a, 0x7f, 0x70, 0x10, 0x6a, 0x83,
56 	0xda, 0x19, 0xdf, 0xd8, 0xae, 0x33, 0x95, 0xea, 0x9c, 0x2a, 0x21, 0x5d, 0xe9, 0xb6, 0x52, 0x95,
57 	0x0d, 0x9d, 0xb7, 0xab, 0xbe, 0x33, 0x0a, 0x67, 0x57, 0x90, 0xd7, 0xd0, 0x97, 0xd6, 0x84, 0x42,
58 	0xb9, 0xb5, 0xea, 0xb6, 0xb8, 0x59, 0xdb, 0xd2, 0xb4, 0xc1, 0xa8, 0xca, 0x95, 0x7d, 0x63, 0xda,
59 	0x6e, 0xa1, 0x70, 0x5e, 0x95, 0x5b, 0xdd, 0x6e, 0x6c, 0xbb, 0x51, 0xb6, 0x23, 0xf1, 0xad, 0xeb,
60 	0x94, 0xae, 0x6b, 0xb7, 0x37, 0xd5, 0xb2, 0x80, 0xfe, 0xea, 0x17, 0xba, 0xfa, 0x18, 0xed, 0x63,
61 	0x51, 0x46, 0xfc, 0x64, 0x42, 0x30, 0x5e, 0xbd, 0x37, 0xad, 0xf1, 0xba, 0x56, 0x1f, 0xfb, 0x15,
62 	0xe4, 0xab, 0xfb, 0xf8, 0x86, 0x6d, 0x4b, 0xe7, 0x77, 0xce, 0xeb, 0x0e, 0x1a, 0xd0, 0x95, 0x0e,
63 	0x6a, 0x07, 0x56, 0xb5, 0x74, 0x6d, 0x65, 0xc9, 0xde, 0x40, 0xe2, 0x92, 0xe4, 0x37, 0xb9, 0xec,
64 	0xa9, 0xd0, 0x22, 0x0a, 0x5d, 0xa8, 0xd0, 0xef, 0x76, 0xb5, 0x21, 0xdd, 0x61, 0xfe, 0xea, 0xc0,
65 	0xe7, 0x75, 0x25, 0xd2, 0x70, 0x9c, 0x5d, 0x13, 0x02, 0x8b, 0xae, 0xe1, 0x10, 0x3a, 0x64, 0x60,
66 	0xca, 0x92, 0xec, 0x78, 0xb9, 0x54, 0xd7, 0xe3, 0xd1, 0x9f, 0xcc, 0xda, 0xb6, 0xa2, 0xc5, 0x52,
67 	0xd1, 0xd7, 0xd7, 0x41, 0xf5, 0x01, 0x17, 0xb6, 0xc6, 0x1b, 0x8b, 0x50, 0x5c, 0xb0, 0xcb, 0xe2,
68 	0xcb, 0x17, 0xca, 0x9b, 0x35, 0x14, 0x25, 0x97, 0x9f, 0x54, 0x58, 0x9c, 0x51, 0x9c, 0x76, 0xc6,
69 	0x82, 0xcd, 0xa6, 0xa3, 0x17, 0x6c, 0xdc, 0xc7, 0xfb, 0x6f, 0xc9, 0x3b, 0x23, 0x88, 0xed, 0xb8,
70 	0xf8, 0x05, 0x67, 0xee, 0xed, 0xca, 0x6b, 0x7f, 0xc8, 0xe5, 0x68, 0x38, 0x16, 0xb2, 0x60, 0xc2,
71 	0xde, 0xf9, 0x2f, 0x6a, 0x43, 0xff, 0x68, 0x93, 0x9b, 0x46, 0x53, 0x16, 0x85, 0xc3, 0x23, 0x1e,
72 	0x9f, 0xe9, 0x16, 0x7a, 0xa9, 0x6b, 0x78, 0xd4, 0x96, 0x9c, 0x7f, 0xca, 0x79, 0x48, 0xb9, 0x71,
73 	0xcd, 0xca, 0xd2, 0xc5, 0x7f, 0x92, 0x18, 0x1d, 0x54, 0x45, 0xae, 0x9a, 0xb8, 0xf2, 0xba, 0x55,
74 	0x17, 0xd9, 0xbd, 0x0b, 0xca, 0x1b, 0xdd, 0x1e, 0xe4, 0x61, 0x08, 0xee, 0x54, 0xa3, 0xbf, 0x18,
75 	0x76, 0x28, 0x19, 0x85, 0x57, 0x2c, 0x22, 0xe6, 0xd7, 0xba, 0x34, 0x6a, 0xe7, 0xdd, 0xa3, 0xad,
76 	0x4c, 0x55, 0xc4, 0xf0, 0x45, 0x4b, 0x24, 0x17, 0xf7, 0x5b, 0x5b, 0x6e, 0x53, 0x16, 0xb2, 0x9e,
77 	0x7b, 0x0b, 0x19, 0x2b, 0x4d, 0x91, 0x81, 0x82, 0xd9, 0x85, 0x65, 0x21, 0x21, 0x44, 0xe2, 0x6a,
78 	0xe4, 0xc5, 0xaa, 0xac, 0x75, 0xe0, 0x84, 0x82, 0x1f, 0xf8, 0xaf, 0x83, 0xda, 0x93, 0x77, 0x48,
79 	0x78, 0x65, 0x90, 0x42, 0x15, 0x0e, 0x36, 0xae, 0x32, 0x05, 0xae, 0xf4, 0x81, 0xc5, 0x9c, 0x52,
80 	0x73, 0x76, 0x5d, 0xcc, 0x57, 0x17, 0x13, 0x27, 0x89, 0xfd, 0x62, 0x3d, 0xee, 0x55, 0x7d, 0x29,
81 	0xf7, 0x4a, 0x3e, 0x44, 0xa2, 0xe1, 0xd8, 0xda, 0xb6, 0x5f, 0xe4, 0x95, 0x22, 0x77, 0xf9, 0xde,
82 	0x76, 0xdb, 0xc9, 0x03, 0x54, 0x70, 0x78, 0x5e, 0xfb, 0xce, 0x96, 0x7d, 0xad, 0xfd, 0xbc, 0xf4,
83 	0xe2, 0xb9, 0x82, 0x2f, 0x8a, 0xbf, 0xe8, 0xe3, 0x69, 0xd4, 0xf6, 0x08, 0x5b, 0xa3, 0x2b, 0xc6,
84 	0x0b, 0x5d, 0x07, 0xe0, 0x04, 0x4a, 0xda, 0xc4, 0x1c, 0xbc, 0x87, 0x26, 0xf0, 0x7f, 0x84, 0xac,
85 	0x8b, 0xa5, 0x14, 0x39, 0xbe, 0xf8, 0x19, 0xca, 0x36, 0x48, 0xba, 0x1b, 0xe7, 0xbd, 0x09, 0x3b,
86 	0x2a, 0x53, 0x28, 0xfc, 0xe0, 0x7a, 0x5f, 0xa2, 0x02, 0xd6, 0x27, 0xb2, 0xa3, 0x31, 0x1a, 0xa5,
87 	0x06, 0xa9, 0xc5, 0xa9, 0x3b, 0x7c, 0xe5, 0x48, 0xb9, 0x85, 0x32, 0x5f, 0xcb, 0xba, 0xaf, 0xc4,
88 	0x19, 0x07, 0x15, 0xe4, 0x6c, 0x49, 0xb1, 0xa0, 0x0b, 0x00, 0x8d, 0x01, 0x1c, 0x8e, 0x2d, 0xa3,
89 	0xec, 0x5a, 0x10, 0x84, 0x04, 0x44, 0x87, 0x92, 0xdd, 0x22, 0x6a, 0xc1, 0xd5, 0x11, 0x40, 0x01,
90 	0xa8, 0xc5, 0x24, 0x5b, 0x32, 0x5f, 0x4b, 0x19, 0x72, 0x66, 0xa5, 0x4c, 0x22, 0x47, 0x24, 0xec,
91 	0x1e, 0xfd, 0x30, 0xb5, 0x25, 0x8f, 0xd6, 0x0d, 0x94, 0xfc, 0x96, 0x27, 0xdc, 0xea, 0xdf, 0xa6,
92 	0xec, 0xd8, 0x1e, 0x7a, 0xf0, 0x05, 0x0e, 0x67, 0x26, 0x0e, 0x3e, 0x99, 0x28, 0x06, 0xb4, 0xcc,
93 	0x3c, 0x82, 0x6e, 0xa0, 0x0b, 0xd2, 0xb5, 0xef, 0x6c, 0x6d, 0xbb, 0x03, 0x25, 0xd5, 0xc6, 0x6b,
94 	0xc0, 0x67, 0x6b, 0x0c, 0xe5, 0x24, 0xc9, 0xf0, 0x46, 0x52, 0x8d, 0x2e, 0x1d, 0xbb, 0x69, 0xed,
95 	0x5d, 0xc3, 0xda, 0x4c, 0x9e, 0xa1, 0x12, 0x1b, 0x9d, 0x4f, 0xb7, 0x1e, 0x0e, 0x40, 0xc9, 0x26,
96 	0x26, 0x15, 0x9a, 0xc5, 0x49, 0xa7, 0xb3, 0x67, 0x5e, 0x2d, 0xd5, 0xed, 0xd7, 0xd2, 0xec, 0xd8,
97 	0x0f, 0x80, 0x9b, 0x07, 0x18, 0x79, 0x8c, 0xdb, 0x1f, 0xef, 0xf9, 0xf0, 0xbf, 0x5c, 0x8f, 0xfc,
98 	0xa3, 0x0a, 0x68, 0x1f, 0xcd, 0x61, 0x0e, 0x4d, 0xe8, 0x77, 0x00, 0xa0, 0x20, 0x02, 0x02, 0x24,
99 	0x90, 0xad, 0x6f, 0x87, 0x36, 0x15, 0x81, 0x8a, 0x33, 0xdc, 0x41, 0xe3, 0x95, 0x21, 0x6d, 0x57,
100 	0xd4, 0x26, 0xa9, 0xaa, 0xc2, 0x53, 0x0f, 0xbf, 0x5e, 0x42, 0x75, 0x7a, 0x93, 0xae, 0xfc, 0xec,
101 	0x2a, 0xbb, 0xb6, 0x63, 0x84, 0x03, 0x1f, 0xb9, 0x5b, 0xab, 0x03, 0xa9, 0x47, 0x5f, 0x8a, 0x6a,
102 	0x68, 0xa1, 0xd3, 0xe2, 0xe2, 0x4c, 0xa1, 0xa8, 0xd0, 0x49, 0x2f, 0x47, 0xa3, 0x13, 0x03, 0xbe,
103 	0x2b, 0x80, 0x10, 0x12, 0x98, 0x1c, 0x7d, 0xd7, 0x7d, 0x5b, 0x26, 0x14, 0xa5, 0x08, 0xd2, 0xa7,
104 	0x2b, 0x23, 0x2d, 0xcb, 0x0a, 0x20, 0x4c, 0xe1, 0xb6, 0x60, 0xa4, 0x04, 0x46, 0x72, 0xde, 0xa8,
105 	0x41, 0xe8, 0x65, 0x0e, 0xd0, 0x04, 0xac, 0xc8, 0xea, 0x0d, 0x37, 0x6c, 0xc0, 0x42, 0xa0, 0xdc,
106 	0xde, 0x6f, 0x0d, 0x67, 0xf0, 0xa8, 0x08, 0xdc, 0x66, 0xdb, 0x47, 0x87, 0x74, 0xbe, 0x5a, 0xd0,
107 	0x37, 0xad, 0xd8, 0x38, 0x0d, 0xc1, 0x68, 0x67, 0x13, 0x3d, 0x53, 0x44, 0x70, 0xf9, 0x91, 0x1c,
108 	0xa3, 0xf4, 0x55, 0x0c, 0xcd, 0xa4, 0x5f, 0x8c, 0x50, 0xc8, 0xfa, 0x8a, 0xdc, 0x2f, 0xc8, 0x6d,
109 	0xb4, 0x18, 0x87, 0x5c, 0xd4, 0x04, 0x44, 0x66, 0x8d, 0x9c, 0xec, 0x60, 0x32, 0xc9, 0xc1, 0xb5,
110 	0x1e, 0xc4, 0x46, 0x4a, 0xd5, 0x4a, 0xad, 0x99, 0x47, 0xd2, 0x7f, 0xd6, 0x6f, 0x2a, 0x67, 0x04,
111 	0xea, 0xd9, 0x49, 0x0c, 0xb4, 0x74, 0x7f, 0xee, 0xc9, 0xc5, 0xd4, 0x3f, 0x01, 0x55, 0x51, 0x2b,
112 	0x87, 0x66, 0x4f, 0xe4, 0x42, 0xaa, 0x1a, 0xff, 0x80, 0x02, 0x4d, 0xa0, 0xeb, 0x7b, 0xbc, 0x8b,
113 	0xe7, 0x3c, 0x83, 0x28, 0x59, 0x6c, 0x3b, 0xb0, 0xa6, 0x1e, 0x6c, 0x04, 0xad, 0xc4, 0x9b, 0x46,
114 	0x5b, 0x24, 0x1d, 0xd5, 0x2b, 0x72, 0x64, 0xdd, 0xd7, 0x0b, 0x3c, 0xc3, 0xe6, 0xaf, 0x46, 0xf3,
115 	0x87, 0xa4, 0x5a, 0x08, 0x40, 0xb7, 0xc4, 0xbd, 0xa2, 0xef, 0xce, 0xf0, 0x0d, 0xb7, 0x26, 0x19,
116 	0xb9, 0xe7, 0x94, 0x16, 0x53, 0x57, 0xb5, 0xa1, 0x5c, 0x60, 0xef, 0x51, 0x10, 0x38, 0x0b, 0xdf,
117 	0x2c, 0xd5, 0xdf, 0x05, 0x28, 0x08, 0x53, 0x88, 0xf8, 0x45, 0xba, 0xc4, 0x89, 0x0b, 0x03, 0xbc,
118 	0xc5, 0x03, 0x5c, 0xc6, 0xa9, 0x73, 0xfd, 0xd5, 0x68, 0xd2, 0xee, 0x9d, 0xad, 0x4d, 0x18, 0xc0,
119 	0x2a, 0x47, 0x1b, 0xf2, 0x40, 0xec, 0xb7, 0xb9, 0x97, 0x29, 0x0b, 0x32, 0x3a, 0x86, 0x7f, 0x67,
120 	0xd2, 0x0b, 0x0d, 0xc6, 0xc3, 0x72, 0xd7, 0xb6, 0x96, 0x98, 0x31, 0xc9, 0x8c, 0xae, 0x9b, 0x76,
121 	0xa6, 0x59, 0x59, 0x87, 0x1e, 0xcd, 0x47, 0x14, 0x28, 0x58, 0x81, 0xe8, 0x3e, 0x66, 0x7a, 0x6e,
122 	0x2d, 0xc5, 0x53, 0x6e, 0x1d, 0xdc, 0x31, 0xcb, 0x22, 0xa4, 0x85, 0xc8, 0xce, 0xf4, 0xaa, 0x8a,
123 	0x41, 0xb1, 0x48, 0x00, 0x6a, 0x0b, 0xa2, 0x2b, 0x3c, 0xb7, 0x45, 0xfe, 0x7b, 0x18, 0x54, 0x93,
124 	0x66, 0xba, 0x31, 0x38, 0x88, 0xc8, 0x73, 0x99, 0x81, 0xf7, 0xf6, 0x65, 0x87, 0x84, 0x2b, 0x6a,
125 	0x8d, 0x17, 0x3b, 0x21, 0x99, 0xba, 0x2c, 0x41, 0xc9, 0x1c, 0x9d, 0x22, 0x00, 0x46, 0x5b, 0xab,
126 	0xa1, 0x7a, 0xe9, 0x5d, 0xa0, 0x94, 0x44, 0x33, 0x36, 0x43, 0x9a, 0xc9, 0x05, 0xc0, 0xe0, 0xae,
127 	0x66, 0xb6, 0x7a, 0xd9, 0x19, 0x4e, 0xbd, 0xb5, 0xd9, 0x1b, 0xee, 0xdb, 0x86, 0x8a, 0x4b, 0xd5,
128 	0xa6, 0xdd, 0x74, 0x5b, 0x94, 0x17, 0x55, 0x40, 0x85, 0xda, 0x46, 0x99, 0x26, 0x17, 0xad, 0x1d,
129 	0x31, 0x66, 0x84, 0x6e, 0x28, 0xa4, 0xf7, 0xf6, 0x91, 0x49, 0x44, 0x83, 0xeb, 0x48, 0x7c, 0x98,
130 	0x03, 0x2f, 0x48, 0x32, 0x19, 0x0d, 0xb7, 0xe5, 0xd5, 0x98, 0xc7, 0x90, 0x03, 0x10, 0xeb, 0x20,
131 	0xa3, 0x2c, 0x4c, 0x4d, 0xa9, 0xd5, 0x75, 0x91, 0x4b, 0xca, 0xa9, 0xe1, 0x08, 0x7d, 0x48, 0x69,
132 	0x4e, 0x8c, 0x8b, 0x7a, 0x20, 0x6e, 0x27, 0xc8, 0x9d, 0xf1, 0xbf, 0x65, 0xca, 0xf5, 0xeb, 0x12,
133 	0xfc, 0x64, 0x47, 0xfd, 0x66, 0xae, 0x03, 0x6b, 0x39, 0x05, 0x8c, 0x58, 0x0e, 0xf1, 0xf1, 0x71,
134 	0x96, 0x20, 0x59, 0x69, 0x9c, 0x60, 0xc9, 0x6f, 0x97, 0xd3, 0xde, 0x11, 0x4e, 0xf7, 0x83, 0x69,
135 	0xb7, 0x3a, 0x9f, 0x37, 0x92, 0x2d, 0x45, 0x07, 0xc0, 0xa1, 0xae, 0xb3, 0x31, 0x04, 0x8d, 0x0b,
136 	0x82, 0x1b, 0xea, 0x02, 0x8f, 0x06, 0xa0, 0x81, 0x50, 0x50, 0xb2, 0xa0, 0x63, 0x63, 0x00, 0x82,
137 	0x09, 0x39, 0x5a, 0x47, 0xf5, 0x8b, 0x39, 0xa7, 0x48, 0x6e, 0x83, 0x3e, 0x9d, 0x66, 0x3d, 0x22,
138 	0x4c, 0xcd, 0xc8, 0x2f, 0xac, 0xf5, 0x04, 0x25, 0x30, 0xd4, 0xd0, 0x90, 0x64, 0x90, 0x84, 0xa8,
139 	0x4f, 0xea, 0xbf, 0x95, 0x59, 0xf5, 0x1b, 0x9e, 0x9b, 0xb8, 0x0c, 0x66, 0x3d, 0xc2, 0x4a, 0x93,
140 	0x61, 0xee, 0x05, 0x05, 0x39, 0xe4, 0x40, 0x88, 0xdf, 0x9e, 0x2b, 0xc7, 0x6c, 0x48, 0x60, 0xc7,
141 	0xfc, 0x5f, 0xb3, 0x65, 0xc6, 0x36, 0x7f, 0x43, 0xbe, 0xa8, 0xf2, 0x0a, 0x13, 0xf0, 0x31, 0x9f,
142 	0x62, 0x9d, 0x31, 0xd4, 0xa2, 0x26, 0x0f, 0x81, 0x45, 0xcb, 0x10, 0x2d, 0xce, 0x01, 0x87, 0xef,
143 	0x29, 0x12, 0xdc, 0x6d, 0xbe, 0x9a, 0xb2, 0xcf, 0x69, 0x94, 0x61, 0x0d, 0xe6, 0x57, 0x06, 0xe2,
144 	0x35, 0x38, 0xa1, 0x71, 0x22, 0x00, 0x1f, 0xc2, 0x0f, 0x51, 0xf0, 0x82, 0x5a, 0xee, 0xde, 0x00,
145 	0x2d, 0xa8, 0xf5, 0x4a, 0x83, 0x37, 0x2d, 0xae, 0x57, 0xd6, 0x53, 0xca, 0x45, 0xde, 0xd4, 0xd3,
146 	0xe8, 0xcb, 0xa0, 0x1e, 0xbd, 0xb7, 0xcb, 0xc8, 0xd3, 0x39, 0xe3, 0x67, 0x96, 0x57, 0x57, 0xea,
147 	0x27, 0xa7, 0xb2, 0xce, 0x32, 0xcb, 0x0c, 0xfa, 0xf3, 0xf2, 0x2a, 0xf2, 0x19, 0x3e, 0xf0, 0x14,
148 	0x41, 0xcf, 0x7a, 0xd7, 0x50, 0x48, 0xf4, 0x78, 0x92, 0x74, 0x34, 0x8b, 0x3e, 0xcd, 0x72, 0x29,
149 	0x7d, 0x34, 0x77, 0x94, 0x24, 0x20, 0xf4, 0xb6, 0xe3, 0x5e, 0x86, 0x0f, 0x45, 0x4a, 0x5e, 0xb6,
150 	0x1c, 0x2f, 0x59, 0x4d, 0x2c, 0x72, 0x0f, 0xa5, 0xdb, 0x70, 0x9e, 0xc4, 0x57, 0x31, 0x77, 0xa5,
151 	0x69, 0x68, 0x4e, 0x83, 0x53, 0x1e, 0x25, 0x72, 0x92, 0x4d, 0x3e, 0x49, 0xca, 0x31, 0x6b, 0xa7,
152 	0x20, 0xc4, 0x99, 0x2b, 0xbf, 0x3a, 0x9b, 0x38, 0xa4, 0xba, 0x93, 0x94, 0x46, 0xb7, 0x2d, 0x11,
153 	0xd0, 0x9d, 0x29, 0xe5, 0x74, 0xc6, 0x2a, 0x7f, 0x98, 0x07, 0x91, 0xd2, 0xa6, 0x4c, 0x94, 0x32,
154 	0x49, 0x38, 0x15, 0x80, 0xe5, 0x10, 0xb4, 0x57, 0x57, 0xea, 0x33, 0x55, 0xd6, 0xe8, 0xb2, 0xb0,
155 	0xd5, 0x54, 0x5c, 0x75, 0x4c, 0xbd, 0xc6, 0xd0, 0xd2, 0xc5, 0x86, 0x86, 0xa5, 0xa7, 0xc9, 0x30,
156 	0x8d, 0x82, 0x63, 0xc4, 0x52, 0xdf, 0xbd, 0x1e, 0x25, 0x8d, 0x57, 0x91, 0x57, 0x94, 0x3b, 0xec,
157 	0xf8, 0x4b, 0xa2, 0x6e, 0x44, 0x24, 0xf1, 0x77, 0xdf, 0xc3, 0x58, 0xdb, 0x0c, 0x62, 0x4e, 0x32,
158 	0x5c, 0x20, 0x93, 0x47, 0xdb, 0xa7, 0xd1, 0x02, 0xc9, 0xdf, 0x0e, 0x23, 0x11, 0x45, 0xed, 0x7b,
159 	0xaa, 0xb7, 0x66, 0xd7, 0x23, 0xb0, 0x43, 0xec, 0x79, 0x4c, 0x90, 0xa8, 0x5f, 0x02, 0x0d, 0xf6,
160 	0x19, 0x03, 0x23, 0xf7, 0xe3, 0x6f, 0x40, 0xe2, 0x33, 0xf1, 0x4b, 0x42, 0x66, 0x1a, 0x24, 0xaa,
161 	0x31, 0xcc, 0xdc, 0xbf, 0x63, 0x84, 0xe9, 0x2c, 0x99, 0x99, 0x8d, 0xc5, 0x3c, 0xac, 0x4e, 0xd7,
162 	0x6c, 0xb2, 0xb1, 0x51, 0xe6, 0x4a, 0x7d, 0x14, 0x56, 0x01, 0xfe, 0x14, 0x3a, 0xb4, 0x78, 0xc9,
163 	0xa3, 0xbb, 0x96, 0xf2, 0x36, 0x9b, 0x79, 0x5c, 0x0b, 0xed, 0x22, 0x24, 0xef, 0x5d, 0x5f, 0x57,
164 	0xe3, 0x6e, 0x81, 0xe1, 0x8d, 0x68, 0xe1, 0x7f, 0x7a, 0xeb, 0x85, 0x6b, 0x44, 0xa6, 0x22, 0xb8,
165 	0x6e, 0x47, 0x59, 0xd3, 0xb9, 0x65, 0xc8, 0x94, 0x22, 0xee, 0x0d, 0x99, 0x2d, 0x92, 0x83, 0xf8,
166 	0x35, 0xc1, 0x06, 0x80, 0x53, 0x47, 0xde, 0x65, 0x5b, 0x8f, 0xe4, 0x49, 0x71, 0xb6, 0x86, 0x98,
167 	0x0a, 0x7b, 0xc4, 0xe1, 0x6b, 0xb6, 0x83, 0xe5, 0x08, 0xb0, 0x99, 0xd3, 0x15, 0x91, 0x5e, 0x9e,
168 	0xa2, 0x66, 0xbe, 0x7d, 0x48, 0x15, 0x17, 0xf7, 0x0f, 0x52, 0x73, 0x11, 0xbf, 0xe8, 0xe6, 0xf3,
169 	0x2a, 0xef, 0xd4, 0xa0, 0xac, 0x2e, 0xef, 0xb8, 0x22, 0xc9, 0x9d, 0xbc, 0xe2, 0x91, 0xa1, 0xf0,
170 	0x6d, 0xf5, 0x52, 0x4a, 0xff, 0x5c, 0x30, 0x54, 0xd3, 0x87, 0x8e, 0x98, 0x99, 0x74, 0x92, 0xd4,
171 	0xb8, 0x9e, 0x44, 0x35, 0x72, 0xc4, 0x59, 0xa4, 0x12, 0x07, 0x54, 0x66, 0x99, 0x86, 0xba, 0x89,
172 	0x36, 0xaf, 0x84, 0xaa, 0xf1, 0xa3, 0x29, 0xa6, 0x73, 0xf5, 0x48, 0x42, 0xae, 0x61, 0xa4, 0x01,
173 	0xbf, 0x06, 0x21, 0x78, 0x62, 0xc9, 0x41, 0xe2, 0x34, 0x3a, 0x5c, 0x51, 0xca, 0xfe, 0x3e, 0x63,
174 	0x47, 0xc3, 0xcc, 0x3d, 0x61, 0x48, 0xe8, 0x77, 0xb0, 0x3a, 0x01, 0x45, 0x9c, 0x79, 0xac, 0x89,
175 	0x00, 0x4b, 0xfb, 0xe2, 0xb8, 0x68, 0xca, 0xb7, 0x1c, 0x45, 0xaa, 0x29, 0x5a, 0x8a, 0xb0, 0xae,
176 	0x36, 0x21, 0x38, 0x6d, 0xb6, 0xea, 0x51, 0x60, 0xa2, 0x50, 0x12, 0x71, 0x19, 0x34, 0xe3, 0x77,
177 	0xc5, 0xa9, 0xc7, 0x88, 0x59, 0x65, 0x0e, 0x8f, 0xdc, 0x3a, 0x7e, 0x31, 0xe3, 0x0c, 0xc5, 0xa4,
178 	0xc5, 0xe4, 0x33, 0x82, 0x8e, 0xab, 0xb0, 0x0c, 0x02, 0x4f, 0x50, 0xbe, 0x22, 0x8d, 0x0a, 0xb1,
179 	0x52, 0xbf, 0xc9, 0xb1, 0xa7, 0x9c, 0xe4, 0xe8, 0x89, 0x13, 0xb4, 0x24, 0x60, 0x74, 0xc8, 0xdc,
180 	0x47, 0x72, 0xa6, 0x5b, 0xc5, 0x05, 0x14, 0x1b, 0x04, 0x89, 0x00, 0x88, 0x9f, 0xf8, 0x29, 0x0b,
181 	0xca, 0x42, 0x7a, 0x3f, 0x19, 0x6a, 0xaa, 0x73, 0x0d, 0xf8, 0x88, 0x4a, 0x3d, 0x41, 0xf7, 0x4e,
182 	0xda, 0x21, 0xad, 0x75, 0x98, 0x65, 0x49, 0xca, 0xb8, 0x6f, 0x3c, 0xb5, 0x1a, 0x5d, 0x44, 0xf8,
183 	0x40, 0x2e, 0x49, 0xf9, 0xef, 0x69, 0xa9, 0x4d, 0xf0, 0xb2, 0xb6, 0xd2, 0xfc, 0xd9, 0x81, 0xc9,
184 	0x7b, 0x74, 0x22, 0xb3, 0x3a, 0x4d, 0x91, 0x13, 0x7f, 0xb1, 0xf2, 0x3f, 0x2c, 0xd5, 0x27, 0xf3,
185 	0x68, 0x43, 0xb6, 0x51, 0x79, 0xf6, 0x0f, 0x02, 0xc3, 0xc0, 0x7a, 0xee, 0xc7, 0x0f, 0xc9, 0x7e,
186 	0xba, 0x13, 0xb6, 0x44, 0xba, 0xf9, 0x99, 0xb8, 0x3f, 0x6b, 0xcd, 0x3e, 0x41, 0x52, 0x28, 0x9e,
187 	0xfd, 0x13, 0x84, 0xec, 0xc0, 0xd0, 0x09, 0x19, 0x8c, 0xf1, 0xff, 0xa5, 0x7a, 0xa0, 0x6c, 0x84,
188 	0xb4, 0xb4, 0xf7, 0x08, 0xd2, 0xc9, 0x68, 0x4d, 0x83, 0x59, 0x93, 0xb6, 0xad, 0x28, 0x9a, 0xb0,
189 	0xb3, 0xde, 0x76, 0x09, 0xc1, 0x53, 0x83, 0x8c, 0x37, 0xa4, 0xa1, 0x40, 0xd7, 0x02, 0x50, 0x09,
190 	0x6e, 0x48, 0x17, 0x2a, 0x83, 0x21, 0xa2, 0xe6, 0x2d, 0x50, 0x55, 0xe1, 0x78, 0x60, 0x85, 0x11,
191 	0x61, 0x74, 0x32, 0xca, 0x03, 0xc6, 0x86, 0xd2, 0xf8, 0xb8, 0x80, 0xba, 0x25, 0x4e, 0x9f, 0x10,
192 	0x16, 0x91, 0xdc, 0x20, 0x1f, 0xa8, 0x54, 0xe9, 0x27, 0x1c, 0xc4, 0xa2, 0x87, 0x03, 0x28, 0x24,
193 	0xe9, 0x04, 0x46, 0xdf, 0x95, 0xf1, 0x0c, 0x71, 0x79, 0xa9, 0x83, 0x9e, 0x52, 0x91, 0x00, 0xe5,
194 	0x0d, 0xee, 0x13, 0x9f, 0x1f, 0xe0, 0x2a, 0xd5, 0xaf, 0xc2, 0x9b, 0x34, 0xde, 0x44, 0x11, 0x59,
195 	0x47, 0x7e, 0xb6, 0x0f, 0x2f, 0x88, 0x9a, 0xa3, 0x02, 0x68, 0x32, 0x1e, 0x56, 0xd1, 0x17, 0x05,
196 	0x6f, 0x36, 0x0c, 0x2f, 0xbe, 0x88, 0xef, 0x91, 0x22, 0x5b, 0xfd, 0x28, 0xf0, 0x1a, 0xf1, 0x17,
197 	0x4f, 0x0c, 0x15, 0xab, 0x26, 0x3f, 0x00, 0x15, 0xd9, 0x0f, 0x40, 0xc6, 0x72, 0x69, 0xb1, 0x3e,
198 	0x94, 0xe5, 0x12, 0xff, 0xbc, 0x03, 0x79, 0xd9, 0x68, 0xcc, 0x54, 0x28, 0xc6, 0x93, 0x71, 0x41,
199 	0x7f, 0x2e, 0xaf, 0x92, 0xe3, 0xd4, 0xd4, 0x71, 0x45, 0xee, 0xb8, 0x71, 0x0f, 0xc5, 0x1e, 0xa4,
200 	0x01, 0x75, 0xea, 0xfd, 0x5f, 0xf1, 0x53, 0xcf, 0xb0, 0x77, 0xdb, 0x3a, 0xda, 0x37, 0x91, 0xe6,
201 	0x67, 0x7f, 0x3c, 0x3b, 0x23, 0x44, 0xc9, 0xf6, 0xea, 0xd9, 0x16, 0xc6, 0xad, 0xe6, 0xb1, 0x91,
202 	0x4f, 0x67, 0x07, 0x12, 0xf4, 0x2b, 0xf4, 0xd4, 0x94, 0xc0, 0x25, 0x1a, 0x46, 0x01, 0x98, 0xe0,
203 	0x68, 0xac, 0x7b, 0x5a, 0xa7, 0x0c, 0x15, 0xf7, 0xfc, 0x1f, 0xfd, 0x40, 0x73, 0xeb, 0x9a, 0x93,
204 	0xe3, 0xb0, 0x88, 0x01, 0xa5, 0x37, 0xbe, 0x0f, 0x62, 0x4c, 0xa9, 0xd0, 0x78, 0x3b, 0xfe, 0xf9,
205 	0x8e, 0x83, 0x5a, 0xd2, 0x3a, 0x59, 0xd3, 0x70, 0x15, 0x43, 0x3c, 0x16, 0x45, 0x41, 0xa3, 0x84,
206 	0x66, 0x7c, 0xd4, 0x7d, 0xb7, 0x75, 0xde, 0xfe, 0x57, 0x50, 0x82, 0x3a, 0x2d, 0x59, 0x46, 0xbf,
207 	0x7d, 0x8a, 0x87, 0xf9, 0x9d, 0x74, 0x33, 0x0e, 0x79, 0xc5, 0xf8, 0x73, 0xcd, 0xff, 0x00, 0x30,
208 	0x4a, 0x56, 0xa4 };
209 
210 uint8_t fsapfs_test_deflate_uncompressed_byte_stream[ 7640 ] = {
211 	0x09, 0x09, 0x20, 0x20, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x45, 0x53, 0x53, 0x45, 0x52, 0x20,
212 	0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x4c,
213 	0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
214 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x56, 0x65,
215 	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x2c, 0x20, 0x32, 0x39, 0x20, 0x4a, 0x75, 0x6e, 0x65,
216 	0x20, 0x32, 0x30, 0x30, 0x37, 0x0a, 0x0a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68,
217 	0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x32, 0x30, 0x30, 0x37, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20,
218 	0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74,
219 	0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x3c, 0x68, 0x74, 0x74, 0x70, 0x3a,
220 	0x2f, 0x2f, 0x66, 0x73, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x45, 0x76, 0x65,
221 	0x72, 0x79, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74,
222 	0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64,
223 	0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x65, 0x72, 0x62, 0x61, 0x74,
224 	0x69, 0x6d, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x0a, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
225 	0x69, 0x73, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
226 	0x65, 0x6e, 0x74, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x69, 0x6e,
227 	0x67, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f,
228 	0x77, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x76, 0x65,
229 	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55,
230 	0x20, 0x4c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20,
231 	0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x69,
232 	0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x73, 0x0a, 0x74, 0x68, 0x65, 0x20,
233 	0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74,
234 	0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20,
235 	0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e,
236 	0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x0a, 0x4c, 0x69, 0x63, 0x65,
237 	0x6e, 0x73, 0x65, 0x2c, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65,
238 	0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
239 	0x6e, 0x61, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20,
240 	0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x2e, 0x0a, 0x0a, 0x20,
241 	0x20, 0x30, 0x2e, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x44,
242 	0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x0a, 0x0a, 0x20, 0x20,
243 	0x41, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x68, 0x65, 0x72, 0x65, 0x69, 0x6e, 0x2c, 0x20,
244 	0x22, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x72,
245 	0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
246 	0x20, 0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65,
247 	0x73, 0x73, 0x65, 0x72, 0x0a, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62,
248 	0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64,
249 	0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x50, 0x4c, 0x22, 0x20, 0x72,
250 	0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
251 	0x20, 0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x0a, 0x47, 0x65,
252 	0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63,
253 	0x65, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x22, 0x54, 0x68, 0x65, 0x20, 0x4c, 0x69,
254 	0x62, 0x72, 0x61, 0x72, 0x79, 0x22, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f,
255 	0x20, 0x61, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20,
256 	0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73,
257 	0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
258 	0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
259 	0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65,
260 	0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
261 	0x64, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x41, 0x6e, 0x20, 0x22,
262 	0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x69, 0x73, 0x20,
263 	0x61, 0x6e, 0x79, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61,
264 	0x6b, 0x65, 0x73, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e,
265 	0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64,
266 	0x0a, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2c,
267 	0x20, 0x62, 0x75, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f,
268 	0x74, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x62, 0x61, 0x73, 0x65,
269 	0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79,
270 	0x2e, 0x0a, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62,
271 	0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
272 	0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20,
273 	0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x65, 0x6d, 0x65,
274 	0x64, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x0a, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x69, 0x6e,
275 	0x67, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x70,
276 	0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c,
277 	0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x41, 0x20, 0x22, 0x43, 0x6f,
278 	0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x22, 0x20, 0x69, 0x73, 0x20,
279 	0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20,
280 	0x62, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20,
281 	0x6c, 0x69, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x0a, 0x41, 0x70, 0x70, 0x6c, 0x69,
282 	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20,
283 	0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x61,
284 	0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
285 	0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x0a,
286 	0x77, 0x69, 0x74, 0x68, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43,
287 	0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x77, 0x61, 0x73,
288 	0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x63, 0x61,
289 	0x6c, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64,
290 	0x0a, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68,
291 	0x65, 0x20, 0x22, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65,
292 	0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22,
293 	0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20,
294 	0x57, 0x6f, 0x72, 0x6b, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x43,
295 	0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75,
296 	0x72, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x62,
297 	0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75,
298 	0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20,
299 	0x63, 0x6f, 0x64, 0x65, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e,
300 	0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65,
301 	0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e,
302 	0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61,
303 	0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x72, 0x65, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20,
304 	0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
305 	0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x74,
306 	0x68, 0x65, 0x20, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
307 	0x6e, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x22, 0x43, 0x6f, 0x72, 0x72, 0x65,
308 	0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
309 	0x74, 0x69, 0x6f, 0x6e, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61,
310 	0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x6d,
311 	0x65, 0x61, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
312 	0x63, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x75, 0x72,
313 	0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20,
314 	0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x63,
315 	0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x64, 0x61, 0x74, 0x61, 0x0a,
316 	0x61, 0x6e, 0x64, 0x20, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x67,
317 	0x72, 0x61, 0x6d, 0x73, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
318 	0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20,
319 	0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x66, 0x72,
320 	0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
321 	0x6f, 0x6e, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e,
322 	0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x4c, 0x69, 0x62,
323 	0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f,
324 	0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x2e, 0x0a, 0x0a, 0x20, 0x20,
325 	0x31, 0x2e, 0x20, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20,
326 	0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
327 	0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x50, 0x4c, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59, 0x6f, 0x75,
328 	0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x61, 0x20, 0x63, 0x6f,
329 	0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72,
330 	0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x33, 0x20, 0x61, 0x6e, 0x64, 0x20,
331 	0x34, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73,
332 	0x65, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20,
333 	0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x62, 0x79, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
334 	0x20, 0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x50,
335 	0x4c, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x32, 0x2e, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x69,
336 	0x6e, 0x67, 0x20, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x56, 0x65, 0x72, 0x73,
337 	0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x49, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20,
338 	0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66,
339 	0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2c, 0x20, 0x61, 0x6e,
340 	0x64, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66,
341 	0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x0a, 0x66, 0x61, 0x63, 0x69,
342 	0x6c, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61,
343 	0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x64, 0x61, 0x74,
344 	0x61, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64,
345 	0x20, 0x62, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
346 	0x6f, 0x6e, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65,
347 	0x20, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x28, 0x6f, 0x74, 0x68, 0x65, 0x72,
348 	0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x67, 0x75,
349 	0x6d, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e,
350 	0x20, 0x74, 0x68, 0x65, 0x0a, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x69, 0x73,
351 	0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
352 	0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x61,
353 	0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64,
354 	0x69, 0x66, 0x69, 0x65, 0x64, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x0a, 0x0a,
355 	0x20, 0x20, 0x20, 0x61, 0x29, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73,
356 	0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64,
357 	0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x6b, 0x65,
358 	0x20, 0x61, 0x20, 0x67, 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x61, 0x69, 0x74, 0x68, 0x20, 0x65, 0x66,
359 	0x66, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72,
360 	0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65,
361 	0x76, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
362 	0x69, 0x6f, 0x6e, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70,
363 	0x70, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
364 	0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x74, 0x68, 0x65,
365 	0x20, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x20,
366 	0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x65,
367 	0x72, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x77, 0x68, 0x61, 0x74, 0x65, 0x76,
368 	0x65, 0x72, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x73, 0x20, 0x70,
369 	0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x6d,
370 	0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x66, 0x75, 0x6c, 0x2c, 0x20, 0x6f, 0x72, 0x0a, 0x0a, 0x20,
371 	0x20, 0x20, 0x62, 0x29, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47,
372 	0x4e, 0x55, 0x20, 0x47, 0x50, 0x4c, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6e, 0x6f, 0x6e,
373 	0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
374 	0x6e, 0x61, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20,
375 	0x6f, 0x66, 0x0a, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e,
376 	0x73, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f,
377 	0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x33,
378 	0x2e, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x49, 0x6e,
379 	0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x4d, 0x61, 0x74, 0x65,
380 	0x72, 0x69, 0x61, 0x6c, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72,
381 	0x79, 0x20, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x0a,
382 	0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f,
383 	0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x70,
384 	0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e,
385 	0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69,
386 	0x61, 0x6c, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x0a, 0x61, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
387 	0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x61,
388 	0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72,
389 	0x79, 0x2e, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x76,
390 	0x65, 0x79, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x0a, 0x63,
391 	0x6f, 0x64, 0x65, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20,
392 	0x6f, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x2c, 0x20,
393 	0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2c, 0x20, 0x69,
394 	0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74,
395 	0x65, 0x64, 0x0a, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x6e,
396 	0x6f, 0x74, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6e, 0x75,
397 	0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
398 	0x72, 0x73, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75,
399 	0x72, 0x65, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61,
400 	0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6d, 0x61,
401 	0x6c, 0x6c, 0x20, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x6c, 0x69, 0x6e,
402 	0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20,
403 	0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x0a, 0x28, 0x74, 0x65, 0x6e, 0x20, 0x6f,
404 	0x72, 0x20, 0x66, 0x65, 0x77, 0x65, 0x72, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x69, 0x6e,
405 	0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x6f,
406 	0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c,
407 	0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x3a, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x29, 0x20, 0x47,
408 	0x69, 0x76, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x6f,
409 	0x74, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63,
410 	0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
411 	0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x0a,
412 	0x20, 0x20, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73,
413 	0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x61,
414 	0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x61, 0x6e,
415 	0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x75, 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x0a, 0x20, 0x20,
416 	0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73,
417 	0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x29,
418 	0x20, 0x41, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f,
419 	0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
420 	0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e,
421 	0x55, 0x20, 0x47, 0x50, 0x4c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c,
422 	0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
423 	0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x34, 0x2e, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e,
424 	0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59, 0x6f, 0x75,
425 	0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x61, 0x20, 0x43, 0x6f,
426 	0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x75, 0x6e, 0x64, 0x65,
427 	0x72, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20,
428 	0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2c, 0x0a, 0x74, 0x61, 0x6b,
429 	0x65, 0x6e, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x2c, 0x20, 0x65, 0x66, 0x66,
430 	0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20,
431 	0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63,
432 	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x70, 0x6f, 0x72,
433 	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62,
434 	0x72, 0x61, 0x72, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69,
435 	0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57,
436 	0x6f, 0x72, 0x6b, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x0a,
437 	0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20,
438 	0x64, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x6d,
439 	0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x69, 0x66,
440 	0x20, 0x79, 0x6f, 0x75, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x65, 0x61, 0x63,
441 	0x68, 0x20, 0x6f, 0x66, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69,
442 	0x6e, 0x67, 0x3a, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x29, 0x20, 0x47, 0x69, 0x76, 0x65, 0x20,
443 	0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65,
444 	0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20,
445 	0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20,
446 	0x57, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65,
447 	0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64,
448 	0x20, 0x69, 0x6e, 0x20, 0x69, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
449 	0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20,
450 	0x69, 0x74, 0x73, 0x20, 0x75, 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x63,
451 	0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c,
452 	0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x29, 0x20, 0x41,
453 	0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6d,
454 	0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
455 	0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e,
456 	0x55, 0x20, 0x47, 0x50, 0x4c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c,
457 	0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
458 	0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x63, 0x29, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x61,
459 	0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x74,
460 	0x68, 0x61, 0x74, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x20, 0x63, 0x6f, 0x70,
461 	0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x20, 0x64,
462 	0x75, 0x72, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
463 	0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
464 	0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65,
465 	0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79,
466 	0x20, 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20,
467 	0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x2c, 0x20, 0x61, 0x73, 0x20, 0x77, 0x65, 0x6c, 0x6c,
468 	0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20,
469 	0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73,
470 	0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x70,
471 	0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47,
472 	0x50, 0x4c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x63, 0x65,
473 	0x6e, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x20,
474 	0x20, 0x20, 0x64, 0x29, 0x20, 0x44, 0x6f, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74,
475 	0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x3a, 0x0a, 0x0a, 0x20,
476 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x29, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20,
477 	0x74, 0x68, 0x65, 0x20, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x43, 0x6f, 0x72, 0x72,
478 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
479 	0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73,
480 	0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
481 	0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65,
482 	0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x41,
483 	0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x20,
484 	0x69, 0x6e, 0x20, 0x61, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
485 	0x20, 0x73, 0x75, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x2c, 0x20, 0x61,
486 	0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x74,
487 	0x68, 0x61, 0x74, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20,
488 	0x75, 0x73, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
489 	0x65, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x6c, 0x69,
490 	0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
491 	0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69,
492 	0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x0a, 0x20, 0x20,
493 	0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x20,
494 	0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75,
495 	0x63, 0x65, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x43, 0x6f,
496 	0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x69, 0x6e, 0x20,
497 	0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x6e, 0x6e, 0x65,
498 	0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x73,
499 	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x36, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
500 	0x47, 0x4e, 0x55, 0x20, 0x47, 0x50, 0x4c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x76,
501 	0x65, 0x79, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x72,
502 	0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63,
503 	0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x31, 0x29, 0x20, 0x55, 0x73,
504 	0x65, 0x20, 0x61, 0x20, 0x73, 0x75, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x73, 0x68, 0x61,
505 	0x72, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x6d, 0x65, 0x63, 0x68,
506 	0x61, 0x6e, 0x69, 0x73, 0x6d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x69, 0x6e,
507 	0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
508 	0x20, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x20, 0x20, 0x41, 0x20, 0x73, 0x75,
509 	0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d,
510 	0x20, 0x69, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x28, 0x61, 0x29,
511 	0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x61, 0x74, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x74, 0x69, 0x6d,
512 	0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20,
513 	0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x61,
514 	0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x6f,
515 	0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6d,
516 	0x70, 0x75, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x79, 0x73,
517 	0x74, 0x65, 0x6d, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x28, 0x62, 0x29, 0x20, 0x77, 0x69, 0x6c,
518 	0x6c, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
519 	0x6c, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69,
520 	0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
521 	0x20, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79,
522 	0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61,
523 	0x63, 0x65, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69,
524 	0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x0a, 0x20, 0x20,
525 	0x20, 0x20, 0x20, 0x20, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x0a, 0x0a,
526 	0x20, 0x20, 0x20, 0x65, 0x29, 0x20, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x49, 0x6e,
527 	0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72,
528 	0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6f, 0x6e, 0x6c, 0x79,
529 	0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x74,
530 	0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65,
531 	0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64,
532 	0x65, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69,
533 	0x6f, 0x6e, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
534 	0x20, 0x36, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x47, 0x4e, 0x55,
535 	0x20, 0x47, 0x50, 0x4c, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x74,
536 	0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x61,
537 	0x74, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69,
538 	0x6f, 0x6e, 0x20, 0x69, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61,
539 	0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x6e,
540 	0x64, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x69,
541 	0x66, 0x69, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20,
542 	0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20,
543 	0x57, 0x6f, 0x72, 0x6b, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x62, 0x79,
544 	0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20,
545 	0x72, 0x65, 0x6c, 0x69, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20,
546 	0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74,
547 	0x68, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72,
548 	0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x6e, 0x6b,
549 	0x65, 0x64, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x28, 0x49, 0x66, 0x0a,
550 	0x20, 0x20, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f,
551 	0x6e, 0x20, 0x34, 0x64, 0x30, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x61,
552 	0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
553 	0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61,
554 	0x6e, 0x79, 0x0a, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x61,
555 	0x6c, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20,
556 	0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65,
557 	0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
558 	0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x2e, 0x20, 0x49, 0x66,
559 	0x20, 0x79, 0x6f, 0x75, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20,
560 	0x34, 0x64, 0x31, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x70, 0x72,
561 	0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c,
562 	0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
563 	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x6e,
564 	0x6e, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79,
565 	0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x36, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
566 	0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x50, 0x4c, 0x0a, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72,
567 	0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65,
568 	0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e,
569 	0x29, 0x0a, 0x0a, 0x20, 0x20, 0x35, 0x2e, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64,
570 	0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59,
571 	0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6c, 0x69, 0x62,
572 	0x72, 0x61, 0x72, 0x79, 0x20, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20,
573 	0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20,
574 	0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x4c, 0x69, 0x62,
575 	0x72, 0x61, 0x72, 0x79, 0x20, 0x73, 0x69, 0x64, 0x65, 0x20, 0x62, 0x79, 0x20, 0x73, 0x69, 0x64,
576 	0x65, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x6c, 0x69,
577 	0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x77,
578 	0x69, 0x74, 0x68, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72,
579 	0x79, 0x0a, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61,
580 	0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63,
581 	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e,
582 	0x6f, 0x74, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68,
583 	0x69, 0x73, 0x0a, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20,
584 	0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f,
585 	0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x75,
586 	0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x79, 0x6f,
587 	0x75, 0x72, 0x0a, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f,
588 	0x75, 0x20, 0x64, 0x6f, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
589 	0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x3a, 0x0a, 0x0a, 0x20, 0x20, 0x20,
590 	0x61, 0x29, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x20, 0x74, 0x68, 0x65,
591 	0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72,
592 	0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66,
593 	0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x62,
594 	0x61, 0x73, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c,
595 	0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2c, 0x20, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e,
596 	0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65,
597 	0x72, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69,
598 	0x74, 0x69, 0x65, 0x73, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x65,
599 	0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d,
600 	0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73,
601 	0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x29, 0x20, 0x47, 0x69, 0x76, 0x65, 0x20, 0x70,
602 	0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20,
603 	0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65,
604 	0x64, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x70,
605 	0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x73, 0x20,
606 	0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20,
607 	0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2c, 0x20, 0x61, 0x6e, 0x64,
608 	0x20, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x68, 0x65, 0x72,
609 	0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20,
610 	0x20, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x6e,
611 	0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66,
612 	0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x0a,
613 	0x0a, 0x20, 0x20, 0x36, 0x2e, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x65, 0x64, 0x20, 0x56, 0x65,
614 	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e,
615 	0x55, 0x20, 0x4c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
616 	0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e,
617 	0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x6f, 0x66,
618 	0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e,
619 	0x20, 0x6d, 0x61, 0x79, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x20, 0x72, 0x65, 0x76,
620 	0x69, 0x73, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x6e, 0x65, 0x77, 0x20,
621 	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
622 	0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72,
623 	0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73,
624 	0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74,
625 	0x69, 0x6d, 0x65, 0x2e, 0x20, 0x53, 0x75, 0x63, 0x68, 0x20, 0x6e, 0x65, 0x77, 0x0a, 0x76, 0x65,
626 	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x73,
627 	0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x70, 0x69, 0x72, 0x69, 0x74,
628 	0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20,
629 	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6d, 0x61, 0x79,
630 	0x0a, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69,
631 	0x6c, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6e, 0x65, 0x77,
632 	0x20, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e,
633 	0x63, 0x65, 0x72, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x76,
634 	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20,
635 	0x61, 0x20, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67,
636 	0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2e,
637 	0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20,
638 	0x61, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20,
639 	0x69, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61,
640 	0x74, 0x20, 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62,
641 	0x65, 0x72, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x6f, 0x66, 0x20,
642 	0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x47,
643 	0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69,
644 	0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x22, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6c, 0x61,
645 	0x74, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x0a, 0x61, 0x70, 0x70,
646 	0x6c, 0x69, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20,
647 	0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20,
648 	0x6f, 0x66, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65,
649 	0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69,
650 	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20,
651 	0x74, 0x68, 0x61, 0x74, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x76,
652 	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x79,
653 	0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x70,
654 	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20,
655 	0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x46, 0x6f,
656 	0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65,
657 	0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x61, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x0a,
658 	0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x69, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73,
659 	0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x61, 0x20, 0x76,
660 	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66,
661 	0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x0a,
662 	0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c,
663 	0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20,
664 	0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69,
665 	0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65,
666 	0x73, 0x73, 0x65, 0x72, 0x0a, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62,
667 	0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x65, 0x76, 0x65, 0x72,
668 	0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68,
669 	0x65, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20,
670 	0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x49,
671 	0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x61, 0x73,
672 	0x20, 0x79, 0x6f, 0x75, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x69, 0x74,
673 	0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
674 	0x61, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x69,
675 	0x64, 0x65, 0x0a, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x66, 0x75, 0x74, 0x75, 0x72,
676 	0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
677 	0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x47, 0x65, 0x6e,
678 	0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65,
679 	0x6e, 0x73, 0x65, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x2c,
680 	0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x27, 0x73, 0x20, 0x70, 0x75,
681 	0x62, 0x6c, 0x69, 0x63, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f,
682 	0x66, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20,
683 	0x61, 0x6e, 0x79, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x0a, 0x70,
684 	0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69,
685 	0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x74,
686 	0x6f, 0x20, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x76, 0x65,
687 	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x4c, 0x69,
688 	0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x0a, 0x0a };
689 
690 #if defined( __GNUC__ ) && !defined( LIBFSAPFS_DLL_IMPORT )
691 
692 /* Tests the libfsapfs_deflate_bit_stream_get_value function
693  * Returns 1 if successful or 0 if not
694  */
fsapfs_test_deflate_bit_stream_get_value(void)695 int fsapfs_test_deflate_bit_stream_get_value(
696      void )
697 {
698 	libfsapfs_deflate_bit_stream_t bit_stream;
699 
700 	libcerror_error_t *error = NULL;
701 	void *memset_result      = NULL;
702 	uint32_t value_32bit     = 0;
703 	int result               = 0;
704 
705 	/* Initialize test
706 	 */
707 	memset_result = memory_set(
708 	                 &bit_stream,
709 	                 0,
710 	                 sizeof( libfsapfs_deflate_bit_stream_t ) );
711 
712 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
713 	 "memset_result",
714 	 memset_result );
715 
716 	/* Test regular cases
717 	 */
718 	bit_stream.byte_stream        = fsapfs_test_deflate_compressed_byte_stream;
719 	bit_stream.byte_stream_size   = 2627;
720 	bit_stream.byte_stream_offset = 0;
721 	bit_stream.bit_buffer         = 0;
722 	bit_stream.bit_buffer_size    = 0;
723 
724 	result = libfsapfs_deflate_bit_stream_get_value(
725 	          &bit_stream,
726 	          0,
727 	          &value_32bit,
728 	          &error );
729 
730 	FSAPFS_TEST_ASSERT_EQUAL_INT(
731 	 "result",
732 	 result,
733 	 1 );
734 
735 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
736 	 "value_32bit",
737 	 value_32bit,
738 	 (uint32_t) 0x00000000UL );
739 
740 	FSAPFS_TEST_ASSERT_IS_NULL(
741 	 "error",
742 	 error );
743 
744 	FSAPFS_TEST_ASSERT_EQUAL_SIZE(
745 	 "bit_stream.byte_stream_offset",
746 	 bit_stream.byte_stream_offset,
747 	 (size_t) 0 );
748 
749 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
750 	 "bit_stream.bit_buffer",
751 	 bit_stream.bit_buffer,
752 	 (uint32_t) 0x00000000UL );
753 
754 	FSAPFS_TEST_ASSERT_EQUAL_UINT8(
755 	 "bit_stream.bit_buffer_size",
756 	 bit_stream.bit_buffer_size,
757 	 (uint8_t) 0 );
758 
759 	result = libfsapfs_deflate_bit_stream_get_value(
760 	          &bit_stream,
761 	          4,
762 	          &value_32bit,
763 	          &error );
764 
765 	FSAPFS_TEST_ASSERT_EQUAL_INT(
766 	 "result",
767 	 result,
768 	 1 );
769 
770 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
771 	 "value_32bit",
772 	 value_32bit,
773 	 (uint32_t) 0x00000008UL );
774 
775 	FSAPFS_TEST_ASSERT_IS_NULL(
776 	 "error",
777 	 error );
778 
779 	FSAPFS_TEST_ASSERT_EQUAL_SIZE(
780 	 "bit_stream.byte_stream_offset",
781 	 bit_stream.byte_stream_offset,
782 	 (size_t) 1 );
783 
784 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
785 	 "bit_stream.bit_buffer",
786 	 bit_stream.bit_buffer,
787 	 (uint32_t) 0x00000007UL );
788 
789 	FSAPFS_TEST_ASSERT_EQUAL_UINT8(
790 	 "bit_stream.bit_buffer_size",
791 	 bit_stream.bit_buffer_size,
792 	 (uint8_t) 4 );
793 
794 	result = libfsapfs_deflate_bit_stream_get_value(
795 	          &bit_stream,
796 	          12,
797 	          &value_32bit,
798 	          &error );
799 
800 	FSAPFS_TEST_ASSERT_EQUAL_INT(
801 	 "result",
802 	 result,
803 	 1 );
804 
805 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
806 	 "value_32bit",
807 	 value_32bit,
808 	 (uint32_t) 0x00000da7UL );
809 
810 	FSAPFS_TEST_ASSERT_IS_NULL(
811 	 "error",
812 	 error );
813 
814 	FSAPFS_TEST_ASSERT_EQUAL_SIZE(
815 	 "bit_stream.byte_stream_offset",
816 	 bit_stream.byte_stream_offset,
817 	 (size_t) 2 );
818 
819 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
820 	 "bit_stream.bit_buffer",
821 	 bit_stream.bit_buffer,
822 	 (uint32_t) 0x00000000UL );
823 
824 	FSAPFS_TEST_ASSERT_EQUAL_UINT8(
825 	 "bit_stream.bit_buffer_size",
826 	 bit_stream.bit_buffer_size,
827 	 (uint8_t) 0 );
828 
829 	result = libfsapfs_deflate_bit_stream_get_value(
830 	          &bit_stream,
831 	          32,
832 	          &value_32bit,
833 	          &error );
834 
835 	FSAPFS_TEST_ASSERT_EQUAL_INT(
836 	 "result",
837 	 result,
838 	 1 );
839 
840 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
841 	 "value_32bit",
842 	 value_32bit,
843 	 (uint32_t) 0x8f6d59bdUL );
844 
845 	FSAPFS_TEST_ASSERT_IS_NULL(
846 	 "error",
847 	 error );
848 
849 	FSAPFS_TEST_ASSERT_EQUAL_SIZE(
850 	 "bit_stream.byte_stream_offset",
851 	 bit_stream.byte_stream_offset,
852 	 (size_t) 6 );
853 
854 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
855 	 "bit_stream.bit_buffer",
856 	 bit_stream.bit_buffer,
857 	 (uint32_t) 0x00000000UL );
858 
859 	FSAPFS_TEST_ASSERT_EQUAL_UINT8(
860 	 "bit_stream.bit_buffer_size",
861 	 bit_stream.bit_buffer_size,
862 	 (uint8_t) 0 );
863 
864 	/* Test error cases
865 	 */
866 	bit_stream.byte_stream        = fsapfs_test_deflate_compressed_byte_stream;
867 	bit_stream.byte_stream_size   = 2627;
868 	bit_stream.byte_stream_offset = 0;
869 	bit_stream.bit_buffer         = 0;
870 	bit_stream.bit_buffer_size    = 0;
871 
872 	result = libfsapfs_deflate_bit_stream_get_value(
873 	          NULL,
874 	          32,
875 	          &value_32bit,
876 	          &error );
877 
878 	FSAPFS_TEST_ASSERT_EQUAL_INT(
879 	 "result",
880 	 result,
881 	 -1 );
882 
883 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
884 	 "error",
885 	 error );
886 
887 	libcerror_error_free(
888 	 &error );
889 
890 	result = libfsapfs_deflate_bit_stream_get_value(
891 	          &bit_stream,
892 	          64,
893 	          &value_32bit,
894 	          &error );
895 
896 	FSAPFS_TEST_ASSERT_EQUAL_INT(
897 	 "result",
898 	 result,
899 	 -1 );
900 
901 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
902 	 "error",
903 	 error );
904 
905 	libcerror_error_free(
906 	 &error );
907 
908 	result = libfsapfs_deflate_bit_stream_get_value(
909 	          &bit_stream,
910 	          32,
911 	          NULL,
912 	          &error );
913 
914 	FSAPFS_TEST_ASSERT_EQUAL_INT(
915 	 "result",
916 	 result,
917 	 -1 );
918 
919 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
920 	 "error",
921 	 error );
922 
923 	libcerror_error_free(
924 	 &error );
925 
926 	bit_stream.byte_stream_offset = 2627;
927 	bit_stream.bit_buffer_size    = 0;
928 
929 	result = libfsapfs_deflate_bit_stream_get_value(
930 	          &bit_stream,
931 	          32,
932 	          &value_32bit,
933 	          &error );
934 
935 	bit_stream.byte_stream_offset = 0;
936 
937 	FSAPFS_TEST_ASSERT_EQUAL_INT(
938 	 "result",
939 	 result,
940 	 -1 );
941 
942 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
943 	 "error",
944 	 error );
945 
946 	libcerror_error_free(
947 	 &error );
948 
949 	return( 1 );
950 
951 on_error:
952 	if( error != NULL )
953 	{
954 		libcerror_error_free(
955 		 &error );
956 	}
957 	return( 0 );
958 }
959 
960 /* Tests the libfsapfs_deflate_huffman_table_construct function
961  * Returns 1 if successful or 0 if not
962  */
fsapfs_test_deflate_huffman_table_construct(void)963 int fsapfs_test_deflate_huffman_table_construct(
964      void )
965 {
966 	uint16_t code_size_array[ 318 ];
967 
968 	libfsapfs_deflate_huffman_table_t table;
969 
970 	libcerror_error_t *error        = NULL;
971 	void *memset_result             = NULL;
972 	uint16_t symbol                 = 0;
973 	int result                      = 0;
974 
975 #if defined( HAVE_FSAPFS_TEST_MEMORY )
976 	int number_of_memset_fail_tests = 2;
977 	int test_number                 = 0;
978 #endif
979 
980 	/* Initialize test
981 	 */
982 	memset_result = memory_set(
983 	                 &table,
984 	                 0,
985 	                 sizeof( libfsapfs_deflate_huffman_table_t ) );
986 
987 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
988 	 "memset_result",
989 	 memset_result );
990 
991 	for( symbol = 0;
992 	     symbol < 318;
993 	     symbol++ )
994 	{
995 		if( symbol < 144 )
996 		{
997 			code_size_array[ symbol ] = 8;
998 		}
999 		else if( symbol < 256 )
1000 		{
1001 			code_size_array[ symbol ] = 9;
1002 		}
1003 		else if( symbol < 280 )
1004 		{
1005 			code_size_array[ symbol ] = 7;
1006 		}
1007 		else if( symbol < 288 )
1008 		{
1009 			code_size_array[ symbol ] = 8;
1010 		}
1011 		else
1012 		{
1013 			code_size_array[ symbol ] = 5;
1014 		}
1015 	}
1016 	/* Test regular cases
1017 	 */
1018 	result = libfsapfs_deflate_huffman_table_construct(
1019 	          &table,
1020 	          code_size_array,
1021 	          288,
1022 	          &error );
1023 
1024 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1025 	 "result",
1026 	 result,
1027 	 1 );
1028 
1029 	FSAPFS_TEST_ASSERT_IS_NULL(
1030 	 "error",
1031 	 error );
1032 
1033 	/* Test error cases
1034 	 */
1035 	result = libfsapfs_deflate_huffman_table_construct(
1036 	          NULL,
1037 	          code_size_array,
1038 	          288,
1039 	          &error );
1040 
1041 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1042 	 "result",
1043 	 result,
1044 	 -1 );
1045 
1046 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1047 	 "error",
1048 	 error );
1049 
1050 	libcerror_error_free(
1051 	 &error );
1052 
1053 	result = libfsapfs_deflate_huffman_table_construct(
1054 	          &table,
1055 	          NULL,
1056 	          288,
1057 	          &error );
1058 
1059 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1060 	 "result",
1061 	 result,
1062 	 -1 );
1063 
1064 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1065 	 "error",
1066 	 error );
1067 
1068 	libcerror_error_free(
1069 	 &error );
1070 
1071 	result = libfsapfs_deflate_huffman_table_construct(
1072 	          &table,
1073 	          code_size_array,
1074 	          -1,
1075 	          &error );
1076 
1077 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1078 	 "result",
1079 	 result,
1080 	 -1 );
1081 
1082 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1083 	 "error",
1084 	 error );
1085 
1086 	libcerror_error_free(
1087 	 &error );
1088 
1089 #if defined( HAVE_FSAPFS_TEST_MEMORY )
1090 
1091 	for( test_number = 0;
1092 	     test_number < number_of_memset_fail_tests;
1093 	     test_number++ )
1094 	{
1095 		/* Test libfsapfs_write_io_handle_initialize with memset failing
1096 		 */
1097 		fsapfs_test_memset_attempts_before_fail = test_number;
1098 
1099 		result = libfsapfs_deflate_huffman_table_construct(
1100 		          &table,
1101 		          code_size_array,
1102 		          288,
1103 		          &error );
1104 
1105 		if( fsapfs_test_memset_attempts_before_fail != -1 )
1106 		{
1107 			fsapfs_test_memset_attempts_before_fail = -1;
1108 		}
1109 		else
1110 		{
1111 			FSAPFS_TEST_ASSERT_EQUAL_INT(
1112 			 "result",
1113 			 result,
1114 			 -1 );
1115 
1116 			FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1117 			 "error",
1118 			 error );
1119 
1120 			libcerror_error_free(
1121 			 &error );
1122 		}
1123 	}
1124 #endif /* defined( HAVE_FSAPFS_TEST_MEMORY ) */
1125 
1126 	/* TODO test errornous data */
1127 
1128 	return( 1 );
1129 
1130 on_error:
1131 	if( error != NULL )
1132 	{
1133 		libcerror_error_free(
1134 		 &error );
1135 	}
1136 	return( 0 );
1137 }
1138 
1139 /* Tests the libfsapfs_deflate_bit_stream_get_huffman_encoded_value function
1140  * Returns 1 if successful or 0 if not
1141  */
fsapfs_test_deflate_bit_stream_get_huffman_encoded_value(void)1142 int fsapfs_test_deflate_bit_stream_get_huffman_encoded_value(
1143      void )
1144 {
1145 	libfsapfs_deflate_bit_stream_t bit_stream;
1146 	libfsapfs_deflate_huffman_table_t distances_table;
1147 	libfsapfs_deflate_huffman_table_t literals_table;
1148 
1149 	libcerror_error_t *error = NULL;
1150 	void *memset_result      = NULL;
1151 	uint32_t value_32bit     = 0;
1152 	int result               = 0;
1153 
1154 	/* Initialize test
1155 	 */
1156 	memset_result = memory_set(
1157 	                 &bit_stream,
1158 	                 0,
1159 	                 sizeof( libfsapfs_deflate_bit_stream_t ) );
1160 
1161 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1162 	 "memset_result",
1163 	 memset_result );
1164 
1165 	memset_result = memory_set(
1166 	                 &distances_table,
1167 	                 0,
1168 	                 sizeof( libfsapfs_deflate_huffman_table_t ) );
1169 
1170 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1171 	 "memset_result",
1172 	 memset_result );
1173 
1174 	memset_result = memory_set(
1175 	                 &literals_table,
1176 	                 0,
1177 	                 sizeof( libfsapfs_deflate_huffman_table_t ) );
1178 
1179 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1180 	 "memset_result",
1181 	 memset_result );
1182 
1183 	result = libfsapfs_deflate_initialize_fixed_huffman_tables(
1184 	          &literals_table,
1185 	          &distances_table,
1186 	          &error );
1187 
1188 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1189 	 "result",
1190 	 result,
1191 	 1 );
1192 
1193 	FSAPFS_TEST_ASSERT_IS_NULL(
1194 	 "error",
1195 	 error );
1196 
1197 	/* Test regular cases
1198 	 */
1199 	bit_stream.byte_stream        = fsapfs_test_deflate_compressed_byte_stream;
1200 	bit_stream.byte_stream_size   = 2627;
1201 	bit_stream.byte_stream_offset = 2;
1202 	bit_stream.bit_buffer         = 0;
1203 	bit_stream.bit_buffer_size    = 0;
1204 
1205 	value_32bit = 0;
1206 
1207 	result = libfsapfs_deflate_bit_stream_get_huffman_encoded_value(
1208 	          &bit_stream,
1209 	          &literals_table,
1210 	          &value_32bit,
1211 	          &error );
1212 
1213 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1214 	 "result",
1215 	 result,
1216 	 1 );
1217 
1218 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
1219 	 "value_32bit",
1220 	 value_32bit,
1221 	 (uint32_t) 141 );
1222 
1223 	FSAPFS_TEST_ASSERT_IS_NULL(
1224 	 "error",
1225 	 error );
1226 
1227 	/* Test error cases
1228 	 */
1229 	bit_stream.byte_stream        = fsapfs_test_deflate_compressed_byte_stream;
1230 	bit_stream.byte_stream_size   = 2627;
1231 	bit_stream.byte_stream_offset = 2;
1232 	bit_stream.bit_buffer         = 0;
1233 	bit_stream.bit_buffer_size    = 0;
1234 
1235 	value_32bit = 0;
1236 
1237 	result = libfsapfs_deflate_bit_stream_get_huffman_encoded_value(
1238 	          NULL,
1239 	          &literals_table,
1240 	          &value_32bit,
1241 	          &error );
1242 
1243 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1244 	 "result",
1245 	 result,
1246 	 -1 );
1247 
1248 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1249 	 "error",
1250 	 error );
1251 
1252 	libcerror_error_free(
1253 	 &error );
1254 
1255 	result = libfsapfs_deflate_bit_stream_get_huffman_encoded_value(
1256 	          &bit_stream,
1257 	          NULL,
1258 	          &value_32bit,
1259 	          &error );
1260 
1261 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1262 	 "result",
1263 	 result,
1264 	 -1 );
1265 
1266 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1267 	 "error",
1268 	 error );
1269 
1270 	libcerror_error_free(
1271 	 &error );
1272 
1273 	result = libfsapfs_deflate_bit_stream_get_huffman_encoded_value(
1274 	          &bit_stream,
1275 	          &literals_table,
1276 	          NULL,
1277 	          &error );
1278 
1279 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1280 	 "result",
1281 	 result,
1282 	 -1 );
1283 
1284 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1285 	 "error",
1286 	 error );
1287 
1288 	libcerror_error_free(
1289 	 &error );
1290 
1291 	bit_stream.byte_stream_offset = 2627;
1292 	bit_stream.bit_buffer_size    = 0;
1293 
1294 	result = libfsapfs_deflate_bit_stream_get_huffman_encoded_value(
1295 	          &bit_stream,
1296 	          &literals_table,
1297 	          &value_32bit,
1298 	          &error );
1299 
1300 	bit_stream.byte_stream_offset = 2;
1301 
1302 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1303 	 "result",
1304 	 result,
1305 	 -1 );
1306 
1307 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1308 	 "error",
1309 	 error );
1310 
1311 	libcerror_error_free(
1312 	 &error );
1313 
1314 	return( 1 );
1315 
1316 on_error:
1317 	if( error != NULL )
1318 	{
1319 		libcerror_error_free(
1320 		 &error );
1321 	}
1322 	return( 0 );
1323 }
1324 
1325 /* Tests the libfsapfs_deflate_initialize_dynamic_huffman_tables function
1326  * Returns 1 if successful or 0 if not
1327  */
fsapfs_test_deflate_initialize_dynamic_huffman_tables(void)1328 int fsapfs_test_deflate_initialize_dynamic_huffman_tables(
1329      void )
1330 {
1331 	libfsapfs_deflate_bit_stream_t bit_stream;
1332 	libfsapfs_deflate_huffman_table_t distances_table;
1333 	libfsapfs_deflate_huffman_table_t literals_table;
1334 
1335 	libcerror_error_t *error        = NULL;
1336 	void *memset_result             = NULL;
1337 	uint32_t value_32bit            = 0;
1338 	int result                      = 0;
1339 
1340 #if defined( HAVE_FSAPFS_TEST_MEMORY )
1341 	int number_of_memset_fail_tests = 6;
1342 	int test_number                 = 0;
1343 #endif
1344 
1345 	/* Initialize test
1346 	 */
1347 	memset_result = memory_set(
1348 	                 &bit_stream,
1349 	                 0,
1350 	                 sizeof( libfsapfs_deflate_bit_stream_t ) );
1351 
1352 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1353 	 "memset_result",
1354 	 memset_result );
1355 
1356 	memset_result = memory_set(
1357 	                 &distances_table,
1358 	                 0,
1359 	                 sizeof( libfsapfs_deflate_huffman_table_t ) );
1360 
1361 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1362 	 "memset_result",
1363 	 memset_result );
1364 
1365 	memset_result = memory_set(
1366 	                 &literals_table,
1367 	                 0,
1368 	                 sizeof( libfsapfs_deflate_huffman_table_t ) );
1369 
1370 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1371 	 "memset_result",
1372 	 memset_result );
1373 
1374 	/* Test regular cases
1375 	 */
1376 	bit_stream.byte_stream        = fsapfs_test_deflate_compressed_byte_stream;
1377 	bit_stream.byte_stream_size   = 2627;
1378 	bit_stream.byte_stream_offset = 2;
1379 	bit_stream.bit_buffer         = 0;
1380 	bit_stream.bit_buffer_size    = 0;
1381 
1382 	result = libfsapfs_deflate_bit_stream_get_value(
1383 	          &bit_stream,
1384 	          3,
1385 	          &value_32bit,
1386 	          &error );
1387 
1388 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1389 	 "result",
1390 	 result,
1391 	 1 );
1392 
1393 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
1394 	 "value_32bit",
1395 	 value_32bit,
1396 	 (uint32_t) 0x00000005UL );
1397 
1398 	FSAPFS_TEST_ASSERT_IS_NULL(
1399 	 "error",
1400 	 error );
1401 
1402 	result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1403 	          &bit_stream,
1404 	          &literals_table,
1405 	          &distances_table,
1406 	          &error );
1407 
1408 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1409 	 "result",
1410 	 result,
1411 	 1 );
1412 
1413 	FSAPFS_TEST_ASSERT_IS_NULL(
1414 	 "error",
1415 	 error );
1416 
1417 	/* Test error cases
1418 	 */
1419 	bit_stream.byte_stream        = fsapfs_test_deflate_compressed_byte_stream;
1420 	bit_stream.byte_stream_size   = 2627;
1421 	bit_stream.byte_stream_offset = 2;
1422 	bit_stream.bit_buffer         = 0;
1423 	bit_stream.bit_buffer_size    = 0;
1424 
1425 	result = libfsapfs_deflate_bit_stream_get_value(
1426 	          &bit_stream,
1427 	          3,
1428 	          &value_32bit,
1429 	          &error );
1430 
1431 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1432 	 "result",
1433 	 result,
1434 	 1 );
1435 
1436 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
1437 	 "value_32bit",
1438 	 value_32bit,
1439 	 (uint32_t) 0x00000005UL );
1440 
1441 	FSAPFS_TEST_ASSERT_IS_NULL(
1442 	 "error",
1443 	 error );
1444 
1445 	result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1446 	          NULL,
1447 	          &literals_table,
1448 	          &distances_table,
1449 	          &error );
1450 
1451 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1452 	 "result",
1453 	 result,
1454 	 -1 );
1455 
1456 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1457 	 "error",
1458 	 error );
1459 
1460 	libcerror_error_free(
1461 	 &error );
1462 
1463 	result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1464 	          &bit_stream,
1465 	          NULL,
1466 	          &distances_table,
1467 	          &error );
1468 
1469 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1470 	 "result",
1471 	 result,
1472 	 -1 );
1473 
1474 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1475 	 "error",
1476 	 error );
1477 
1478 	libcerror_error_free(
1479 	 &error );
1480 
1481 	result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1482 	          &bit_stream,
1483 	          &literals_table,
1484 	          NULL,
1485 	          &error );
1486 
1487 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1488 	 "result",
1489 	 result,
1490 	 -1 );
1491 
1492 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1493 	 "error",
1494 	 error );
1495 
1496 	libcerror_error_free(
1497 	 &error );
1498 
1499 #if defined( HAVE_FSAPFS_TEST_MEMORY )
1500 
1501 	for( test_number = 0;
1502 	     test_number < number_of_memset_fail_tests;
1503 	     test_number++ )
1504 	{
1505 		/* Test libfsapfs_write_io_handle_initialize with memset failing
1506 		 */
1507 		fsapfs_test_memset_attempts_before_fail = test_number;
1508 
1509 		result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1510 		          &bit_stream,
1511 		          &literals_table,
1512 		          &distances_table,
1513 		          &error );
1514 
1515 		if( fsapfs_test_memset_attempts_before_fail != -1 )
1516 		{
1517 			fsapfs_test_memset_attempts_before_fail = -1;
1518 		}
1519 		else
1520 		{
1521 			FSAPFS_TEST_ASSERT_EQUAL_INT(
1522 			 "result",
1523 			 result,
1524 			 -1 );
1525 
1526 			FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1527 			 "error",
1528 			 error );
1529 
1530 			libcerror_error_free(
1531 			 &error );
1532 		}
1533 	}
1534 #endif /* defined( HAVE_FSAPFS_TEST_MEMORY ) */
1535 
1536 	return( 1 );
1537 
1538 on_error:
1539 	if( error != NULL )
1540 	{
1541 		libcerror_error_free(
1542 		 &error );
1543 	}
1544 	return( 0 );
1545 }
1546 
1547 /* Tests the libfsapfs_deflate_initialize_fixed_huffman_tables function
1548  * Returns 1 if successful or 0 if not
1549  */
fsapfs_test_deflate_initialize_fixed_huffman_tables(void)1550 int fsapfs_test_deflate_initialize_fixed_huffman_tables(
1551      void )
1552 {
1553 	libfsapfs_deflate_huffman_table_t distances_table;
1554 	libfsapfs_deflate_huffman_table_t literals_table;
1555 
1556 	libcerror_error_t *error        = NULL;
1557 	void *memset_result             = NULL;
1558 	int result                      = 0;
1559 
1560 #if defined( HAVE_FSAPFS_TEST_MEMORY )
1561 	int number_of_memset_fail_tests = 4;
1562 	int test_number                 = 0;
1563 #endif
1564 
1565 	/* Initialize test
1566 	 */
1567 	memset_result = memory_set(
1568 	                 &distances_table,
1569 	                 0,
1570 	                 sizeof( libfsapfs_deflate_huffman_table_t ) );
1571 
1572 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1573 	 "memset_result",
1574 	 memset_result );
1575 
1576 	memset_result = memory_set(
1577 	                 &literals_table,
1578 	                 0,
1579 	                 sizeof( libfsapfs_deflate_huffman_table_t ) );
1580 
1581 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1582 	 "memset_result",
1583 	 memset_result );
1584 
1585 	/* Test regular cases
1586 	 */
1587 	result = libfsapfs_deflate_initialize_fixed_huffman_tables(
1588 	          &literals_table,
1589 	          &distances_table,
1590 	          &error );
1591 
1592 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1593 	 "result",
1594 	 result,
1595 	 1 );
1596 
1597 	FSAPFS_TEST_ASSERT_IS_NULL(
1598 	 "error",
1599 	 error );
1600 
1601 	/* Test error cases
1602 	 */
1603 	result = libfsapfs_deflate_initialize_fixed_huffman_tables(
1604 	          NULL,
1605 	          &distances_table,
1606 	          &error );
1607 
1608 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1609 	 "result",
1610 	 result,
1611 	 -1 );
1612 
1613 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1614 	 "error",
1615 	 error );
1616 
1617 	libcerror_error_free(
1618 	 &error );
1619 
1620 	result = libfsapfs_deflate_initialize_fixed_huffman_tables(
1621 	          &literals_table,
1622 	          NULL,
1623 	          &error );
1624 
1625 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1626 	 "result",
1627 	 result,
1628 	 -1 );
1629 
1630 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1631 	 "error",
1632 	 error );
1633 
1634 	libcerror_error_free(
1635 	 &error );
1636 
1637 #if defined( HAVE_FSAPFS_TEST_MEMORY )
1638 
1639 	for( test_number = 0;
1640 	     test_number < number_of_memset_fail_tests;
1641 	     test_number++ )
1642 	{
1643 		/* Test libfsapfs_write_io_handle_initialize with memset failing
1644 		 */
1645 		fsapfs_test_memset_attempts_before_fail = test_number;
1646 
1647 		result = libfsapfs_deflate_initialize_fixed_huffman_tables(
1648 		          &literals_table,
1649 		          &distances_table,
1650 		          &error );
1651 
1652 		if( fsapfs_test_memset_attempts_before_fail != -1 )
1653 		{
1654 			fsapfs_test_memset_attempts_before_fail = -1;
1655 		}
1656 		else
1657 		{
1658 			FSAPFS_TEST_ASSERT_EQUAL_INT(
1659 			 "result",
1660 			 result,
1661 			 -1 );
1662 
1663 			FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1664 			 "error",
1665 			 error );
1666 
1667 			libcerror_error_free(
1668 			 &error );
1669 		}
1670 	}
1671 #endif /* defined( HAVE_FSAPFS_TEST_MEMORY ) */
1672 
1673 	return( 1 );
1674 
1675 on_error:
1676 	if( error != NULL )
1677 	{
1678 		libcerror_error_free(
1679 		 &error );
1680 	}
1681 	return( 0 );
1682 }
1683 
1684 /* Tests the libfsapfs_deflate_decode_huffman function
1685  * Returns 1 if successful or 0 if not
1686  */
fsapfs_test_deflate_decode_huffman(void)1687 int fsapfs_test_deflate_decode_huffman(
1688      void )
1689 {
1690 	uint8_t uncompressed_data[ 8192 ];
1691 
1692 	libfsapfs_deflate_bit_stream_t bit_stream;
1693 	libfsapfs_deflate_huffman_table_t distances_table;
1694 	libfsapfs_deflate_huffman_table_t literals_table;
1695 
1696 	libcerror_error_t *error        = NULL;
1697 	void *memset_result             = NULL;
1698 	size_t uncompressed_data_offset = 0;
1699 	uint32_t value_32bit            = 0;
1700 	int result                      = 0;
1701 
1702 	/* Initialize test
1703 	 */
1704 	memset_result = memory_set(
1705 	                 &bit_stream,
1706 	                 0,
1707 	                 sizeof( libfsapfs_deflate_bit_stream_t ) );
1708 
1709 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1710 	 "memset_result",
1711 	 memset_result );
1712 
1713 	memset_result = memory_set(
1714 	                 &distances_table,
1715 	                 0,
1716 	                 sizeof( libfsapfs_deflate_huffman_table_t ) );
1717 
1718 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1719 	 "memset_result",
1720 	 memset_result );
1721 
1722 	memset_result = memory_set(
1723 	                 &literals_table,
1724 	                 0,
1725 	                 sizeof( libfsapfs_deflate_huffman_table_t ) );
1726 
1727 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1728 	 "memset_result",
1729 	 memset_result );
1730 
1731 	/* Test regular cases
1732 	 */
1733 	bit_stream.byte_stream        = fsapfs_test_deflate_compressed_byte_stream;
1734 	bit_stream.byte_stream_size   = 2627;
1735 	bit_stream.byte_stream_offset = 2;
1736 	bit_stream.bit_buffer         = 0;
1737 	bit_stream.bit_buffer_size    = 0;
1738 
1739 	result = libfsapfs_deflate_bit_stream_get_value(
1740 	          &bit_stream,
1741 	          3,
1742 	          &value_32bit,
1743 	          &error );
1744 
1745 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1746 	 "result",
1747 	 result,
1748 	 1 );
1749 
1750 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
1751 	 "value_32bit",
1752 	 value_32bit,
1753 	 (uint32_t) 0x00000005UL );
1754 
1755 	FSAPFS_TEST_ASSERT_IS_NULL(
1756 	 "error",
1757 	 error );
1758 
1759 	result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1760 	          &bit_stream,
1761 	          &literals_table,
1762 	          &distances_table,
1763 	          &error );
1764 
1765 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1766 	 "result",
1767 	 result,
1768 	 1 );
1769 
1770 	FSAPFS_TEST_ASSERT_IS_NULL(
1771 	 "error",
1772 	 error );
1773 
1774 	result = libfsapfs_deflate_decode_huffman(
1775 	          &bit_stream,
1776 	          &literals_table,
1777 	          &distances_table,
1778 	          uncompressed_data,
1779 	          8192,
1780 	          &uncompressed_data_offset,
1781 	          &error );
1782 
1783 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1784 	 "result",
1785 	 result,
1786 	 1 );
1787 
1788 	FSAPFS_TEST_ASSERT_IS_NULL(
1789 	 "error",
1790 	 error );
1791 
1792 	/* Test error cases
1793 	 */
1794 	bit_stream.byte_stream        = fsapfs_test_deflate_compressed_byte_stream;
1795 	bit_stream.byte_stream_size   = 2627;
1796 	bit_stream.byte_stream_offset = 2;
1797 	bit_stream.bit_buffer         = 0;
1798 	bit_stream.bit_buffer_size    = 0;
1799 
1800 	result = libfsapfs_deflate_bit_stream_get_value(
1801 	          &bit_stream,
1802 	          3,
1803 	          &value_32bit,
1804 	          &error );
1805 
1806 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1807 	 "result",
1808 	 result,
1809 	 1 );
1810 
1811 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
1812 	 "value_32bit",
1813 	 value_32bit,
1814 	 (uint32_t) 0x00000005UL );
1815 
1816 	FSAPFS_TEST_ASSERT_IS_NULL(
1817 	 "error",
1818 	 error );
1819 
1820 	result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1821 	          &bit_stream,
1822 	          &literals_table,
1823 	          &distances_table,
1824 	          &error );
1825 
1826 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1827 	 "result",
1828 	 result,
1829 	 1 );
1830 
1831 	FSAPFS_TEST_ASSERT_IS_NULL(
1832 	 "error",
1833 	 error );
1834 
1835 	result = libfsapfs_deflate_decode_huffman(
1836 	          NULL,
1837 	          &literals_table,
1838 	          &distances_table,
1839 	          uncompressed_data,
1840 	          8192,
1841 	          &uncompressed_data_offset,
1842 	          &error );
1843 
1844 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1845 	 "result",
1846 	 result,
1847 	 -1 );
1848 
1849 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1850 	 "error",
1851 	 error );
1852 
1853 	libcerror_error_free(
1854 	 &error );
1855 
1856 	result = libfsapfs_deflate_decode_huffman(
1857 	          &bit_stream,
1858 	          NULL,
1859 	          &distances_table,
1860 	          uncompressed_data,
1861 	          8192,
1862 	          &uncompressed_data_offset,
1863 	          &error );
1864 
1865 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1866 	 "result",
1867 	 result,
1868 	 -1 );
1869 
1870 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1871 	 "error",
1872 	 error );
1873 
1874 	libcerror_error_free(
1875 	 &error );
1876 
1877 	result = libfsapfs_deflate_decode_huffman(
1878 	          &bit_stream,
1879 	          &literals_table,
1880 	          NULL,
1881 	          uncompressed_data,
1882 	          8192,
1883 	          &uncompressed_data_offset,
1884 	          &error );
1885 
1886 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1887 	 "result",
1888 	 result,
1889 	 -1 );
1890 
1891 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1892 	 "error",
1893 	 error );
1894 
1895 	libcerror_error_free(
1896 	 &error );
1897 
1898 	result = libfsapfs_deflate_decode_huffman(
1899 	          &bit_stream,
1900 	          &literals_table,
1901 	          &distances_table,
1902 	          NULL,
1903 	          8192,
1904 	          &uncompressed_data_offset,
1905 	          &error );
1906 
1907 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1908 	 "result",
1909 	 result,
1910 	 -1 );
1911 
1912 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1913 	 "error",
1914 	 error );
1915 
1916 	libcerror_error_free(
1917 	 &error );
1918 
1919 	result = libfsapfs_deflate_decode_huffman(
1920 	          &bit_stream,
1921 	          &literals_table,
1922 	          &distances_table,
1923 	          uncompressed_data,
1924 	          (size_t) SSIZE_MAX + 1,
1925 	          &uncompressed_data_offset,
1926 	          &error );
1927 
1928 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1929 	 "result",
1930 	 result,
1931 	 -1 );
1932 
1933 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1934 	 "error",
1935 	 error );
1936 
1937 	libcerror_error_free(
1938 	 &error );
1939 
1940 	result = libfsapfs_deflate_decode_huffman(
1941 	          &bit_stream,
1942 	          &literals_table,
1943 	          &distances_table,
1944 	          uncompressed_data,
1945 	          8192,
1946 	          NULL,
1947 	          &error );
1948 
1949 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1950 	 "result",
1951 	 result,
1952 	 -1 );
1953 
1954 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1955 	 "error",
1956 	 error );
1957 
1958 	libcerror_error_free(
1959 	 &error );
1960 
1961 	return( 1 );
1962 
1963 on_error:
1964 	if( error != NULL )
1965 	{
1966 		libcerror_error_free(
1967 		 &error );
1968 	}
1969 	return( 0 );
1970 }
1971 
1972 /* Tests the libfsapfs_deflate_calculate_adler32 function
1973  * Returns 1 if successful or 0 if not
1974  */
fsapfs_test_deflate_calculate_adler32(void)1975 int fsapfs_test_deflate_calculate_adler32(
1976      void )
1977 {
1978 	libcerror_error_t *error = NULL;
1979 	uint32_t checksum        = 0;
1980 	int result               = 0;
1981 
1982 	/* Test regular cases
1983 	 */
1984 	result = libfsapfs_deflate_calculate_adler32(
1985 	          &checksum,
1986 	          fsapfs_test_deflate_uncompressed_byte_stream,
1987 	          7640,
1988 	          1,
1989 	          &error );
1990 
1991 	FSAPFS_TEST_ASSERT_EQUAL_INT(
1992 	 "result",
1993 	 result,
1994 	 1 );
1995 
1996 	FSAPFS_TEST_ASSERT_EQUAL_UINT32(
1997 	 "checksum",
1998 	 checksum,
1999 	 (uint32_t) 0x304a56a4UL );
2000 
2001 	FSAPFS_TEST_ASSERT_IS_NULL(
2002 	 "error",
2003 	 error );
2004 
2005 	/* Test error cases
2006 	 */
2007 	result = libfsapfs_deflate_calculate_adler32(
2008 	          NULL,
2009 	          fsapfs_test_deflate_uncompressed_byte_stream,
2010 	          7640,
2011 	          1,
2012 	          &error );
2013 
2014 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2015 	 "result",
2016 	 result,
2017 	 -1 );
2018 
2019 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2020 	 "error",
2021 	 error );
2022 
2023 	libcerror_error_free(
2024 	 &error );
2025 
2026 	result = libfsapfs_deflate_calculate_adler32(
2027 	          &checksum,
2028 	          NULL,
2029 	          7640,
2030 	          1,
2031 	          &error );
2032 
2033 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2034 	 "result",
2035 	 result,
2036 	 -1 );
2037 
2038 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2039 	 "error",
2040 	 error );
2041 
2042 	libcerror_error_free(
2043 	 &error );
2044 
2045 	result = libfsapfs_deflate_calculate_adler32(
2046 	          &checksum,
2047 	          fsapfs_test_deflate_uncompressed_byte_stream,
2048 	          (size_t) SSIZE_MAX + 1,
2049 	          1,
2050 	          &error );
2051 
2052 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2053 	 "result",
2054 	 result,
2055 	 -1 );
2056 
2057 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2058 	 "error",
2059 	 error );
2060 
2061 	libcerror_error_free(
2062 	 &error );
2063 
2064 	return( 1 );
2065 
2066 on_error:
2067 	if( error != NULL )
2068 	{
2069 		libcerror_error_free(
2070 		 &error );
2071 	}
2072 	return( 0 );
2073 }
2074 
2075 /* Tests the libfsapfs_deflate_read_data_header function
2076  * Returns 1 if successful or 0 if not
2077  */
fsapfs_test_deflate_read_data_header(void)2078 int fsapfs_test_deflate_read_data_header(
2079      void )
2080 {
2081 	libcerror_error_t *error        = NULL;
2082 	size_t uncompressed_data_offset = 0;
2083 	int result                      = 0;
2084 
2085 	/* Test regular cases
2086 	 */
2087 	uncompressed_data_offset = 0;
2088 
2089 	result = libfsapfs_deflate_read_data_header(
2090 	          fsapfs_test_deflate_compressed_byte_stream,
2091 	          2627,
2092 	          &uncompressed_data_offset,
2093 	          &error );
2094 
2095 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2096 	 "result",
2097 	 result,
2098 	 1 );
2099 
2100 	FSAPFS_TEST_ASSERT_EQUAL_SIZE(
2101 	 "uncompressed_data_offset",
2102 	 uncompressed_data_offset,
2103 	 (size_t) 2 );
2104 
2105 	FSAPFS_TEST_ASSERT_IS_NULL(
2106 	 "error",
2107 	 error );
2108 
2109 	/* Test error cases
2110 	 */
2111 	uncompressed_data_offset = 0;
2112 
2113 	result = libfsapfs_deflate_read_data_header(
2114 	          NULL,
2115 	          2627,
2116 	          &uncompressed_data_offset,
2117 	          &error );
2118 
2119 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2120 	 "result",
2121 	 result,
2122 	 -1 );
2123 
2124 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2125 	 "error",
2126 	 error );
2127 
2128 	libcerror_error_free(
2129 	 &error );
2130 
2131 	result = libfsapfs_deflate_read_data_header(
2132 	          fsapfs_test_deflate_compressed_byte_stream,
2133 	          (size_t) SSIZE_MAX + 1,
2134 	          &uncompressed_data_offset,
2135 	          &error );
2136 
2137 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2138 	 "result",
2139 	 result,
2140 	 -1 );
2141 
2142 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2143 	 "error",
2144 	 error );
2145 
2146 	libcerror_error_free(
2147 	 &error );
2148 
2149 	result = libfsapfs_deflate_read_data_header(
2150 	          fsapfs_test_deflate_compressed_byte_stream,
2151 	          2627,
2152 	          NULL,
2153 	          &error );
2154 
2155 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2156 	 "result",
2157 	 result,
2158 	 -1 );
2159 
2160 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2161 	 "error",
2162 	 error );
2163 
2164 	libcerror_error_free(
2165 	 &error );
2166 
2167 	result = libfsapfs_deflate_read_data_header(
2168 	          fsapfs_test_deflate_compressed_byte_stream,
2169 	          1,
2170 	          &uncompressed_data_offset,
2171 	          &error );
2172 
2173 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2174 	 "result",
2175 	 result,
2176 	 -1 );
2177 
2178 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2179 	 "error",
2180 	 error );
2181 
2182 	libcerror_error_free(
2183 	 &error );
2184 
2185 /* TODO test compression_method != 8 */
2186 /* TODO test compression_window_size > 32768 */
2187 
2188 	return( 1 );
2189 
2190 on_error:
2191 	if( error != NULL )
2192 	{
2193 		libcerror_error_free(
2194 		 &error );
2195 	}
2196 	return( 0 );
2197 }
2198 
2199 /* Tests the libfsapfs_deflate_read_block function
2200  * Returns 1 if successful or 0 if not
2201  */
fsapfs_test_deflate_read_block(void)2202 int fsapfs_test_deflate_read_block(
2203      void )
2204 {
2205 	uint8_t uncompressed_data[ 8192 ];
2206 
2207 	libfsapfs_deflate_bit_stream_t bit_stream;
2208 
2209 	libcerror_error_t *error        = NULL;
2210 	void *memset_result             = NULL;
2211 	size_t uncompressed_data_offset = 0;
2212 	size_t uncompressed_data_size   = 7640;
2213 	uint8_t last_block_flag         = 0;
2214 	int result                      = 0;
2215 
2216 	/* Initialize test
2217 	 */
2218 	memset_result = memory_set(
2219 	                 &bit_stream,
2220 	                 0,
2221 	                 sizeof( libfsapfs_deflate_bit_stream_t ) );
2222 
2223 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2224 	 "memset_result",
2225 	 memset_result );
2226 
2227 	/* Test regular cases
2228 	 */
2229 	bit_stream.byte_stream        = fsapfs_test_deflate_compressed_byte_stream;
2230 	bit_stream.byte_stream_size   = 2627;
2231 	bit_stream.byte_stream_offset = 2;
2232 	bit_stream.bit_buffer         = 0;
2233 	bit_stream.bit_buffer_size    = 0;
2234 
2235 	result = libfsapfs_deflate_read_block(
2236 	          &bit_stream,
2237 	          uncompressed_data,
2238 	          uncompressed_data_size,
2239 	          &uncompressed_data_offset,
2240 	          &last_block_flag,
2241 	          &error );
2242 
2243 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2244 	 "result",
2245 	 result,
2246 	 1 );
2247 
2248 	FSAPFS_TEST_ASSERT_EQUAL_SIZE(
2249 	 "uncompressed_data_size",
2250 	 uncompressed_data_size,
2251 	 (size_t) 7640 );
2252 
2253 	FSAPFS_TEST_ASSERT_IS_NULL(
2254 	 "error",
2255 	 error );
2256 
2257 /* TODO: test uncompressed data too small */
2258 
2259 	/* Test error cases
2260 	 */
2261 	bit_stream.byte_stream        = fsapfs_test_deflate_compressed_byte_stream;
2262 	bit_stream.byte_stream_size   = 2627;
2263 	bit_stream.byte_stream_offset = 2;
2264 	bit_stream.bit_buffer         = 0;
2265 	bit_stream.bit_buffer_size    = 0;
2266 
2267 	result = libfsapfs_deflate_read_block(
2268 	          NULL,
2269 	          uncompressed_data,
2270 	          uncompressed_data_size,
2271 	          &uncompressed_data_offset,
2272 	          &last_block_flag,
2273 	          &error );
2274 
2275 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2276 	 "result",
2277 	 result,
2278 	 -1 );
2279 
2280 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2281 	 "error",
2282 	 error );
2283 
2284 	libcerror_error_free(
2285 	 &error );
2286 
2287 	result = libfsapfs_deflate_read_block(
2288 	          &bit_stream,
2289 	          NULL,
2290 	          uncompressed_data_size,
2291 	          &uncompressed_data_offset,
2292 	          &last_block_flag,
2293 	          &error );
2294 
2295 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2296 	 "result",
2297 	 result,
2298 	 -1 );
2299 
2300 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2301 	 "error",
2302 	 error );
2303 
2304 	libcerror_error_free(
2305 	 &error );
2306 
2307 	result = libfsapfs_deflate_read_block(
2308 	          &bit_stream,
2309 	          uncompressed_data,
2310 	          (size_t) SSIZE_MAX + 1,
2311 	          &uncompressed_data_offset,
2312 	          &last_block_flag,
2313 	          &error );
2314 
2315 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2316 	 "result",
2317 	 result,
2318 	 -1 );
2319 
2320 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2321 	 "error",
2322 	 error );
2323 
2324 	libcerror_error_free(
2325 	 &error );
2326 
2327 	result = libfsapfs_deflate_read_block(
2328 	          &bit_stream,
2329 	          uncompressed_data,
2330 	          uncompressed_data_size,
2331 	          NULL,
2332 	          &last_block_flag,
2333 	          &error );
2334 
2335 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2336 	 "result",
2337 	 result,
2338 	 -1 );
2339 
2340 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2341 	 "error",
2342 	 error );
2343 
2344 	libcerror_error_free(
2345 	 &error );
2346 
2347 	result = libfsapfs_deflate_read_block(
2348 	          &bit_stream,
2349 	          uncompressed_data,
2350 	          uncompressed_data_size,
2351 	          &uncompressed_data_offset,
2352 	          NULL,
2353 	          &error );
2354 
2355 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2356 	 "result",
2357 	 result,
2358 	 -1 );
2359 
2360 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2361 	 "error",
2362 	 error );
2363 
2364 	libcerror_error_free(
2365 	 &error );
2366 
2367 	return( 1 );
2368 
2369 on_error:
2370 	if( error != NULL )
2371 	{
2372 		libcerror_error_free(
2373 		 &error );
2374 	}
2375 	return( 0 );
2376 }
2377 
2378 /* Tests the libfsapfs_deflate_decompress function
2379  * Returns 1 if successful or 0 if not
2380  */
fsapfs_test_deflate_decompress(void)2381 int fsapfs_test_deflate_decompress(
2382      void )
2383 {
2384 	uint8_t uncompressed_data[ 8192 ];
2385 
2386 	libcerror_error_t *error      = NULL;
2387 	size_t uncompressed_data_size = 7640;
2388 	int result                    = 0;
2389 
2390 	/* Test regular cases
2391 	 */
2392 	result = libfsapfs_deflate_decompress(
2393 	          &( fsapfs_test_deflate_compressed_byte_stream[ 2 ] ),
2394 	          2627 - 6,
2395 	          uncompressed_data,
2396 	          &uncompressed_data_size,
2397 	          &error );
2398 
2399 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2400 	 "result",
2401 	 result,
2402 	 1 );
2403 
2404 	FSAPFS_TEST_ASSERT_EQUAL_SIZE(
2405 	 "uncompressed_data_size",
2406 	 uncompressed_data_size,
2407 	 (size_t) 7640 );
2408 
2409 	FSAPFS_TEST_ASSERT_IS_NULL(
2410 	 "error",
2411 	 error );
2412 
2413 /* TODO: test uncompressed data too small */
2414 
2415 	/* Test error cases
2416 	 */
2417 	result = libfsapfs_deflate_decompress(
2418 	          NULL,
2419 	          2627 - 6,
2420 	          uncompressed_data,
2421 	          &uncompressed_data_size,
2422 	          &error );
2423 
2424 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2425 	 "result",
2426 	 result,
2427 	 -1 );
2428 
2429 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2430 	 "error",
2431 	 error );
2432 
2433 	libcerror_error_free(
2434 	 &error );
2435 
2436 	result = libfsapfs_deflate_decompress(
2437 	          &( fsapfs_test_deflate_compressed_byte_stream[ 2 ] ),
2438 	          (size_t) SSIZE_MAX + 1,
2439 	          uncompressed_data,
2440 	          &uncompressed_data_size,
2441 	          &error );
2442 
2443 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2444 	 "result",
2445 	 result,
2446 	 -1 );
2447 
2448 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2449 	 "error",
2450 	 error );
2451 
2452 	libcerror_error_free(
2453 	 &error );
2454 
2455 	result = libfsapfs_deflate_decompress(
2456 	          &( fsapfs_test_deflate_compressed_byte_stream[ 2 ] ),
2457 	          2627 - 6,
2458 	          NULL,
2459 	          &uncompressed_data_size,
2460 	          &error );
2461 
2462 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2463 	 "result",
2464 	 result,
2465 	 -1 );
2466 
2467 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2468 	 "error",
2469 	 error );
2470 
2471 	libcerror_error_free(
2472 	 &error );
2473 
2474 	result = libfsapfs_deflate_decompress(
2475 	          &( fsapfs_test_deflate_compressed_byte_stream[ 2 ] ),
2476 	          2627 - 6,
2477 	          uncompressed_data,
2478 	          NULL,
2479 	          &error );
2480 
2481 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2482 	 "result",
2483 	 result,
2484 	 -1 );
2485 
2486 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2487 	 "error",
2488 	 error );
2489 
2490 	libcerror_error_free(
2491 	 &error );
2492 
2493 	return( 1 );
2494 
2495 on_error:
2496 	if( error != NULL )
2497 	{
2498 		libcerror_error_free(
2499 		 &error );
2500 	}
2501 	return( 0 );
2502 }
2503 
2504 /* Tests the libfsapfs_deflate_decompress_zlib function
2505  * Returns 1 if successful or 0 if not
2506  */
fsapfs_test_deflate_decompress_zlib(void)2507 int fsapfs_test_deflate_decompress_zlib(
2508      void )
2509 {
2510 	uint8_t uncompressed_data[ 8192 ];
2511 
2512 	libcerror_error_t *error      = NULL;
2513 	size_t uncompressed_data_size = 7640;
2514 	int result                    = 0;
2515 
2516 	/* Test regular cases
2517 	 */
2518 	result = libfsapfs_deflate_decompress_zlib(
2519 	          fsapfs_test_deflate_compressed_byte_stream,
2520 	          2627,
2521 	          uncompressed_data,
2522 	          &uncompressed_data_size,
2523 	          &error );
2524 
2525 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2526 	 "result",
2527 	 result,
2528 	 1 );
2529 
2530 	FSAPFS_TEST_ASSERT_EQUAL_SIZE(
2531 	 "uncompressed_data_size",
2532 	 uncompressed_data_size,
2533 	 (size_t) 7640 );
2534 
2535 	FSAPFS_TEST_ASSERT_IS_NULL(
2536 	 "error",
2537 	 error );
2538 
2539 /* TODO: test uncompressed data too small */
2540 
2541 	/* Test error cases
2542 	 */
2543 	result = libfsapfs_deflate_decompress_zlib(
2544 	          NULL,
2545 	          2627,
2546 	          uncompressed_data,
2547 	          &uncompressed_data_size,
2548 	          &error );
2549 
2550 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2551 	 "result",
2552 	 result,
2553 	 -1 );
2554 
2555 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2556 	 "error",
2557 	 error );
2558 
2559 	libcerror_error_free(
2560 	 &error );
2561 
2562 	result = libfsapfs_deflate_decompress_zlib(
2563 	          fsapfs_test_deflate_compressed_byte_stream,
2564 	          (size_t) SSIZE_MAX + 1,
2565 	          uncompressed_data,
2566 	          &uncompressed_data_size,
2567 	          &error );
2568 
2569 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2570 	 "result",
2571 	 result,
2572 	 -1 );
2573 
2574 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2575 	 "error",
2576 	 error );
2577 
2578 	libcerror_error_free(
2579 	 &error );
2580 
2581 	result = libfsapfs_deflate_decompress_zlib(
2582 	          fsapfs_test_deflate_compressed_byte_stream,
2583 	          2627,
2584 	          NULL,
2585 	          &uncompressed_data_size,
2586 	          &error );
2587 
2588 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2589 	 "result",
2590 	 result,
2591 	 -1 );
2592 
2593 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2594 	 "error",
2595 	 error );
2596 
2597 	libcerror_error_free(
2598 	 &error );
2599 
2600 	result = libfsapfs_deflate_decompress_zlib(
2601 	          fsapfs_test_deflate_compressed_byte_stream,
2602 	          2627,
2603 	          uncompressed_data,
2604 	          NULL,
2605 	          &error );
2606 
2607 	FSAPFS_TEST_ASSERT_EQUAL_INT(
2608 	 "result",
2609 	 result,
2610 	 -1 );
2611 
2612 	FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2613 	 "error",
2614 	 error );
2615 
2616 	libcerror_error_free(
2617 	 &error );
2618 
2619 	return( 1 );
2620 
2621 on_error:
2622 	if( error != NULL )
2623 	{
2624 		libcerror_error_free(
2625 		 &error );
2626 	}
2627 	return( 0 );
2628 }
2629 
2630 #endif /* defined( __GNUC__ ) && !defined( LIBFSAPFS_DLL_IMPORT ) */
2631 
2632 /* The main program
2633  */
2634 #if defined( HAVE_WIDE_SYSTEM_CHARACTER )
wmain(int argc FSAPFS_TEST_ATTRIBUTE_UNUSED,wchar_t * const argv[]FSAPFS_TEST_ATTRIBUTE_UNUSED)2635 int wmain(
2636      int argc FSAPFS_TEST_ATTRIBUTE_UNUSED,
2637      wchar_t * const argv[] FSAPFS_TEST_ATTRIBUTE_UNUSED )
2638 #else
2639 int main(
2640      int argc FSAPFS_TEST_ATTRIBUTE_UNUSED,
2641      char * const argv[] FSAPFS_TEST_ATTRIBUTE_UNUSED )
2642 #endif
2643 {
2644 	FSAPFS_TEST_UNREFERENCED_PARAMETER( argc )
2645 	FSAPFS_TEST_UNREFERENCED_PARAMETER( argv )
2646 
2647 #if defined( HAVE_DEBUG_OUTPUT ) && defined( FSAPFS_TEST_DEFLATE )
2648 	libcnotify_verbose_set(
2649 	 1 );
2650 	libcnotify_stream_set(
2651 	 stderr,
2652 	 NULL );
2653 #endif
2654 
2655 #if defined( __GNUC__ ) && !defined( LIBFSAPFS_DLL_IMPORT )
2656 
2657 	FSAPFS_TEST_RUN(
2658 	 "libfsapfs_deflate_bit_stream_get_value",
2659 	 fsapfs_test_deflate_bit_stream_get_value );
2660 
2661 	FSAPFS_TEST_RUN(
2662 	 "libfsapfs_deflate_huffman_table_construct",
2663 	 fsapfs_test_deflate_huffman_table_construct );
2664 
2665 	FSAPFS_TEST_RUN(
2666 	 "libfsapfs_deflate_bit_stream_get_huffman_encoded_value",
2667 	 fsapfs_test_deflate_bit_stream_get_huffman_encoded_value );
2668 
2669 	FSAPFS_TEST_RUN(
2670 	 "libfsapfs_deflate_initialize_dynamic_huffman_tables",
2671 	 fsapfs_test_deflate_initialize_dynamic_huffman_tables );
2672 
2673 	FSAPFS_TEST_RUN(
2674 	 "libfsapfs_deflate_initialize_fixed_huffman_tables",
2675 	 fsapfs_test_deflate_initialize_fixed_huffman_tables );
2676 
2677 	FSAPFS_TEST_RUN(
2678 	 "libfsapfs_deflate_decode_huffman",
2679 	 fsapfs_test_deflate_decode_huffman );
2680 
2681 	FSAPFS_TEST_RUN(
2682 	 "libfsapfs_deflate_calculate_adler32",
2683 	 fsapfs_test_deflate_calculate_adler32 );
2684 
2685 	FSAPFS_TEST_RUN(
2686 	 "libfsapfs_deflate_read_data_header",
2687 	 fsapfs_test_deflate_read_data_header );
2688 
2689 	FSAPFS_TEST_RUN(
2690 	 "libfsapfs_deflate_read_block",
2691 	 fsapfs_test_deflate_read_block );
2692 
2693 	FSAPFS_TEST_RUN(
2694 	 "libfsapfs_deflate_decompress",
2695 	 fsapfs_test_deflate_decompress );
2696 
2697 	FSAPFS_TEST_RUN(
2698 	 "libfsapfs_deflate_decompress_zlib",
2699 	 fsapfs_test_deflate_decompress_zlib );
2700 
2701 #endif /* defined( __GNUC__ ) && !defined( LIBFSAPFS_DLL_IMPORT ) */
2702 
2703 	return( EXIT_SUCCESS );
2704 
2705 #if defined( __GNUC__ ) && !defined( LIBFSAPFS_DLL_IMPORT )
2706 
2707 on_error:
2708 	return( EXIT_FAILURE );
2709 
2710 #endif /* defined( __GNUC__ ) && !defined( LIBFSAPFS_DLL_IMPORT ) */
2711 }
2712 
2713