[SHELL32_APITEST] -Add some tests for SHParseDisplayName for CORE-12882.
[reactos.git] / rostests / apitests / apphelp / data.c
1 /*
2 * Copyright 2015,2016 Mark Jansen
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19 #include <exdisp.h>
20 #include <winbase.h>
21 #include "wine/test.h"
22
23
24 static IMAGE_DOS_HEADER dos_header =
25 {
26 IMAGE_DOS_SIGNATURE, /* e_magic */
27 144, /* e_cblp */
28 3, /* e_cp */
29 0, /* e_crlc */
30 4, /* e_cparhdr */
31 0, /* e_minalloc */
32 65535, /* e_maxalloc */
33 0, /* e_ss */
34 184, /* e_sp */
35 0, /* e_csum */
36 0, /* e_ip */
37 0, /* e_cs */
38 64, /* e_lfarlc */
39 0, /* e_ovno */
40 { 0 }, /* e_res[4] */
41 0, /* e_oemid */
42 0, /* e_oeminfo */
43 { 0 }, /* e_res2[10] */
44 0x80 /* e_lfanew */
45 };
46
47 static IMAGE_NT_HEADERS32 nt_header =
48 {
49 IMAGE_NT_SIGNATURE, /* Signature */
50 {
51 IMAGE_FILE_MACHINE_I386, /* Machine */
52 2, /* NumberOfSections */
53 0x12345, /* TimeDateStamp */
54 0, /* PointerToSymbolTable */
55 0, /* NumberOfSymbols */
56 sizeof(IMAGE_OPTIONAL_HEADER), /* SizeOfOptionalHeader */
57 IMAGE_FILE_RELOCS_STRIPPED | IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_LINE_NUMS_STRIPPED | IMAGE_FILE_32BIT_MACHINE /* Characteristics */
58 },
59 {
60 IMAGE_NT_OPTIONAL_HDR_MAGIC, /* Magic */
61 6, /* MajorLinkerVersion */
62 3, /* MinorLinkerVersion */
63 0, /* SizeOfCode */
64 0, /* SizeOfInitializedData */
65 0, /* SizeOfUninitializedData */
66 0x1000, /* AddressOfEntryPoint */
67 0x1000, /* BaseOfCode */
68 0, /* BaseOfData */
69 0x400000, /* ImageBase */
70 0x1000, /* SectionAlignment */
71 0x200, /* FileAlignment */
72 4, /* MajorOperatingSystemVersion */
73 1, /* MinorOperatingSystemVersion */
74 4, /* MajorImageVersion */
75 2, /* MinorImageVersion */
76 4, /* MajorSubsystemVersion */
77 3, /* MinorSubsystemVersion */
78 0, /* Win32VersionValue */
79 0x3000, /* SizeOfImage */
80 0x200, /* SizeOfHeaders */
81 0xBAAD, /* CheckSum: This checksum is not the correct checksum, intentionally! */
82 IMAGE_SUBSYSTEM_WINDOWS_CUI, /* Subsystem */
83 0, /* DllCharacteristics */
84 0x100000, /* SizeOfStackReserve */
85 0x1000, /* SizeOfStackCommit */
86 0x100000, /* SizeOfHeapReserve */
87 0x1000, /* SizeOfHeapCommit */
88 0, /* LoaderFlags */
89 0x10, /* NumberOfRvaAndSizes */
90 {
91 /* IMAGE_DIRECTORY_ENTRY_EXPORT */
92 {
93 0x2370, /* VirtualAddress */
94 76, /* Size */
95 },
96 { 0 },
97 /* IMAGE_DIRECTORY_ENTRY_RESOURCE */
98 {
99 0x2000, /* VirtualAddress */
100 868, /* Size */
101 },
102 } /* DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] */
103 }
104 };
105
106 static IMAGE_SECTION_HEADER section_headers[] =
107 {
108 {
109 { '.','t','e','x','t',0 }, /* Name */
110 { 24 }, /* VirtualSize */
111 0x1000, /* VirtualAddress */
112 0x200, /* SizeOfRawData */
113 0x200, /* PointerToRawData */
114 0, /* PointerToRelocations */
115 0, /* PointerToLinenumbers */
116 0, /* NumberOfRelocations */
117 0, /* NumberOfLinenumbers */
118 IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ /* Characteristics */
119 },
120 {
121 { '.','r','s','r','c',0 }, /* Name */
122 { 880 }, /* VirtualSize */
123 0x2000, /* VirtualAddress */
124 0x400, /* SizeOfRawData */
125 0x400, /* PointerToRawData */
126 0, /* PointerToRelocations */
127 0, /* PointerToLinenumbers */
128 0, /* NumberOfRelocations */
129 0, /* NumberOfLinenumbers */
130 IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ /* Characteristics */
131 }
132 };
133
134 static const unsigned char text_section[] =
135 {
136 0x33, 0xc0, /* xor eax, eax */
137 0xc3 /* ret */
138 };
139
140
141 /* taken from fusionpriv.h */
142 typedef struct
143 {
144 WORD wLength;
145 WORD wValueLength;
146 WORD wType;
147 WCHAR szKey[17];
148 VS_FIXEDFILEINFO Value;
149 } VS_VERSIONINFO;
150
151 typedef struct
152 {
153 WORD wLength;
154 WORD wValueLength;
155 WORD wType;
156 WCHAR szKey[15];
157 } STRINGFILEINFO;
158
159 typedef struct
160 {
161 WORD wLength;
162 WORD wValueLength;
163 WORD wType;
164 WCHAR szKey[9];
165 } STRINGTABLE;
166
167 typedef struct
168 {
169 WORD wLength;
170 WORD wValueLength;
171 WORD wType;
172 } STRINGHDR;
173
174 typedef struct
175 {
176 WORD wLength;
177 WORD wValueLength;
178 WORD wType;
179 WCHAR szKey[13];
180 } VARFILEINFO;
181
182 typedef struct
183 {
184 WORD wLength;
185 WORD wValueLength;
186 WORD wType;
187 WCHAR szKey[13];
188 DWORD Value;
189 } VAR;
190
191 typedef struct rsrc_section_t
192 {
193 IMAGE_RESOURCE_DIRECTORY header;
194 IMAGE_RESOURCE_DIRECTORY_ENTRY file_info_id;
195 IMAGE_RESOURCE_DIRECTORY file_info_header;
196 IMAGE_RESOURCE_DIRECTORY_ENTRY version_info_id;
197 IMAGE_RESOURCE_DIRECTORY version_info_header;
198 IMAGE_RESOURCE_DIRECTORY_ENTRY version_lang_id;
199 IMAGE_RESOURCE_DATA_ENTRY version_data_entry;
200
201 VS_VERSIONINFO version_info;
202 STRINGFILEINFO string_file_info;
203 STRINGTABLE string_table;
204
205 STRINGHDR FileVersion_hdr;
206 WCHAR FileVersion_key[13];
207 WCHAR FileVersion_val[8];
208
209 STRINGHDR ProductVersion_hdr;
210 WCHAR ProductVersion_key[15];
211 WCHAR ProductVersion_val[8];
212
213 STRINGHDR CompanyName_hdr;
214 WCHAR CompanyName_key[13];
215 WCHAR CompanyName_val[12];
216
217 STRINGHDR FileDescription_hdr;
218 WCHAR FileDescription_key[17];
219 WCHAR FileDescription_val[16];
220
221 STRINGHDR InternalName_hdr;
222 WCHAR InternalName_key[13];
223 WCHAR InternalName_val[14];
224
225 STRINGHDR LegalCopyright_hdr;
226 WCHAR LegalCopyright_key[15];
227 WCHAR LegalCopyright_val[16];
228
229 STRINGHDR LegalTrademarks_hdr;
230 WCHAR LegalTrademarks_key[17];
231 WCHAR LegalTrademarks_val[16];
232
233 STRINGHDR OriginalFilename_hdr;
234 WCHAR OriginalFilename_key[17];
235 WCHAR OriginalFilename_val[18];
236
237 STRINGHDR Productname_hdr;
238 WCHAR Productname_key[13];
239 WCHAR Productname_val[12];
240
241 VARFILEINFO file_info;
242 VAR translation;
243 } rsrc_section_t;
244
245 static const rsrc_section_t rsrc_section =
246 {
247 /* header */
248 {
249 0, /* Characteristics */
250 0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
251 0, /* MajorVersion */
252 0, /* MinorVersion */
253 0, /* NumberOfNamedEntries */
254 1, /* NumberOfIdEntries */
255 },
256 /* file_info_id */
257 {
258 {{
259 (DWORD)VS_FILE_INFO, /* NameOffset:31 */
260 0 /* NameIsString:1 */
261 }},
262 {
263 0x80000018 /* OffsetToData */
264 }
265 },
266 /* file_info_header */
267 {
268 0, /* Characteristics */
269 0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
270 0, /* MajorVersion */
271 0, /* MinorVersion */
272 0, /* NumberOfNamedEntries */
273 1, /* NumberOfIdEntries */
274 },
275 /* version_info_id */
276 {
277 {{
278 VS_VERSION_INFO, /* NameOffset:31 */
279 0 /* NameIsString:1 */
280 }},
281 {
282 0x80000030 /* OffsetToData */
283 },
284 },
285 /* version_info_header */
286 {
287 0, /* Characteristics */
288 0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
289 0, /* MajorVersion */
290 0, /* MinorVersion */
291 0, /* NumberOfNamedEntries */
292 1, /* NumberOfIdEntries */
293 },
294 /* version_lang_id */
295 {
296 {{
297 1033, /* NameOffset:31 */
298 0 /* NameIsString:1 */
299 }},
300 {
301 0x48 /* OffsetToDirectory */
302 }
303 },
304 /* version_data_entry */
305 {
306 0x2058, /* OffsetToData */
307 0x30C, /* Size */
308 0, /* CodePage */
309 0, /* Reserved */
310 },
311
312 /* version_info */
313 {
314 0x30C, /* wLength */
315 0x34, /* wValueLength */
316 0, /* wType: Binary */
317 { 'V','S','_','V','E','R','S','I','O','N','_','I','N','F','O','\0','\0' }, /* szKey[17] */
318 /* Value */
319 {
320 0xFEEF04BD, /* dwSignature */
321 0x10000, /* dwStrucVersion */
322 0x10000, /* dwFileVersionMS */
323 0, /* dwFileVersionLS */
324 0x10000, /* dwProductVersionMS */
325 1, /* dwProductVersionLS */
326 0, /* dwFileFlagsMask */
327 0, /* dwFileFlags */
328 VOS__WINDOWS32, /* dwFileOS */
329 VFT_APP, /* dwFileType */
330 0, /* dwFileSubtype */
331 0x01d1a019, /* dwFileDateMS */
332 0xac754c50 /* dwFileDateLS */
333 },
334 },
335
336 /* string_file_info */
337 {
338 0x26C, /* wLength */
339 0, /* wValueLength */
340 1, /* wType: Text */
341 { 'S','t','r','i','n','g','F','i','l','e','I','n','f','o','\0' } /* szKey[15] */
342 },
343 /* string_table */
344 {
345 0x248, /* wLength */
346 0, /* wValueLength */
347 1, /* wType: Text */
348 { 'F','F','F','F','0','0','0','0','\0' } /* szKey[9] */
349 },
350
351 /* FileVersion */
352 {
353 48, /* wLength */
354 8, /* wValueLength */
355 1, /* wType: Text */
356 },
357 { 'F','i','l','e','V','e','r','s','i','o','n','\0' },
358 { '1','.','0','.','0','.','0','\0' },
359
360 /* ProductVersion */
361 {
362 52, /* wLength */
363 8, /* wValueLength */
364 1, /* wType: Text */
365 },
366 { 'P','r','o','d','u','c','t','V','e','r','s','i','o','n','\0' },
367 { '1','.','0','.','0','.','1','\0' },
368
369 /* CompanyName */
370 {
371 56, /* wLength */
372 12, /* wValueLength */
373 1, /* wType: Text */
374 },
375 { 'C','o','m','p','a','n','y','N','a','m','e','\0' },
376 { 'C','o','m','p','a','n','y','N','a','m','e','\0' },
377
378 /* FileDescription */
379 {
380 72, /* wLength */
381 16, /* wValueLength */
382 1, /* wType: Text */
383 },
384 { 'F','i','l','e','D','e','s','c','r','i','p','t','i','o','n','\0' },
385 { 'F','i','l','e','D','e','s','c','r','i','p','t','i','o','n','\0' },
386
387 /* InternalName */
388 {
389 58, /* wLength */
390 13, /* wValueLength */
391 1, /* wType: Text */
392 },
393 { 'I','n','t','e','r','n','a','l','N','a','m','e','\0' },
394 { 'I','n','t','e','r','n','a','l','N','a','m','e','\0' },
395
396 /* LegalCopyright */
397 {
398 66, /* wLength */
399 15, /* wValueLength */
400 1, /* wType: Text */
401 },
402 { 'L','e','g','a','l','C','o','p','y','r','i','g','h','t','\0' },
403 { 'L','e','g','a','l','C','o','p','y','r','i','g','h','t','\0' },
404
405 /* LegalTrademarks */
406 {
407 72, /* wLength */
408 16, /* wValueLength */
409 1, /* wType: Text */
410 },
411 { 'L','e','g','a','l','T','r','a','d','e','m','a','r','k','s','\0' },
412 { 'L','e','g','a','l','T','r','a','d','e','m','a','r','k','s','\0' },
413
414 /* OriginalFilename */
415 {
416 74, /* wLength */
417 17, /* wValueLength */
418 1, /* wType: Text */
419 },
420 { 'O','r','i','g','i','n','a','l','F','i','l','e','n','a','m','e','\0' },
421 { 'O','r','i','g','i','n','a','l','F','i','l','e','n','a','m','e','\0' },
422
423 /* ProductName */
424 {
425 56, /* wLength */
426 12, /* wValueLength */
427 1, /* wType: Text */
428 },
429 { 'P','r','o','d','u','c','t','N','a','m','e','\0' },
430 { 'P','r','o','d','u','c','t','N','a','m','e','\0' },
431
432
433 /* file_info */
434 {
435 0x44, /* wLength */
436 0, /* wValueLength */
437 1, /* wType: Text */
438 { 'V','a','r','F','i','l','e','I','n','f','o','\0' } /* szKey[13] */
439 },
440
441 /* translation */
442 {
443 0x24, /* wLength */
444 4, /* wValueLength */
445 0, /* wType: Binary */
446 { 'T','r','a','n','s','l','a','t','i','o','n','\0' }, /* szKey[13] */
447 0xffff /* Value */
448 }
449 };
450
451 typedef struct export_section_t
452 {
453 IMAGE_EXPORT_DIRECTORY desc;
454 char binary_name[10];
455 } export_section_t;
456
457 /* This export section is not complete, but the Name RVA is only taken into account */
458 static export_section_t export_dir =
459 {
460 {
461 0, /* Characteristics */
462 0, /* TimeDateStamp */
463 0, /* MajorVersion */
464 0, /* MinorVersion */
465 0x2398, /* Name (RVA) */
466 1, /* Base */
467 0, /* NumberOfFunctions */
468 0, /* NumberOfNames */
469 0, /* AddressOfFunctions (RVA) */
470 0, /* AddressOfNames (RVA) */
471 0, /* AddressOfNameOrdinals (RVA) */
472 },
473 { 'T','e','S','t','2','.','e','x','e',0 }, /* binary_name */
474 };
475
476
477 void test_create_exe_imp(const char* name, int skip_rsrc_exports)
478 {
479 HANDLE file;
480 char *buf, *cur;
481 DWORD size = 0x800;
482 buf = malloc(size);
483
484 file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
485 winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file\n");
486 if(file == INVALID_HANDLE_VALUE)
487 return;
488
489 memset(buf, 0, size);
490 cur = buf;
491 cur = memcpy(buf, &dos_header, sizeof(dos_header));
492 cur += dos_header.e_lfanew;
493
494 memcpy(cur, &nt_header, sizeof(nt_header));
495 if (skip_rsrc_exports)
496 {
497 ((IMAGE_NT_HEADERS32*)cur)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress = 0;
498 ((IMAGE_NT_HEADERS32*)cur)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress = 0;
499 }
500 cur += sizeof(nt_header);
501 memcpy(cur, section_headers, sizeof(section_headers));
502
503 /* write code section: */
504 cur = buf + section_headers[0].PointerToRawData;
505 memcpy(cur, text_section, sizeof(text_section));
506
507 if (!skip_rsrc_exports)
508 {
509 /* write resource section: */
510 cur = buf + section_headers[1].PointerToRawData;
511 memcpy(cur, &rsrc_section, sizeof(rsrc_section));
512
513 /* write minimal export directory: */
514 cur += 0x370;
515 memcpy(cur, &export_dir, sizeof(export_dir));
516 }
517
518 WriteFile(file, buf, size, &size, NULL);
519 free(buf);
520 CloseHandle(file);
521 }
522
523
524 /* Almost everything in this filetype is ignored, only e_lfanew, ne_restab and ne_nrestab are relevant */
525 void test_create_ne_imp(const char* name, int skip_names)
526 {
527 HANDLE file;
528 DWORD size;
529 IMAGE_DOS_HEADER MZ_hdr = { IMAGE_DOS_SIGNATURE, 0 };
530 IMAGE_OS2_HEADER NE_hdr = { IMAGE_OS2_SIGNATURE, 0 };
531 static const BYTE NE_names[] =
532 {
533 /* Show that the length is used, not the nullterm*/
534 11,'T','E','S','T','M','O','D','.','h','X','x','x',0,0,0,
535 20,'M','O','D',' ','D','E','S','C','R','I','P','T','I','O','N',' ','H','E','R','E',0,0,0
536 };
537
538 file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
539 winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file\n");
540 if(file == INVALID_HANDLE_VALUE)
541 return;
542
543 MZ_hdr.e_lfanew = sizeof(MZ_hdr);
544 if (!skip_names)
545 {
546 NE_hdr.ne_restab = sizeof(NE_hdr); /* First entry (pascal string + ordinal) = module name */
547 NE_hdr.ne_nrestab = sizeof(MZ_hdr) + sizeof(NE_hdr) + 16; /* First entry (pascal string + ordinal) = module description */
548 }
549
550 WriteFile(file, &MZ_hdr, sizeof(MZ_hdr), &size, NULL);
551 WriteFile(file, &NE_hdr, sizeof(NE_hdr), &size, NULL);
552 WriteFile(file, NE_names, sizeof(NE_names), &size, NULL);
553
554 CloseHandle(file);
555 }
556
557 void test_create_file_imp(const char* name, const char* contents, size_t len)
558 {
559 HANDLE file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
560 winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file\n");
561 if (file != INVALID_HANDLE_VALUE)
562 {
563 if (contents && len)
564 {
565 DWORD size;
566 WriteFile(file, contents, len, &size, NULL);
567 }
568 CloseHandle(file);
569 }
570 }
571
572 static unsigned char win10Header[8] = {
573 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
574 };
575 static unsigned char rawData[2356] = {
576 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x73, 0x64, 0x62, 0x66,
577 0x02, 0x78, 0x3E, 0x01, 0x00, 0x00, 0x03, 0x78, 0x44, 0x00, 0x00, 0x00,
578 0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00,
579 0x00, 0x00, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00, 0x4C, 0x4C, 0x41, 0x5F,
580 0x54, 0x53, 0x45, 0x54, 0xC6, 0x01, 0x00, 0x00, 0x53, 0x49, 0x44, 0x5F,
581 0x54, 0x53, 0x45, 0x54, 0x56, 0x02, 0x00, 0x00, 0x57, 0x45, 0x4E, 0x5F,
582 0x54, 0x53, 0x45, 0x54, 0xEC, 0x02, 0x00, 0x00, 0x4B, 0x32, 0x57, 0x5F,
583 0x54, 0x53, 0x45, 0x54, 0x7C, 0x03, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00,
584 0x00, 0x00, 0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x0B, 0x60, 0x01, 0x98,
585 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38,
586 0x07, 0x70, 0x03, 0x38, 0x20, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00,
587 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38, 0x04, 0x70, 0x03, 0x38,
588 0x01, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x26, 0x00,
589 0x00, 0x00, 0x02, 0x38, 0x0D, 0x70, 0x03, 0x38, 0x15, 0x40, 0x01, 0x98,
590 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
591 0x74, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
592 0x50, 0x04, 0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38,
593 0x10, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00,
594 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00,
595 0x02, 0x38, 0x12, 0x70, 0x03, 0x38, 0x06, 0x90, 0x01, 0x98, 0x00, 0x00,
596 0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38, 0x12, 0x70,
597 0x03, 0x38, 0x04, 0x90, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x98,
598 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x3E, 0x00, 0x00, 0x00, 0x02, 0x38,
599 0x07, 0x70, 0x03, 0x38, 0x04, 0x90, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00,
600 0xED, 0xB4, 0x89, 0x50, 0xB1, 0xA4, 0x82, 0xA7, 0xEC, 0x02, 0x00, 0x00,
601 0x85, 0x2B, 0x88, 0x40, 0x97, 0x76, 0xA6, 0xC4, 0xC6, 0x01, 0x00, 0x00,
602 0x77, 0x7A, 0xBF, 0x48, 0x78, 0xB1, 0x69, 0xD2, 0x56, 0x02, 0x00, 0x00,
603 0xD0, 0x15, 0xE6, 0xCB, 0xE8, 0x90, 0x68, 0xFE, 0x7C, 0x03, 0x00, 0x00,
604 0x01, 0x70, 0x42, 0x03, 0x00, 0x00, 0x01, 0x50, 0x3E, 0xD6, 0xC0, 0x02,
605 0x1A, 0xB9, 0xD1, 0x01, 0x22, 0x60, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60,
606 0x1C, 0x00, 0x00, 0x00, 0x23, 0x40, 0x01, 0x00, 0x00, 0x00, 0x07, 0x90,
607 0x10, 0x00, 0x00, 0x00, 0xB0, 0x0E, 0x9B, 0xE3, 0xDB, 0x55, 0x0B, 0x45,
608 0x9B, 0xD4, 0xD2, 0x0C, 0x94, 0x84, 0x26, 0x0F, 0x02, 0x70, 0x00, 0x00,
609 0x00, 0x00, 0x0B, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00,
610 0x00, 0x00, 0x09, 0x70, 0x26, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x00,
611 0x00, 0x00, 0x08, 0x60, 0x82, 0x00, 0x00, 0x00, 0x03, 0x70, 0x06, 0x00,
612 0x00, 0x00, 0x03, 0x60, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x70, 0x08, 0x00,
613 0x00, 0x00, 0x01, 0x10, 0x03, 0x60, 0xBE, 0x00, 0x00, 0x00, 0x07, 0x70,
614 0x8A, 0x00, 0x00, 0x00, 0x01, 0x60, 0xDC, 0x00, 0x00, 0x00, 0x06, 0x60,
615 0x00, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2C, 0x01, 0x00, 0x00, 0x04, 0x90,
616 0x10, 0x00, 0x00, 0x00, 0x3F, 0xC9, 0x50, 0x4E, 0x63, 0xB8, 0xFA, 0x4D,
617 0xBA, 0xE2, 0xD8, 0x0E, 0xF4, 0xCE, 0x5C, 0x89, 0x0D, 0x70, 0x24, 0x00,
618 0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x01, 0x00,
619 0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00, 0x24, 0x40, 0x72, 0x00,
620 0x6F, 0x00, 0x25, 0x40, 0x67, 0x00, 0x72, 0x00, 0x26, 0x40, 0x00, 0x00,
621 0x00, 0x00, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
622 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
623 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x13, 0x60, 0xB8, 0x01,
624 0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
625 0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x70,
626 0x90, 0x00, 0x00, 0x00, 0x01, 0x60, 0xCE, 0x01, 0x00, 0x00, 0x06, 0x60,
627 0xF8, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2A, 0x02, 0x00, 0x00, 0x04, 0x90,
628 0x10, 0x00, 0x00, 0x00, 0xE1, 0x20, 0x67, 0x15, 0x98, 0xEF, 0x04, 0x4D,
629 0x96, 0x5A, 0xD8, 0x5D, 0xE0, 0x5E, 0x6D, 0x9F, 0x0D, 0x70, 0x24, 0x00,
630 0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x02, 0x00,
631 0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00, 0x24, 0x40, 0x20, 0x00,
632 0x32, 0x00, 0x25, 0x40, 0x2E, 0x00, 0x38, 0x00, 0x26, 0x40, 0x00, 0x00,
633 0x00, 0x00, 0x08, 0x70, 0x38, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
634 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
635 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
636 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
637 0x00, 0x00, 0x01, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x13, 0x60,
638 0xB8, 0x01, 0x00, 0x00, 0x07, 0x70, 0x8A, 0x00, 0x00, 0x00, 0x01, 0x60,
639 0x60, 0x02, 0x00, 0x00, 0x06, 0x60, 0x80, 0x02, 0x00, 0x00, 0x05, 0x60,
640 0x9E, 0x02, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x69, 0xEF,
641 0x70, 0xCE, 0x1D, 0xA2, 0x8B, 0x40, 0x84, 0x5B, 0xF9, 0x9E, 0xAC, 0x06,
642 0x09, 0xE7, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
643 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
644 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
645 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
646 0x00, 0x00, 0x01, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x08, 0x70,
647 0x12, 0x00, 0x00, 0x00, 0x01, 0x60, 0xC0, 0x02, 0x00, 0x00, 0x01, 0x40,
648 0x04, 0x00, 0x00, 0x00, 0x03, 0x40, 0xB0, 0xB0, 0xB0, 0xB0, 0x0B, 0x70,
649 0x0C, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00, 0x00, 0x00, 0x1A, 0x40,
650 0x8E, 0x01, 0x00, 0x00, 0x07, 0x70, 0xCE, 0x00, 0x00, 0x00, 0x01, 0x60,
651 0xEC, 0x02, 0x00, 0x00, 0x06, 0x60, 0x0E, 0x03, 0x00, 0x00, 0x05, 0x60,
652 0x26, 0x03, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x44, 0xD1,
653 0xEA, 0xB4, 0x40, 0xF6, 0x4B, 0x4E, 0x94, 0xC4, 0x0C, 0x7F, 0xA8, 0x66,
654 0x23, 0xB0, 0x08, 0x70, 0x94, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
655 0x00, 0x00, 0x01, 0x40, 0x00, 0x08, 0x00, 0x00, 0x03, 0x40, 0x29, 0xD6,
656 0x8B, 0x17, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
657 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x12, 0x60, 0x42, 0x03,
658 0x00, 0x00, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
659 0x03, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x40,
660 0x03, 0x00, 0x00, 0x00, 0x09, 0x40, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x40,
661 0x01, 0x00, 0x00, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x1C, 0x40,
662 0x02, 0x00, 0x04, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x14, 0x60,
663 0x68, 0x03, 0x00, 0x00, 0x15, 0x60, 0x90, 0x03, 0x00, 0x00, 0x16, 0x60,
664 0xB0, 0x03, 0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
665 0x01, 0x00, 0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
666 0x1D, 0x40, 0x45, 0x23, 0x01, 0x00, 0x1E, 0x40, 0x45, 0x23, 0x01, 0x00,
667 0x0B, 0x70, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60, 0xD4, 0x03, 0x00, 0x00,
668 0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00,
669 0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0xEC, 0x03, 0x00, 0x00,
670 0x1B, 0x60, 0xF8, 0x01, 0x00, 0x00, 0x18, 0x60, 0x2A, 0x04, 0x00, 0x00,
671 0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00,
672 0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0x4A, 0x04, 0x00, 0x00,
673 0x1B, 0x60, 0x00, 0x01, 0x00, 0x00, 0x18, 0x60, 0x82, 0x04, 0x00, 0x00,
674 0x01, 0x78, 0x96, 0x04, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00, 0x00, 0x00,
675 0x32, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
676 0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x61, 0x00,
677 0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
678 0x5F, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x31, 0x00,
679 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x65, 0x00,
680 0x73, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x4D, 0x00,
681 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00,
682 0x00, 0x00, 0x56, 0x00, 0x69, 0x00, 0x72, 0x00, 0x74, 0x00, 0x75, 0x00,
683 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x69, 0x00,
684 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x01, 0x88,
685 0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6D, 0x00,
686 0x65, 0x00, 0x41, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00,
687 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x65, 0x00,
688 0x78, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00,
689 0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x01, 0x88,
690 0x18, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6C, 0x00,
691 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00,
692 0x6C, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00, 0x00, 0x00, 0x74, 0x00,
693 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x61, 0x00, 0x6C, 0x00,
694 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
695 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00, 0x00, 0x00, 0x61, 0x00,
696 0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
697 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00,
698 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
699 0x01, 0x88, 0x2A, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
700 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x76, 0x00,
701 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00,
702 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
703 0x01, 0x88, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x01, 0x88,
704 0x18, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00,
705 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00,
706 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x50, 0x00,
707 0x72, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00,
708 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
709 0x10, 0x00, 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
710 0x30, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00,
711 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x30, 0x00,
712 0x2E, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x88, 0x24, 0x00, 0x00, 0x00,
713 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x64, 0x00,
714 0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00,
715 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
716 0x01, 0x88, 0x2C, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
717 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x6E, 0x00,
718 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x69, 0x00,
719 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
720 0x00, 0x00, 0x01, 0x88, 0x30, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00,
721 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00,
722 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00,
723 0x5F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00,
724 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1A, 0x00,
725 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
726 0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
727 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x66, 0x00,
728 0x69, 0x00, 0x78, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x5F, 0x00,
729 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
730 0x1C, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x78, 0x00, 0x6E, 0x00,
731 0x65, 0x00, 0x77, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00,
732 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00,
733 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
734 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x66, 0x00,
735 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x78, 0x00,
736 0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x74, 0x00,
737 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x77, 0x00, 0x32, 0x00,
738 0x6B, 0x00, 0x33, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00,
739 0x00, 0x00, 0x01, 0x88, 0x12, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
740 0x78, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00,
741 0x00, 0x00, 0x01, 0x88, 0x16, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
742 0x78, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00,
743 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00, 0x00, 0x00,
744 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x65, 0x00,
745 0x73, 0x00, 0x63, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00,
746 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x01, 0x88, 0x22, 0x00,
747 0x00, 0x00, 0x4F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00,
748 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00,
749 0x65, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00,
750 0x01, 0x88, 0x1A, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00,
751 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4E, 0x00,
752 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00,
753 0x00, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6C, 0x00,
754 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00,
755 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x12, 0x00,
756 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x72, 0x00,
757 0x76, 0x00, 0x30, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x38, 0x00,
758 0x00, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00,
759 0x2F, 0x00, 0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00,
760 0x74, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00,
761 0x67, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00,
762 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88,
763 0x1A, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x20, 0x00,
764 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00,
765 0x64, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x88, 0x32, 0x00, 0x00, 0x00,
766 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00, 0x2F, 0x00,
767 0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00, 0x74, 0x00,
768 0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x67, 0x00,
769 0x2F, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
770 0x00, 0x00, 0x01, 0x88, 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x6C, 0x00,
771 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x20, 0x00, 0x69, 0x00, 0x74, 0x00,
772 0x21, 0x00, 0x00, 0x00
773 };
774
775 DWORD test_get_db_size()
776 {
777 return sizeof(rawData);
778 }
779
780 void test_create_db_imp(const char* name, int win10)
781 {
782 HANDLE file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
783 winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file '%s'\n", name);
784 if (file != INVALID_HANDLE_VALUE)
785 {
786 DWORD size;
787 WriteFile(file, rawData, sizeof(rawData), &size, NULL);
788 if (win10)
789 {
790 SetFilePointer(file, 0, NULL, FILE_BEGIN);
791 WriteFile(file, win10Header, sizeof(win10Header), &size, NULL);
792 }
793 CloseHandle(file);
794 }
795 }
796
797 static DWORD g_WinVersion;
798 DWORD get_host_winver(void)
799 {
800 if (!g_WinVersion)
801 {
802 RTL_OSVERSIONINFOEXW rtlinfo = {0};
803 void (__stdcall* pRtlGetVersion)(RTL_OSVERSIONINFOEXW*);
804 pRtlGetVersion = (void (__stdcall*)(RTL_OSVERSIONINFOEXW*))GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");
805
806 rtlinfo.dwOSVersionInfoSize = sizeof(rtlinfo);
807 pRtlGetVersion(&rtlinfo);
808 g_WinVersion = (rtlinfo.dwMajorVersion << 8) | rtlinfo.dwMinorVersion;
809 }
810 return g_WinVersion;
811 }
812
813 DWORD get_module_version(HMODULE mod)
814 {
815 DWORD dwVersion = 0;
816 HRSRC hResInfo = FindResource(mod, MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION);
817 DWORD dwSize = SizeofResource(mod, hResInfo);
818 if (hResInfo && dwSize)
819 {
820 VS_FIXEDFILEINFO *lpFfi;
821 UINT uLen;
822
823 HGLOBAL hResData = LoadResource(mod, hResInfo);
824 LPVOID pRes = LockResource(hResData);
825 HLOCAL pResCopy = LocalAlloc(LMEM_FIXED, dwSize);
826
827 CopyMemory(pResCopy, pRes, dwSize);
828 FreeResource(hResData);
829
830 if (VerQueryValueW(pResCopy, L"\\", (LPVOID*)&lpFfi, &uLen))
831 {
832 dwVersion = (HIWORD(lpFfi->dwProductVersionMS) << 8) | LOWORD(lpFfi->dwProductVersionMS);
833 if (!dwVersion)
834 dwVersion = (HIWORD(lpFfi->dwFileVersionMS) << 8) | LOWORD(lpFfi->dwFileVersionMS);
835 }
836
837 LocalFree(pResCopy);
838 }
839
840 return dwVersion;
841 }
842
843 void silence_debug_output(void)
844 {
845 if (GetEnvironmentVariableA("SHIM_DEBUG_LEVEL", NULL, 0) == ERROR_ENVVAR_NOT_FOUND)
846 SetEnvironmentVariableA("SHIM_DEBUG_LEVEL", "0");
847 if (GetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", NULL, 0) == ERROR_ENVVAR_NOT_FOUND)
848 SetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", "0");
849 }
850