Merge remote branch 'cros/upstream' into merge-branch.
Brings us up to google-breakpad's 734.

Conflicts resolved:
	src/common/linux/dump_symbols.cc
	src/common/linux/dump_symbols.h
	src/processor/minidump_dump.cc
	src/tools/linux/dump_syms/dump_syms.cc
	src/tools/linux/symupload/minidump_upload.cc
	src/tools/linux/symupload/sym_upload.cc

BUG=9281
TEST=
1) emerge with host, x86-generic, arm-generic
2) run UserCrash like 40 times
3) run cros_generate_breakpad_symbols on full checkout without obvious errors
4) ran FEATURES=test emerge-x86-generic google-breakpad

Change-Id: I4c31862d26bd744eda2064f3175cec6adb4c1388
diff --git a/DEPS b/DEPS
old mode 100755
new mode 100644
diff --git a/Makefile.am b/Makefile.am
index c1dac8f..4eefc88 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -49,9 +49,20 @@
 
 
 ## Libraries
-lib_LTLIBRARIES = src/libbreakpad.la src/client/linux/libbreakpad_client.la
+noinst_LIBRARIES =
+lib_LIBRARIES =
+bin_PROGRAMS =
+check_PROGRAMS =
 
-src_client_linux_libbreakpad_client_la_SOURCES = \
+if !DISABLE_PROCESSOR
+lib_LIBRARIES += src/libbreakpad.a
+noinst_LIBRARIES += src/third_party/libdisasm/libdisasm.a
+endif
+
+if LINUX_HOST
+lib_LIBRARIES += src/client/linux/libbreakpad_client.a
+
+src_client_linux_libbreakpad_client_a_SOURCES = \
 	src/client/linux/crash_generation/crash_generation_client.cc \
 	src/client/linux/handler/exception_handler.cc \
 	src/client/linux/minidump_writer/linux_dumper.cc \
@@ -62,8 +73,10 @@
 	src/common/string_conversion.cc \
 	src/common/linux/file_id.cc \
 	src/common/linux/guid_creator.cc
+endif
 
-src_libbreakpad_la_SOURCES = \
+if !DISABLE_PROCESSOR
+src_libbreakpad_a_SOURCES = \
 	src/google_breakpad/common/breakpad_types.h \
 	src/google_breakpad/common/minidump_format.h \
 	src/google_breakpad/common/minidump_size.h \
@@ -71,11 +84,14 @@
 	src/google_breakpad/processor/call_stack.h \
 	src/google_breakpad/processor/code_module.h \
 	src/google_breakpad/processor/code_modules.h \
+	src/google_breakpad/processor/exploitability.h \
+	src/google_breakpad/processor/fast_source_line_resolver.h \
 	src/google_breakpad/processor/memory_region.h \
 	src/google_breakpad/processor/minidump.h \
 	src/google_breakpad/processor/minidump_processor.h \
 	src/google-breakpad/processor/network_source_line_resolver.h \
 	src/google_breakpad/processor/process_state.h \
+	src/google_breakpad/processor/source_line_resolver_base.h \
 	src/google_breakpad/processor/source_line_resolver_interface.h \
 	src/google_breakpad/processor/stack_frame.h \
 	src/google_breakpad/processor/stack_frame_cpu.h \
@@ -87,6 +103,7 @@
 	src/processor/basic_code_module.h \
 	src/processor/basic_code_modules.cc \
 	src/processor/basic_code_modules.h \
+	src/processor/basic_source_line_resolver_types.h \
 	src/processor/basic_source_line_resolver.cc \
 	src/processor/binarystream.h \
 	src/processor/binarystream.cc \
@@ -95,11 +112,23 @@
 	src/processor/cfi_frame_info.h \
 	src/processor/contained_range_map-inl.h \
 	src/processor/contained_range_map.h \
+	src/processor/disassembler_x86.h \
+	src/processor/disassembler_x86.cc \
+	src/processor/exploitability.cc \
+	src/processor/exploitability_win.h \
+	src/processor/exploitability_win.cc \
+	src/processor/fast_source_line_resolver_types.h \
+	src/processor/fast_source_line_resolver.cc \
 	src/processor/linked_ptr.h \
 	src/processor/logging.h \
 	src/processor/logging.cc \
+	src/processor/map_serializers-inl.h \
+	src/processor/map_serializers.h \
 	src/processor/minidump.cc \
 	src/processor/minidump_processor.cc \
+	src/processor/module_comparer.cc \
+	src/processor/module_comparer.h \
+	src/processor/module_factory.h \
 	src/processor/network_interface.h \
 	src/processor/network_source_line_resolver.cc \
 	src/processor/network_source_line_server.cc \
@@ -112,9 +141,13 @@
 	src/processor/range_map-inl.h \
 	src/processor/range_map.h \
 	src/processor/scoped_ptr.h \
+	src/processor/simple_serializer-inl.h \
+	src/processor/simple_serializer.h \
 	src/processor/simple_symbol_supplier.cc \
 	src/processor/simple_symbol_supplier.h \
 	src/processor/windows_frame_info.h \
+	src/processor/source_line_resolver_base_types.h \
+	src/processor/source_line_resolver_base.cc \
 	src/processor/stackwalker.cc \
 	src/processor/stackwalker_amd64.cc \
 	src/processor/stackwalker_amd64.h \
@@ -126,33 +159,85 @@
 	src/processor/stackwalker_sparc.h \
 	src/processor/stackwalker_x86.cc \
 	src/processor/stackwalker_x86.h \
+	src/processor/static_address_map-inl.h \
+	src/processor/static_address_map.h \
+	src/processor/static_contained_range_map-inl.h \
+	src/processor/static_contained_range_map.h \
+	src/processor/static_map_iterator-inl.h \
+	src/processor/static_map_iterator.h \
+	src/processor/static_map-inl.h \
+	src/processor/static_map.h \
+	src/processor/static_range_map-inl.h \
+	src/processor/static_range_map.h \
 	src/processor/tokenize.cc \
 	src/processor/tokenize.h \
 	src/processor/udp_network.cc \
 	src/processor/udp_network.h
 
+src_libbreakpad_a_LIBADD = src/third_party/libdisasm/libdisasm.a
+
+src_third_party_libdisasm_libdisasm_a_SOURCES = \
+	src/third_party/libdisasm/ia32_implicit.c \
+	src/third_party/libdisasm/ia32_implicit.h \
+	src/third_party/libdisasm/ia32_insn.c \
+	src/third_party/libdisasm/ia32_insn.h \
+	src/third_party/libdisasm/ia32_invariant.c \
+	src/third_party/libdisasm/ia32_invariant.h \
+	src/third_party/libdisasm/ia32_modrm.c \
+	src/third_party/libdisasm/ia32_modrm.h \
+	src/third_party/libdisasm/ia32_opcode_tables.c \
+	src/third_party/libdisasm/ia32_opcode_tables.h \
+	src/third_party/libdisasm/ia32_operand.c \
+	src/third_party/libdisasm/ia32_operand.h \
+	src/third_party/libdisasm/ia32_reg.c \
+	src/third_party/libdisasm/ia32_reg.h \
+	src/third_party/libdisasm/ia32_settings.c \
+	src/third_party/libdisasm/ia32_settings.h \
+	src/third_party/libdisasm/libdis.h \
+	src/third_party/libdisasm/qword.h \
+	src/third_party/libdisasm/x86_disasm.c \
+	src/third_party/libdisasm/x86_format.c \
+	src/third_party/libdisasm/x86_imm.c \
+	src/third_party/libdisasm/x86_imm.h \
+	src/third_party/libdisasm/x86_insn.c \
+	src/third_party/libdisasm/x86_misc.c \
+	src/third_party/libdisasm/x86_operand_list.c \
+	src/third_party/libdisasm/x86_operand_list.h
 
 ## Programs
-bin_PROGRAMS = \
-	src/client/linux/linux_dumper_unittest_helper \
+bin_PROGRAMS += \
 	src/processor/minidump_dump \
 	src/processor/minidump_stackwalk \
-	src/processor/source_daemon 
+	src/processor/source_daemon
+endif !DISABLE_PROCESSOR
+
+if LINUX_HOST
+bin_PROGRAMS += \
+	src/client/linux/linux_dumper_unittest_helper
+endif
 
 ## Tests
-check_PROGRAMS = \
-	src/client/linux/linux_client_unittest \
+if !DISABLE_PROCESSOR
+check_PROGRAMS += \
 	src/common/test_assembler_unittest \
 	src/processor/address_map_unittest \
 	src/processor/binarystream_unittest \
 	src/processor/basic_source_line_resolver_unittest \
 	src/processor/cfi_frame_info_unittest \
 	src/processor/contained_range_map_unittest \
+	src/processor/disassembler_x86_unittest \
+	src/processor/exploitability_unittest \
+	src/processor/fast_source_line_resolver_unittest \
+	src/processor/map_serializers_unittest \
 	src/processor/minidump_processor_unittest \
 	src/processor/minidump_unittest \
 	src/processor/network_source_line_resolver_unittest \
 	src/processor/network_source_line_resolver_server_unittest \
 	src/processor/network_source_line_server_unittest \
+	src/processor/static_address_map_unittest \
+	src/processor/static_contained_range_map_unittest \
+	src/processor/static_map_unittest \
+	src/processor/static_range_map_unittest \
 	src/processor/pathname_stripper_unittest \
 	src/processor/postfix_evaluator_unittest \
 	src/processor/range_map_unittest \
@@ -160,20 +245,31 @@
 	src/processor/stackwalker_arm_unittest \
 	src/processor/stackwalker_x86_unittest \
 	src/processor/synth_minidump_unittest
+endif
 
+if LINUX_HOST
+check_PROGRAMS += \
+	src/client/linux/linux_client_unittest
+endif
+
+if !DISABLE_PROCESSOR
 if SELFTEST
 check_PROGRAMS += \
 	src/processor/stackwalker_selftest
 endif SELFTEST
+endif !DISABLE_PROCESSOR
 
+if !DISABLE_PROCESSOR
 check_SCRIPTS = \
 	src/processor/minidump_dump_test \
 	src/processor/minidump_stackwalk_test \
 	src/processor/minidump_stackwalk_machine_readable_test
+endif
 
 TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
 TESTS_ENVIRONMENT =
 
+if LINUX_HOST
 src_client_linux_linux_dumper_unittest_helper_SOURCES = \
 	src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
 src_client_linux_linux_dumper_unittest_helper_CXXFLAGS=$(PTHREAD_CFLAGS)
@@ -186,61 +282,73 @@
 	src/client/linux/minidump_writer/line_reader_unittest.cc \
 	src/client/linux/minidump_writer/linux_dumper_unittest.cc \
 	src/client/linux/minidump_writer/minidump_writer_unittest.cc \
+	src/common/memory_unittest.cc \
 	src/testing/gtest/src/gtest-all.cc \
 	src/testing/gtest/src/gtest_main.cc \
-	src/testing/src/gmock-all.cc
+	src/testing/src/gmock-all.cc \
+	src/processor/basic_code_modules.cc \
+	src/processor/logging.cc \
+	src/processor/minidump.cc \
+	src/processor/pathname_stripper.cc
 
 src_client_linux_linux_client_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 src_client_linux_linux_client_unittest_LDADD = \
-	src/client/linux/handler/exception_handler.lo \
-	src/client/linux/crash_generation/crash_generation_client.lo \
-	src/client/linux/minidump_writer/linux_dumper.lo \
-	src/client/linux/minidump_writer/minidump_writer.lo \
-	src/client/minidump_file_writer.lo \
-	src/common/convert_UTF.lo \
-	src/common/md5.lo \
-	src/common/linux/file_id.lo \
-	src/common/linux/guid_creator.lo \
-	src/common/string_conversion.lo
-src_client_linux_linux_client_unittest_DEPENDENCIES = src/client/linux/linux_dumper_unittest_helper src/client/linux/libbreakpad_client.la
+	src/client/linux/handler/exception_handler.o \
+	src/client/linux/crash_generation/crash_generation_client.o \
+	src/client/linux/minidump_writer/linux_dumper.o \
+	src/client/linux/minidump_writer/minidump_writer.o \
+	src/client/minidump_file_writer.o \
+	src/common/convert_UTF.o \
+	src/common/md5.o \
+	src/common/linux/file_id.o \
+	src/common/linux/guid_creator.o \
+	src/common/string_conversion.o
 
+src_client_linux_linux_client_unittest_DEPENDENCIES = src/client/linux/linux_dumper_unittest_helper src/client/linux/libbreakpad_client.a src/libbreakpad.a
+endif
+
+if !DISABLE_PROCESSOR
 src_processor_address_map_unittest_SOURCES = \
 	src/processor/address_map_unittest.cc
 src_processor_address_map_unittest_LDADD = \
-	src/processor/logging.lo \
-	src/processor/pathname_stripper.lo
+	src/processor/logging.o \
+	src/processor/pathname_stripper.o
 
 src_processor_binarystream_unittest_SOURCES = \
 	src/processor/binarystream_unittest.cc \
 	src/testing/gtest/src/gtest-all.cc \
 	src/testing/src/gmock-all.cc
 src_processor_binarystream_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 src_processor_binarystream_unittest_LDADD = \
-	src/processor/binarystream.lo
+	src/processor/binarystream.o
 
 src_processor_basic_source_line_resolver_unittest_SOURCES = \
 	src/processor/basic_source_line_resolver_unittest.cc \
 	src/testing/gtest/src/gtest-all.cc \
 	src/testing/src/gmock-all.cc
 src_processor_basic_source_line_resolver_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 src_processor_basic_source_line_resolver_unittest_LDADD = \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/logging.lo \
-	src/processor/tokenize.lo
+	src/processor/basic_source_line_resolver.o \
+	src/processor/cfi_frame_info.o \
+	src/processor/pathname_stripper.o \
+	src/processor/logging.o \
+	src/processor/source_line_resolver_base.o \
+	src/processor/tokenize.o
 
 src_processor_cfi_frame_info_unittest_SOURCES = \
 	src/processor/cfi_frame_info_unittest.cc \
@@ -248,47 +356,138 @@
 	src/testing/gtest/src/gtest_main.cc \
 	src/testing/src/gmock-all.cc
 src_processor_cfi_frame_info_unittest_LDADD = \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/pathname_stripper.lo
+	src/processor/cfi_frame_info.o \
+	src/processor/logging.o \
+	src/processor/pathname_stripper.o
 src_processor_cfi_frame_info_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 
 src_processor_contained_range_map_unittest_SOURCES = \
 	src/processor/contained_range_map_unittest.cc
 src_processor_contained_range_map_unittest_LDADD = \
-	src/processor/logging.lo \
-	src/processor/pathname_stripper.lo
+	src/processor/logging.o \
+	src/processor/pathname_stripper.o
+
+src_processor_exploitability_unittest_SOURCES = \
+	src/processor/exploitability_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+src_processor_exploitability_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/testing/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest \
+	-I$(top_srcdir)/src/testing
+src_processor_exploitability_unittest_LDADD = \
+	src/processor/minidump_processor.o \
+	src/processor/process_state.o \
+	src/processor/disassembler_x86.o \
+	src/processor/exploitability.o \
+	src/processor/exploitability_win.o \
+	src/processor/basic_code_modules.o \
+	src/processor/basic_source_line_resolver.o \
+	src/processor/call_stack.o \
+	src/processor/cfi_frame_info.o \
+	src/processor/logging.o \
+	src/processor/minidump.o \
+	src/processor/pathname_stripper.o \
+	src/processor/source_line_resolver_base.o \
+	src/processor/stackwalker.o \
+	src/processor/stackwalker_amd64.o \
+	src/processor/stackwalker_arm.o \
+	src/processor/stackwalker_ppc.o \
+	src/processor/stackwalker_sparc.o \
+	src/processor/stackwalker_x86.o \
+	src/processor/tokenize.o \
+	src/third_party/libdisasm/libdisasm.a
+
+src_processor_disassembler_x86_unittest_SOURCES = \
+	src/processor/disassembler_x86_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+src_processor_disassembler_x86_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/testing/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest \
+	-I$(top_srcdir)/src/testing
+src_processor_disassembler_x86_unittest_LDADD = \
+	src/processor/disassembler_x86.o \
+	src/third_party/libdisasm/libdisasm.a
+
+src_processor_fast_source_line_resolver_unittest_SOURCES = \
+  src/processor/fast_source_line_resolver_unittest.cc \
+  src/testing/gtest/src/gtest-all.cc \
+  src/testing/src/gmock-all.cc
+src_processor_fast_source_line_resolver_unittest_CPPFLAGS = \
+  -I$(top_srcdir)/src \
+  -I$(top_srcdir)/src/testing/include \
+  -I$(top_srcdir)/src/testing/gtest/include \
+  -I$(top_srcdir)/src/testing/gtest \
+  -I$(top_srcdir)/src/testing
+src_processor_fast_source_line_resolver_unittest_LDADD = \
+  src/processor/fast_source_line_resolver.o \
+  src/processor/basic_source_line_resolver.o \
+  src/processor/cfi_frame_info.o \
+  src/processor/module_comparer.o \
+  src/processor/module_serializer.o \
+  src/processor/pathname_stripper.o \
+  src/processor/logging.o \
+  src/processor/source_line_resolver_base.o \
+  src/processor/tokenize.o
+
+src_processor_map_serializers_unittest_SOURCES = \
+	src/processor/map_serializers_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+src_processor_map_serializers_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/testing/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest \
+	-I$(top_srcdir)/src/testing
+src_processor_map_serializers_unittest_LDADD = \
+	src/processor/logging.o \
+	src/processor/pathname_stripper.o
 
 src_processor_minidump_processor_unittest_SOURCES = \
 	src/processor/minidump_processor_unittest.cc \
 	src/testing/gtest/src/gtest-all.cc \
 	src/testing/src/gmock-all.cc
 src_processor_minidump_processor_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 src_processor_minidump_processor_unittest_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/call_stack.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/minidump_processor.lo \
-	src/processor/minidump.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/process_state.lo \
-	src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo \
-	src/processor/tokenize.lo
+	src/processor/basic_code_modules.o \
+	src/processor/basic_source_line_resolver.o \
+	src/processor/call_stack.o \
+	src/processor/cfi_frame_info.o \
+	src/processor/disassembler_x86.o \
+	src/processor/exploitability.o \
+	src/processor/exploitability_win.o \
+	src/processor/logging.o \
+	src/processor/minidump_processor.o \
+	src/processor/minidump.o \
+	src/processor/pathname_stripper.o \
+	src/processor/process_state.o \
+	src/processor/source_line_resolver_base.o \
+	src/processor/stackwalker.o \
+	src/processor/stackwalker_amd64.o \
+	src/processor/stackwalker_arm.o \
+	src/processor/stackwalker_ppc.o \
+	src/processor/stackwalker_sparc.o \
+	src/processor/stackwalker_x86.o \
+	src/processor/tokenize.o \
+	src/third_party/libdisasm/libdisasm.a
 
 src_processor_minidump_unittest_SOURCES = \
 	src/common/test_assembler.cc \
@@ -298,117 +497,186 @@
 	src/testing/gtest/src/gtest_main.cc \
 	src/testing/src/gmock-all.cc
 src_processor_minidump_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 src_processor_minidump_unittest_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/logging.lo \
-	src/processor/minidump.lo \
-	src/processor/pathname_stripper.lo
+	src/processor/basic_code_modules.o \
+	src/processor/logging.o \
+	src/processor/minidump.o \
+	src/processor/pathname_stripper.o
 
 src_processor_network_source_line_resolver_unittest_SOURCES = \
 	src/processor/network_source_line_resolver_unittest.cc \
 	src/testing/gtest/src/gtest-all.cc \
 	src/testing/src/gmock-all.cc
 src_processor_network_source_line_resolver_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 src_processor_network_source_line_resolver_unittest_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/binarystream.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/network_source_line_resolver.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/tokenize.lo \
-	src/processor/udp_network.lo
+	src/processor/basic_code_modules.o \
+	src/processor/binarystream.o \
+	src/processor/cfi_frame_info.o \
+	src/processor/logging.o \
+	src/processor/network_source_line_resolver.o \
+	src/processor/pathname_stripper.o \
+	src/processor/tokenize.o \
+	src/processor/udp_network.o
 
 src_processor_network_source_line_resolver_server_unittest_SOURCES = \
 	src/processor/network_source_line_resolver_server_unittest.cc \
 	src/testing/gtest/src/gtest-all.cc \
 	src/testing/src/gmock-all.cc
 src_processor_network_source_line_resolver_server_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 src_processor_network_source_line_resolver_server_unittest_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/binarystream.lo \
-	src/processor/call_stack.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/minidump_processor.lo \
-	src/processor/minidump.lo \
-	src/processor/network_source_line_resolver.lo \
-	src/processor/network_source_line_server.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/process_state.lo \
-	src/processor/simple_symbol_supplier.lo \
-	src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo \
-	src/processor/tokenize.lo \
-	src/processor/udp_network.lo
+	src/processor/basic_code_modules.o \
+	src/processor/basic_source_line_resolver.o \
+	src/processor/binarystream.o \
+	src/processor/call_stack.o \
+	src/processor/cfi_frame_info.o \
+	src/processor/disassembler_x86.o \
+	src/processor/exploitability.o \
+	src/processor/exploitability_win.o \
+	src/processor/logging.o \
+	src/processor/minidump_processor.o \
+	src/processor/minidump.o \
+	src/processor/network_source_line_resolver.o \
+	src/processor/network_source_line_server.o \
+	src/processor/pathname_stripper.o \
+	src/processor/process_state.o \
+	src/processor/simple_symbol_supplier.o \
+	src/processor/source_line_resolver_base.o \
+	src/processor/stackwalker.o \
+	src/processor/stackwalker_amd64.o \
+	src/processor/stackwalker_arm.o \
+	src/processor/stackwalker_ppc.o \
+	src/processor/stackwalker_sparc.o \
+	src/processor/stackwalker_x86.o \
+	src/processor/tokenize.o \
+	src/processor/udp_network.o \
+	src/third_party/libdisasm/libdisasm.a
 
 src_processor_network_source_line_server_unittest_SOURCES = \
 	src/processor/network_source_line_server_unittest.cc \
 	src/testing/gtest/src/gtest-all.cc \
 	src/testing/src/gmock-all.cc
 src_processor_network_source_line_server_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 src_processor_network_source_line_server_unittest_LDADD = \
-	src/processor/binarystream.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/network_source_line_server.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/udp_network.lo
+	src/processor/binarystream.o \
+	src/processor/cfi_frame_info.o \
+	src/processor/logging.o \
+	src/processor/network_source_line_server.o \
+	src/processor/pathname_stripper.o \
+	src/processor/udp_network.o
+
+src_processor_static_address_map_unittest_SOURCES = \
+	src/processor/static_address_map_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+src_processor_static_address_map_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/testing/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest \
+	-I$(top_srcdir)/src/testing
+src_processor_static_address_map_unittest_LDADD = \
+	src/processor/logging.o \
+	src/processor/pathname_stripper.o
+
+src_processor_static_contained_range_map_unittest_SOURCES = \
+	src/processor/static_contained_range_map_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+src_processor_static_contained_range_map_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/testing/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest \
+	-I$(top_srcdir)/src/testing
+src_processor_static_contained_range_map_unittest_LDADD = \
+	src/processor/logging.o \
+	src/processor/pathname_stripper.o
+
+src_processor_static_map_unittest_SOURCES = \
+	src/processor/static_map_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+src_processor_static_map_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/testing/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest \
+	-I$(top_srcdir)/src/testing
+src_processor_static_map_unittest_LDADD = \
+	src/processor/logging.o \
+	src/processor/pathname_stripper.o
+
+src_processor_static_range_map_unittest_SOURCES = \
+	src/processor/static_range_map_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+src_processor_static_range_map_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/testing/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest \
+	-I$(top_srcdir)/src/testing
+src_processor_static_range_map_unittest_LDADD = \
+	src/processor/logging.o \
+	src/processor/pathname_stripper.o
 
 src_processor_pathname_stripper_unittest_SOURCES = \
 	src/processor/pathname_stripper_unittest.cc
 src_processor_pathname_stripper_unittest_LDADD = \
-	src/processor/pathname_stripper.lo
+	src/processor/pathname_stripper.o
 
 src_processor_postfix_evaluator_unittest_SOURCES = \
 	src/processor/postfix_evaluator_unittest.cc
 src_processor_postfix_evaluator_unittest_LDADD = \
-	src/processor/logging.lo \
-	src/processor/pathname_stripper.lo
+	src/processor/logging.o \
+	src/processor/pathname_stripper.o
 
 src_processor_range_map_unittest_SOURCES = \
 	src/processor/range_map_unittest.cc
 src_processor_range_map_unittest_LDADD = \
-	src/processor/logging.lo \
-	src/processor/pathname_stripper.lo
+	src/processor/logging.o \
+	src/processor/pathname_stripper.o
 
 src_processor_stackwalker_selftest_SOURCES = \
 	src/processor/stackwalker_selftest.cc
 src_processor_stackwalker_selftest_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/call_stack.lo \
-	src/processor/logging.lo \
-	src/processor/minidump.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo \
-	src/processor/tokenize.lo
+	src/processor/basic_code_modules.o \
+	src/processor/basic_source_line_resolver.o \
+	src/processor/call_stack.o \
+	src/processor/disassembler_x86.o \
+	src/processor/exploitability.o \
+	src/processor/exploitability_win.o \
+	src/processor/logging.o \
+	src/processor/minidump.o \
+	src/processor/pathname_stripper.o \
+	src/processor/source_line_resolver_base.o \
+	src/processor/stackwalker.o \
+	src/processor/stackwalker_amd64.o \
+	src/processor/stackwalker_arm.o \
+	src/processor/stackwalker_ppc.o \
+	src/processor/stackwalker_sparc.o \
+	src/processor/stackwalker_x86.o \
+	src/processor/tokenize.o
 
 src_processor_stackwalker_amd64_unittest_SOURCES = \
 	src/common/test_assembler.cc \
@@ -417,10 +685,11 @@
 	src/testing/gtest/src/gtest_main.cc \
 	src/testing/src/gmock-all.cc
 src_processor_stackwalker_amd64_unittest_LDADD = \
-	src/libbreakpad.la
+	src/libbreakpad.a
 src_processor_stackwalker_amd64_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 
@@ -431,10 +700,11 @@
 	src/testing/gtest/src/gtest_main.cc \
 	src/testing/src/gmock-all.cc
 src_processor_stackwalker_arm_unittest_LDADD = \
-	src/libbreakpad.la
+	src/libbreakpad.a
 src_processor_stackwalker_arm_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 
@@ -445,10 +715,11 @@
 	src/testing/gtest/src/gtest_main.cc \
 	src/testing/src/gmock-all.cc
 src_processor_stackwalker_x86_unittest_LDADD = \
-	src/libbreakpad.la
+	src/libbreakpad.a
 src_processor_stackwalker_x86_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 
@@ -462,8 +733,9 @@
 	src/processor/synth_minidump.cc \
 	src/processor/synth_minidump.h
 src_processor_synth_minidump_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 
@@ -475,8 +747,9 @@
 	src/testing/gtest/src/gtest_main.cc \
 	src/testing/src/gmock-all.cc
 src_common_test_assembler_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 
@@ -487,48 +760,55 @@
 src_processor_minidump_dump_SOURCES = \
 	src/processor/minidump_dump.cc
 src_processor_minidump_dump_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/logging.lo \
-	src/processor/minidump.lo \
-	src/processor/pathname_stripper.lo
+	src/processor/basic_code_modules.o \
+	src/processor/logging.o \
+	src/processor/minidump.o \
+	src/processor/pathname_stripper.o
 
 src_processor_minidump_stackwalk_SOURCES = \
 	src/processor/minidump_stackwalk.cc
 src_processor_minidump_stackwalk_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/binarystream.lo \
-	src/processor/call_stack.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/minidump.lo \
-	src/processor/minidump_processor.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/process_state.lo \
-	src/processor/network_source_line_resolver.lo \
-	src/processor/simple_symbol_supplier.lo \
-	src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo \
-	src/processor/tokenize.lo \
-	src/processor/udp_network.lo
+	src/processor/basic_code_modules.o \
+	src/processor/basic_source_line_resolver.o \
+	src/processor/binarystream.o \
+	src/processor/call_stack.o \
+	src/processor/cfi_frame_info.o \
+	src/processor/disassembler_x86.o \
+	src/processor/exploitability.o \
+	src/processor/exploitability_win.o \
+	src/processor/logging.o \
+	src/processor/minidump.o \
+	src/processor/minidump_processor.o \
+	src/processor/pathname_stripper.o \
+	src/processor/process_state.o \
+	src/processor/network_source_line_resolver.o \
+	src/processor/simple_symbol_supplier.o \
+	src/processor/source_line_resolver_base.o \
+	src/processor/stackwalker.o \
+	src/processor/stackwalker_amd64.o \
+	src/processor/stackwalker_arm.o \
+	src/processor/stackwalker_ppc.o \
+	src/processor/stackwalker_sparc.o \
+	src/processor/stackwalker_x86.o \
+	src/processor/tokenize.o \
+	src/processor/udp_network.o \
+	src/third_party/libdisasm/libdisasm.a
 
 src_processor_source_daemon_SOURCES = \
 	src/processor/source_daemon.cc
 src_processor_source_daemon_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/binarystream.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/network_source_line_server.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/simple_symbol_supplier.lo \
-	src/processor/tokenize.lo \
-	src/processor/udp_network.lo
+	src/processor/basic_code_modules.o \
+	src/processor/basic_source_line_resolver.o \
+	src/processor/binarystream.o \
+	src/processor/cfi_frame_info.o \
+	src/processor/logging.o \
+	src/processor/network_source_line_server.o \
+	src/processor/pathname_stripper.o \
+	src/processor/simple_symbol_supplier.o \
+	src/processor/source_line_resolver_base.o \
+	src/processor/tokenize.o \
+	src/processor/udp_network.o
+endif !DISABLE_PROCESSOR
 
 ## Additional files to be included in a source distribution
 ##
@@ -665,9 +945,3 @@
 	src/tools/windows/dump_syms/testdata/dump_syms_regtest.sym \
 	src/tools/windows/symupload/symupload.cc \
 	src/tools/windows/symupload/symupload.vcproj
-
-
-## Additional rules
-libtool: $(LIBTOOL_DEPS)
-	$(SHELL) ./config.status --recheck
-
diff --git a/Makefile.in b/Makefile.in
index c12be3e..7269268 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -66,40 +66,61 @@
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-bin_PROGRAMS = src/client/linux/linux_dumper_unittest_helper$(EXEEXT) \
-	src/processor/minidump_dump$(EXEEXT) \
-	src/processor/minidump_stackwalk$(EXEEXT) \
-	src/processor/source_daemon$(EXEEXT)
-check_PROGRAMS = src/client/linux/linux_client_unittest$(EXEEXT) \
-	src/common/test_assembler_unittest$(EXEEXT) \
-	src/processor/address_map_unittest$(EXEEXT) \
-	src/processor/binarystream_unittest$(EXEEXT) \
-	src/processor/basic_source_line_resolver_unittest$(EXEEXT) \
-	src/processor/cfi_frame_info_unittest$(EXEEXT) \
-	src/processor/contained_range_map_unittest$(EXEEXT) \
-	src/processor/minidump_processor_unittest$(EXEEXT) \
-	src/processor/minidump_unittest$(EXEEXT) \
-	src/processor/network_source_line_resolver_unittest$(EXEEXT) \
-	src/processor/network_source_line_resolver_server_unittest$(EXEEXT) \
-	src/processor/network_source_line_server_unittest$(EXEEXT) \
-	src/processor/pathname_stripper_unittest$(EXEEXT) \
-	src/processor/postfix_evaluator_unittest$(EXEEXT) \
-	src/processor/range_map_unittest$(EXEEXT) \
-	src/processor/stackwalker_amd64_unittest$(EXEEXT) \
-	src/processor/stackwalker_arm_unittest$(EXEEXT) \
-	src/processor/stackwalker_x86_unittest$(EXEEXT) \
-	src/processor/synth_minidump_unittest$(EXEEXT) $(am__EXEEXT_1)
-@SELFTEST_TRUE@am__append_1 = \
-@SELFTEST_TRUE@	src/processor/stackwalker_selftest
+bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2)
+check_PROGRAMS = $(am__EXEEXT_3) $(am__EXEEXT_4) $(am__EXEEXT_5)
+@DISABLE_PROCESSOR_FALSE@am__append_1 = src/libbreakpad.a
+@DISABLE_PROCESSOR_FALSE@am__append_2 = src/third_party/libdisasm/libdisasm.a
+@LINUX_HOST_TRUE@am__append_3 = src/client/linux/libbreakpad_client.a
+@DISABLE_PROCESSOR_FALSE@am__append_4 = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_dump \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_stackwalk \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_daemon
+
+@LINUX_HOST_TRUE@am__append_5 = \
+@LINUX_HOST_TRUE@	src/client/linux/linux_dumper_unittest_helper
+
+@DISABLE_PROCESSOR_FALSE@am__append_6 = \
+@DISABLE_PROCESSOR_FALSE@	src/common/test_assembler_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/address_map_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/contained_range_map_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/map_serializers_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver_server_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_server_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_address_map_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_contained_range_map_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_map_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_range_map_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/postfix_evaluator_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/range_map_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86_unittest \
+@DISABLE_PROCESSOR_FALSE@	src/processor/synth_minidump_unittest
+
+@LINUX_HOST_TRUE@am__append_7 = \
+@LINUX_HOST_TRUE@	src/client/linux/linux_client_unittest
+
+@DISABLE_PROCESSOR_FALSE@@SELFTEST_TRUE@am__append_8 = \
+@DISABLE_PROCESSOR_FALSE@@SELFTEST_TRUE@	src/processor/stackwalker_selftest
 
 noinst_PROGRAMS =
 subdir = .
 DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \
 	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 	$(top_srcdir)/configure $(top_srcdir)/src/config.h.in AUTHORS \
-	COPYING ChangeLog INSTALL NEWS autotools/config.guess \
-	autotools/config.sub autotools/depcomp autotools/install-sh \
-	autotools/ltmain.sh autotools/missing
+	COPYING ChangeLog INSTALL NEWS autotools/compile \
+	autotools/config.guess autotools/config.sub autotools/depcomp \
+	autotools/install-sh autotools/ltmain.sh autotools/missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
 	$(top_srcdir)/configure.ac
@@ -134,285 +155,736 @@
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
 am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
 	"$(DESTDIR)$(docdir)"
-LTLIBRARIES = $(lib_LTLIBRARIES)
-src_client_linux_libbreakpad_client_la_LIBADD =
+LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+src_client_linux_libbreakpad_client_a_AR = $(AR) $(ARFLAGS)
+src_client_linux_libbreakpad_client_a_LIBADD =
+am__src_client_linux_libbreakpad_client_a_SOURCES_DIST =  \
+	src/client/linux/crash_generation/crash_generation_client.cc \
+	src/client/linux/handler/exception_handler.cc \
+	src/client/linux/minidump_writer/linux_dumper.cc \
+	src/client/linux/minidump_writer/minidump_writer.cc \
+	src/client/minidump_file_writer.cc src/common/convert_UTF.c \
+	src/common/md5.c src/common/string_conversion.cc \
+	src/common/linux/file_id.cc src/common/linux/guid_creator.cc
 am__dirstamp = $(am__leading_dot)dirstamp
-am_src_client_linux_libbreakpad_client_la_OBJECTS =  \
-	src/client/linux/crash_generation/crash_generation_client.lo \
-	src/client/linux/handler/exception_handler.lo \
-	src/client/linux/minidump_writer/linux_dumper.lo \
-	src/client/linux/minidump_writer/minidump_writer.lo \
-	src/client/minidump_file_writer.lo src/common/convert_UTF.lo \
-	src/common/md5.lo src/common/string_conversion.lo \
-	src/common/linux/file_id.lo src/common/linux/guid_creator.lo
-src_client_linux_libbreakpad_client_la_OBJECTS =  \
-	$(am_src_client_linux_libbreakpad_client_la_OBJECTS)
-src_libbreakpad_la_LIBADD =
-am_src_libbreakpad_la_OBJECTS = src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/binarystream.lo src/processor/call_stack.lo \
-	src/processor/cfi_frame_info.lo src/processor/logging.lo \
-	src/processor/minidump.lo src/processor/minidump_processor.lo \
-	src/processor/network_source_line_resolver.lo \
-	src/processor/network_source_line_server.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/process_state.lo \
-	src/processor/simple_symbol_supplier.lo \
-	src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo src/processor/tokenize.lo \
-	src/processor/udp_network.lo
-src_libbreakpad_la_OBJECTS = $(am_src_libbreakpad_la_OBJECTS)
-@SELFTEST_TRUE@am__EXEEXT_1 =  \
-@SELFTEST_TRUE@	src/processor/stackwalker_selftest$(EXEEXT)
+@LINUX_HOST_TRUE@am_src_client_linux_libbreakpad_client_a_OBJECTS = src/client/linux/crash_generation/crash_generation_client.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/client/linux/handler/exception_handler.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/linux_dumper.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/minidump_writer.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/client/minidump_file_writer.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/common/convert_UTF.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/common/md5.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/common/string_conversion.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/common/linux/file_id.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/common/linux/guid_creator.$(OBJEXT)
+src_client_linux_libbreakpad_client_a_OBJECTS =  \
+	$(am_src_client_linux_libbreakpad_client_a_OBJECTS)
+src_libbreakpad_a_AR = $(AR) $(ARFLAGS)
+@DISABLE_PROCESSOR_FALSE@src_libbreakpad_a_DEPENDENCIES = src/third_party/libdisasm/libdisasm.a
+am__src_libbreakpad_a_SOURCES_DIST =  \
+	src/google_breakpad/common/breakpad_types.h \
+	src/google_breakpad/common/minidump_format.h \
+	src/google_breakpad/common/minidump_size.h \
+	src/google_breakpad/processor/basic_source_line_resolver.h \
+	src/google_breakpad/processor/call_stack.h \
+	src/google_breakpad/processor/code_module.h \
+	src/google_breakpad/processor/code_modules.h \
+	src/google_breakpad/processor/exploitability.h \
+	src/google_breakpad/processor/fast_source_line_resolver.h \
+	src/google_breakpad/processor/memory_region.h \
+	src/google_breakpad/processor/minidump.h \
+	src/google_breakpad/processor/minidump_processor.h \
+	src/google-breakpad/processor/network_source_line_resolver.h \
+	src/google_breakpad/processor/process_state.h \
+	src/google_breakpad/processor/source_line_resolver_base.h \
+	src/google_breakpad/processor/source_line_resolver_interface.h \
+	src/google_breakpad/processor/stack_frame.h \
+	src/google_breakpad/processor/stack_frame_cpu.h \
+	src/google_breakpad/processor/stackwalker.h \
+	src/google_breakpad/processor/symbol_supplier.h \
+	src/google_breakpad/processor/system_info.h \
+	src/processor/address_map-inl.h src/processor/address_map.h \
+	src/processor/basic_code_module.h \
+	src/processor/basic_code_modules.cc \
+	src/processor/basic_code_modules.h \
+	src/processor/basic_source_line_resolver_types.h \
+	src/processor/basic_source_line_resolver.cc \
+	src/processor/binarystream.h src/processor/binarystream.cc \
+	src/processor/call_stack.cc src/processor/cfi_frame_info.cc \
+	src/processor/cfi_frame_info.h \
+	src/processor/contained_range_map-inl.h \
+	src/processor/contained_range_map.h \
+	src/processor/disassembler_x86.h \
+	src/processor/disassembler_x86.cc \
+	src/processor/exploitability.cc \
+	src/processor/exploitability_win.h \
+	src/processor/exploitability_win.cc \
+	src/processor/fast_source_line_resolver_types.h \
+	src/processor/fast_source_line_resolver.cc \
+	src/processor/linked_ptr.h src/processor/logging.h \
+	src/processor/logging.cc src/processor/map_serializers-inl.h \
+	src/processor/map_serializers.h src/processor/minidump.cc \
+	src/processor/minidump_processor.cc \
+	src/processor/module_comparer.cc \
+	src/processor/module_comparer.h src/processor/module_factory.h \
+	src/processor/network_interface.h \
+	src/processor/network_source_line_resolver.cc \
+	src/processor/network_source_line_server.cc \
+	src/processor/network_source_line_server.h \
+	src/processor/pathname_stripper.cc \
+	src/processor/pathname_stripper.h \
+	src/processor/postfix_evaluator-inl.h \
+	src/processor/postfix_evaluator.h \
+	src/processor/process_state.cc src/processor/range_map-inl.h \
+	src/processor/range_map.h src/processor/scoped_ptr.h \
+	src/processor/simple_serializer-inl.h \
+	src/processor/simple_serializer.h \
+	src/processor/simple_symbol_supplier.cc \
+	src/processor/simple_symbol_supplier.h \
+	src/processor/windows_frame_info.h \
+	src/processor/source_line_resolver_base_types.h \
+	src/processor/source_line_resolver_base.cc \
+	src/processor/stackwalker.cc \
+	src/processor/stackwalker_amd64.cc \
+	src/processor/stackwalker_amd64.h \
+	src/processor/stackwalker_arm.cc \
+	src/processor/stackwalker_arm.h \
+	src/processor/stackwalker_ppc.cc \
+	src/processor/stackwalker_ppc.h \
+	src/processor/stackwalker_sparc.cc \
+	src/processor/stackwalker_sparc.h \
+	src/processor/stackwalker_x86.cc \
+	src/processor/stackwalker_x86.h \
+	src/processor/static_address_map-inl.h \
+	src/processor/static_address_map.h \
+	src/processor/static_contained_range_map-inl.h \
+	src/processor/static_contained_range_map.h \
+	src/processor/static_map_iterator-inl.h \
+	src/processor/static_map_iterator.h \
+	src/processor/static_map-inl.h src/processor/static_map.h \
+	src/processor/static_range_map-inl.h \
+	src/processor/static_range_map.h src/processor/tokenize.cc \
+	src/processor/tokenize.h src/processor/udp_network.cc \
+	src/processor/udp_network.h
+@DISABLE_PROCESSOR_FALSE@am_src_libbreakpad_a_OBJECTS = src/processor/basic_code_modules.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/module_comparer.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_server.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/process_state.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/simple_symbol_supplier.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.$(OBJEXT)
+src_libbreakpad_a_OBJECTS = $(am_src_libbreakpad_a_OBJECTS)
+src_third_party_libdisasm_libdisasm_a_AR = $(AR) $(ARFLAGS)
+src_third_party_libdisasm_libdisasm_a_LIBADD =
+am__src_third_party_libdisasm_libdisasm_a_SOURCES_DIST =  \
+	src/third_party/libdisasm/ia32_implicit.c \
+	src/third_party/libdisasm/ia32_implicit.h \
+	src/third_party/libdisasm/ia32_insn.c \
+	src/third_party/libdisasm/ia32_insn.h \
+	src/third_party/libdisasm/ia32_invariant.c \
+	src/third_party/libdisasm/ia32_invariant.h \
+	src/third_party/libdisasm/ia32_modrm.c \
+	src/third_party/libdisasm/ia32_modrm.h \
+	src/third_party/libdisasm/ia32_opcode_tables.c \
+	src/third_party/libdisasm/ia32_opcode_tables.h \
+	src/third_party/libdisasm/ia32_operand.c \
+	src/third_party/libdisasm/ia32_operand.h \
+	src/third_party/libdisasm/ia32_reg.c \
+	src/third_party/libdisasm/ia32_reg.h \
+	src/third_party/libdisasm/ia32_settings.c \
+	src/third_party/libdisasm/ia32_settings.h \
+	src/third_party/libdisasm/libdis.h \
+	src/third_party/libdisasm/qword.h \
+	src/third_party/libdisasm/x86_disasm.c \
+	src/third_party/libdisasm/x86_format.c \
+	src/third_party/libdisasm/x86_imm.c \
+	src/third_party/libdisasm/x86_imm.h \
+	src/third_party/libdisasm/x86_insn.c \
+	src/third_party/libdisasm/x86_misc.c \
+	src/third_party/libdisasm/x86_operand_list.c \
+	src/third_party/libdisasm/x86_operand_list.h
+@DISABLE_PROCESSOR_FALSE@am_src_third_party_libdisasm_libdisasm_a_OBJECTS = src/third_party/libdisasm/ia32_implicit.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_insn.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_invariant.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_modrm.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_opcode_tables.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_operand.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_reg.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_settings.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_disasm.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_format.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_imm.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_insn.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_misc.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_operand_list.$(OBJEXT)
+src_third_party_libdisasm_libdisasm_a_OBJECTS =  \
+	$(am_src_third_party_libdisasm_libdisasm_a_OBJECTS)
+@DISABLE_PROCESSOR_FALSE@am__EXEEXT_1 =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_dump$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_stackwalk$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_daemon$(EXEEXT)
+@LINUX_HOST_TRUE@am__EXEEXT_2 = src/client/linux/linux_dumper_unittest_helper$(EXEEXT)
+@DISABLE_PROCESSOR_FALSE@am__EXEEXT_3 = src/common/test_assembler_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/address_map_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/contained_range_map_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/map_serializers_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver_server_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_server_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_address_map_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_contained_range_map_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_map_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_range_map_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/postfix_evaluator_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/range_map_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86_unittest$(EXEEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/synth_minidump_unittest$(EXEEXT)
+@LINUX_HOST_TRUE@am__EXEEXT_4 = src/client/linux/linux_client_unittest$(EXEEXT)
+@DISABLE_PROCESSOR_FALSE@@SELFTEST_TRUE@am__EXEEXT_5 = src/processor/stackwalker_selftest$(EXEEXT)
 PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
-am_src_client_linux_linux_client_unittest_OBJECTS = src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.$(OBJEXT) \
-	src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.$(OBJEXT) \
-	src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.$(OBJEXT) \
-	src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.$(OBJEXT) \
-	src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.$(OBJEXT) \
-	src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.$(OBJEXT) \
-	src/testing/src/src_client_linux_linux_client_unittest-gmock-all.$(OBJEXT)
+am__src_client_linux_linux_client_unittest_SOURCES_DIST =  \
+	src/client/linux/handler/exception_handler_unittest.cc \
+	src/client/linux/minidump_writer/directory_reader_unittest.cc \
+	src/client/linux/minidump_writer/line_reader_unittest.cc \
+	src/client/linux/minidump_writer/linux_dumper_unittest.cc \
+	src/client/linux/minidump_writer/minidump_writer_unittest.cc \
+	src/common/memory_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc \
+	src/processor/basic_code_modules.cc src/processor/logging.cc \
+	src/processor/minidump.cc src/processor/pathname_stripper.cc
+@LINUX_HOST_TRUE@am_src_client_linux_linux_client_unittest_OBJECTS = src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/common/src_client_linux_linux_client_unittest-memory_unittest.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/testing/src/src_client_linux_linux_client_unittest-gmock-all.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/processor/src_client_linux_linux_client_unittest-basic_code_modules.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/processor/src_client_linux_linux_client_unittest-logging.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/processor/src_client_linux_linux_client_unittest-minidump.$(OBJEXT) \
+@LINUX_HOST_TRUE@	src/processor/src_client_linux_linux_client_unittest-pathname_stripper.$(OBJEXT)
 src_client_linux_linux_client_unittest_OBJECTS =  \
 	$(am_src_client_linux_linux_client_unittest_OBJECTS)
-am_src_client_linux_linux_dumper_unittest_helper_OBJECTS = src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.$(OBJEXT)
+am__src_client_linux_linux_dumper_unittest_helper_SOURCES_DIST = src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
+@LINUX_HOST_TRUE@am_src_client_linux_linux_dumper_unittest_helper_OBJECTS = src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.$(OBJEXT)
 src_client_linux_linux_dumper_unittest_helper_OBJECTS =  \
 	$(am_src_client_linux_linux_dumper_unittest_helper_OBJECTS)
 src_client_linux_linux_dumper_unittest_helper_LDADD = $(LDADD)
-src_client_linux_linux_dumper_unittest_helper_LINK = $(LIBTOOL) \
-	--tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
-	$(CXXLD) \
+src_client_linux_linux_dumper_unittest_helper_LINK = $(CXXLD) \
 	$(src_client_linux_linux_dumper_unittest_helper_CXXFLAGS) \
 	$(CXXFLAGS) \
 	$(src_client_linux_linux_dumper_unittest_helper_LDFLAGS) \
 	$(LDFLAGS) -o $@
-am_src_common_test_assembler_unittest_OBJECTS = src/common/src_common_test_assembler_unittest-test_assembler.$(OBJEXT) \
-	src/common/src_common_test_assembler_unittest-test_assembler_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_common_test_assembler_unittest-gtest-all.$(OBJEXT) \
-	src/testing/gtest/src/src_common_test_assembler_unittest-gtest_main.$(OBJEXT) \
-	src/testing/src/src_common_test_assembler_unittest-gmock-all.$(OBJEXT)
+am__src_common_test_assembler_unittest_SOURCES_DIST =  \
+	src/common/test_assembler.cc src/common/test_assembler.h \
+	src/common/test_assembler_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_common_test_assembler_unittest_OBJECTS = src/common/src_common_test_assembler_unittest-test_assembler.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/common/src_common_test_assembler_unittest-test_assembler_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_common_test_assembler_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_common_test_assembler_unittest-gtest_main.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_common_test_assembler_unittest-gmock-all.$(OBJEXT)
 src_common_test_assembler_unittest_OBJECTS =  \
 	$(am_src_common_test_assembler_unittest_OBJECTS)
 src_common_test_assembler_unittest_LDADD = $(LDADD)
-am_src_processor_address_map_unittest_OBJECTS =  \
-	src/processor/address_map_unittest.$(OBJEXT)
+am__src_processor_address_map_unittest_SOURCES_DIST =  \
+	src/processor/address_map_unittest.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_address_map_unittest_OBJECTS = src/processor/address_map_unittest.$(OBJEXT)
 src_processor_address_map_unittest_OBJECTS =  \
 	$(am_src_processor_address_map_unittest_OBJECTS)
-src_processor_address_map_unittest_DEPENDENCIES =  \
-	src/processor/logging.lo src/processor/pathname_stripper.lo
-am_src_processor_basic_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_basic_source_line_resolver_unittest-basic_source_line_resolver_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_basic_source_line_resolver_unittest-gtest-all.$(OBJEXT) \
-	src/testing/src/src_processor_basic_source_line_resolver_unittest-gmock-all.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_address_map_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_basic_source_line_resolver_unittest_SOURCES_DIST =  \
+	src/processor/basic_source_line_resolver_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_basic_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_basic_source_line_resolver_unittest-basic_source_line_resolver_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_basic_source_line_resolver_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_basic_source_line_resolver_unittest-gmock-all.$(OBJEXT)
 src_processor_basic_source_line_resolver_unittest_OBJECTS = $(am_src_processor_basic_source_line_resolver_unittest_OBJECTS)
-src_processor_basic_source_line_resolver_unittest_DEPENDENCIES =  \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/pathname_stripper.lo src/processor/logging.lo \
-	src/processor/tokenize.lo
-am_src_processor_binarystream_unittest_OBJECTS = src/processor/src_processor_binarystream_unittest-binarystream_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_binarystream_unittest-gtest-all.$(OBJEXT) \
-	src/testing/src/src_processor_binarystream_unittest-gmock-all.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_DEPENDENCIES = src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o
+am__src_processor_binarystream_unittest_SOURCES_DIST =  \
+	src/processor/binarystream_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_binarystream_unittest_OBJECTS = src/processor/src_processor_binarystream_unittest-binarystream_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_binarystream_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_binarystream_unittest-gmock-all.$(OBJEXT)
 src_processor_binarystream_unittest_OBJECTS =  \
 	$(am_src_processor_binarystream_unittest_OBJECTS)
-src_processor_binarystream_unittest_DEPENDENCIES =  \
-	src/processor/binarystream.lo
-am_src_processor_cfi_frame_info_unittest_OBJECTS = src/processor/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest-all.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest_main.$(OBJEXT) \
-	src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_binarystream_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o
+am__src_processor_cfi_frame_info_unittest_SOURCES_DIST =  \
+	src/processor/cfi_frame_info_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_cfi_frame_info_unittest_OBJECTS = src/processor/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest_main.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.$(OBJEXT)
 src_processor_cfi_frame_info_unittest_OBJECTS =  \
 	$(am_src_processor_cfi_frame_info_unittest_OBJECTS)
-src_processor_cfi_frame_info_unittest_DEPENDENCIES =  \
-	src/processor/cfi_frame_info.lo src/processor/logging.lo \
-	src/processor/pathname_stripper.lo
-am_src_processor_contained_range_map_unittest_OBJECTS =  \
-	src/processor/contained_range_map_unittest.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_contained_range_map_unittest_SOURCES_DIST =  \
+	src/processor/contained_range_map_unittest.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_contained_range_map_unittest_OBJECTS = src/processor/contained_range_map_unittest.$(OBJEXT)
 src_processor_contained_range_map_unittest_OBJECTS =  \
 	$(am_src_processor_contained_range_map_unittest_OBJECTS)
-src_processor_contained_range_map_unittest_DEPENDENCIES =  \
-	src/processor/logging.lo src/processor/pathname_stripper.lo
-am_src_processor_minidump_dump_OBJECTS =  \
-	src/processor/minidump_dump.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_contained_range_map_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_disassembler_x86_unittest_SOURCES_DIST =  \
+	src/processor/disassembler_x86_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_disassembler_x86_unittest_OBJECTS = src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.$(OBJEXT)
+src_processor_disassembler_x86_unittest_OBJECTS =  \
+	$(am_src_processor_disassembler_x86_unittest_OBJECTS)
+@DISABLE_PROCESSOR_FALSE@src_processor_disassembler_x86_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a
+am__src_processor_exploitability_unittest_SOURCES_DIST =  \
+	src/processor/exploitability_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_exploitability_unittest_OBJECTS = src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT)
+src_processor_exploitability_unittest_OBJECTS =  \
+	$(am_src_processor_exploitability_unittest_OBJECTS)
+@DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a
+am__src_processor_fast_source_line_resolver_unittest_SOURCES_DIST =  \
+	src/processor/fast_source_line_resolver_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_fast_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.$(OBJEXT)
+src_processor_fast_source_line_resolver_unittest_OBJECTS = $(am_src_processor_fast_source_line_resolver_unittest_OBJECTS)
+@DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_DEPENDENCIES = src/processor/fast_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/module_comparer.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/module_serializer.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o
+am__src_processor_map_serializers_unittest_SOURCES_DIST =  \
+	src/processor/map_serializers_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_map_serializers_unittest_OBJECTS = src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_map_serializers_unittest-gmock-all.$(OBJEXT)
+src_processor_map_serializers_unittest_OBJECTS =  \
+	$(am_src_processor_map_serializers_unittest_OBJECTS)
+@DISABLE_PROCESSOR_FALSE@src_processor_map_serializers_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_minidump_dump_SOURCES_DIST =  \
+	src/processor/minidump_dump.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_dump_OBJECTS = src/processor/minidump_dump.$(OBJEXT)
 src_processor_minidump_dump_OBJECTS =  \
 	$(am_src_processor_minidump_dump_OBJECTS)
-src_processor_minidump_dump_DEPENDENCIES =  \
-	src/processor/basic_code_modules.lo src/processor/logging.lo \
-	src/processor/minidump.lo src/processor/pathname_stripper.lo
-am_src_processor_minidump_processor_unittest_OBJECTS = src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT) \
-	src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_dump_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_minidump_processor_unittest_SOURCES_DIST =  \
+	src/processor/minidump_processor_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_processor_unittest_OBJECTS = src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT)
 src_processor_minidump_processor_unittest_OBJECTS =  \
 	$(am_src_processor_minidump_processor_unittest_OBJECTS)
-src_processor_minidump_processor_unittest_DEPENDENCIES =  \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/call_stack.lo src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo src/processor/minidump_processor.lo \
-	src/processor/minidump.lo src/processor/pathname_stripper.lo \
-	src/processor/process_state.lo src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo src/processor/tokenize.lo
-am_src_processor_minidump_stackwalk_OBJECTS =  \
-	src/processor/minidump_stackwalk.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a
+am__src_processor_minidump_stackwalk_SOURCES_DIST =  \
+	src/processor/minidump_stackwalk.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_stackwalk_OBJECTS = src/processor/minidump_stackwalk.$(OBJEXT)
 src_processor_minidump_stackwalk_OBJECTS =  \
 	$(am_src_processor_minidump_stackwalk_OBJECTS)
-src_processor_minidump_stackwalk_DEPENDENCIES =  \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/binarystream.lo src/processor/call_stack.lo \
-	src/processor/cfi_frame_info.lo src/processor/logging.lo \
-	src/processor/minidump.lo src/processor/minidump_processor.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/process_state.lo \
-	src/processor/network_source_line_resolver.lo \
-	src/processor/simple_symbol_supplier.lo \
-	src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo src/processor/tokenize.lo \
-	src/processor/udp_network.lo
-am_src_processor_minidump_unittest_OBJECTS = src/common/src_processor_minidump_unittest-test_assembler.$(OBJEXT) \
-	src/processor/src_processor_minidump_unittest-minidump_unittest.$(OBJEXT) \
-	src/processor/src_processor_minidump_unittest-synth_minidump.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_minidump_unittest-gtest-all.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_minidump_unittest-gtest_main.$(OBJEXT) \
-	src/testing/src/src_processor_minidump_unittest-gmock-all.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/simple_symbol_supplier.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.o \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a
+am__src_processor_minidump_unittest_SOURCES_DIST =  \
+	src/common/test_assembler.cc \
+	src/processor/minidump_unittest.cc \
+	src/processor/synth_minidump.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_unittest_OBJECTS = src/common/src_processor_minidump_unittest-test_assembler.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/src_processor_minidump_unittest-minidump_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/src_processor_minidump_unittest-synth_minidump.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_minidump_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_minidump_unittest-gtest_main.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_minidump_unittest-gmock-all.$(OBJEXT)
 src_processor_minidump_unittest_OBJECTS =  \
 	$(am_src_processor_minidump_unittest_OBJECTS)
-src_processor_minidump_unittest_DEPENDENCIES =  \
-	src/processor/basic_code_modules.lo src/processor/logging.lo \
-	src/processor/minidump.lo src/processor/pathname_stripper.lo
-am_src_processor_network_source_line_resolver_server_unittest_OBJECTS = src/processor/src_processor_network_source_line_resolver_server_unittest-network_source_line_resolver_server_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_network_source_line_resolver_server_unittest-gtest-all.$(OBJEXT) \
-	src/testing/src/src_processor_network_source_line_resolver_server_unittest-gmock-all.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_network_source_line_resolver_server_unittest_SOURCES_DIST =  \
+	src/processor/network_source_line_resolver_server_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_network_source_line_resolver_server_unittest_OBJECTS = src/processor/src_processor_network_source_line_resolver_server_unittest-network_source_line_resolver_server_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_network_source_line_resolver_server_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_network_source_line_resolver_server_unittest-gmock-all.$(OBJEXT)
 src_processor_network_source_line_resolver_server_unittest_OBJECTS = $(am_src_processor_network_source_line_resolver_server_unittest_OBJECTS)
-src_processor_network_source_line_resolver_server_unittest_DEPENDENCIES =  \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/binarystream.lo src/processor/call_stack.lo \
-	src/processor/cfi_frame_info.lo src/processor/logging.lo \
-	src/processor/minidump_processor.lo src/processor/minidump.lo \
-	src/processor/network_source_line_resolver.lo \
-	src/processor/network_source_line_server.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/process_state.lo \
-	src/processor/simple_symbol_supplier.lo \
-	src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo src/processor/tokenize.lo \
-	src/processor/udp_network.lo
-am_src_processor_network_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_network_source_line_resolver_unittest-network_source_line_resolver_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_network_source_line_resolver_unittest-gtest-all.$(OBJEXT) \
-	src/testing/src/src_processor_network_source_line_resolver_unittest-gmock-all.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_network_source_line_resolver_server_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_server.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/simple_symbol_supplier.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.o \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a
+am__src_processor_network_source_line_resolver_unittest_SOURCES_DIST =  \
+	src/processor/network_source_line_resolver_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_network_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_network_source_line_resolver_unittest-network_source_line_resolver_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_network_source_line_resolver_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_network_source_line_resolver_unittest-gmock-all.$(OBJEXT)
 src_processor_network_source_line_resolver_unittest_OBJECTS = $(am_src_processor_network_source_line_resolver_unittest_OBJECTS)
-src_processor_network_source_line_resolver_unittest_DEPENDENCIES =  \
-	src/processor/basic_code_modules.lo \
-	src/processor/binarystream.lo src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/network_source_line_resolver.lo \
-	src/processor/pathname_stripper.lo src/processor/tokenize.lo \
-	src/processor/udp_network.lo
-am_src_processor_network_source_line_server_unittest_OBJECTS = src/processor/src_processor_network_source_line_server_unittest-network_source_line_server_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_network_source_line_server_unittest-gtest-all.$(OBJEXT) \
-	src/testing/src/src_processor_network_source_line_server_unittest-gmock-all.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_network_source_line_resolver_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.o
+am__src_processor_network_source_line_server_unittest_SOURCES_DIST =  \
+	src/processor/network_source_line_server_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_network_source_line_server_unittest_OBJECTS = src/processor/src_processor_network_source_line_server_unittest-network_source_line_server_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_network_source_line_server_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_network_source_line_server_unittest-gmock-all.$(OBJEXT)
 src_processor_network_source_line_server_unittest_OBJECTS = $(am_src_processor_network_source_line_server_unittest_OBJECTS)
-src_processor_network_source_line_server_unittest_DEPENDENCIES =  \
-	src/processor/binarystream.lo src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/network_source_line_server.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/udp_network.lo
-am_src_processor_pathname_stripper_unittest_OBJECTS =  \
-	src/processor/pathname_stripper_unittest.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_network_source_line_server_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_server.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.o
+am__src_processor_pathname_stripper_unittest_SOURCES_DIST =  \
+	src/processor/pathname_stripper_unittest.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_pathname_stripper_unittest_OBJECTS = src/processor/pathname_stripper_unittest.$(OBJEXT)
 src_processor_pathname_stripper_unittest_OBJECTS =  \
 	$(am_src_processor_pathname_stripper_unittest_OBJECTS)
-src_processor_pathname_stripper_unittest_DEPENDENCIES =  \
-	src/processor/pathname_stripper.lo
-am_src_processor_postfix_evaluator_unittest_OBJECTS =  \
-	src/processor/postfix_evaluator_unittest.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_pathname_stripper_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_postfix_evaluator_unittest_SOURCES_DIST =  \
+	src/processor/postfix_evaluator_unittest.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_postfix_evaluator_unittest_OBJECTS = src/processor/postfix_evaluator_unittest.$(OBJEXT)
 src_processor_postfix_evaluator_unittest_OBJECTS =  \
 	$(am_src_processor_postfix_evaluator_unittest_OBJECTS)
-src_processor_postfix_evaluator_unittest_DEPENDENCIES =  \
-	src/processor/logging.lo src/processor/pathname_stripper.lo
-am_src_processor_range_map_unittest_OBJECTS =  \
-	src/processor/range_map_unittest.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_range_map_unittest_SOURCES_DIST =  \
+	src/processor/range_map_unittest.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_range_map_unittest_OBJECTS = src/processor/range_map_unittest.$(OBJEXT)
 src_processor_range_map_unittest_OBJECTS =  \
 	$(am_src_processor_range_map_unittest_OBJECTS)
-src_processor_range_map_unittest_DEPENDENCIES =  \
-	src/processor/logging.lo src/processor/pathname_stripper.lo
-am_src_processor_source_daemon_OBJECTS =  \
-	src/processor/source_daemon.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_range_map_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_source_daemon_SOURCES_DIST =  \
+	src/processor/source_daemon.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_source_daemon_OBJECTS = src/processor/source_daemon.$(OBJEXT)
 src_processor_source_daemon_OBJECTS =  \
 	$(am_src_processor_source_daemon_OBJECTS)
-src_processor_source_daemon_DEPENDENCIES =  \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/binarystream.lo src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/network_source_line_server.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/simple_symbol_supplier.lo \
-	src/processor/tokenize.lo src/processor/udp_network.lo
-am_src_processor_stackwalker_amd64_unittest_OBJECTS = src/common/src_processor_stackwalker_amd64_unittest-test_assembler.$(OBJEXT) \
-	src/processor/src_processor_stackwalker_amd64_unittest-stackwalker_amd64_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_stackwalker_amd64_unittest-gtest-all.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_stackwalker_amd64_unittest-gtest_main.$(OBJEXT) \
-	src/testing/src/src_processor_stackwalker_amd64_unittest-gmock-all.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_source_daemon_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_server.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/simple_symbol_supplier.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.o
+am__src_processor_stackwalker_amd64_unittest_SOURCES_DIST =  \
+	src/common/test_assembler.cc \
+	src/processor/stackwalker_amd64_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_stackwalker_amd64_unittest_OBJECTS = src/common/src_processor_stackwalker_amd64_unittest-test_assembler.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/src_processor_stackwalker_amd64_unittest-stackwalker_amd64_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_stackwalker_amd64_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_stackwalker_amd64_unittest-gtest_main.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_stackwalker_amd64_unittest-gmock-all.$(OBJEXT)
 src_processor_stackwalker_amd64_unittest_OBJECTS =  \
 	$(am_src_processor_stackwalker_amd64_unittest_OBJECTS)
-src_processor_stackwalker_amd64_unittest_DEPENDENCIES =  \
-	src/libbreakpad.la
-am_src_processor_stackwalker_arm_unittest_OBJECTS = src/common/src_processor_stackwalker_arm_unittest-test_assembler.$(OBJEXT) \
-	src/processor/src_processor_stackwalker_arm_unittest-stackwalker_arm_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_stackwalker_arm_unittest-gtest-all.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_stackwalker_arm_unittest-gtest_main.$(OBJEXT) \
-	src/testing/src/src_processor_stackwalker_arm_unittest-gmock-all.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_amd64_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a
+am__src_processor_stackwalker_arm_unittest_SOURCES_DIST =  \
+	src/common/test_assembler.cc \
+	src/processor/stackwalker_arm_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_stackwalker_arm_unittest_OBJECTS = src/common/src_processor_stackwalker_arm_unittest-test_assembler.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/src_processor_stackwalker_arm_unittest-stackwalker_arm_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_stackwalker_arm_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_stackwalker_arm_unittest-gtest_main.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_stackwalker_arm_unittest-gmock-all.$(OBJEXT)
 src_processor_stackwalker_arm_unittest_OBJECTS =  \
 	$(am_src_processor_stackwalker_arm_unittest_OBJECTS)
-src_processor_stackwalker_arm_unittest_DEPENDENCIES =  \
-	src/libbreakpad.la
-am_src_processor_stackwalker_selftest_OBJECTS =  \
-	src/processor/stackwalker_selftest.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_arm_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a
+am__src_processor_stackwalker_selftest_SOURCES_DIST =  \
+	src/processor/stackwalker_selftest.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_stackwalker_selftest_OBJECTS = src/processor/stackwalker_selftest.$(OBJEXT)
 src_processor_stackwalker_selftest_OBJECTS =  \
 	$(am_src_processor_stackwalker_selftest_OBJECTS)
-src_processor_stackwalker_selftest_DEPENDENCIES =  \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/call_stack.lo src/processor/logging.lo \
-	src/processor/minidump.lo src/processor/pathname_stripper.lo \
-	src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo src/processor/tokenize.lo
-am_src_processor_stackwalker_x86_unittest_OBJECTS = src/common/src_processor_stackwalker_x86_unittest-test_assembler.$(OBJEXT) \
-	src/processor/src_processor_stackwalker_x86_unittest-stackwalker_x86_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest-all.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest_main.$(OBJEXT) \
-	src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_selftest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o
+am__src_processor_stackwalker_x86_unittest_SOURCES_DIST =  \
+	src/common/test_assembler.cc \
+	src/processor/stackwalker_x86_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_stackwalker_x86_unittest_OBJECTS = src/common/src_processor_stackwalker_x86_unittest-test_assembler.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/src_processor_stackwalker_x86_unittest-stackwalker_x86_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest_main.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.$(OBJEXT)
 src_processor_stackwalker_x86_unittest_OBJECTS =  \
 	$(am_src_processor_stackwalker_x86_unittest_OBJECTS)
-src_processor_stackwalker_x86_unittest_DEPENDENCIES =  \
-	src/libbreakpad.la
-am_src_processor_synth_minidump_unittest_OBJECTS = src/common/src_processor_synth_minidump_unittest-test_assembler.$(OBJEXT) \
-	src/processor/src_processor_synth_minidump_unittest-synth_minidump_unittest.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_synth_minidump_unittest-gtest-all.$(OBJEXT) \
-	src/testing/gtest/src/src_processor_synth_minidump_unittest-gtest_main.$(OBJEXT) \
-	src/testing/src/src_processor_synth_minidump_unittest-gmock-all.$(OBJEXT) \
-	src/processor/src_processor_synth_minidump_unittest-synth_minidump.$(OBJEXT)
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_x86_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a
+am__src_processor_static_address_map_unittest_SOURCES_DIST =  \
+	src/processor/static_address_map_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_static_address_map_unittest_OBJECTS = src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_static_address_map_unittest-gmock-all.$(OBJEXT)
+src_processor_static_address_map_unittest_OBJECTS =  \
+	$(am_src_processor_static_address_map_unittest_OBJECTS)
+@DISABLE_PROCESSOR_FALSE@src_processor_static_address_map_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_static_contained_range_map_unittest_SOURCES_DIST =  \
+	src/processor/static_contained_range_map_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_static_contained_range_map_unittest_OBJECTS = src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.$(OBJEXT)
+src_processor_static_contained_range_map_unittest_OBJECTS = $(am_src_processor_static_contained_range_map_unittest_OBJECTS)
+@DISABLE_PROCESSOR_FALSE@src_processor_static_contained_range_map_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_static_map_unittest_SOURCES_DIST =  \
+	src/processor/static_map_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_static_map_unittest_OBJECTS = src/processor/src_processor_static_map_unittest-static_map_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_static_map_unittest-gmock-all.$(OBJEXT)
+src_processor_static_map_unittest_OBJECTS =  \
+	$(am_src_processor_static_map_unittest_OBJECTS)
+@DISABLE_PROCESSOR_FALSE@src_processor_static_map_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_static_range_map_unittest_SOURCES_DIST =  \
+	src/processor/static_range_map_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@am_src_processor_static_range_map_unittest_OBJECTS = src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_static_range_map_unittest-gmock-all.$(OBJEXT)
+src_processor_static_range_map_unittest_OBJECTS =  \
+	$(am_src_processor_static_range_map_unittest_OBJECTS)
+@DISABLE_PROCESSOR_FALSE@src_processor_static_range_map_unittest_DEPENDENCIES =  \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+am__src_processor_synth_minidump_unittest_SOURCES_DIST =  \
+	src/common/test_assembler.cc src/common/test_assembler.h \
+	src/processor/synth_minidump_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc src/processor/synth_minidump.cc \
+	src/processor/synth_minidump.h
+@DISABLE_PROCESSOR_FALSE@am_src_processor_synth_minidump_unittest_OBJECTS = src/common/src_processor_synth_minidump_unittest-test_assembler.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/src_processor_synth_minidump_unittest-synth_minidump_unittest.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_synth_minidump_unittest-gtest-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_synth_minidump_unittest-gtest_main.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_synth_minidump_unittest-gmock-all.$(OBJEXT) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/src_processor_synth_minidump_unittest-synth_minidump.$(OBJEXT)
 src_processor_synth_minidump_unittest_OBJECTS =  \
 	$(am_src_processor_synth_minidump_unittest_OBJECTS)
 src_processor_synth_minidump_unittest_LDADD = $(LDADD)
@@ -423,24 +895,16 @@
 am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
 CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(src_client_linux_libbreakpad_client_la_SOURCES) \
-	$(src_libbreakpad_la_SOURCES) \
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+SOURCES = $(src_client_linux_libbreakpad_client_a_SOURCES) \
+	$(src_libbreakpad_a_SOURCES) \
+	$(src_third_party_libdisasm_libdisasm_a_SOURCES) \
 	$(src_client_linux_linux_client_unittest_SOURCES) \
 	$(src_client_linux_linux_dumper_unittest_helper_SOURCES) \
 	$(src_common_test_assembler_unittest_SOURCES) \
@@ -449,6 +913,10 @@
 	$(src_processor_binarystream_unittest_SOURCES) \
 	$(src_processor_cfi_frame_info_unittest_SOURCES) \
 	$(src_processor_contained_range_map_unittest_SOURCES) \
+	$(src_processor_disassembler_x86_unittest_SOURCES) \
+	$(src_processor_exploitability_unittest_SOURCES) \
+	$(src_processor_fast_source_line_resolver_unittest_SOURCES) \
+	$(src_processor_map_serializers_unittest_SOURCES) \
 	$(src_processor_minidump_dump_SOURCES) \
 	$(src_processor_minidump_processor_unittest_SOURCES) \
 	$(src_processor_minidump_stackwalk_SOURCES) \
@@ -464,33 +932,47 @@
 	$(src_processor_stackwalker_arm_unittest_SOURCES) \
 	$(src_processor_stackwalker_selftest_SOURCES) \
 	$(src_processor_stackwalker_x86_unittest_SOURCES) \
+	$(src_processor_static_address_map_unittest_SOURCES) \
+	$(src_processor_static_contained_range_map_unittest_SOURCES) \
+	$(src_processor_static_map_unittest_SOURCES) \
+	$(src_processor_static_range_map_unittest_SOURCES) \
 	$(src_processor_synth_minidump_unittest_SOURCES)
-DIST_SOURCES = $(src_client_linux_libbreakpad_client_la_SOURCES) \
-	$(src_libbreakpad_la_SOURCES) \
-	$(src_client_linux_linux_client_unittest_SOURCES) \
-	$(src_client_linux_linux_dumper_unittest_helper_SOURCES) \
-	$(src_common_test_assembler_unittest_SOURCES) \
-	$(src_processor_address_map_unittest_SOURCES) \
-	$(src_processor_basic_source_line_resolver_unittest_SOURCES) \
-	$(src_processor_binarystream_unittest_SOURCES) \
-	$(src_processor_cfi_frame_info_unittest_SOURCES) \
-	$(src_processor_contained_range_map_unittest_SOURCES) \
-	$(src_processor_minidump_dump_SOURCES) \
-	$(src_processor_minidump_processor_unittest_SOURCES) \
-	$(src_processor_minidump_stackwalk_SOURCES) \
-	$(src_processor_minidump_unittest_SOURCES) \
-	$(src_processor_network_source_line_resolver_server_unittest_SOURCES) \
-	$(src_processor_network_source_line_resolver_unittest_SOURCES) \
-	$(src_processor_network_source_line_server_unittest_SOURCES) \
-	$(src_processor_pathname_stripper_unittest_SOURCES) \
-	$(src_processor_postfix_evaluator_unittest_SOURCES) \
-	$(src_processor_range_map_unittest_SOURCES) \
-	$(src_processor_source_daemon_SOURCES) \
-	$(src_processor_stackwalker_amd64_unittest_SOURCES) \
-	$(src_processor_stackwalker_arm_unittest_SOURCES) \
-	$(src_processor_stackwalker_selftest_SOURCES) \
-	$(src_processor_stackwalker_x86_unittest_SOURCES) \
-	$(src_processor_synth_minidump_unittest_SOURCES)
+DIST_SOURCES =  \
+	$(am__src_client_linux_libbreakpad_client_a_SOURCES_DIST) \
+	$(am__src_libbreakpad_a_SOURCES_DIST) \
+	$(am__src_third_party_libdisasm_libdisasm_a_SOURCES_DIST) \
+	$(am__src_client_linux_linux_client_unittest_SOURCES_DIST) \
+	$(am__src_client_linux_linux_dumper_unittest_helper_SOURCES_DIST) \
+	$(am__src_common_test_assembler_unittest_SOURCES_DIST) \
+	$(am__src_processor_address_map_unittest_SOURCES_DIST) \
+	$(am__src_processor_basic_source_line_resolver_unittest_SOURCES_DIST) \
+	$(am__src_processor_binarystream_unittest_SOURCES_DIST) \
+	$(am__src_processor_cfi_frame_info_unittest_SOURCES_DIST) \
+	$(am__src_processor_contained_range_map_unittest_SOURCES_DIST) \
+	$(am__src_processor_disassembler_x86_unittest_SOURCES_DIST) \
+	$(am__src_processor_exploitability_unittest_SOURCES_DIST) \
+	$(am__src_processor_fast_source_line_resolver_unittest_SOURCES_DIST) \
+	$(am__src_processor_map_serializers_unittest_SOURCES_DIST) \
+	$(am__src_processor_minidump_dump_SOURCES_DIST) \
+	$(am__src_processor_minidump_processor_unittest_SOURCES_DIST) \
+	$(am__src_processor_minidump_stackwalk_SOURCES_DIST) \
+	$(am__src_processor_minidump_unittest_SOURCES_DIST) \
+	$(am__src_processor_network_source_line_resolver_server_unittest_SOURCES_DIST) \
+	$(am__src_processor_network_source_line_resolver_unittest_SOURCES_DIST) \
+	$(am__src_processor_network_source_line_server_unittest_SOURCES_DIST) \
+	$(am__src_processor_pathname_stripper_unittest_SOURCES_DIST) \
+	$(am__src_processor_postfix_evaluator_unittest_SOURCES_DIST) \
+	$(am__src_processor_range_map_unittest_SOURCES_DIST) \
+	$(am__src_processor_source_daemon_SOURCES_DIST) \
+	$(am__src_processor_stackwalker_amd64_unittest_SOURCES_DIST) \
+	$(am__src_processor_stackwalker_arm_unittest_SOURCES_DIST) \
+	$(am__src_processor_stackwalker_selftest_SOURCES_DIST) \
+	$(am__src_processor_stackwalker_x86_unittest_SOURCES_DIST) \
+	$(am__src_processor_static_address_map_unittest_SOURCES_DIST) \
+	$(am__src_processor_static_contained_range_map_unittest_SOURCES_DIST) \
+	$(am__src_processor_static_map_unittest_SOURCES_DIST) \
+	$(am__src_processor_static_range_map_unittest_SOURCES_DIST) \
+	$(am__src_processor_synth_minidump_unittest_SOURCES_DIST)
 DATA = $(dist_doc_DATA)
 ETAGS = etags
 CTAGS = ctags
@@ -509,7 +991,6 @@
 distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
-AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -520,43 +1001,29 @@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
-FGREP = @FGREP@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
 OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
@@ -569,7 +1036,6 @@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
-SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
@@ -580,7 +1046,6 @@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -612,7 +1077,6 @@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -642,480 +1106,736 @@
 	NEWS \
 	README
 
-lib_LTLIBRARIES = src/libbreakpad.la src/client/linux/libbreakpad_client.la
-src_client_linux_libbreakpad_client_la_SOURCES = \
-	src/client/linux/crash_generation/crash_generation_client.cc \
-	src/client/linux/handler/exception_handler.cc \
-	src/client/linux/minidump_writer/linux_dumper.cc \
-	src/client/linux/minidump_writer/minidump_writer.cc \
-	src/client/minidump_file_writer.cc \
-	src/common/convert_UTF.c \
-	src/common/md5.c \
-	src/common/string_conversion.cc \
-	src/common/linux/file_id.cc \
-	src/common/linux/guid_creator.cc
+noinst_LIBRARIES = $(am__append_2)
+lib_LIBRARIES = $(am__append_1) $(am__append_3)
+@LINUX_HOST_TRUE@src_client_linux_libbreakpad_client_a_SOURCES = \
+@LINUX_HOST_TRUE@	src/client/linux/crash_generation/crash_generation_client.cc \
+@LINUX_HOST_TRUE@	src/client/linux/handler/exception_handler.cc \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/linux_dumper.cc \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/minidump_writer.cc \
+@LINUX_HOST_TRUE@	src/client/minidump_file_writer.cc \
+@LINUX_HOST_TRUE@	src/common/convert_UTF.c \
+@LINUX_HOST_TRUE@	src/common/md5.c \
+@LINUX_HOST_TRUE@	src/common/string_conversion.cc \
+@LINUX_HOST_TRUE@	src/common/linux/file_id.cc \
+@LINUX_HOST_TRUE@	src/common/linux/guid_creator.cc
 
-src_libbreakpad_la_SOURCES = \
-	src/google_breakpad/common/breakpad_types.h \
-	src/google_breakpad/common/minidump_format.h \
-	src/google_breakpad/common/minidump_size.h \
-	src/google_breakpad/processor/basic_source_line_resolver.h \
-	src/google_breakpad/processor/call_stack.h \
-	src/google_breakpad/processor/code_module.h \
-	src/google_breakpad/processor/code_modules.h \
-	src/google_breakpad/processor/memory_region.h \
-	src/google_breakpad/processor/minidump.h \
-	src/google_breakpad/processor/minidump_processor.h \
-	src/google-breakpad/processor/network_source_line_resolver.h \
-	src/google_breakpad/processor/process_state.h \
-	src/google_breakpad/processor/source_line_resolver_interface.h \
-	src/google_breakpad/processor/stack_frame.h \
-	src/google_breakpad/processor/stack_frame_cpu.h \
-	src/google_breakpad/processor/stackwalker.h \
-	src/google_breakpad/processor/symbol_supplier.h \
-	src/google_breakpad/processor/system_info.h \
-	src/processor/address_map-inl.h \
-	src/processor/address_map.h \
-	src/processor/basic_code_module.h \
-	src/processor/basic_code_modules.cc \
-	src/processor/basic_code_modules.h \
-	src/processor/basic_source_line_resolver.cc \
-	src/processor/binarystream.h \
-	src/processor/binarystream.cc \
-	src/processor/call_stack.cc \
-	src/processor/cfi_frame_info.cc \
-	src/processor/cfi_frame_info.h \
-	src/processor/contained_range_map-inl.h \
-	src/processor/contained_range_map.h \
-	src/processor/linked_ptr.h \
-	src/processor/logging.h \
-	src/processor/logging.cc \
-	src/processor/minidump.cc \
-	src/processor/minidump_processor.cc \
-	src/processor/network_interface.h \
-	src/processor/network_source_line_resolver.cc \
-	src/processor/network_source_line_server.cc \
-	src/processor/network_source_line_server.h \
-	src/processor/pathname_stripper.cc \
-	src/processor/pathname_stripper.h \
-	src/processor/postfix_evaluator-inl.h \
-	src/processor/postfix_evaluator.h \
-	src/processor/process_state.cc \
-	src/processor/range_map-inl.h \
-	src/processor/range_map.h \
-	src/processor/scoped_ptr.h \
-	src/processor/simple_symbol_supplier.cc \
-	src/processor/simple_symbol_supplier.h \
-	src/processor/windows_frame_info.h \
-	src/processor/stackwalker.cc \
-	src/processor/stackwalker_amd64.cc \
-	src/processor/stackwalker_amd64.h \
-	src/processor/stackwalker_arm.cc \
-	src/processor/stackwalker_arm.h \
-	src/processor/stackwalker_ppc.cc \
-	src/processor/stackwalker_ppc.h \
-	src/processor/stackwalker_sparc.cc \
-	src/processor/stackwalker_sparc.h \
-	src/processor/stackwalker_x86.cc \
-	src/processor/stackwalker_x86.h \
-	src/processor/tokenize.cc \
-	src/processor/tokenize.h \
-	src/processor/udp_network.cc \
-	src/processor/udp_network.h
+@DISABLE_PROCESSOR_FALSE@src_libbreakpad_a_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/common/breakpad_types.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/common/minidump_format.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/common/minidump_size.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/basic_source_line_resolver.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/call_stack.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/code_module.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/code_modules.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/exploitability.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/fast_source_line_resolver.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/memory_region.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/minidump.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/minidump_processor.h \
+@DISABLE_PROCESSOR_FALSE@	src/google-breakpad/processor/network_source_line_resolver.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/process_state.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/source_line_resolver_base.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/source_line_resolver_interface.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/stack_frame.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/stack_frame_cpu.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/stackwalker.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/symbol_supplier.h \
+@DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/system_info.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/address_map-inl.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/address_map.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_module.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver_types.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/contained_range_map-inl.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/contained_range_map.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver_types.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/linked_ptr.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/map_serializers-inl.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/map_serializers.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/module_comparer.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/module_comparer.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/module_factory.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_interface.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_server.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_server.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/postfix_evaluator-inl.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/postfix_evaluator.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/process_state.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/range_map-inl.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/range_map.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/scoped_ptr.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/simple_serializer-inl.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/simple_serializer.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/simple_symbol_supplier.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/simple_symbol_supplier.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/windows_frame_info.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base_types.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_address_map-inl.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_address_map.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_contained_range_map-inl.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_contained_range_map.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_map_iterator-inl.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_map_iterator.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_map-inl.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_map.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_range_map-inl.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_range_map.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.h
 
-check_SCRIPTS = \
-	src/processor/minidump_dump_test \
-	src/processor/minidump_stackwalk_test \
-	src/processor/minidump_stackwalk_machine_readable_test
+@DISABLE_PROCESSOR_FALSE@src_libbreakpad_a_LIBADD = src/third_party/libdisasm/libdisasm.a
+@DISABLE_PROCESSOR_FALSE@src_third_party_libdisasm_libdisasm_a_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_implicit.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_implicit.h \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_insn.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_insn.h \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_invariant.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_invariant.h \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_modrm.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_modrm.h \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_opcode_tables.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_opcode_tables.h \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_operand.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_operand.h \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_reg.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_reg.h \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_settings.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/ia32_settings.h \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdis.h \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/qword.h \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_disasm.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_format.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_imm.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_imm.h \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_insn.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_misc.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_operand_list.c \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/x86_operand_list.h
+
+@DISABLE_PROCESSOR_FALSE@check_SCRIPTS = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_dump_test \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_stackwalk_test \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_stackwalk_machine_readable_test
 
 TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
 TESTS_ENVIRONMENT = 
-src_client_linux_linux_dumper_unittest_helper_SOURCES = \
-	src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
+@LINUX_HOST_TRUE@src_client_linux_linux_dumper_unittest_helper_SOURCES = \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
 
-src_client_linux_linux_dumper_unittest_helper_CXXFLAGS = $(PTHREAD_CFLAGS)
-src_client_linux_linux_dumper_unittest_helper_LDFLAGS = $(PTHREAD_CFLAGS)
-src_client_linux_linux_dumper_unittest_helper_CC = $(PTHREAD_CC)
-src_client_linux_linux_client_unittest_SOURCES = \
-	src/client/linux/handler/exception_handler_unittest.cc \
-	src/client/linux/minidump_writer/directory_reader_unittest.cc \
-	src/client/linux/minidump_writer/line_reader_unittest.cc \
-	src/client/linux/minidump_writer/linux_dumper_unittest.cc \
-	src/client/linux/minidump_writer/minidump_writer_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/gtest/src/gtest_main.cc \
-	src/testing/src/gmock-all.cc
+@LINUX_HOST_TRUE@src_client_linux_linux_dumper_unittest_helper_CXXFLAGS = $(PTHREAD_CFLAGS)
+@LINUX_HOST_TRUE@src_client_linux_linux_dumper_unittest_helper_LDFLAGS = $(PTHREAD_CFLAGS)
+@LINUX_HOST_TRUE@src_client_linux_linux_dumper_unittest_helper_CC = $(PTHREAD_CC)
+@LINUX_HOST_TRUE@src_client_linux_linux_client_unittest_SOURCES = \
+@LINUX_HOST_TRUE@	src/client/linux/handler/exception_handler_unittest.cc \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/directory_reader_unittest.cc \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/line_reader_unittest.cc \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/linux_dumper_unittest.cc \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/minidump_writer_unittest.cc \
+@LINUX_HOST_TRUE@	src/common/memory_unittest.cc \
+@LINUX_HOST_TRUE@	src/testing/gtest/src/gtest-all.cc \
+@LINUX_HOST_TRUE@	src/testing/gtest/src/gtest_main.cc \
+@LINUX_HOST_TRUE@	src/testing/src/gmock-all.cc \
+@LINUX_HOST_TRUE@	src/processor/basic_code_modules.cc \
+@LINUX_HOST_TRUE@	src/processor/logging.cc \
+@LINUX_HOST_TRUE@	src/processor/minidump.cc \
+@LINUX_HOST_TRUE@	src/processor/pathname_stripper.cc
 
-src_client_linux_linux_client_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@LINUX_HOST_TRUE@src_client_linux_linux_client_unittest_CPPFLAGS = \
+@LINUX_HOST_TRUE@	-I$(top_srcdir)/src \
+@LINUX_HOST_TRUE@	-I$(top_srcdir)/src/testing/include \
+@LINUX_HOST_TRUE@	-I$(top_srcdir)/src/testing/gtest/include \
+@LINUX_HOST_TRUE@	-I$(top_srcdir)/src/testing/gtest \
+@LINUX_HOST_TRUE@	-I$(top_srcdir)/src/testing
 
-src_client_linux_linux_client_unittest_LDADD = \
-	src/client/linux/handler/exception_handler.lo \
-	src/client/linux/crash_generation/crash_generation_client.lo \
-	src/client/linux/minidump_writer/linux_dumper.lo \
-	src/client/linux/minidump_writer/minidump_writer.lo \
-	src/client/minidump_file_writer.lo \
-	src/common/convert_UTF.lo \
-	src/common/md5.lo \
-	src/common/linux/file_id.lo \
-	src/common/linux/guid_creator.lo \
-	src/common/string_conversion.lo
+@LINUX_HOST_TRUE@src_client_linux_linux_client_unittest_LDADD = \
+@LINUX_HOST_TRUE@	src/client/linux/handler/exception_handler.o \
+@LINUX_HOST_TRUE@	src/client/linux/crash_generation/crash_generation_client.o \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/linux_dumper.o \
+@LINUX_HOST_TRUE@	src/client/linux/minidump_writer/minidump_writer.o \
+@LINUX_HOST_TRUE@	src/client/minidump_file_writer.o \
+@LINUX_HOST_TRUE@	src/common/convert_UTF.o \
+@LINUX_HOST_TRUE@	src/common/md5.o \
+@LINUX_HOST_TRUE@	src/common/linux/file_id.o \
+@LINUX_HOST_TRUE@	src/common/linux/guid_creator.o \
+@LINUX_HOST_TRUE@	src/common/string_conversion.o
 
-src_client_linux_linux_client_unittest_DEPENDENCIES = src/client/linux/linux_dumper_unittest_helper src/client/linux/libbreakpad_client.la
-src_processor_address_map_unittest_SOURCES = \
-	src/processor/address_map_unittest.cc
+@LINUX_HOST_TRUE@src_client_linux_linux_client_unittest_DEPENDENCIES = src/client/linux/linux_dumper_unittest_helper src/client/linux/libbreakpad_client.a src/libbreakpad.a
+@DISABLE_PROCESSOR_FALSE@src_processor_address_map_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/address_map_unittest.cc
 
-src_processor_address_map_unittest_LDADD = \
-	src/processor/logging.lo \
-	src/processor/pathname_stripper.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_address_map_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
 
-src_processor_binarystream_unittest_SOURCES = \
-	src/processor/binarystream_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_binarystream_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_binarystream_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_binarystream_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_binarystream_unittest_LDADD = \
-	src/processor/binarystream.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_binarystream_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o
 
-src_processor_basic_source_line_resolver_unittest_SOURCES = \
-	src/processor/basic_source_line_resolver_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_basic_source_line_resolver_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_basic_source_line_resolver_unittest_LDADD = \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/logging.lo \
-	src/processor/tokenize.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o
 
-src_processor_cfi_frame_info_unittest_SOURCES = \
-	src/processor/cfi_frame_info_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/gtest/src/gtest_main.cc \
-	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest_main.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_cfi_frame_info_unittest_LDADD = \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/pathname_stripper.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
 
-src_processor_cfi_frame_info_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_contained_range_map_unittest_SOURCES = \
-	src/processor/contained_range_map_unittest.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_contained_range_map_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/contained_range_map_unittest.cc
 
-src_processor_contained_range_map_unittest_LDADD = \
-	src/processor/logging.lo \
-	src/processor/pathname_stripper.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_contained_range_map_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
 
-src_processor_minidump_processor_unittest_SOURCES = \
-	src/processor/minidump_processor_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest_main.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_minidump_processor_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_minidump_processor_unittest_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/call_stack.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/minidump_processor.lo \
-	src/processor/minidump.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/process_state.lo \
-	src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo \
-	src/processor/tokenize.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a
 
-src_processor_minidump_unittest_SOURCES = \
-	src/common/test_assembler.cc \
-	src/processor/minidump_unittest.cc \
-	src/processor/synth_minidump.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/gtest/src/gtest_main.cc \
-	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_disassembler_x86_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest_main.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_minidump_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_disassembler_x86_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_minidump_unittest_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/logging.lo \
-	src/processor/minidump.lo \
-	src/processor/pathname_stripper.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_disassembler_x86_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a
 
-src_processor_network_source_line_resolver_unittest_SOURCES = \
-	src/processor/network_source_line_resolver_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@  src/processor/fast_source_line_resolver_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@  src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@  src/testing/src/gmock-all.cc
 
-src_processor_network_source_line_resolver_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@  -I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@  -I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@  -I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@  -I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@  -I$(top_srcdir)/src/testing
 
-src_processor_network_source_line_resolver_unittest_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/binarystream.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/network_source_line_resolver.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/tokenize.lo \
-	src/processor/udp_network.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@  src/processor/fast_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@  src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@  src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@  src/processor/module_comparer.o \
+@DISABLE_PROCESSOR_FALSE@  src/processor/module_serializer.o \
+@DISABLE_PROCESSOR_FALSE@  src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@  src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@  src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@  src/processor/tokenize.o
 
-src_processor_network_source_line_resolver_server_unittest_SOURCES = \
-	src/processor/network_source_line_resolver_server_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_map_serializers_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/map_serializers_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_network_source_line_resolver_server_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_map_serializers_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_network_source_line_resolver_server_unittest_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/binarystream.lo \
-	src/processor/call_stack.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/minidump_processor.lo \
-	src/processor/minidump.lo \
-	src/processor/network_source_line_resolver.lo \
-	src/processor/network_source_line_server.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/process_state.lo \
-	src/processor/simple_symbol_supplier.lo \
-	src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo \
-	src/processor/tokenize.lo \
-	src/processor/udp_network.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_map_serializers_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
 
-src_processor_network_source_line_server_unittest_SOURCES = \
-	src/processor/network_source_line_server_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_network_source_line_server_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_network_source_line_server_unittest_LDADD = \
-	src/processor/binarystream.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/network_source_line_server.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/udp_network.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a
 
-src_processor_pathname_stripper_unittest_SOURCES = \
-	src/processor/pathname_stripper_unittest.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/common/test_assembler.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/synth_minidump.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest_main.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_pathname_stripper_unittest_LDADD = \
-	src/processor/pathname_stripper.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_postfix_evaluator_unittest_SOURCES = \
-	src/processor/postfix_evaluator_unittest.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
 
-src_processor_postfix_evaluator_unittest_LDADD = \
-	src/processor/logging.lo \
-	src/processor/pathname_stripper.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_network_source_line_resolver_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_range_map_unittest_SOURCES = \
-	src/processor/range_map_unittest.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_network_source_line_resolver_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_range_map_unittest_LDADD = \
-	src/processor/logging.lo \
-	src/processor/pathname_stripper.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_network_source_line_resolver_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.o
 
-src_processor_stackwalker_selftest_SOURCES = \
-	src/processor/stackwalker_selftest.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_network_source_line_resolver_server_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver_server_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_stackwalker_selftest_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/call_stack.lo \
-	src/processor/logging.lo \
-	src/processor/minidump.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo \
-	src/processor/tokenize.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_network_source_line_resolver_server_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_stackwalker_amd64_unittest_SOURCES = \
-	src/common/test_assembler.cc \
-	src/processor/stackwalker_amd64_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/gtest/src/gtest_main.cc \
-	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_network_source_line_resolver_server_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_server.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/simple_symbol_supplier.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.o \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a
 
-src_processor_stackwalker_amd64_unittest_LDADD = \
-	src/libbreakpad.la
+@DISABLE_PROCESSOR_FALSE@src_processor_network_source_line_server_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_server_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_stackwalker_amd64_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_network_source_line_server_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_stackwalker_arm_unittest_SOURCES = \
-	src/common/test_assembler.cc \
-	src/processor/stackwalker_arm_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/gtest/src/gtest_main.cc \
-	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_network_source_line_server_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_server.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.o
 
-src_processor_stackwalker_arm_unittest_LDADD = \
-	src/libbreakpad.la
+@DISABLE_PROCESSOR_FALSE@src_processor_static_address_map_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_address_map_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_stackwalker_arm_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_static_address_map_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_stackwalker_x86_unittest_SOURCES = \
-	src/common/test_assembler.cc \
-	src/processor/stackwalker_x86_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/gtest/src/gtest_main.cc \
-	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_static_address_map_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
 
-src_processor_stackwalker_x86_unittest_LDADD = \
-	src/libbreakpad.la
+@DISABLE_PROCESSOR_FALSE@src_processor_static_contained_range_map_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_contained_range_map_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_stackwalker_x86_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_static_contained_range_map_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_synth_minidump_unittest_SOURCES = \
-	src/common/test_assembler.cc \
-	src/common/test_assembler.h \
-	src/processor/synth_minidump_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/gtest/src/gtest_main.cc \
-	src/testing/src/gmock-all.cc \
-	src/processor/synth_minidump.cc \
-	src/processor/synth_minidump.h
+@DISABLE_PROCESSOR_FALSE@src_processor_static_contained_range_map_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
 
-src_processor_synth_minidump_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_static_map_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_map_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_common_test_assembler_unittest_SOURCES = \
-	src/common/test_assembler.cc \
-	src/common/test_assembler.h \
-	src/common/test_assembler_unittest.cc \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/gtest/src/gtest_main.cc \
-	src/testing/src/gmock-all.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_static_map_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_common_test_assembler_unittest_CPPFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-        -I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
+@DISABLE_PROCESSOR_FALSE@src_processor_static_map_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
 
-noinst_SCRIPTS = $(check_SCRIPTS)
-src_processor_minidump_dump_SOURCES = \
-	src/processor/minidump_dump.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_static_range_map_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/static_range_map_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
 
-src_processor_minidump_dump_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/logging.lo \
-	src/processor/minidump.lo \
-	src/processor/pathname_stripper.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_static_range_map_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
 
-src_processor_minidump_stackwalk_SOURCES = \
-	src/processor/minidump_stackwalk.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_static_range_map_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
 
-src_processor_minidump_stackwalk_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/binarystream.lo \
-	src/processor/call_stack.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/minidump.lo \
-	src/processor/minidump_processor.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/process_state.lo \
-	src/processor/network_source_line_resolver.lo \
-	src/processor/simple_symbol_supplier.lo \
-	src/processor/stackwalker.lo \
-	src/processor/stackwalker_amd64.lo \
-	src/processor/stackwalker_arm.lo \
-	src/processor/stackwalker_ppc.lo \
-	src/processor/stackwalker_sparc.lo \
-	src/processor/stackwalker_x86.lo \
-	src/processor/tokenize.lo \
-	src/processor/udp_network.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_pathname_stripper_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper_unittest.cc
 
-src_processor_source_daemon_SOURCES = \
-	src/processor/source_daemon.cc
+@DISABLE_PROCESSOR_FALSE@src_processor_pathname_stripper_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
 
-src_processor_source_daemon_LDADD = \
-	src/processor/basic_code_modules.lo \
-	src/processor/basic_source_line_resolver.lo \
-	src/processor/binarystream.lo \
-	src/processor/cfi_frame_info.lo \
-	src/processor/logging.lo \
-	src/processor/network_source_line_server.lo \
-	src/processor/pathname_stripper.lo \
-	src/processor/simple_symbol_supplier.lo \
-	src/processor/tokenize.lo \
-	src/processor/udp_network.lo
+@DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/postfix_evaluator_unittest.cc
+
+@DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+
+@DISABLE_PROCESSOR_FALSE@src_processor_range_map_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/range_map_unittest.cc
+
+@DISABLE_PROCESSOR_FALSE@src_processor_range_map_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_selftest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_selftest.cc
+
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_selftest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o
+
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_amd64_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/common/test_assembler.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest_main.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
+
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_amd64_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a
+
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_amd64_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
+
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_arm_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/common/test_assembler.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest_main.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
+
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_arm_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a
+
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_arm_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
+
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_x86_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/common/test_assembler.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest_main.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
+
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_x86_unittest_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a
+
+@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_x86_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
+
+@DISABLE_PROCESSOR_FALSE@src_processor_synth_minidump_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/common/test_assembler.cc \
+@DISABLE_PROCESSOR_FALSE@	src/common/test_assembler.h \
+@DISABLE_PROCESSOR_FALSE@	src/processor/synth_minidump_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest_main.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/synth_minidump.cc \
+@DISABLE_PROCESSOR_FALSE@	src/processor/synth_minidump.h
+
+@DISABLE_PROCESSOR_FALSE@src_processor_synth_minidump_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
+
+@DISABLE_PROCESSOR_FALSE@src_common_test_assembler_unittest_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/common/test_assembler.cc \
+@DISABLE_PROCESSOR_FALSE@	src/common/test_assembler.h \
+@DISABLE_PROCESSOR_FALSE@	src/common/test_assembler_unittest.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest_main.cc \
+@DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
+
+@DISABLE_PROCESSOR_FALSE@src_common_test_assembler_unittest_CPPFLAGS = \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
+
+@DISABLE_PROCESSOR_FALSE@noinst_SCRIPTS = $(check_SCRIPTS)
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_dump_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_dump.cc
+
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_dump_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_stackwalk.cc
+
+@DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/simple_symbol_supplier.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_amd64.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_arm.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.o \
+@DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a
+
+@DISABLE_PROCESSOR_FALSE@src_processor_source_daemon_SOURCES = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_daemon.cc
+
+@DISABLE_PROCESSOR_FALSE@src_processor_source_daemon_LDADD = \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/network_source_line_server.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/simple_symbol_supplier.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	src/processor/udp_network.o
 
 EXTRA_DIST = \
 	$(SCRIPTS) \
@@ -1251,7 +1971,7 @@
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .cc .lo .o .obj
+.SUFFIXES: .c .cc .o .obj
 am--refresh:
 	@:
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
@@ -1303,44 +2023,48 @@
 
 distclean-hdr:
 	-rm -f src/config.h src/stamp-h1
-install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+install-libLIBRARIES: $(lib_LIBRARIES)
 	@$(NORMAL_INSTALL)
 	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
-	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
 	list2=; for p in $$list; do \
 	  if test -f $$p; then \
 	    list2="$$list2 $$p"; \
 	  else :; fi; \
 	done; \
 	test -z "$$list2" || { \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
-	}
-
-uninstall-libLTLIBRARIES:
-	@$(NORMAL_UNINSTALL)
-	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	  echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; }
+	@$(POST_INSTALL)
+	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
 	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	  if test -f $$p; then \
+	    $(am__strip_dir) \
+	    echo " ( cd '$(DESTDIR)$(libdir)' && $(RANLIB) $$f )"; \
+	    ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \
+	  else :; fi; \
 	done
 
-clean-libLTLIBRARIES:
-	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-	  test "$$dir" != "$$p" || dir=.; \
-	  echo "rm -f \"$${dir}/so_locations\""; \
-	  rm -f "$${dir}/so_locations"; \
-	done
+uninstall-libLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libdir)' && rm -f "$$files" )"; \
+	cd "$(DESTDIR)$(libdir)" && rm -f $$files
+
+clean-libLIBRARIES:
+	-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
+
+clean-noinstLIBRARIES:
+	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
 src/client/linux/crash_generation/$(am__dirstamp):
 	@$(MKDIR_P) src/client/linux/crash_generation
 	@: > src/client/linux/crash_generation/$(am__dirstamp)
 src/client/linux/crash_generation/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) src/client/linux/crash_generation/$(DEPDIR)
 	@: > src/client/linux/crash_generation/$(DEPDIR)/$(am__dirstamp)
-src/client/linux/crash_generation/crash_generation_client.lo:  \
+src/client/linux/crash_generation/crash_generation_client.$(OBJEXT):  \
 	src/client/linux/crash_generation/$(am__dirstamp) \
 	src/client/linux/crash_generation/$(DEPDIR)/$(am__dirstamp)
 src/client/linux/handler/$(am__dirstamp):
@@ -1349,7 +2073,7 @@
 src/client/linux/handler/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) src/client/linux/handler/$(DEPDIR)
 	@: > src/client/linux/handler/$(DEPDIR)/$(am__dirstamp)
-src/client/linux/handler/exception_handler.lo:  \
+src/client/linux/handler/exception_handler.$(OBJEXT):  \
 	src/client/linux/handler/$(am__dirstamp) \
 	src/client/linux/handler/$(DEPDIR)/$(am__dirstamp)
 src/client/linux/minidump_writer/$(am__dirstamp):
@@ -1358,10 +2082,10 @@
 src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) src/client/linux/minidump_writer/$(DEPDIR)
 	@: > src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
-src/client/linux/minidump_writer/linux_dumper.lo:  \
+src/client/linux/minidump_writer/linux_dumper.$(OBJEXT):  \
 	src/client/linux/minidump_writer/$(am__dirstamp) \
 	src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
-src/client/linux/minidump_writer/minidump_writer.lo:  \
+src/client/linux/minidump_writer/minidump_writer.$(OBJEXT):  \
 	src/client/linux/minidump_writer/$(am__dirstamp) \
 	src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
 src/client/$(am__dirstamp):
@@ -1370,7 +2094,7 @@
 src/client/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) src/client/$(DEPDIR)
 	@: > src/client/$(DEPDIR)/$(am__dirstamp)
-src/client/minidump_file_writer.lo: src/client/$(am__dirstamp) \
+src/client/minidump_file_writer.$(OBJEXT): src/client/$(am__dirstamp) \
 	src/client/$(DEPDIR)/$(am__dirstamp)
 src/common/$(am__dirstamp):
 	@$(MKDIR_P) src/common
@@ -1378,11 +2102,11 @@
 src/common/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) src/common/$(DEPDIR)
 	@: > src/common/$(DEPDIR)/$(am__dirstamp)
-src/common/convert_UTF.lo: src/common/$(am__dirstamp) \
+src/common/convert_UTF.$(OBJEXT): src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
-src/common/md5.lo: src/common/$(am__dirstamp) \
+src/common/md5.$(OBJEXT): src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
-src/common/string_conversion.lo: src/common/$(am__dirstamp) \
+src/common/string_conversion.$(OBJEXT): src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
 src/common/linux/$(am__dirstamp):
 	@$(MKDIR_P) src/common/linux
@@ -1390,79 +2114,161 @@
 src/common/linux/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) src/common/linux/$(DEPDIR)
 	@: > src/common/linux/$(DEPDIR)/$(am__dirstamp)
-src/common/linux/file_id.lo: src/common/linux/$(am__dirstamp) \
+src/common/linux/file_id.$(OBJEXT): src/common/linux/$(am__dirstamp) \
 	src/common/linux/$(DEPDIR)/$(am__dirstamp)
-src/common/linux/guid_creator.lo: src/common/linux/$(am__dirstamp) \
+src/common/linux/guid_creator.$(OBJEXT):  \
+	src/common/linux/$(am__dirstamp) \
 	src/common/linux/$(DEPDIR)/$(am__dirstamp)
 src/client/linux/$(am__dirstamp):
 	@$(MKDIR_P) src/client/linux
 	@: > src/client/linux/$(am__dirstamp)
-src/client/linux/libbreakpad_client.la: $(src_client_linux_libbreakpad_client_la_OBJECTS) $(src_client_linux_libbreakpad_client_la_DEPENDENCIES) src/client/linux/$(am__dirstamp)
-	$(CXXLINK) -rpath $(libdir) $(src_client_linux_libbreakpad_client_la_OBJECTS) $(src_client_linux_libbreakpad_client_la_LIBADD) $(LIBS)
+src/client/linux/libbreakpad_client.a: $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_DEPENDENCIES) src/client/linux/$(am__dirstamp)
+	-rm -f src/client/linux/libbreakpad_client.a
+	$(src_client_linux_libbreakpad_client_a_AR) src/client/linux/libbreakpad_client.a $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_LIBADD)
+	$(RANLIB) src/client/linux/libbreakpad_client.a
 src/processor/$(am__dirstamp):
 	@$(MKDIR_P) src/processor
 	@: > src/processor/$(am__dirstamp)
 src/processor/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) src/processor/$(DEPDIR)
 	@: > src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/basic_code_modules.lo: src/processor/$(am__dirstamp) \
-	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/basic_source_line_resolver.lo:  \
+src/processor/basic_code_modules.$(OBJEXT):  \
 	src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/binarystream.lo: src/processor/$(am__dirstamp) \
-	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/call_stack.lo: src/processor/$(am__dirstamp) \
-	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/cfi_frame_info.lo: src/processor/$(am__dirstamp) \
-	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/logging.lo: src/processor/$(am__dirstamp) \
-	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/minidump.lo: src/processor/$(am__dirstamp) \
-	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/minidump_processor.lo: src/processor/$(am__dirstamp) \
-	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/network_source_line_resolver.lo:  \
+src/processor/basic_source_line_resolver.$(OBJEXT):  \
 	src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/network_source_line_server.lo:  \
+src/processor/binarystream.$(OBJEXT): src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/call_stack.$(OBJEXT): src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/cfi_frame_info.$(OBJEXT): src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/disassembler_x86.$(OBJEXT):  \
 	src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/pathname_stripper.lo: src/processor/$(am__dirstamp) \
+src/processor/exploitability.$(OBJEXT): src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/process_state.lo: src/processor/$(am__dirstamp) \
-	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/simple_symbol_supplier.lo:  \
+src/processor/exploitability_win.$(OBJEXT):  \
 	src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/stackwalker.lo: src/processor/$(am__dirstamp) \
+src/processor/fast_source_line_resolver.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/stackwalker_amd64.lo: src/processor/$(am__dirstamp) \
+src/processor/logging.$(OBJEXT): src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/stackwalker_arm.lo: src/processor/$(am__dirstamp) \
+src/processor/minidump.$(OBJEXT): src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/stackwalker_ppc.lo: src/processor/$(am__dirstamp) \
+src/processor/minidump_processor.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/stackwalker_sparc.lo: src/processor/$(am__dirstamp) \
+src/processor/module_comparer.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/stackwalker_x86.lo: src/processor/$(am__dirstamp) \
+src/processor/network_source_line_resolver.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/tokenize.lo: src/processor/$(am__dirstamp) \
+src/processor/network_source_line_server.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
-src/processor/udp_network.lo: src/processor/$(am__dirstamp) \
+src/processor/pathname_stripper.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/process_state.$(OBJEXT): src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/simple_symbol_supplier.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/source_line_resolver_base.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/stackwalker.$(OBJEXT): src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/stackwalker_amd64.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/stackwalker_arm.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/stackwalker_ppc.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/stackwalker_sparc.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/stackwalker_x86.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/tokenize.$(OBJEXT): src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/udp_network.$(OBJEXT): src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
 src/$(am__dirstamp):
 	@$(MKDIR_P) src
 	@: > src/$(am__dirstamp)
-src/libbreakpad.la: $(src_libbreakpad_la_OBJECTS) $(src_libbreakpad_la_DEPENDENCIES) src/$(am__dirstamp)
-	$(CXXLINK) -rpath $(libdir) $(src_libbreakpad_la_OBJECTS) $(src_libbreakpad_la_LIBADD) $(LIBS)
+src/libbreakpad.a: $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_DEPENDENCIES) src/$(am__dirstamp)
+	-rm -f src/libbreakpad.a
+	$(src_libbreakpad_a_AR) src/libbreakpad.a $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_LIBADD)
+	$(RANLIB) src/libbreakpad.a
+src/third_party/libdisasm/$(am__dirstamp):
+	@$(MKDIR_P) src/third_party/libdisasm
+	@: > src/third_party/libdisasm/$(am__dirstamp)
+src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) src/third_party/libdisasm/$(DEPDIR)
+	@: > src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/ia32_implicit.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/ia32_insn.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/ia32_invariant.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/ia32_modrm.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/ia32_opcode_tables.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/ia32_operand.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/ia32_reg.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/ia32_settings.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/x86_disasm.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/x86_format.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/x86_imm.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/x86_insn.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/x86_misc.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/x86_operand_list.$(OBJEXT):  \
+	src/third_party/libdisasm/$(am__dirstamp) \
+	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+src/third_party/libdisasm/libdisasm.a: $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) src/third_party/libdisasm/$(am__dirstamp)
+	-rm -f src/third_party/libdisasm/libdisasm.a
+	$(src_third_party_libdisasm_libdisasm_a_AR) src/third_party/libdisasm/libdisasm.a $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_LIBADD)
+	$(RANLIB) src/third_party/libdisasm/libdisasm.a
 install-binPROGRAMS: $(bin_PROGRAMS)
 	@$(NORMAL_INSTALL)
 	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
 	for p in $$list; do echo "$$p $$p"; done | \
 	sed 's/$(EXEEXT)$$//' | \
-	while read p p1; do if test -f $$p || test -f $$p1; \
+	while read p p1; do if test -f $$p; \
 	  then echo "$$p"; echo "$$p"; else :; fi; \
 	done | \
 	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
@@ -1476,8 +2282,8 @@
 	while read type dir files; do \
 	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
 	    test -z "$$files" || { \
-	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
-	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	      echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	      $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
 	    } \
 	; done
 
@@ -1492,31 +2298,13 @@
 	cd "$(DESTDIR)$(bindir)" && rm -f $$files
 
 clean-binPROGRAMS:
-	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
 
 clean-checkPROGRAMS:
-	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
+	-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
 
 clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
+	-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
 src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.$(OBJEXT):  \
 	src/client/linux/handler/$(am__dirstamp) \
 	src/client/linux/handler/$(DEPDIR)/$(am__dirstamp)
@@ -1532,6 +2320,9 @@
 src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.$(OBJEXT):  \
 	src/client/linux/minidump_writer/$(am__dirstamp) \
 	src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
+src/common/src_client_linux_linux_client_unittest-memory_unittest.$(OBJEXT):  \
+	src/common/$(am__dirstamp) \
+	src/common/$(DEPDIR)/$(am__dirstamp)
 src/testing/gtest/src/$(am__dirstamp):
 	@$(MKDIR_P) src/testing/gtest/src
 	@: > src/testing/gtest/src/$(am__dirstamp)
@@ -1553,6 +2344,18 @@
 src/testing/src/src_client_linux_linux_client_unittest-gmock-all.$(OBJEXT):  \
 	src/testing/src/$(am__dirstamp) \
 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+src/processor/src_client_linux_linux_client_unittest-basic_code_modules.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/src_client_linux_linux_client_unittest-logging.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/src_client_linux_linux_client_unittest-minidump.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/processor/src_client_linux_linux_client_unittest-pathname_stripper.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
 src/client/linux/linux_client_unittest$(EXEEXT): $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_DEPENDENCIES) src/client/linux/$(am__dirstamp)
 	@rm -f src/client/linux/linux_client_unittest$(EXEEXT)
 	$(CXXLINK) $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_LDADD) $(LIBS)
@@ -1631,6 +2434,60 @@
 src/processor/contained_range_map_unittest$(EXEEXT): $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
 	@rm -f src/processor/contained_range_map_unittest$(EXEEXT)
 	$(CXXLINK) $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_LDADD) $(LIBS)
+src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.$(OBJEXT):  \
+	src/testing/gtest/src/$(am__dirstamp) \
+	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.$(OBJEXT):  \
+	src/testing/gtest/src/$(am__dirstamp) \
+	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.$(OBJEXT):  \
+	src/testing/src/$(am__dirstamp) \
+	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+src/processor/disassembler_x86_unittest$(EXEEXT): $(src_processor_disassembler_x86_unittest_OBJECTS) $(src_processor_disassembler_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+	@rm -f src/processor/disassembler_x86_unittest$(EXEEXT)
+	$(CXXLINK) $(src_processor_disassembler_x86_unittest_OBJECTS) $(src_processor_disassembler_x86_unittest_LDADD) $(LIBS)
+src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.$(OBJEXT):  \
+	src/testing/gtest/src/$(am__dirstamp) \
+	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.$(OBJEXT):  \
+	src/testing/gtest/src/$(am__dirstamp) \
+	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT):  \
+	src/testing/src/$(am__dirstamp) \
+	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+src/processor/exploitability_unittest$(EXEEXT): $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+	@rm -f src/processor/exploitability_unittest$(EXEEXT)
+	$(CXXLINK) $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_LDADD) $(LIBS)
+src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.$(OBJEXT):  \
+	src/testing/gtest/src/$(am__dirstamp) \
+	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.$(OBJEXT):  \
+	src/testing/src/$(am__dirstamp) \
+	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+src/processor/fast_source_line_resolver_unittest$(EXEEXT): $(src_processor_fast_source_line_resolver_unittest_OBJECTS) $(src_processor_fast_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+	@rm -f src/processor/fast_source_line_resolver_unittest$(EXEEXT)
+	$(CXXLINK) $(src_processor_fast_source_line_resolver_unittest_OBJECTS) $(src_processor_fast_source_line_resolver_unittest_LDADD) $(LIBS)
+src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.$(OBJEXT):  \
+	src/testing/gtest/src/$(am__dirstamp) \
+	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+src/testing/src/src_processor_map_serializers_unittest-gmock-all.$(OBJEXT):  \
+	src/testing/src/$(am__dirstamp) \
+	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+src/processor/map_serializers_unittest$(EXEEXT): $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+	@rm -f src/processor/map_serializers_unittest$(EXEEXT)
+	$(CXXLINK) $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_LDADD) $(LIBS)
 src/processor/minidump_dump.$(OBJEXT): src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
 src/processor/minidump_dump$(EXEEXT): $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_DEPENDENCIES) src/processor/$(am__dirstamp)
@@ -1794,6 +2651,54 @@
 src/processor/stackwalker_x86_unittest$(EXEEXT): $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
 	@rm -f src/processor/stackwalker_x86_unittest$(EXEEXT)
 	$(CXXLINK) $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_LDADD) $(LIBS)
+src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.$(OBJEXT):  \
+	src/testing/gtest/src/$(am__dirstamp) \
+	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+src/testing/src/src_processor_static_address_map_unittest-gmock-all.$(OBJEXT):  \
+	src/testing/src/$(am__dirstamp) \
+	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+src/processor/static_address_map_unittest$(EXEEXT): $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+	@rm -f src/processor/static_address_map_unittest$(EXEEXT)
+	$(CXXLINK) $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_LDADD) $(LIBS)
+src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.$(OBJEXT):  \
+	src/testing/gtest/src/$(am__dirstamp) \
+	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.$(OBJEXT):  \
+	src/testing/src/$(am__dirstamp) \
+	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+src/processor/static_contained_range_map_unittest$(EXEEXT): $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+	@rm -f src/processor/static_contained_range_map_unittest$(EXEEXT)
+	$(CXXLINK) $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_LDADD) $(LIBS)
+src/processor/src_processor_static_map_unittest-static_map_unittest.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.$(OBJEXT):  \
+	src/testing/gtest/src/$(am__dirstamp) \
+	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+src/testing/src/src_processor_static_map_unittest-gmock-all.$(OBJEXT):  \
+	src/testing/src/$(am__dirstamp) \
+	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+src/processor/static_map_unittest$(EXEEXT): $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+	@rm -f src/processor/static_map_unittest$(EXEEXT)
+	$(CXXLINK) $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_LDADD) $(LIBS)
+src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.$(OBJEXT):  \
+	src/processor/$(am__dirstamp) \
+	src/processor/$(DEPDIR)/$(am__dirstamp)
+src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.$(OBJEXT):  \
+	src/testing/gtest/src/$(am__dirstamp) \
+	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+src/testing/src/src_processor_static_range_map_unittest-gmock-all.$(OBJEXT):  \
+	src/testing/src/$(am__dirstamp) \
+	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+src/processor/static_range_map_unittest$(EXEEXT): $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+	@rm -f src/processor/static_range_map_unittest$(EXEEXT)
+	$(CXXLINK) $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_LDADD) $(LIBS)
 src/common/src_processor_synth_minidump_unittest-test_assembler.$(OBJEXT):  \
 	src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
@@ -1819,29 +2724,21 @@
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
 	-rm -f src/client/linux/crash_generation/crash_generation_client.$(OBJEXT)
-	-rm -f src/client/linux/crash_generation/crash_generation_client.lo
 	-rm -f src/client/linux/handler/exception_handler.$(OBJEXT)
-	-rm -f src/client/linux/handler/exception_handler.lo
 	-rm -f src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.$(OBJEXT)
 	-rm -f src/client/linux/minidump_writer/linux_dumper.$(OBJEXT)
-	-rm -f src/client/linux/minidump_writer/linux_dumper.lo
 	-rm -f src/client/linux/minidump_writer/minidump_writer.$(OBJEXT)
-	-rm -f src/client/linux/minidump_writer/minidump_writer.lo
 	-rm -f src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.$(OBJEXT)
 	-rm -f src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.$(OBJEXT)
 	-rm -f src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.$(OBJEXT)
 	-rm -f src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.$(OBJEXT)
 	-rm -f src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.$(OBJEXT)
 	-rm -f src/client/minidump_file_writer.$(OBJEXT)
-	-rm -f src/client/minidump_file_writer.lo
 	-rm -f src/common/convert_UTF.$(OBJEXT)
-	-rm -f src/common/convert_UTF.lo
 	-rm -f src/common/linux/file_id.$(OBJEXT)
-	-rm -f src/common/linux/file_id.lo
 	-rm -f src/common/linux/guid_creator.$(OBJEXT)
-	-rm -f src/common/linux/guid_creator.lo
 	-rm -f src/common/md5.$(OBJEXT)
-	-rm -f src/common/md5.lo
+	-rm -f src/common/src_client_linux_linux_client_unittest-memory_unittest.$(OBJEXT)
 	-rm -f src/common/src_common_test_assembler_unittest-test_assembler.$(OBJEXT)
 	-rm -f src/common/src_common_test_assembler_unittest-test_assembler_unittest.$(OBJEXT)
 	-rm -f src/common/src_processor_minidump_unittest-test_assembler.$(OBJEXT)
@@ -1850,44 +2747,44 @@
 	-rm -f src/common/src_processor_stackwalker_x86_unittest-test_assembler.$(OBJEXT)
 	-rm -f src/common/src_processor_synth_minidump_unittest-test_assembler.$(OBJEXT)
 	-rm -f src/common/string_conversion.$(OBJEXT)
-	-rm -f src/common/string_conversion.lo
 	-rm -f src/processor/address_map_unittest.$(OBJEXT)
 	-rm -f src/processor/basic_code_modules.$(OBJEXT)
-	-rm -f src/processor/basic_code_modules.lo
 	-rm -f src/processor/basic_source_line_resolver.$(OBJEXT)
-	-rm -f src/processor/basic_source_line_resolver.lo
 	-rm -f src/processor/binarystream.$(OBJEXT)
-	-rm -f src/processor/binarystream.lo
 	-rm -f src/processor/call_stack.$(OBJEXT)
-	-rm -f src/processor/call_stack.lo
 	-rm -f src/processor/cfi_frame_info.$(OBJEXT)
-	-rm -f src/processor/cfi_frame_info.lo
 	-rm -f src/processor/contained_range_map_unittest.$(OBJEXT)
+	-rm -f src/processor/disassembler_x86.$(OBJEXT)
+	-rm -f src/processor/exploitability.$(OBJEXT)
+	-rm -f src/processor/exploitability_win.$(OBJEXT)
+	-rm -f src/processor/fast_source_line_resolver.$(OBJEXT)
 	-rm -f src/processor/logging.$(OBJEXT)
-	-rm -f src/processor/logging.lo
 	-rm -f src/processor/minidump.$(OBJEXT)
-	-rm -f src/processor/minidump.lo
 	-rm -f src/processor/minidump_dump.$(OBJEXT)
 	-rm -f src/processor/minidump_processor.$(OBJEXT)
-	-rm -f src/processor/minidump_processor.lo
 	-rm -f src/processor/minidump_stackwalk.$(OBJEXT)
+	-rm -f src/processor/module_comparer.$(OBJEXT)
 	-rm -f src/processor/network_source_line_resolver.$(OBJEXT)
-	-rm -f src/processor/network_source_line_resolver.lo
 	-rm -f src/processor/network_source_line_server.$(OBJEXT)
-	-rm -f src/processor/network_source_line_server.lo
 	-rm -f src/processor/pathname_stripper.$(OBJEXT)
-	-rm -f src/processor/pathname_stripper.lo
 	-rm -f src/processor/pathname_stripper_unittest.$(OBJEXT)
 	-rm -f src/processor/postfix_evaluator_unittest.$(OBJEXT)
 	-rm -f src/processor/process_state.$(OBJEXT)
-	-rm -f src/processor/process_state.lo
 	-rm -f src/processor/range_map_unittest.$(OBJEXT)
 	-rm -f src/processor/simple_symbol_supplier.$(OBJEXT)
-	-rm -f src/processor/simple_symbol_supplier.lo
 	-rm -f src/processor/source_daemon.$(OBJEXT)
+	-rm -f src/processor/source_line_resolver_base.$(OBJEXT)
+	-rm -f src/processor/src_client_linux_linux_client_unittest-basic_code_modules.$(OBJEXT)
+	-rm -f src/processor/src_client_linux_linux_client_unittest-logging.$(OBJEXT)
+	-rm -f src/processor/src_client_linux_linux_client_unittest-minidump.$(OBJEXT)
+	-rm -f src/processor/src_client_linux_linux_client_unittest-pathname_stripper.$(OBJEXT)
 	-rm -f src/processor/src_processor_basic_source_line_resolver_unittest-basic_source_line_resolver_unittest.$(OBJEXT)
 	-rm -f src/processor/src_processor_binarystream_unittest-binarystream_unittest.$(OBJEXT)
 	-rm -f src/processor/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.$(OBJEXT)
+	-rm -f src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.$(OBJEXT)
+	-rm -f src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT)
+	-rm -f src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.$(OBJEXT)
+	-rm -f src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.$(OBJEXT)
 	-rm -f src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT)
 	-rm -f src/processor/src_processor_minidump_unittest-minidump_unittest.$(OBJEXT)
 	-rm -f src/processor/src_processor_minidump_unittest-synth_minidump.$(OBJEXT)
@@ -1897,25 +2794,21 @@
 	-rm -f src/processor/src_processor_stackwalker_amd64_unittest-stackwalker_amd64_unittest.$(OBJEXT)
 	-rm -f src/processor/src_processor_stackwalker_arm_unittest-stackwalker_arm_unittest.$(OBJEXT)
 	-rm -f src/processor/src_processor_stackwalker_x86_unittest-stackwalker_x86_unittest.$(OBJEXT)
+	-rm -f src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.$(OBJEXT)
+	-rm -f src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.$(OBJEXT)
+	-rm -f src/processor/src_processor_static_map_unittest-static_map_unittest.$(OBJEXT)
+	-rm -f src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.$(OBJEXT)
 	-rm -f src/processor/src_processor_synth_minidump_unittest-synth_minidump.$(OBJEXT)
 	-rm -f src/processor/src_processor_synth_minidump_unittest-synth_minidump_unittest.$(OBJEXT)
 	-rm -f src/processor/stackwalker.$(OBJEXT)
-	-rm -f src/processor/stackwalker.lo
 	-rm -f src/processor/stackwalker_amd64.$(OBJEXT)
-	-rm -f src/processor/stackwalker_amd64.lo
 	-rm -f src/processor/stackwalker_arm.$(OBJEXT)
-	-rm -f src/processor/stackwalker_arm.lo
 	-rm -f src/processor/stackwalker_ppc.$(OBJEXT)
-	-rm -f src/processor/stackwalker_ppc.lo
 	-rm -f src/processor/stackwalker_selftest.$(OBJEXT)
 	-rm -f src/processor/stackwalker_sparc.$(OBJEXT)
-	-rm -f src/processor/stackwalker_sparc.lo
 	-rm -f src/processor/stackwalker_x86.$(OBJEXT)
-	-rm -f src/processor/stackwalker_x86.lo
 	-rm -f src/processor/tokenize.$(OBJEXT)
-	-rm -f src/processor/tokenize.lo
 	-rm -f src/processor/udp_network.$(OBJEXT)
-	-rm -f src/processor/udp_network.lo
 	-rm -f src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.$(OBJEXT)
 	-rm -f src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.$(OBJEXT)
 	-rm -f src/testing/gtest/src/src_common_test_assembler_unittest-gtest-all.$(OBJEXT)
@@ -1924,6 +2817,12 @@
 	-rm -f src/testing/gtest/src/src_processor_binarystream_unittest-gtest-all.$(OBJEXT)
 	-rm -f src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest-all.$(OBJEXT)
 	-rm -f src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest_main.$(OBJEXT)
+	-rm -f src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.$(OBJEXT)
+	-rm -f src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.$(OBJEXT)
+	-rm -f src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.$(OBJEXT)
+	-rm -f src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.$(OBJEXT)
+	-rm -f src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.$(OBJEXT)
+	-rm -f src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.$(OBJEXT)
 	-rm -f src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT)
 	-rm -f src/testing/gtest/src/src_processor_minidump_unittest-gtest-all.$(OBJEXT)
 	-rm -f src/testing/gtest/src/src_processor_minidump_unittest-gtest_main.$(OBJEXT)
@@ -1936,6 +2835,10 @@
 	-rm -f src/testing/gtest/src/src_processor_stackwalker_arm_unittest-gtest_main.$(OBJEXT)
 	-rm -f src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest-all.$(OBJEXT)
 	-rm -f src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest_main.$(OBJEXT)
+	-rm -f src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.$(OBJEXT)
+	-rm -f src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.$(OBJEXT)
+	-rm -f src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.$(OBJEXT)
+	-rm -f src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.$(OBJEXT)
 	-rm -f src/testing/gtest/src/src_processor_synth_minidump_unittest-gtest-all.$(OBJEXT)
 	-rm -f src/testing/gtest/src/src_processor_synth_minidump_unittest-gtest_main.$(OBJEXT)
 	-rm -f src/testing/src/src_client_linux_linux_client_unittest-gmock-all.$(OBJEXT)
@@ -1943,6 +2846,10 @@
 	-rm -f src/testing/src/src_processor_basic_source_line_resolver_unittest-gmock-all.$(OBJEXT)
 	-rm -f src/testing/src/src_processor_binarystream_unittest-gmock-all.$(OBJEXT)
 	-rm -f src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.$(OBJEXT)
+	-rm -f src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.$(OBJEXT)
+	-rm -f src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT)
+	-rm -f src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.$(OBJEXT)
+	-rm -f src/testing/src/src_processor_map_serializers_unittest-gmock-all.$(OBJEXT)
 	-rm -f src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT)
 	-rm -f src/testing/src/src_processor_minidump_unittest-gmock-all.$(OBJEXT)
 	-rm -f src/testing/src/src_processor_network_source_line_resolver_server_unittest-gmock-all.$(OBJEXT)
@@ -1951,24 +2858,43 @@
 	-rm -f src/testing/src/src_processor_stackwalker_amd64_unittest-gmock-all.$(OBJEXT)
 	-rm -f src/testing/src/src_processor_stackwalker_arm_unittest-gmock-all.$(OBJEXT)
 	-rm -f src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.$(OBJEXT)
+	-rm -f src/testing/src/src_processor_static_address_map_unittest-gmock-all.$(OBJEXT)
+	-rm -f src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.$(OBJEXT)
+	-rm -f src/testing/src/src_processor_static_map_unittest-gmock-all.$(OBJEXT)
+	-rm -f src/testing/src/src_processor_static_range_map_unittest-gmock-all.$(OBJEXT)
 	-rm -f src/testing/src/src_processor_synth_minidump_unittest-gmock-all.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/ia32_implicit.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/ia32_insn.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/ia32_invariant.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/ia32_modrm.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/ia32_opcode_tables.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/ia32_operand.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/ia32_reg.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/ia32_settings.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/x86_disasm.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/x86_format.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/x86_imm.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/x86_insn.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/x86_misc.$(OBJEXT)
+	-rm -f src/third_party/libdisasm/x86_operand_list.$(OBJEXT)
 
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@src/client/$(DEPDIR)/minidump_file_writer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/crash_generation/$(DEPDIR)/crash_generation_client.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/handler/$(DEPDIR)/exception_handler.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/client/$(DEPDIR)/minidump_file_writer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/crash_generation/$(DEPDIR)/crash_generation_client.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/handler/$(DEPDIR)/exception_handler.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/handler/$(DEPDIR)/src_client_linux_linux_client_unittest-exception_handler_unittest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/linux_dumper.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/minidump_writer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/linux_dumper.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/minidump_writer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-directory_reader_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-line_reader_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-linux_dumper_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump_writer_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/convert_UTF.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/md5.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/convert_UTF.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/md5.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_client_linux_linux_client_unittest-memory_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_test_assembler_unittest-test_assembler.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_test_assembler_unittest-test_assembler_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_processor_minidump_unittest-test_assembler.Po@am__quote@
@@ -1976,33 +2902,47 @@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_processor_stackwalker_arm_unittest-test_assembler.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_processor_stackwalker_x86_unittest-test_assembler.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_processor_synth_minidump_unittest-test_assembler.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/string_conversion.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/common/linux/$(DEPDIR)/file_id.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/common/linux/$(DEPDIR)/guid_creator.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/string_conversion.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/linux/$(DEPDIR)/file_id.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/linux/$(DEPDIR)/guid_creator.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/address_map_unittest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/basic_code_modules.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/basic_source_line_resolver.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/binarystream.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/call_stack.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/cfi_frame_info.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/basic_code_modules.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/basic_source_line_resolver.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/binarystream.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/call_stack.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/cfi_frame_info.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/contained_range_map_unittest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/logging.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/minidump.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/disassembler_x86.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/exploitability.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/exploitability_win.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/fast_source_line_resolver.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/logging.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/minidump.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/minidump_dump.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/minidump_processor.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/minidump_processor.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/minidump_stackwalk.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/network_source_line_resolver.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/network_source_line_server.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/pathname_stripper.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/module_comparer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/network_source_line_resolver.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/network_source_line_server.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/pathname_stripper.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/pathname_stripper_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/postfix_evaluator_unittest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/process_state.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/process_state.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/range_map_unittest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/simple_symbol_supplier.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/simple_symbol_supplier.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/source_daemon.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/source_line_resolver_base.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-basic_code_modules.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-logging.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-pathname_stripper.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_basic_source_line_resolver_unittest-basic_source_line_resolver_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_binarystream_unittest-binarystream_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_exploitability_unittest-exploitability_unittest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_minidump_unittest-minidump_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_minidump_unittest-synth_minidump.Po@am__quote@
@@ -2012,17 +2952,21 @@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_stackwalker_amd64_unittest-stackwalker_amd64_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_stackwalker_arm_unittest-stackwalker_arm_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_stackwalker_x86_unittest-stackwalker_x86_unittest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_synth_minidump_unittest-synth_minidump.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_synth_minidump_unittest-synth_minidump_unittest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_amd64.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_arm.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_ppc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_amd64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_arm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_ppc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_selftest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_sparc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_x86.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/tokenize.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/udp_network.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_sparc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_x86.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/tokenize.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/udp_network.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest_main.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_common_test_assembler_unittest-gtest-all.Po@am__quote@
@@ -2031,6 +2975,12 @@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_binarystream_unittest-gtest-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_cfi_frame_info_unittest-gtest-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_cfi_frame_info_unittest-gtest_main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest_main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest_main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gtest-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gtest-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_unittest-gtest-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_unittest-gtest_main.Po@am__quote@
@@ -2043,6 +2993,10 @@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_stackwalker_arm_unittest-gtest_main.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_stackwalker_x86_unittest-gtest-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_stackwalker_x86_unittest-gtest_main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_static_map_unittest-gtest-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_synth_minidump_unittest-gtest-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_synth_minidump_unittest-gtest_main.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gmock-all.Po@am__quote@
@@ -2050,6 +3004,10 @@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_basic_source_line_resolver_unittest-gmock-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_binarystream_unittest-gmock-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_cfi_frame_info_unittest-gmock-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gmock-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_exploitability_unittest-gmock-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gmock-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gmock-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_minidump_unittest-gmock-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_network_source_line_resolver_server_unittest-gmock-all.Po@am__quote@
@@ -2058,7 +3016,25 @@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_stackwalker_amd64_unittest-gmock-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_stackwalker_arm_unittest-gmock-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_stackwalker_x86_unittest-gmock-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_static_map_unittest-gmock-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_synth_minidump_unittest-gmock-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/ia32_implicit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/ia32_insn.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/ia32_invariant.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/ia32_modrm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/ia32_opcode_tables.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/ia32_operand.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/ia32_reg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/ia32_settings.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/x86_disasm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/x86_format.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/x86_imm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/x86_insn.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/x86_misc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/x86_operand_list.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -2076,14 +3052,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
-.c.lo:
-@am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
 .cc.o:
 @am__fastdepCXX_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
 @am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
@@ -2100,14 +3068,6 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
-.cc.lo:
-@am__fastdepCXX_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-@am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
-
 src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.o: src/client/linux/handler/exception_handler_unittest.cc
 @am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.o -MD -MP -MF src/client/linux/handler/$(DEPDIR)/src_client_linux_linux_client_unittest-exception_handler_unittest.Tpo -c -o src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.o `test -f 'src/client/linux/handler/exception_handler_unittest.cc' || echo '$(srcdir)/'`src/client/linux/handler/exception_handler_unittest.cc
 @am__fastdepCXX_TRUE@	$(am__mv) src/client/linux/handler/$(DEPDIR)/src_client_linux_linux_client_unittest-exception_handler_unittest.Tpo src/client/linux/handler/$(DEPDIR)/src_client_linux_linux_client_unittest-exception_handler_unittest.Po
@@ -2178,6 +3138,20 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.obj `if test -f 'src/client/linux/minidump_writer/minidump_writer_unittest.cc'; then $(CYGPATH_W) 'src/client/linux/minidump_writer/minidump_writer_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/minidump_writer/minidump_writer_unittest.cc'; fi`
 
+src/common/src_client_linux_linux_client_unittest-memory_unittest.o: src/common/memory_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/common/src_client_linux_linux_client_unittest-memory_unittest.o -MD -MP -MF src/common/$(DEPDIR)/src_client_linux_linux_client_unittest-memory_unittest.Tpo -c -o src/common/src_client_linux_linux_client_unittest-memory_unittest.o `test -f 'src/common/memory_unittest.cc' || echo '$(srcdir)/'`src/common/memory_unittest.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/common/$(DEPDIR)/src_client_linux_linux_client_unittest-memory_unittest.Tpo src/common/$(DEPDIR)/src_client_linux_linux_client_unittest-memory_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/common/memory_unittest.cc' object='src/common/src_client_linux_linux_client_unittest-memory_unittest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/common/src_client_linux_linux_client_unittest-memory_unittest.o `test -f 'src/common/memory_unittest.cc' || echo '$(srcdir)/'`src/common/memory_unittest.cc
+
+src/common/src_client_linux_linux_client_unittest-memory_unittest.obj: src/common/memory_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/common/src_client_linux_linux_client_unittest-memory_unittest.obj -MD -MP -MF src/common/$(DEPDIR)/src_client_linux_linux_client_unittest-memory_unittest.Tpo -c -o src/common/src_client_linux_linux_client_unittest-memory_unittest.obj `if test -f 'src/common/memory_unittest.cc'; then $(CYGPATH_W) 'src/common/memory_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/common/memory_unittest.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/common/$(DEPDIR)/src_client_linux_linux_client_unittest-memory_unittest.Tpo src/common/$(DEPDIR)/src_client_linux_linux_client_unittest-memory_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/common/memory_unittest.cc' object='src/common/src_client_linux_linux_client_unittest-memory_unittest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/common/src_client_linux_linux_client_unittest-memory_unittest.obj `if test -f 'src/common/memory_unittest.cc'; then $(CYGPATH_W) 'src/common/memory_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/common/memory_unittest.cc'; fi`
+
 src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
 @am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
 @am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest-all.Po
@@ -2220,6 +3194,62 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_client_linux_linux_client_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
 
+src/processor/src_client_linux_linux_client_unittest-basic_code_modules.o: src/processor/basic_code_modules.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_client_linux_linux_client_unittest-basic_code_modules.o -MD -MP -MF src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-basic_code_modules.Tpo -c -o src/processor/src_client_linux_linux_client_unittest-basic_code_modules.o `test -f 'src/processor/basic_code_modules.cc' || echo '$(srcdir)/'`src/processor/basic_code_modules.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-basic_code_modules.Tpo src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-basic_code_modules.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/basic_code_modules.cc' object='src/processor/src_client_linux_linux_client_unittest-basic_code_modules.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_client_linux_linux_client_unittest-basic_code_modules.o `test -f 'src/processor/basic_code_modules.cc' || echo '$(srcdir)/'`src/processor/basic_code_modules.cc
+
+src/processor/src_client_linux_linux_client_unittest-basic_code_modules.obj: src/processor/basic_code_modules.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_client_linux_linux_client_unittest-basic_code_modules.obj -MD -MP -MF src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-basic_code_modules.Tpo -c -o src/processor/src_client_linux_linux_client_unittest-basic_code_modules.obj `if test -f 'src/processor/basic_code_modules.cc'; then $(CYGPATH_W) 'src/processor/basic_code_modules.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/basic_code_modules.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-basic_code_modules.Tpo src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-basic_code_modules.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/basic_code_modules.cc' object='src/processor/src_client_linux_linux_client_unittest-basic_code_modules.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_client_linux_linux_client_unittest-basic_code_modules.obj `if test -f 'src/processor/basic_code_modules.cc'; then $(CYGPATH_W) 'src/processor/basic_code_modules.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/basic_code_modules.cc'; fi`
+
+src/processor/src_client_linux_linux_client_unittest-logging.o: src/processor/logging.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_client_linux_linux_client_unittest-logging.o -MD -MP -MF src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-logging.Tpo -c -o src/processor/src_client_linux_linux_client_unittest-logging.o `test -f 'src/processor/logging.cc' || echo '$(srcdir)/'`src/processor/logging.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-logging.Tpo src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-logging.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/logging.cc' object='src/processor/src_client_linux_linux_client_unittest-logging.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_client_linux_linux_client_unittest-logging.o `test -f 'src/processor/logging.cc' || echo '$(srcdir)/'`src/processor/logging.cc
+
+src/processor/src_client_linux_linux_client_unittest-logging.obj: src/processor/logging.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_client_linux_linux_client_unittest-logging.obj -MD -MP -MF src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-logging.Tpo -c -o src/processor/src_client_linux_linux_client_unittest-logging.obj `if test -f 'src/processor/logging.cc'; then $(CYGPATH_W) 'src/processor/logging.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/logging.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-logging.Tpo src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-logging.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/logging.cc' object='src/processor/src_client_linux_linux_client_unittest-logging.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_client_linux_linux_client_unittest-logging.obj `if test -f 'src/processor/logging.cc'; then $(CYGPATH_W) 'src/processor/logging.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/logging.cc'; fi`
+
+src/processor/src_client_linux_linux_client_unittest-minidump.o: src/processor/minidump.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_client_linux_linux_client_unittest-minidump.o -MD -MP -MF src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump.Tpo -c -o src/processor/src_client_linux_linux_client_unittest-minidump.o `test -f 'src/processor/minidump.cc' || echo '$(srcdir)/'`src/processor/minidump.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump.Tpo src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/minidump.cc' object='src/processor/src_client_linux_linux_client_unittest-minidump.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_client_linux_linux_client_unittest-minidump.o `test -f 'src/processor/minidump.cc' || echo '$(srcdir)/'`src/processor/minidump.cc
+
+src/processor/src_client_linux_linux_client_unittest-minidump.obj: src/processor/minidump.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_client_linux_linux_client_unittest-minidump.obj -MD -MP -MF src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump.Tpo -c -o src/processor/src_client_linux_linux_client_unittest-minidump.obj `if test -f 'src/processor/minidump.cc'; then $(CYGPATH_W) 'src/processor/minidump.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/minidump.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump.Tpo src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/minidump.cc' object='src/processor/src_client_linux_linux_client_unittest-minidump.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_client_linux_linux_client_unittest-minidump.obj `if test -f 'src/processor/minidump.cc'; then $(CYGPATH_W) 'src/processor/minidump.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/minidump.cc'; fi`
+
+src/processor/src_client_linux_linux_client_unittest-pathname_stripper.o: src/processor/pathname_stripper.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_client_linux_linux_client_unittest-pathname_stripper.o -MD -MP -MF src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-pathname_stripper.Tpo -c -o src/processor/src_client_linux_linux_client_unittest-pathname_stripper.o `test -f 'src/processor/pathname_stripper.cc' || echo '$(srcdir)/'`src/processor/pathname_stripper.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-pathname_stripper.Tpo src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-pathname_stripper.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/pathname_stripper.cc' object='src/processor/src_client_linux_linux_client_unittest-pathname_stripper.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_client_linux_linux_client_unittest-pathname_stripper.o `test -f 'src/processor/pathname_stripper.cc' || echo '$(srcdir)/'`src/processor/pathname_stripper.cc
+
+src/processor/src_client_linux_linux_client_unittest-pathname_stripper.obj: src/processor/pathname_stripper.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_client_linux_linux_client_unittest-pathname_stripper.obj -MD -MP -MF src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-pathname_stripper.Tpo -c -o src/processor/src_client_linux_linux_client_unittest-pathname_stripper.obj `if test -f 'src/processor/pathname_stripper.cc'; then $(CYGPATH_W) 'src/processor/pathname_stripper.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/pathname_stripper.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-pathname_stripper.Tpo src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest-pathname_stripper.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/pathname_stripper.cc' object='src/processor/src_client_linux_linux_client_unittest-pathname_stripper.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_client_linux_linux_client_unittest-pathname_stripper.obj `if test -f 'src/processor/pathname_stripper.cc'; then $(CYGPATH_W) 'src/processor/pathname_stripper.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/pathname_stripper.cc'; fi`
+
 src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.o: src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
 @am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(src_client_linux_linux_dumper_unittest_helper_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.o -MD -MP -MF src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.Tpo -c -o src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.o `test -f 'src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc' || echo '$(srcdir)/'`src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
 @am__fastdepCXX_TRUE@	$(am__mv) src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.Tpo src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.Po
@@ -2444,6 +3474,202 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_cfi_frame_info_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
 
+src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.o: src/processor/disassembler_x86_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.Tpo -c -o src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.o `test -f 'src/processor/disassembler_x86_unittest.cc' || echo '$(srcdir)/'`src/processor/disassembler_x86_unittest.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.Tpo src/processor/$(DEPDIR)/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/disassembler_x86_unittest.cc' object='src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.o `test -f 'src/processor/disassembler_x86_unittest.cc' || echo '$(srcdir)/'`src/processor/disassembler_x86_unittest.cc
+
+src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.obj: src/processor/disassembler_x86_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.obj -MD -MP -MF src/processor/$(DEPDIR)/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.Tpo -c -o src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.obj `if test -f 'src/processor/disassembler_x86_unittest.cc'; then $(CYGPATH_W) 'src/processor/disassembler_x86_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/disassembler_x86_unittest.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.Tpo src/processor/$(DEPDIR)/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/disassembler_x86_unittest.cc' object='src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.obj `if test -f 'src/processor/disassembler_x86_unittest.cc'; then $(CYGPATH_W) 'src/processor/disassembler_x86_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/disassembler_x86_unittest.cc'; fi`
+
+src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+
+src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+
+src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.o: src/testing/gtest/src/gtest_main.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest_main.Tpo -c -o src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.o `test -f 'src/testing/gtest/src/gtest_main.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest_main.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest_main.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest_main.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest_main.cc' object='src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.o `test -f 'src/testing/gtest/src/gtest_main.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest_main.cc
+
+src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.obj: src/testing/gtest/src/gtest_main.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest_main.Tpo -c -o src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.obj `if test -f 'src/testing/gtest/src/gtest_main.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest_main.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest_main.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest_main.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest_main.cc' object='src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.obj `if test -f 'src/testing/gtest/src/gtest_main.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest_main.cc'; fi`
+
+src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.o: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+
+src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_disassembler_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+
+src/processor/src_processor_exploitability_unittest-exploitability_unittest.o: src/processor/exploitability_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_exploitability_unittest-exploitability_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_exploitability_unittest-exploitability_unittest.Tpo -c -o src/processor/src_processor_exploitability_unittest-exploitability_unittest.o `test -f 'src/processor/exploitability_unittest.cc' || echo '$(srcdir)/'`src/processor/exploitability_unittest.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_exploitability_unittest-exploitability_unittest.Tpo src/processor/$(DEPDIR)/src_processor_exploitability_unittest-exploitability_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/exploitability_unittest.cc' object='src/processor/src_processor_exploitability_unittest-exploitability_unittest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_exploitability_unittest-exploitability_unittest.o `test -f 'src/processor/exploitability_unittest.cc' || echo '$(srcdir)/'`src/processor/exploitability_unittest.cc
+
+src/processor/src_processor_exploitability_unittest-exploitability_unittest.obj: src/processor/exploitability_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_exploitability_unittest-exploitability_unittest.obj -MD -MP -MF src/processor/$(DEPDIR)/src_processor_exploitability_unittest-exploitability_unittest.Tpo -c -o src/processor/src_processor_exploitability_unittest-exploitability_unittest.obj `if test -f 'src/processor/exploitability_unittest.cc'; then $(CYGPATH_W) 'src/processor/exploitability_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/exploitability_unittest.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_exploitability_unittest-exploitability_unittest.Tpo src/processor/$(DEPDIR)/src_processor_exploitability_unittest-exploitability_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/exploitability_unittest.cc' object='src/processor/src_processor_exploitability_unittest-exploitability_unittest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_exploitability_unittest-exploitability_unittest.obj `if test -f 'src/processor/exploitability_unittest.cc'; then $(CYGPATH_W) 'src/processor/exploitability_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/exploitability_unittest.cc'; fi`
+
+src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+
+src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+
+src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.o: src/testing/gtest/src/gtest_main.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest_main.Tpo -c -o src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.o `test -f 'src/testing/gtest/src/gtest_main.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest_main.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest_main.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest_main.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest_main.cc' object='src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.o `test -f 'src/testing/gtest/src/gtest_main.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest_main.cc
+
+src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.obj: src/testing/gtest/src/gtest_main.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest_main.Tpo -c -o src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.obj `if test -f 'src/testing/gtest/src/gtest_main.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest_main.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest_main.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest_main.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest_main.cc' object='src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.obj `if test -f 'src/testing/gtest/src/gtest_main.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest_main.cc'; fi`
+
+src/testing/src/src_processor_exploitability_unittest-gmock-all.o: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_exploitability_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_exploitability_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_exploitability_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_exploitability_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_exploitability_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_exploitability_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_exploitability_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+
+src/testing/src/src_processor_exploitability_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_exploitability_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_exploitability_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_exploitability_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_exploitability_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_exploitability_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_exploitability_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_exploitability_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+
+src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.o: src/processor/fast_source_line_resolver_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_fast_source_line_resolver_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.Tpo -c -o src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.o `test -f 'src/processor/fast_source_line_resolver_unittest.cc' || echo '$(srcdir)/'`src/processor/fast_source_line_resolver_unittest.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.Tpo src/processor/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/fast_source_line_resolver_unittest.cc' object='src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_fast_source_line_resolver_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.o `test -f 'src/processor/fast_source_line_resolver_unittest.cc' || echo '$(srcdir)/'`src/processor/fast_source_line_resolver_unittest.cc
+
+src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.obj: src/processor/fast_source_line_resolver_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_fast_source_line_resolver_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.obj -MD -MP -MF src/processor/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.Tpo -c -o src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.obj `if test -f 'src/processor/fast_source_line_resolver_unittest.cc'; then $(CYGPATH_W) 'src/processor/fast_source_line_resolver_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/fast_source_line_resolver_unittest.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.Tpo src/processor/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/fast_source_line_resolver_unittest.cc' object='src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_fast_source_line_resolver_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.obj `if test -f 'src/processor/fast_source_line_resolver_unittest.cc'; then $(CYGPATH_W) 'src/processor/fast_source_line_resolver_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/fast_source_line_resolver_unittest.cc'; fi`
+
+src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_fast_source_line_resolver_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_fast_source_line_resolver_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+
+src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_fast_source_line_resolver_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_fast_source_line_resolver_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+
+src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.o: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_fast_source_line_resolver_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_fast_source_line_resolver_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+
+src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_fast_source_line_resolver_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_fast_source_line_resolver_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_fast_source_line_resolver_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+
+src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.o: src/processor/map_serializers_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Tpo -c -o src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.o `test -f 'src/processor/map_serializers_unittest.cc' || echo '$(srcdir)/'`src/processor/map_serializers_unittest.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Tpo src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/map_serializers_unittest.cc' object='src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.o `test -f 'src/processor/map_serializers_unittest.cc' || echo '$(srcdir)/'`src/processor/map_serializers_unittest.cc
+
+src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.obj: src/processor/map_serializers_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.obj -MD -MP -MF src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Tpo -c -o src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.obj `if test -f 'src/processor/map_serializers_unittest.cc'; then $(CYGPATH_W) 'src/processor/map_serializers_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/map_serializers_unittest.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Tpo src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/map_serializers_unittest.cc' object='src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.obj `if test -f 'src/processor/map_serializers_unittest.cc'; then $(CYGPATH_W) 'src/processor/map_serializers_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/map_serializers_unittest.cc'; fi`
+
+src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+
+src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+
+src/testing/src/src_processor_map_serializers_unittest-gmock-all.o: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_map_serializers_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_map_serializers_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_map_serializers_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_map_serializers_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+
+src/testing/src/src_processor_map_serializers_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_map_serializers_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_map_serializers_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_map_serializers_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_map_serializers_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+
 src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o: src/processor/minidump_processor_unittest.cc
 @am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Tpo -c -o src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o `test -f 'src/processor/minidump_processor_unittest.cc' || echo '$(srcdir)/'`src/processor/minidump_processor_unittest.cc
 @am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Tpo src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Po
@@ -2906,6 +4132,174 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_stackwalker_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
 
+src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.o: src/processor/static_address_map_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Tpo -c -o src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.o `test -f 'src/processor/static_address_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_address_map_unittest.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/static_address_map_unittest.cc' object='src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.o `test -f 'src/processor/static_address_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_address_map_unittest.cc
+
+src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.obj: src/processor/static_address_map_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.obj -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Tpo -c -o src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.obj `if test -f 'src/processor/static_address_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_address_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_address_map_unittest.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/static_address_map_unittest.cc' object='src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.obj `if test -f 'src/processor/static_address_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_address_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_address_map_unittest.cc'; fi`
+
+src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+
+src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+
+src/testing/src/src_processor_static_address_map_unittest-gmock-all.o: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_address_map_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_address_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_address_map_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_address_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+
+src/testing/src/src_processor_static_address_map_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_address_map_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_address_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_address_map_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_address_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+
+src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.o: src/processor/static_contained_range_map_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Tpo -c -o src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.o `test -f 'src/processor/static_contained_range_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_contained_range_map_unittest.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/static_contained_range_map_unittest.cc' object='src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.o `test -f 'src/processor/static_contained_range_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_contained_range_map_unittest.cc
+
+src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.obj: src/processor/static_contained_range_map_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.obj -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Tpo -c -o src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.obj `if test -f 'src/processor/static_contained_range_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_contained_range_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_contained_range_map_unittest.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/static_contained_range_map_unittest.cc' object='src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.obj `if test -f 'src/processor/static_contained_range_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_contained_range_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_contained_range_map_unittest.cc'; fi`
+
+src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+
+src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+
+src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.o: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+
+src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+
+src/processor/src_processor_static_map_unittest-static_map_unittest.o: src/processor/static_map_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_map_unittest-static_map_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Tpo -c -o src/processor/src_processor_static_map_unittest-static_map_unittest.o `test -f 'src/processor/static_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_map_unittest.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/static_map_unittest.cc' object='src/processor/src_processor_static_map_unittest-static_map_unittest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_map_unittest-static_map_unittest.o `test -f 'src/processor/static_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_map_unittest.cc
+
+src/processor/src_processor_static_map_unittest-static_map_unittest.obj: src/processor/static_map_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_map_unittest-static_map_unittest.obj -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Tpo -c -o src/processor/src_processor_static_map_unittest-static_map_unittest.obj `if test -f 'src/processor/static_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_map_unittest.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/static_map_unittest.cc' object='src/processor/src_processor_static_map_unittest-static_map_unittest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_map_unittest-static_map_unittest.obj `if test -f 'src/processor/static_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_map_unittest.cc'; fi`
+
+src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_map_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+
+src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_map_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+
+src/testing/src/src_processor_static_map_unittest-gmock-all.o: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_map_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_map_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_map_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+
+src/testing/src/src_processor_static_map_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_map_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_map_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_map_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+
+src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.o: src/processor/static_range_map_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Tpo -c -o src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.o `test -f 'src/processor/static_range_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_range_map_unittest.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/static_range_map_unittest.cc' object='src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.o `test -f 'src/processor/static_range_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_range_map_unittest.cc
+
+src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.obj: src/processor/static_range_map_unittest.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.obj -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Tpo -c -o src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.obj `if test -f 'src/processor/static_range_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_range_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_range_map_unittest.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/static_range_map_unittest.cc' object='src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.obj `if test -f 'src/processor/static_range_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_range_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_range_map_unittest.cc'; fi`
+
+src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
+
+src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
+
+src/testing/src/src_processor_static_range_map_unittest-gmock-all.o: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_range_map_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_range_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_range_map_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_range_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+
+src/testing/src/src_processor_static_range_map_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_range_map_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_range_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_range_map_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_range_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
+
 src/common/src_processor_synth_minidump_unittest-test_assembler.o: src/common/test_assembler.cc
 @am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_synth_minidump_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/common/src_processor_synth_minidump_unittest-test_assembler.o -MD -MP -MF src/common/$(DEPDIR)/src_processor_synth_minidump_unittest-test_assembler.Tpo -c -o src/common/src_processor_synth_minidump_unittest-test_assembler.o `test -f 'src/common/test_assembler.cc' || echo '$(srcdir)/'`src/common/test_assembler.cc
 @am__fastdepCXX_TRUE@	$(am__mv) src/common/$(DEPDIR)/src_processor_synth_minidump_unittest-test_assembler.Tpo src/common/$(DEPDIR)/src_processor_synth_minidump_unittest-test_assembler.Po
@@ -2989,24 +4383,6 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/synth_minidump.cc' object='src/processor/src_processor_synth_minidump_unittest-synth_minidump.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_synth_minidump_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_synth_minidump_unittest-synth_minidump.obj `if test -f 'src/processor/synth_minidump.cc'; then $(CYGPATH_W) 'src/processor/synth_minidump.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/synth_minidump.cc'; fi`
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-	-rm -rf src/.libs src/_libs
-	-rm -rf src/client/.libs src/client/_libs
-	-rm -rf src/client/linux/.libs src/client/linux/_libs
-	-rm -rf src/client/linux/crash_generation/.libs src/client/linux/crash_generation/_libs
-	-rm -rf src/client/linux/handler/.libs src/client/linux/handler/_libs
-	-rm -rf src/client/linux/minidump_writer/.libs src/client/linux/minidump_writer/_libs
-	-rm -rf src/common/.libs src/common/_libs
-	-rm -rf src/common/linux/.libs src/common/linux/_libs
-	-rm -rf src/processor/.libs src/processor/_libs
-
-distclean-libtool:
-	-rm -f libtool config.lt
 install-dist_docDATA: $(dist_doc_DATA)
 	@$(NORMAL_INSTALL)
 	test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
@@ -3323,9 +4699,7 @@
 	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS)
 	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
 check: check-am
-all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA)
-install-binPROGRAMS: install-libLTLIBRARIES
-
+all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA)
 installdirs:
 	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(docdir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
@@ -3371,6 +4745,8 @@
 	-rm -f src/testing/gtest/src/$(am__dirstamp)
 	-rm -f src/testing/src/$(DEPDIR)/$(am__dirstamp)
 	-rm -f src/testing/src/$(am__dirstamp)
+	-rm -f src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+	-rm -f src/third_party/libdisasm/$(am__dirstamp)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -3378,15 +4754,15 @@
 clean: clean-am
 
 clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
-	clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \
+	clean-libLIBRARIES clean-noinstLIBRARIES clean-noinstPROGRAMS \
 	mostlyclean-am
 
 distclean: distclean-am
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf src/client/$(DEPDIR) src/client/linux/crash_generation/$(DEPDIR) src/client/linux/handler/$(DEPDIR) src/client/linux/minidump_writer/$(DEPDIR) src/common/$(DEPDIR) src/common/linux/$(DEPDIR) src/processor/$(DEPDIR) src/testing/gtest/src/$(DEPDIR) src/testing/src/$(DEPDIR)
+	-rm -rf src/client/$(DEPDIR) src/client/linux/crash_generation/$(DEPDIR) src/client/linux/handler/$(DEPDIR) src/client/linux/minidump_writer/$(DEPDIR) src/common/$(DEPDIR) src/common/linux/$(DEPDIR) src/processor/$(DEPDIR) src/testing/gtest/src/$(DEPDIR) src/testing/src/$(DEPDIR) src/third_party/libdisasm/$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-hdr distclean-libtool distclean-tags
+	distclean-hdr distclean-tags
 
 dvi: dvi-am
 
@@ -3406,7 +4782,7 @@
 
 install-dvi-am:
 
-install-exec-am: install-binPROGRAMS install-libLTLIBRARIES
+install-exec-am: install-binPROGRAMS install-libLIBRARIES
 
 install-html: install-html-am
 
@@ -3431,14 +4807,13 @@
 maintainer-clean: maintainer-clean-am
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -rf src/client/$(DEPDIR) src/client/linux/crash_generation/$(DEPDIR) src/client/linux/handler/$(DEPDIR) src/client/linux/minidump_writer/$(DEPDIR) src/common/$(DEPDIR) src/common/linux/$(DEPDIR) src/processor/$(DEPDIR) src/testing/gtest/src/$(DEPDIR) src/testing/src/$(DEPDIR)
+	-rm -rf src/client/$(DEPDIR) src/client/linux/crash_generation/$(DEPDIR) src/client/linux/handler/$(DEPDIR) src/client/linux/minidump_writer/$(DEPDIR) src/common/$(DEPDIR) src/common/linux/$(DEPDIR) src/processor/$(DEPDIR) src/testing/gtest/src/$(DEPDIR) src/testing/src/$(DEPDIR) src/third_party/libdisasm/$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
 
 pdf: pdf-am
 
@@ -3449,34 +4824,30 @@
 ps-am:
 
 uninstall-am: uninstall-binPROGRAMS uninstall-dist_docDATA \
-	uninstall-libLTLIBRARIES
+	uninstall-libLIBRARIES
 
 .MAKE: check-am install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \
 	clean clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
-	clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS ctags \
-	dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \
+	clean-libLIBRARIES clean-noinstLIBRARIES clean-noinstPROGRAMS \
+	ctags dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \
 	dist-tarZ dist-xz dist-zip distcheck distclean \
 	distclean-compile distclean-generic distclean-hdr \
-	distclean-libtool distclean-tags distcleancheck distdir \
-	distuninstallcheck dvi dvi-am html html-am info info-am \
-	install install-am install-binPROGRAMS install-data \
-	install-data-am install-dist_docDATA install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am \
-	install-libLTLIBRARIES install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
+	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am \
+	install-dist_docDATA install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-libLIBRARIES install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
 	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-binPROGRAMS \
-	uninstall-dist_docDATA uninstall-libLTLIBRARIES
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-binPROGRAMS uninstall-dist_docDATA \
+	uninstall-libLIBRARIES
 
 
-libtool: $(LIBTOOL_DEPS)
-	$(SHELL) ./config.status --recheck
-
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/README b/README
index 93b8df0..3bccd4b 100644
--- a/README
+++ b/README
@@ -1,2 +1,43 @@
 Breakpad is a set of client and server components which implement a
 crash-reporting system.
+
+
+-----
+Getting started in 32-bit mode (from trunk)
+Configure: CXXFLAGS=-m32 CFLAGS=-m32 CPPFLAGS=-m32 ./configure
+    Build: make
+     Test: make check
+  Install: make install
+
+If you need to reconfigure your build be sure to run "make distclean" first.
+
+
+-----
+To request change review:
+0. Get access to a read-write copy of source.
+   Owners at http://code.google.com/p/google-breakpad/ are able to grant
+   this access.
+
+1. Check out a read-write copy of source using instructions at
+   http://code.google.com/p/google-breakpad/source/checkout
+
+2. Make changes. Build and test your changes.
+   For core code like processor use methods above.
+   For linux/mac/windows, there are test targets in each project file.
+
+3. Download http://codereview.appspot.com/static/upload.py
+
+4. Run upload.py from the 'src' directory:
+   upload.py --server=breakpad.appspot.com
+
+   You will be prompted for credential and a description.
+
+5. At http://breakpad.appspot.com you'll find your issue listed; click on it,
+   and select Publish+Mail, and enter in the code reviewer and CC
+   google-breakpad-dev@googlegroups.com
+
+6. When applying code review feedback, specify the '-i' option when running
+   upload.py again and pass the issue number so it updates the existing issue,
+   rather than creating a new one.
+   Be sure to rerun upload.py from the same directory as you did for previous
+   uploads to allow for proper diff calculations.
diff --git a/aclocal.m4 b/aclocal.m4
index 19c2e88..47616f2 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -19,7972 +19,6 @@
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
 
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-#
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-m4_define([_LT_COPYING], [dnl
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-#   This file is part of GNU Libtool.
-#
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-])
-
-# serial 56 LT_INIT
-
-
-# LT_PREREQ(VERSION)
-# ------------------
-# Complain and exit if this libtool version is less that VERSION.
-m4_defun([LT_PREREQ],
-[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
-       [m4_default([$3],
-		   [m4_fatal([Libtool version $1 or higher is required],
-		             63)])],
-       [$2])])
-
-
-# _LT_CHECK_BUILDDIR
-# ------------------
-# Complain if the absolute build directory name contains unusual characters
-m4_defun([_LT_CHECK_BUILDDIR],
-[case `pwd` in
-  *\ * | *\	*)
-    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
-esac
-])
-
-
-# LT_INIT([OPTIONS])
-# ------------------
-AC_DEFUN([LT_INIT],
-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
-AC_BEFORE([$0], [LT_LANG])dnl
-AC_BEFORE([$0], [LT_OUTPUT])dnl
-AC_BEFORE([$0], [LTDL_INIT])dnl
-m4_require([_LT_CHECK_BUILDDIR])dnl
-
-dnl Autoconf doesn't catch unexpanded LT_ macros by default:
-m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
-m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
-dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
-dnl unless we require an AC_DEFUNed macro:
-AC_REQUIRE([LTOPTIONS_VERSION])dnl
-AC_REQUIRE([LTSUGAR_VERSION])dnl
-AC_REQUIRE([LTVERSION_VERSION])dnl
-AC_REQUIRE([LTOBSOLETE_VERSION])dnl
-m4_require([_LT_PROG_LTMAIN])dnl
-
-dnl Parse OPTIONS
-_LT_SET_OPTIONS([$0], [$1])
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-_LT_SETUP
-
-# Only expand once:
-m4_define([LT_INIT])
-])# LT_INIT
-
-# Old names:
-AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
-AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
-dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
-m4_defun([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
-  case $cc_temp in
-    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
-    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_FILEUTILS_DEFAULTS
-# ----------------------
-# It is okay to use these file commands and assume they have been set
-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
-m4_defun([_LT_FILEUTILS_DEFAULTS],
-[: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-])# _LT_FILEUTILS_DEFAULTS
-
-
-# _LT_SETUP
-# ---------
-m4_defun([_LT_SETUP],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-_LT_DECL([], [host_alias], [0], [The host system])dnl
-_LT_DECL([], [host], [0])dnl
-_LT_DECL([], [host_os], [0])dnl
-dnl
-_LT_DECL([], [build_alias], [0], [The build system])dnl
-_LT_DECL([], [build], [0])dnl
-_LT_DECL([], [build_os], [0])dnl
-dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-dnl
-AC_REQUIRE([AC_PROG_LN_S])dnl
-test -z "$LN_S" && LN_S="ln -s"
-_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
-dnl
-AC_REQUIRE([LT_CMD_MAX_LEN])dnl
-_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
-_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
-dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_CHECK_SHELL_FEATURES])dnl
-m4_require([_LT_CMD_RELOAD])dnl
-m4_require([_LT_CHECK_MAGIC_METHOD])dnl
-m4_require([_LT_CMD_OLD_ARCHIVE])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-
-_LT_CONFIG_LIBTOOL_INIT([
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-])
-if test -n "${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-_LT_CHECK_OBJDIR
-
-m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    _LT_PATH_MAGIC
-  fi
-  ;;
-esac
-
-# Use C for the default configuration in the libtool script
-LT_SUPPORTED_TAG([CC])
-_LT_LANG_C_CONFIG
-_LT_LANG_DEFAULT_CONFIG
-_LT_CONFIG_COMMANDS
-])# _LT_SETUP
-
-
-# _LT_PROG_LTMAIN
-# ---------------
-# Note that this code is called both from `configure', and `config.status'
-# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
-# `config.status' has no value for ac_aux_dir unless we are using Automake,
-# so we pass a copy along to make sure it has a sensible value anyway.
-m4_defun([_LT_PROG_LTMAIN],
-[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
-_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
-ltmain="$ac_aux_dir/ltmain.sh"
-])# _LT_PROG_LTMAIN
-
-
-
-# So that we can recreate a full libtool script including additional
-# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
-# in macros and then make a single call at the end using the `libtool'
-# label.
-
-
-# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
-# ----------------------------------------
-# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL_INIT],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_INIT])
-
-
-# _LT_CONFIG_LIBTOOL([COMMANDS])
-# ------------------------------
-# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
-
-
-# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
-# -----------------------------------------------------
-m4_defun([_LT_CONFIG_SAVE_COMMANDS],
-[_LT_CONFIG_LIBTOOL([$1])
-_LT_CONFIG_LIBTOOL_INIT([$2])
-])
-
-
-# _LT_FORMAT_COMMENT([COMMENT])
-# -----------------------------
-# Add leading comment marks to the start of each line, and a trailing
-# full-stop to the whole comment if one is not present already.
-m4_define([_LT_FORMAT_COMMENT],
-[m4_ifval([$1], [
-m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
-              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
-)])
-
-
-
-
-
-# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
-# -------------------------------------------------------------------
-# CONFIGNAME is the name given to the value in the libtool script.
-# VARNAME is the (base) name used in the configure script.
-# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
-# VARNAME.  Any other value will be used directly.
-m4_define([_LT_DECL],
-[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
-    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
-	[m4_ifval([$1], [$1], [$2])])
-    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
-    m4_ifval([$4],
-	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
-    lt_dict_add_subkey([lt_decl_dict], [$2],
-	[tagged?], [m4_ifval([$5], [yes], [no])])])
-])
-
-
-# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
-# --------------------------------------------------------
-m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
-
-
-# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_tag_varnames],
-[_lt_decl_filter([tagged?], [yes], $@)])
-
-
-# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
-# ---------------------------------------------------------
-m4_define([_lt_decl_filter],
-[m4_case([$#],
-  [0], [m4_fatal([$0: too few arguments: $#])],
-  [1], [m4_fatal([$0: too few arguments: $#: $1])],
-  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
-  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
-  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
-])
-
-
-# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
-# --------------------------------------------------
-m4_define([lt_decl_quote_varnames],
-[_lt_decl_filter([value], [1], $@)])
-
-
-# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_dquote_varnames],
-[_lt_decl_filter([value], [2], $@)])
-
-
-# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_varnames_tagged],
-[m4_assert([$# <= 2])dnl
-_$0(m4_quote(m4_default([$1], [[, ]])),
-    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
-    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
-m4_define([_lt_decl_varnames_tagged],
-[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
-
-
-# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_all_varnames],
-[_$0(m4_quote(m4_default([$1], [[, ]])),
-     m4_if([$2], [],
-	   m4_quote(lt_decl_varnames),
-	m4_quote(m4_shift($@))))[]dnl
-])
-m4_define([_lt_decl_all_varnames],
-[lt_join($@, lt_decl_varnames_tagged([$1],
-			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
-])
-
-
-# _LT_CONFIG_STATUS_DECLARE([VARNAME])
-# ------------------------------------
-# Quote a variable value, and forward it to `config.status' so that its
-# declaration there will have the same value as in `configure'.  VARNAME
-# must have a single quote delimited value for this to work.
-m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
-
-
-# _LT_CONFIG_STATUS_DECLARATIONS
-# ------------------------------
-# We delimit libtool config variables with single quotes, so when
-# we write them to config.status, we have to be sure to quote all
-# embedded single quotes properly.  In configure, this macro expands
-# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
-#
-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
-m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
-    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAGS
-# ----------------
-# Output comment and list of tags supported by the script
-m4_defun([_LT_LIBTOOL_TAGS],
-[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
-available_tags="_LT_TAGS"dnl
-])
-
-
-# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
-# -----------------------------------
-# Extract the dictionary values for VARNAME (optionally with TAG) and
-# expand to a commented shell variable setting:
-#
-#    # Some comment about what VAR is for.
-#    visible_name=$lt_internal_name
-m4_define([_LT_LIBTOOL_DECLARE],
-[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
-					   [description])))[]dnl
-m4_pushdef([_libtool_name],
-    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
-m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
-    [0], [_libtool_name=[$]$1],
-    [1], [_libtool_name=$lt_[]$1],
-    [2], [_libtool_name=$lt_[]$1],
-    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
-m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
-])
-
-
-# _LT_LIBTOOL_CONFIG_VARS
-# -----------------------
-# Produce commented declarations of non-tagged libtool config variables
-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
-# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
-# section) are produced by _LT_LIBTOOL_TAG_VARS.
-m4_defun([_LT_LIBTOOL_CONFIG_VARS],
-[m4_foreach([_lt_var],
-    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAG_VARS(TAG)
-# -------------------------
-m4_define([_LT_LIBTOOL_TAG_VARS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
-
-
-# _LT_TAGVAR(VARNAME, [TAGNAME])
-# ------------------------------
-m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
-
-
-# _LT_CONFIG_COMMANDS
-# -------------------
-# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
-# variables for single and double quote escaping we saved from calls
-# to _LT_DECL, we can put quote escaped variables declarations
-# into `config.status', and then the shell code to quote escape them in
-# for loops in `config.status'.  Finally, any additional code accumulated
-# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
-m4_defun([_LT_CONFIG_COMMANDS],
-[AC_PROVIDE_IFELSE([LT_OUTPUT],
-	dnl If the libtool generation code has been placed in $CONFIG_LT,
-	dnl instead of duplicating it all over again into config.status,
-	dnl then we will have config.status run $CONFIG_LT later, so it
-	dnl needs to know what name is stored there:
-        [AC_CONFIG_COMMANDS([libtool],
-            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
-    dnl If the libtool generation code is destined for config.status,
-    dnl expand the accumulated commands and init code now:
-    [AC_CONFIG_COMMANDS([libtool],
-        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
-])#_LT_CONFIG_COMMANDS
-
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
-[
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-_LT_CONFIG_STATUS_DECLARATIONS
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# Quote evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_quote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Double-quote double-evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_dquote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
-  ;;
-esac
-
-_LT_OUTPUT_LIBTOOL_INIT
-])
-
-
-# LT_OUTPUT
-# ---------
-# This macro allows early generation of the libtool script (before
-# AC_OUTPUT is called), incase it is used in configure for compilation
-# tests.
-AC_DEFUN([LT_OUTPUT],
-[: ${CONFIG_LT=./config.lt}
-AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
-exec AS_MESSAGE_LOG_FD>>config.log
-{
-  echo
-  AS_BOX([Running $as_me.])
-} >&AS_MESSAGE_LOG_FD
-
-lt_cl_help="\
-\`$as_me' creates a local libtool stub from the current configuration,
-for use in further configure time tests before the real libtool is
-generated.
-
-Usage: $[0] [[OPTIONS]]
-
-  -h, --help      print this help, then exit
-  -V, --version   print version number, then exit
-  -q, --quiet     do not print progress messages
-  -d, --debug     don't remove temporary files
-
-Report bugs to <bug-libtool@gnu.org>."
-
-lt_cl_version="\
-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
-configured by $[0], generated by m4_PACKAGE_STRING.
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.lt script is free software; the Free Software Foundation
-gives unlimited permision to copy, distribute and modify it."
-
-while test $[#] != 0
-do
-  case $[1] in
-    --version | --v* | -V )
-      echo "$lt_cl_version"; exit 0 ;;
-    --help | --h* | -h )
-      echo "$lt_cl_help"; exit 0 ;;
-    --debug | --d* | -d )
-      debug=: ;;
-    --quiet | --q* | --silent | --s* | -q )
-      lt_cl_silent=: ;;
-
-    -*) AC_MSG_ERROR([unrecognized option: $[1]
-Try \`$[0] --help' for more information.]) ;;
-
-    *) AC_MSG_ERROR([unrecognized argument: $[1]
-Try \`$[0] --help' for more information.]) ;;
-  esac
-  shift
-done
-
-if $lt_cl_silent; then
-  exec AS_MESSAGE_FD>/dev/null
-fi
-_LTEOF
-
-cat >>"$CONFIG_LT" <<_LTEOF
-_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AC_MSG_NOTICE([creating $ofile])
-_LT_OUTPUT_LIBTOOL_COMMANDS
-AS_EXIT(0)
-_LTEOF
-chmod +x "$CONFIG_LT"
-
-# configure is writing to config.log, but config.lt does its own redirection,
-# appending to config.log, which fails on DOS, as config.log is still kept
-# open by configure.  Here we exec the FD to /dev/null, effectively closing
-# config.log, so it can be properly (re)opened and appended to by config.lt.
-if test "$no_create" != yes; then
-  lt_cl_success=:
-  test "$silent" = yes &&
-    lt_config_lt_args="$lt_config_lt_args --quiet"
-  exec AS_MESSAGE_LOG_FD>/dev/null
-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
-  exec AS_MESSAGE_LOG_FD>>config.log
-  $lt_cl_success || AS_EXIT(1)
-fi
-])# LT_OUTPUT
-
-
-# _LT_CONFIG(TAG)
-# ---------------
-# If TAG is the built-in tag, create an initial libtool script with a
-# default configuration from the untagged config vars.  Otherwise add code
-# to config.status for appending the configuration named by TAG from the
-# matching tagged config vars.
-m4_defun([_LT_CONFIG],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_CONFIG_SAVE_COMMANDS([
-  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
-  m4_if(_LT_TAG, [C], [
-    # See if we are running on zsh, and set the options which allow our
-    # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
-      setopt NO_GLOB_SUBST
-    fi
-
-    cfgfile="${ofile}T"
-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
-    $RM "$cfgfile"
-
-    cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-_LT_COPYING
-_LT_LIBTOOL_TAGS
-
-# ### BEGIN LIBTOOL CONFIG
-_LT_LIBTOOL_CONFIG_VARS
-_LT_LIBTOOL_TAG_VARS
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
-  case $host_os in
-  aix3*)
-    cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-_LT_EOF
-    ;;
-  esac
-
-  _LT_PROG_LTMAIN
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  _LT_PROG_XSI_SHELLFNS
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-],
-[cat <<_LT_EOF >> "$ofile"
-
-dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
-dnl in a comment (ie after a #).
-# ### BEGIN LIBTOOL TAG CONFIG: $1
-_LT_LIBTOOL_TAG_VARS(_LT_TAG)
-# ### END LIBTOOL TAG CONFIG: $1
-_LT_EOF
-])dnl /m4_if
-],
-[m4_if([$1], [], [
-    PACKAGE='$PACKAGE'
-    VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
-    RM='$RM'
-    ofile='$ofile'], [])
-])dnl /_LT_CONFIG_SAVE_COMMANDS
-])# _LT_CONFIG
-
-
-# LT_SUPPORTED_TAG(TAG)
-# ---------------------
-# Trace this macro to discover what tags are supported by the libtool
-# --tag option, using:
-#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
-AC_DEFUN([LT_SUPPORTED_TAG], [])
-
-
-# C support is built-in for now
-m4_define([_LT_LANG_C_enabled], [])
-m4_define([_LT_TAGS], [])
-
-
-# LT_LANG(LANG)
-# -------------
-# Enable libtool support for the given language if not already enabled.
-AC_DEFUN([LT_LANG],
-[AC_BEFORE([$0], [LT_OUTPUT])dnl
-m4_case([$1],
-  [C],			[_LT_LANG(C)],
-  [C++],		[_LT_LANG(CXX)],
-  [Java],		[_LT_LANG(GCJ)],
-  [Fortran 77],		[_LT_LANG(F77)],
-  [Fortran],		[_LT_LANG(FC)],
-  [Windows Resource],	[_LT_LANG(RC)],
-  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
-    [_LT_LANG($1)],
-    [m4_fatal([$0: unsupported language: "$1"])])])dnl
-])# LT_LANG
-
-
-# _LT_LANG(LANGNAME)
-# ------------------
-m4_defun([_LT_LANG],
-[m4_ifdef([_LT_LANG_]$1[_enabled], [],
-  [LT_SUPPORTED_TAG([$1])dnl
-  m4_append([_LT_TAGS], [$1 ])dnl
-  m4_define([_LT_LANG_]$1[_enabled], [])dnl
-  _LT_LANG_$1_CONFIG($1)])dnl
-])# _LT_LANG
-
-
-# _LT_LANG_DEFAULT_CONFIG
-# -----------------------
-m4_defun([_LT_LANG_DEFAULT_CONFIG],
-[AC_PROVIDE_IFELSE([AC_PROG_CXX],
-  [LT_LANG(CXX)],
-  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_F77],
-  [LT_LANG(F77)],
-  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_FC],
-  [LT_LANG(FC)],
-  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
-
-dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
-dnl pulling things in needlessly.
-AC_PROVIDE_IFELSE([AC_PROG_GCJ],
-  [LT_LANG(GCJ)],
-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
-    [LT_LANG(GCJ)],
-    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
-      [LT_LANG(GCJ)],
-      [m4_ifdef([AC_PROG_GCJ],
-	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([A][M_PROG_GCJ],
-	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([LT_PROG_GCJ],
-	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
-
-AC_PROVIDE_IFELSE([LT_PROG_RC],
-  [LT_LANG(RC)],
-  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
-])# _LT_LANG_DEFAULT_CONFIG
-
-# Obsolete macros:
-AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
-AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
-AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
-AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
-dnl AC_DEFUN([AC_LIBTOOL_F77], [])
-dnl AC_DEFUN([AC_LIBTOOL_FC], [])
-dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
-
-
-# _LT_TAG_COMPILER
-# ----------------
-m4_defun([_LT_TAG_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
-_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
-_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
-_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_TAG_COMPILER
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-m4_defun([_LT_COMPILER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-m4_defun([_LT_LINKER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-])# _LT_LINKER_BOILERPLATE
-
-# _LT_REQUIRED_DARWIN_CHECKS
-# -------------------------
-m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
-  case $host_os in
-    rhapsody* | darwin*)
-    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
-    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
-    AC_CHECK_TOOL([LIPO], [lipo], [:])
-    AC_CHECK_TOOL([OTOOL], [otool], [:])
-    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
-    _LT_DECL([], [DSYMUTIL], [1],
-      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
-    _LT_DECL([], [NMEDIT], [1],
-      [Tool to change global to local symbols on Mac OS X])
-    _LT_DECL([], [LIPO], [1],
-      [Tool to manipulate fat objects and archives on Mac OS X])
-    _LT_DECL([], [OTOOL], [1],
-      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
-    _LT_DECL([], [OTOOL64], [1],
-      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
-
-    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
-      [lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
-	# By default we will add the -single_module flag. You can override
-	# by either setting the environment variable LT_MULTI_MODULE
-	# non-empty at configure time, or by adding -multi_module to the
-	# link flags.
-	rm -rf libconftest.dylib*
-	echo "int foo(void){return 1;}" > conftest.c
-	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
-	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
-        _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
-	  lt_cv_apple_cc_single_mod=yes
-	else
-	  cat conftest.err >&AS_MESSAGE_LOG_FD
-	fi
-	rm -rf libconftest.dylib*
-	rm -f conftest.*
-      fi])
-    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
-      [lt_cv_ld_exported_symbols_list],
-      [lt_cv_ld_exported_symbols_list=no
-      save_LDFLAGS=$LDFLAGS
-      echo "_main" > conftest.sym
-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
-      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-	[lt_cv_ld_exported_symbols_list=yes],
-	[lt_cv_ld_exported_symbols_list=no])
-	LDFLAGS="$save_LDFLAGS"
-    ])
-    case $host_os in
-    rhapsody* | darwin1.[[012]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[[012]]*)
-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-	10.*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-])
-
-
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
-# Checks for linker and compiler features on darwin
-m4_defun([_LT_DARWIN_LINKER_FEATURES],
-[
-  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_automatic, $1)=yes
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
-  _LT_TAGVAR(link_all_deplibs, $1)=yes
-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
-    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-    m4_if([$1], [CXX],
-[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
-    fi
-],[])
-  else
-  _LT_TAGVAR(ld_shlibs, $1)=no
-  fi
-])
-
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-m4_defun([_LT_SYS_MODULE_PATH_AIX],
-[m4_require([_LT_DECL_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_SYS_MODULE_PATH_AIX
-
-
-# _LT_SHELL_INIT(ARG)
-# -------------------
-m4_define([_LT_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-	 [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
-
-
-# _LT_PROG_ECHO_BACKSLASH
-# -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-[$]*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
-
-	  if test "$prev" != 'sed 50q "[$]0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(lt_ECHO)
-])
-_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
-    [An echo program that does not interpret backslashes])
-])# _LT_PROG_ECHO_BACKSLASH
-
-
-# _LT_ENABLE_LOCK
-# ---------------
-m4_defun([_LT_ENABLE_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
-  [AS_HELP_STRING([--disable-libtool-lock],
-    [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.$ac_objext` in
-      *ELF-32*)
-	HPUX_IA64_MODE="32"
-	;;
-      *ELF-64*)
-	HPUX_IA64_MODE="64"
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -melf32bsmip"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -melf32bmipn32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -melf64bmip"
-	;;
-      esac
-    else
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -32"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -n32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -64"
-	  ;;
-      esac
-    fi
-  fi
-  rm -rf conftest*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-      *32-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_i386_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_i386"
-	    ;;
-	  ppc64-*linux*|powerpc64-*linux*)
-	    LD="${LD-ld} -m elf32ppclinux"
-	    ;;
-	  s390x-*linux*)
-	    LD="${LD-ld} -m elf_s390"
-	    ;;
-	  sparc64-*linux*)
-	    LD="${LD-ld} -m elf32_sparc"
-	    ;;
-	esac
-	;;
-      *64-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_x86_64_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_x86_64"
-	    ;;
-	  ppc*-*linux*|powerpc*-*linux*)
-	    LD="${LD-ld} -m elf64ppc"
-	    ;;
-	  s390*-*linux*|s390*-*tpf*)
-	    LD="${LD-ld} -m elf64_s390"
-	    ;;
-	  sparc*-*linux*)
-	    LD="${LD-ld} -m elf64_sparc"
-	    ;;
-	esac
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-    [AC_LANG_PUSH(C)
-     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
-     AC_LANG_POP])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-sparc*-*solaris*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-    *64-bit*)
-      case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
-      *)
-	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
-	  LD="${LD-ld} -64"
-	fi
-	;;
-      esac
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-esac
-
-need_locks="$enable_libtool_lock"
-])# _LT_ENABLE_LOCK
-
-
-# _LT_CMD_OLD_ARCHIVE
-# -------------------
-m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
-
-AC_CHECK_TOOL(STRIP, strip, :)
-test -z "$STRIP" && STRIP=:
-_LT_DECL([], [STRIP], [1], [A symbol stripping program])
-
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-test -z "$RANLIB" && RANLIB=:
-_LT_DECL([], [RANLIB], [1],
-    [Commands used to install an old-style archive])
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-_LT_DECL([], [old_postinstall_cmds], [2])
-_LT_DECL([], [old_postuninstall_cmds], [2])
-_LT_TAGDECL([], [old_archive_cmds], [2],
-    [Commands used to build an old-style archive])
-])# _LT_CMD_OLD_ARCHIVE
-
-
-# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([_LT_COMPILER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$3"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       $2=yes
-     fi
-   fi
-   $RM conftest*
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$5], , :, [$5])
-else
-    m4_if([$6], , :, [$6])
-fi
-])# _LT_COMPILER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
-
-
-# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#                  [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------
-# Check whether the given linker option works
-AC_DEFUN([_LT_LINKER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $3"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         $2=yes
-       fi
-     else
-       $2=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$4], , :, [$4])
-else
-    m4_if([$5], , :, [$5])
-fi
-])# _LT_LINKER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
-
-
-# LT_CMD_MAX_LEN
-#---------------
-AC_DEFUN([LT_CMD_MAX_LEN],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
-  i=0
-  teststring="ABCD"
-
-  case $build_os in
-  msdosdjgpp*)
-    # On DJGPP, this test can blow up pretty badly due to problems in libc
-    # (any single argument exceeding 2000 bytes causes a buffer overrun
-    # during glob expansion).  Even if it were fixed, the result of this
-    # check would be larger than it should be.
-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
-    ;;
-
-  gnu*)
-    # Under GNU Hurd, this test is not required because there is
-    # no limit to the length of command line arguments.
-    # Libtool will interpret -1 as no limit whatsoever
-    lt_cv_sys_max_cmd_len=-1;
-    ;;
-
-  cygwin* | mingw* | cegcc*)
-    # On Win9x/ME, this test blows up -- it succeeds, but takes
-    # about 5 minutes as the teststring grows exponentially.
-    # Worse, since 9x/ME are not pre-emptively multitasking,
-    # you end up with a "frozen" computer, even though with patience
-    # the test eventually succeeds (with a max line length of 256k).
-    # Instead, let's just punt: use the minimum linelength reported by
-    # all of the supported platforms: 8192 (on NT/2K/XP).
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  amigaos*)
-    # On AmigaOS with pdksh, this test takes hours, literally.
-    # So we just punt and use a minimum line length of 8192.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # This has been around since 386BSD, at least.  Likely further.
-    if test -x /sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-    elif test -x /usr/sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-    else
-      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
-    fi
-    # And add a safety zone
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    ;;
-
-  interix*)
-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
-    lt_cv_sys_max_cmd_len=196608
-    ;;
-
-  osf*)
-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-    # nice to cause kernel panics so lets avoid the loop below.
-    # First set a reasonable default.
-    lt_cv_sys_max_cmd_len=16384
-    #
-    if test -x /sbin/sysconfig; then
-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
-      esac
-    fi
-    ;;
-  sco3.2v5*)
-    lt_cv_sys_max_cmd_len=102400
-    ;;
-  sysv5* | sco5v6* | sysv4.2uw2*)
-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-    if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
-    else
-      lt_cv_sys_max_cmd_len=32768
-    fi
-    ;;
-  *)
-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    else
-      # Make teststring a little bigger before we do anything with it.
-      # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
-        teststring=$teststring$teststring
-      done
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      # If test is not a shell built-in, we'll probably end up computing a
-      # maximum length that is only half of the actual maximum length, but
-      # we can't tell.
-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
-	      test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      # Only check the string length outside the loop.
-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
-      teststring=
-      # Add a significant safety factor because C++ compilers can tack on
-      # massive amounts of additional arguments before passing them to the
-      # linker.  It appears as though 1/2 is a usable value.
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-    fi
-    ;;
-  esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
-  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
-  AC_MSG_RESULT(none)
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-_LT_DECL([], [max_cmd_len], [0],
-    [What is the maximum length of a command?])
-])# LT_CMD_MAX_LEN
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
-
-
-# _LT_HEADER_DLFCN
-# ----------------
-m4_defun([_LT_HEADER_DLFCN],
-[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
-])# _LT_HEADER_DLFCN
-
-
-# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ----------------------------------------------------------------
-m4_defun([_LT_TRY_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
-  [$4]
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL		RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL		DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL		0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW		DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW	RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW	DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW	0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}]
-_LT_EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) $1 ;;
-      x$lt_dlneed_uscore) $2 ;;
-      x$lt_dlunknown|x*) $3 ;;
-    esac
-  else :
-    # compilation failed
-    $3
-  fi
-fi
-rm -fr conftest*
-])# _LT_TRY_DLOPEN_SELF
-
-
-# LT_SYS_DLOPEN_SELF
-# ------------------
-AC_DEFUN([LT_SYS_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-    ;;
-
-  cygwin*)
-    lt_cv_dlopen="dlopen"
-    lt_cv_dlopen_libs=
-    ;;
-
-  darwin*)
-  # if libdl is installed we need to link against it
-    AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
-    lt_cv_dlopen="dyld"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ])
-    ;;
-
-  *)
-    AC_CHECK_FUNC([shl_load],
-	  [lt_cv_dlopen="shl_load"],
-      [AC_CHECK_LIB([dld], [shl_load],
-	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
-	[AC_CHECK_FUNC([dlopen],
-	      [lt_cv_dlopen="dlopen"],
-	  [AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
-	    [AC_CHECK_LIB([svld], [dlopen],
-		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
-	      [AC_CHECK_LIB([dld], [dld_link],
-		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
-	      ])
-	    ])
-	  ])
-	])
-      ])
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    AC_CACHE_CHECK([whether a program can dlopen itself],
-	  lt_cv_dlopen_self, [dnl
-	  _LT_TRY_DLOPEN_SELF(
-	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
-	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
-    ])
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
-	  lt_cv_dlopen_self_static, [dnl
-	  _LT_TRY_DLOPEN_SELF(
-	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
-	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
-      ])
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-_LT_DECL([dlopen_support], [enable_dlopen], [0],
-	 [Whether dlopen is supported])
-_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
-	 [Whether dlopen of programs is supported])
-_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
-	 [Whether dlopen of statically linked programs is supported])
-])# LT_SYS_DLOPEN_SELF
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
-
-
-# _LT_COMPILER_C_O([TAGNAME])
-# ---------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler.
-# This macro does not hard code the compiler like AC_PROG_CC_C_O.
-m4_defun([_LT_COMPILER_C_O],
-[m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-     fi
-   fi
-   chmod u+w . 2>&AS_MESSAGE_LOG_FD
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-])
-_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
-	[Does compiler simultaneously support -c and -o options?])
-])# _LT_COMPILER_C_O
-
-
-# _LT_COMPILER_FILE_LOCKS([TAGNAME])
-# ----------------------------------
-# Check to see if we can do hard links to lock some files if needed
-m4_defun([_LT_COMPILER_FILE_LOCKS],
-[m4_require([_LT_ENABLE_LOCK])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_COMPILER_C_O([$1])
-
-hard_links="nottested"
-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  AC_MSG_CHECKING([if we can lock with hard links])
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  AC_MSG_RESULT([$hard_links])
-  if test "$hard_links" = no; then
-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
-])# _LT_COMPILER_FILE_LOCKS
-
-
-# _LT_CHECK_OBJDIR
-# ----------------
-m4_defun([_LT_CHECK_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  lt_cv_objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-_LT_DECL([], [objdir], [0],
-         [The name of the directory that contains temporary libtool files])dnl
-m4_pattern_allow([LT_OBJDIR])dnl
-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
-  [Define to the sub-directory in which libtool stores uninstalled libraries.])
-])# _LT_CHECK_OBJDIR
-
-
-# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
-# --------------------------------------
-# Check hardcoding attributes.
-m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
-   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
-    # Linking always hardcodes the temporary library directory.
-    _LT_TAGVAR(hardcode_action, $1)=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    _LT_TAGVAR(hardcode_action, $1)=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  _LT_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
-   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-_LT_TAGDECL([], [hardcode_action], [0],
-    [How to hardcode a shared library path into an executable])
-])# _LT_LINKER_HARDCODE_LIBPATH
-
-
-# _LT_CMD_STRIPLIB
-# ----------------
-m4_defun([_LT_CMD_STRIPLIB],
-[m4_require([_LT_DECL_EGREP])
-striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
-  case $host_os in
-  darwin*)
-    if test -n "$STRIP" ; then
-      striplib="$STRIP -x"
-      old_striplib="$STRIP -S"
-      AC_MSG_RESULT([yes])
-    else
-      AC_MSG_RESULT([no])
-    fi
-    ;;
-  *)
-    AC_MSG_RESULT([no])
-    ;;
-  esac
-fi
-_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
-_LT_DECL([], [striplib], [1])
-])# _LT_CMD_STRIPLIB
-
-
-# _LT_SYS_DYNAMIC_LINKER([TAG])
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-m4_defun([_LT_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_OBJDUMP])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-m4_if([$1],
-	[], [
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
-    # if the path contains ";" then we assume it to be the separator
-    # otherwise default to the standard path separator (i.e. ":") - it is
-    # assumed that no part of a normal pathname contains ";" but that should
-    # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
-  # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
-  lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
-  for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
-      test -d "$lt_sys_path" && \
-	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
-    fi
-  done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
-  for (lt_i = NF; lt_i > 0; lt_i--) {
-    if ($lt_i != "" && $lt_i != ".") {
-      if ($lt_i == "..") {
-        lt_count++;
-      } else {
-        if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
-        } else {
-          lt_count--;
-        }
-      }
-    }
-  }
-  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
-  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
-}'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[[4-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[[01]] | aix4.[[01]].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-	:
-      else
-	can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[[45]]*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-m4_if([$1], [],[
-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[[123]]*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
-  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-interix[[3-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
-	else
-		version_type=irix
-	fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
-       [shlibpath_overrides_runpath=yes])])
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[[89]] | openbsd2.[[89]].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-	;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-_LT_DECL([], [variables_saved_for_relink], [1],
-    [Variables whose values should be saved in libtool wrapper scripts and
-    restored at link time])
-_LT_DECL([], [need_lib_prefix], [0],
-    [Do we need the "lib" prefix for modules?])
-_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
-_LT_DECL([], [version_type], [0], [Library versioning type])
-_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
-_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
-_LT_DECL([], [shlibpath_overrides_runpath], [0],
-    [Is shlibpath searched before the hard-coded library search path?])
-_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
-_LT_DECL([], [library_names_spec], [1],
-    [[List of archive names.  First name is the real one, the rest are links.
-    The last name is the one that the linker finds with -lNAME]])
-_LT_DECL([], [soname_spec], [1],
-    [[The coded name of the library, if different from the real name]])
-_LT_DECL([], [postinstall_cmds], [2],
-    [Command to use after installation of a shared archive])
-_LT_DECL([], [postuninstall_cmds], [2],
-    [Command to use after uninstallation of a shared archive])
-_LT_DECL([], [finish_cmds], [2],
-    [Commands used to finish a libtool library installation in a directory])
-_LT_DECL([], [finish_eval], [1],
-    [[As "finish_cmds", except a single script fragment to be evaled but
-    not shown]])
-_LT_DECL([], [hardcode_into_libs], [0],
-    [Whether we should hardcode library paths into libraries])
-_LT_DECL([], [sys_lib_search_path_spec], [2],
-    [Compile-time system search path for libraries])
-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
-    [Run-time system search path for libraries])
-])# _LT_SYS_DYNAMIC_LINKER
-
-
-# _LT_PATH_TOOL_PREFIX(TOOL)
-# --------------------------
-# find a file program which can recognize shared library
-AC_DEFUN([_LT_PATH_TOOL_PREFIX],
-[m4_require([_LT_DECL_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] |  ?:[\\/]*])
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word.  This closes a longstanding sh security hole.
-  ac_dummy="m4_if([$2], , $PATH, [$2])"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$1; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
-      if test -n "$file_magic_test_file"; then
-	case $deplibs_check_method in
-	"file_magic "*)
-	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-	    $EGREP "$file_magic_regex" > /dev/null; then
-	    :
-	  else
-	    cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
-	  fi ;;
-	esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  AC_MSG_RESULT($MAGIC_CMD)
-else
-  AC_MSG_RESULT(no)
-fi
-_LT_DECL([], [MAGIC_CMD], [0],
-	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
-])# _LT_PATH_TOOL_PREFIX
-
-# Old name:
-AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
-
-
-# _LT_PATH_MAGIC
-# --------------
-# find a file program which can recognize a shared library
-m4_defun([_LT_PATH_MAGIC],
-[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
-  else
-    MAGIC_CMD=:
-  fi
-fi
-])# _LT_PATH_MAGIC
-
-
-# LT_PATH_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([LT_PATH_LD],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_ARG_WITH([gnu-ld],
-    [AS_HELP_STRING([--with-gnu-ld],
-	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
-    [with_gnu_ld=no])dnl
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by $CC])
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [[\\/]]* | ?:[[\\/]]*)
-      re_direlt='/[[^/]][[^/]]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  AC_MSG_CHECKING([for GNU ld])
-else
-  AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
-	;;
-      *)
-	test "$with_gnu_ld" != yes && break
-	;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  AC_MSG_RESULT($LD)
-else
-  AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-_LT_PATH_LD_GNU
-AC_SUBST([LD])
-
-_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
-])# LT_PATH_LD
-
-# Old names:
-AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
-AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_LD], [])
-dnl AC_DEFUN([AC_PROG_LD], [])
-
-
-# _LT_PATH_LD_GNU
-#- --------------
-m4_defun([_LT_PATH_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# _LT_PATH_LD_GNU
-
-
-# _LT_CMD_RELOAD
-# --------------
-# find reload flag for linker
-#   -- PORTME Some linkers may need a different reload flag.
-m4_defun([_LT_CMD_RELOAD],
-[AC_CACHE_CHECK([for $LD option to reload object files],
-  lt_cv_ld_reload_flag,
-  [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
-])# _LT_CMD_RELOAD
-
-
-# _LT_CHECK_MAGIC_METHOD
-# ----------------------
-# how to check for library dependencies
-#  -- PORTME fill in with the dynamic library characteristics
-m4_defun([_LT_CHECK_MAGIC_METHOD],
-[m4_require([_LT_DECL_EGREP])
-m4_require([_LT_DECL_OBJDUMP])
-AC_CACHE_CHECK([how to recognize dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[[4-9]]*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi[[45]]*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin*)
-  # func_win32_libid is a shell function defined in ltmain.sh
-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-  lt_cv_file_magic_cmd='func_win32_libid'
-  ;;
-
-mingw* | pw32*)
-  # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
-  # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-    lt_cv_file_magic_cmd='func_win32_libid'
-  else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-cegcc)
-  # use the weaker test based on 'objdump'. See mingw*.
-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | dragonfly*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  case $host_cpu in
-  ia64*)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-    ;;
-  hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-    ;;
-  *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-interix[[3-9]]*)
-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $LD in
-  *-32|*"-32 ") libmagic=32-bit;;
-  *-n32|*"-n32 ") libmagic=N32;;
-  *-64|*"-64 ") libmagic=64-bit;;
-  *) libmagic=never-match;;
-  esac
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-netbsd* | netbsdelf*-gnu)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-*nto* | *qnx*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-rdos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.3*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  pc)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-
-tpf*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-_LT_DECL([], [deplibs_check_method], [1],
-    [Method to check whether dependent libraries are shared objects])
-_LT_DECL([], [file_magic_cmd], [1],
-    [Command to use when deplibs_check_method == "file_magic"])
-])# _LT_CHECK_MAGIC_METHOD
-
-
-# LT_PATH_NM
-# ----------
-# find the pathname to a BSD- or MS-compatible name lister
-AC_DEFUN([LT_PATH_NM],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
-[if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-    lt_nm_to_check="$lt_nm_to_check nm"
-  fi
-  for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
-      test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
-	#   nm: unknown option "B" ignored
-	# Tru64's nm complains that /dev/null is an invalid object file
-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-	*/dev/null* | *'Invalid file or object type'*)
-	  lt_cv_path_NM="$tmp_nm -B"
-	  break
-	  ;;
-	*)
-	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-	  */dev/null*)
-	    lt_cv_path_NM="$tmp_nm -p"
-	    break
-	    ;;
-	  *)
-	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-	    continue # so that we can try to find one that supports BSD flags
-	    ;;
-	  esac
-	  ;;
-	esac
-      fi
-    done
-    IFS="$lt_save_ifs"
-  done
-  : ${lt_cv_path_NM=no}
-fi])
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
-else
-  # Didn't find any BSD compatible name lister, look for dumpbin.
-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
-  AC_SUBST([DUMPBIN])
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
-  fi
-fi
-test -z "$NM" && NM=nm
-AC_SUBST([NM])
-_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
-
-AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
-  [lt_cv_nm_interface="BSD nm"
-  echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$ac_compile" 2>conftest.err)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
-  cat conftest.out >&AS_MESSAGE_LOG_FD
-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
-    lt_cv_nm_interface="MS dumpbin"
-  fi
-  rm -f conftest*])
-])# LT_PATH_NM
-
-# Old names:
-AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
-AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_NM], [])
-dnl AC_DEFUN([AC_PROG_NM], [])
-
-
-# LT_LIB_M
-# --------
-# check for math library
-AC_DEFUN([LT_LIB_M],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
-  # These system don't have libm, or don't need it
-  ;;
-*-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
-  ;;
-*)
-  AC_CHECK_LIB(m, cos, LIBM="-lm")
-  ;;
-esac
-AC_SUBST([LIBM])
-])# LT_LIB_M
-
-# Old name:
-AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_CHECK_LIBM], [])
-
-
-# _LT_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------
-m4_defun([_LT_COMPILER_NO_RTTI],
-[m4_require([_LT_TAG_COMPILER])dnl
-
-_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
-  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
-    lt_cv_prog_compiler_rtti_exceptions,
-    [-fno-rtti -fno-exceptions], [],
-    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
-	[Compiler flag to turn off builtin functions])
-])# _LT_COMPILER_NO_RTTI
-
-
-# _LT_CMD_GLOBAL_SYMBOLS
-# ----------------------
-m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[[BCDT]]'
-  ;;
-cygwin* | mingw* | pw32* | cegcc*)
-  symcode='[[ABCDGISTW]]'
-  ;;
-hpux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDEGRST]]'
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[[BCDEGRST]]'
-  ;;
-osf*)
-  symcode='[[BCDEGQRST]]'
-  ;;
-solaris*)
-  symcode='[[BDRT]]'
-  ;;
-sco3.2v5*)
-  symcode='[[DT]]'
-  ;;
-sysv4.2uw2*)
-  symcode='[[DT]]'
-  ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
-  symcode='[[ABDT]]'
-  ;;
-sysv4)
-  symcode='[[DFNSTU]]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-  symxfrm="\\1 $ac_symprfx\\2 \\2"
-
-  # Write the raw and C identifiers.
-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
-    # Also find C++ and __fastcall symbols from MSVC++,
-    # which start with @ or ?.
-    lt_cv_sys_global_symbol_pipe="$AWK ['"\
-"     {last_section=section; section=\$ 3};"\
-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-"     \$ 0!~/External *\|/{next};"\
-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-"     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-"     ' prfx=^$ac_symprfx]"
-  else
-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-  fi
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
-  if AC_TRY_EVAL(ac_compile); then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-	mv -f "$nlist"T "$nlist"
-      else
-	rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
-	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
-	  cat <<_LT_EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
-	  # Now generate the symbol file.
-	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
-	  cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols.  */
-const struct {
-  const char *name;
-  void       *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[[]] =
-{
-  { "@PROGRAM@", (void *) 0 },
-_LT_EOF
-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
-	  cat <<\_LT_EOF >> conftest.$ac_ext
-  {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
-	  # Now try linking the two files.
-	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
-	  LIBS="conftstm.$ac_objext"
-	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
-	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
-	    pipe_works=yes
-	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
-	else
-	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
-	fi
-      else
-	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
-    fi
-  else
-    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
-    cat conftest.$ac_ext >&5
-  fi
-  rm -rf conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  AC_MSG_RESULT(failed)
-else
-  AC_MSG_RESULT(ok)
-fi
-
-_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
-    [Take the output of nm and produce a listing of raw symbols and C names])
-_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
-    [Transform the output of nm in a proper C declaration])
-_LT_DECL([global_symbol_to_c_name_address],
-    [lt_cv_sys_global_symbol_to_c_name_address], [1],
-    [Transform the output of nm in a C name address pair])
-_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
-    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
-    [Transform the output of nm in a C name address pair when lib prefix is needed])
-]) # _LT_CMD_GLOBAL_SYMBOLS
-
-
-# _LT_COMPILER_PIC([TAGNAME])
-# ---------------------------
-m4_defun([_LT_COMPILER_PIC],
-[m4_require([_LT_TAG_COMPILER])dnl
-_LT_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
-m4_if([$1], [CXX], [
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-    aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | cygwin* | os2* | pw32* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-      ;;
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-    *qnx* | *nto*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix[[4-9]]*)
-	# All AIX code is PIC.
-	if test "$host_cpu" = ia64; then
-	  # AIX 5 now supports IA64 processor
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	else
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-	fi
-	;;
-      chorus*)
-	case $cc_basename in
-	cxch68*)
-	  # Green Hills C++ Compiler
-	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-	  ;;
-	esac
-	;;
-      dgux*)
-	case $cc_basename in
-	  ec++*)
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  ghcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      freebsd* | dragonfly*)
-	# FreeBSD uses GNU C++
-	;;
-      hpux9* | hpux10* | hpux11*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    if test "$host_cpu" != ia64; then
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	    fi
-	    ;;
-	  aCC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    case $host_cpu in
-	    hppa*64*|ia64*)
-	      # +Z the default
-	      ;;
-	    *)
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	      ;;
-	    esac
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      interix*)
-	# This is c89, which is MS Visual C++ (no shared libs)
-	# Anyone wants to do a port?
-	;;
-      irix5* | irix6* | nonstopux*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    # CC pic flag -KPIC is the default.
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
-	case $cc_basename in
-	  KCC*)
-	    # KAI C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    ;;
-	  ecpc* )
-	    # old Intel C++ for x86_64 which still supported -KPIC.
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  icpc* )
-	    # Intel C++, used to be incompatible with GCC.
-	    # ICC 10 doesn't accept -KPIC any more.
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  pgCC* | pgcpp*)
-	    # Portland Group C++ compiler
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  cxx*)
-	    # Compaq C++
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-      lynxos*)
-	;;
-      m88k*)
-	;;
-      mvs*)
-	case $cc_basename in
-	  cxx*)
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      netbsd* | netbsdelf*-gnu)
-	;;
-      *qnx* | *nto*)
-        # QNX uses GNU C++, but need to define -shared option too, otherwise
-        # it will coredump.
-        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-        ;;
-      osf3* | osf4* | osf5*)
-	case $cc_basename in
-	  KCC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    ;;
-	  RCC*)
-	    # Rational C++ 2.4.1
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  cxx*)
-	    # Digital/Compaq C++
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      psos*)
-	;;
-      solaris*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	    ;;
-	  gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sunos4*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.x
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  lcc*)
-	    # Lucid
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	esac
-	;;
-      tandem*)
-	case $cc_basename in
-	  NCC*)
-	    # NonStop-UX NCC 3.20
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      vxworks*)
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-	;;
-    esac
-  fi
-],
-[
-  if test "$GCC" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	# +Z the default
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      enable_shared=no
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      else
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case $host_cpu in
-      hppa*64*|ia64*)
-	# +Z the default
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC (with -KPIC) is the default.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
-      case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
-      ecc*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # icc used to be incompatible with GCC.
-      # ICC 10 doesn't accept -KPIC any more.
-      icc* | ifort*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # Lahey Fortran 8.1.
-      lf95*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
-	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-	# which looks to be a dead project)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-        ;;
-      ccc*)
-        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-        # All Alpha code is PIC.
-        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-        ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-	;;
-      *)
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)
-	  # Sun C 5.9
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
-	  ;;
-	esac
-	;;
-      esac
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    osf3* | osf4* | osf5*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # All OSF/1 code is PIC.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    rdos*)
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    unicos*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-    esac
-  fi
-])
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-    ;;
-  *)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
-    ;;
-esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-	[How to pass a linker flag through the compiler])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
-  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
-    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
-    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
-    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
-     "" | " "*) ;;
-     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
-     esac],
-    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
-	[Additional compiler flags for building library objects])
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
-_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
-  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
-  $lt_tmp_static_flag,
-  [],
-  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
-_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
-	[Compiler flag to prevent dynamic linking])
-])# _LT_COMPILER_PIC
-
-
-# _LT_LINKER_SHLIBS([TAGNAME])
-# ----------------------------
-# See if the linker supports building shared libraries.
-m4_defun([_LT_LINKER_SHLIBS],
-[AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-m4_if([$1], [CXX], [
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  case $host_os in
-  aix[[4-9]]*)
-    # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    else
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
-  cygwin* | mingw* | cegcc*)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-  ;;
-  *)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-], [
-  runpath_var=
-  _LT_TAGVAR(allow_undefined_flag, $1)=
-  _LT_TAGVAR(always_export_symbols, $1)=no
-  _LT_TAGVAR(archive_cmds, $1)=
-  _LT_TAGVAR(archive_expsym_cmds, $1)=
-  _LT_TAGVAR(compiler_needs_object, $1)=no
-  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  _LT_TAGVAR(hardcode_automatic, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
-  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-  _LT_TAGVAR(hardcode_minus_L, $1)=no
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(inherit_rpath, $1)=no
-  _LT_TAGVAR(link_all_deplibs, $1)=unknown
-  _LT_TAGVAR(module_cmds, $1)=
-  _LT_TAGVAR(module_expsym_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
-  _LT_TAGVAR(thread_safe_flag_spec, $1)=
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  _LT_TAGVAR(include_expsyms, $1)=
-  # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-  # platforms (ab)use it in PIC code, but their linkers get confused if
-  # the symbol is explicitly referenced.  Since portable code cannot
-  # rely on this symbol name, it's probably fine to never include it in
-  # preloaded symbol tables.
-  # Exclude shared library initialization/finalization symbols.
-dnl Note also adjust exclude_expsyms for C++ above.
-  extract_expsyms_cmds=
-
-  case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  linux* | k*bsd*-gnu)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-    ;;
-  esac
-
-  _LT_TAGVAR(ld_shlibs, $1)=yes
-  if test "$with_gnu_ld" = yes; then
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
-
-    # Set some defaults for GNU ld with shared library support. These
-    # are reset later if shared libraries are not supported. Putting them
-    # here allows them to be overridden if necessary.
-    runpath_var=LD_RUN_PATH
-    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-    # ancient GNU ld didn't support --whole-archive et. al.
-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>&1` in
-      *GNU\ gold*) supports_anon_versioning=yes ;;
-      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-      *\ 2.11.*) ;; # other 2.11 versions
-      *) supports_anon_versioning=yes ;;
-    esac
-
-    # See if GNU ld supports shared libraries.
-    case $host_os in
-    aix[[3-9]]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-_LT_EOF
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-	# support --undefined.  This deserves some investigation.  FIXME
-	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-      # as there is no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=no
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	  cp $export_symbols $output_objdir/$soname.def;
-	else
-	  echo EXPORTS > $output_objdir/$soname.def;
-	  cat $export_symbols >> $output_objdir/$soname.def;
-	fi~
-	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    interix[[3-9]]*)
-      _LT_TAGVAR(hardcode_direct, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-      # Instead, shared libraries are loaded at an image base (0x10000000 by
-      # default) and relocated if they conflict, which is a slow very memory
-      # consuming and fragmenting process.  To avoid this, we pick a random,
-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      ;;
-
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
-      tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
-	case $cc_basename in
-	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
-	esac
-      fi
-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-	 && test "$tmp_diet" = no
-      then
-	tmp_addflag=
-	tmp_sharedflag='-shared'
-	case $cc_basename,$host_cpu in
-        pgcc*)				# Portland Group C compiler
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag'
-	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag -Mnomain' ;;
-	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
-	  tmp_addflag=' -i_dynamic' ;;
-	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
-	  tmp_addflag=' -i_dynamic -nofor_main' ;;
-	ifc* | ifort*)			# Intel Fortran compiler
-	  tmp_addflag=' -nofor_main' ;;
-	lf95*)				# Lahey Fortran 8.1
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-	  tmp_sharedflag='--shared' ;;
-	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
-	  tmp_sharedflag='-qmkshrobj'
-	  tmp_addflag= ;;
-	esac
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)			# Sun C 5.9
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  _LT_TAGVAR(compiler_needs_object, $1)=yes
-	  tmp_sharedflag='-G' ;;
-	*Sun\ F*)			# Sun Fortran 8.3
-	  tmp_sharedflag='-G' ;;
-	esac
-	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-        if test "x$supports_anon_versioning" = xyes; then
-          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	    echo "local: *; };" >> $output_objdir/$libname.ver~
-	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-        fi
-
-	case $cc_basename in
-	xlf*)
-	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-	  if test "x$supports_anon_versioning" = xyes; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-	  fi
-	  ;;
-	esac
-      else
-        _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-	wlarc=
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris*)
-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-	;;
-	*)
-	  # For security reasons, it is highly recommended that you always
-	  # use absolute paths for naming shared libraries, and exclude the
-	  # DT_RUNPATH tag from executables and libraries.  But doing so
-	  # requires that you compile everything twice, which is a pain.
-	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-	  else
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	  fi
-	;;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-
-    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
-      runpath_var=
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-	# Neither direct hardcoding nor static linking is supported with a
-	# broken collect2.
-	_LT_TAGVAR(hardcode_direct, $1)=unsupported
-      fi
-      ;;
-
-    aix[[4-9]]*)
-      if test "$host_cpu" = ia64; then
-	# On IA64, the linker does run time linking by default, so we don't
-	# have to do anything special.
-	aix_use_runtimelinking=no
-	exp_sym_flag='-Bexport'
-	no_entry_flag=""
-      else
-	# If we're using GNU nm, then we don't want the "-C" option.
-	# -C means demangle to AIX nm, but means don't demangle with GNU nm
-	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	else
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	fi
-	aix_use_runtimelinking=no
-
-	# Test if we are trying to use run time linking or normal
-	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
-	# need to do runtime linking.
-	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-	  for ld_flag in $LDFLAGS; do
-	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-	    aix_use_runtimelinking=yes
-	    break
-	  fi
-	  done
-	  ;;
-	esac
-
-	exp_sym_flag='-bexport'
-	no_entry_flag='-bnoentry'
-      fi
-
-      # When large executables or shared objects are built, AIX ld can
-      # have problems creating the table of contents.  If linking a library
-      # or program results in "error TOC overflow" add -mminimal-toc to
-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-      _LT_TAGVAR(archive_cmds, $1)=''
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-      if test "$GCC" = yes; then
-	case $host_os in aix4.[[012]]|aix4.[[012]].*)
-	# We only want to do this on AIX 4.2 and lower, the check
-	# below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	  # We have reworked collect2
-	  :
-	  else
-	  # We have old collect2
-	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
-	  # It fails to find uninstalled libraries when the uninstalled
-	  # path is not listed in the libpath.  Setting hardcode_minus_L
-	  # to unsupported forces relinking
-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-	  fi
-	  ;;
-	esac
-	shared_flag='-shared'
-	if test "$aix_use_runtimelinking" = yes; then
-	  shared_flag="$shared_flag "'${wl}-G'
-	fi
-	_LT_TAGVAR(link_all_deplibs, $1)=no
-      else
-	# not using gcc
-	if test "$host_cpu" = ia64; then
-	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	# chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-	else
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag='${wl}-G'
-	  else
-	    shared_flag='${wl}-bM:SRE'
-	  fi
-	fi
-      fi
-
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      if test "$aix_use_runtimelinking" = yes; then
-	# Warning - without using the other runtime loading flags (-brtl),
-	# -berok will link without error, but may produce a broken library.
-	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-      else
-	if test "$host_cpu" = ia64; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-	else
-	 # Determine the default libpath from the value encoded in an
-	 # empty executable.
-	 _LT_SYS_MODULE_PATH_AIX
-	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	  # Warning - without using the other run time loading flags,
-	  # -berok will link without error, but may produce a broken library.
-	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	  # This is similar to how AIX traditionally builds its shared libraries.
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-	fi
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    bsdi[[45]]*)
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      ;;
-
-    darwin* | rhapsody*)
-      _LT_DARWIN_LINKER_FEATURES($1)
-      ;;
-
-    dgux*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    freebsd1*)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # does not break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
-	_LT_TAGVAR(hardcode_direct, $1)=yes
-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	# hardcode_minus_L: Not really in the search PATH,
-	# but as the default location of the library.
-	_LT_TAGVAR(hardcode_minus_L, $1)=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	case $host_cpu in
-	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      else
-	case $host_cpu in
-	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	case $host_cpu in
-	hppa*64*|ia64*)
-	  _LT_TAGVAR(hardcode_direct, $1)=no
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  ;;
-	*)
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	  ;;
-	esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	# Try to use the -exported_symbol ld option, if it does not
-	# work, assume that -exports_file does not work either and
-	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        AC_LINK_IFELSE(int foo(void) {},
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-        )
-        LDFLAGS="$save_LDFLAGS"
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(inherit_rpath, $1)=yes
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *nto* | *qnx*)
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-	_LT_TAGVAR(hardcode_direct, $1)=yes
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	else
-	  case $host_os in
-	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	     ;;
-	   *)
-	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	     ;;
-	  esac
-	fi
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    os2*)
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      else
-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
-	# Both c and cxx compiler support -rpath directly
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-      else
-	case `$CC -V 2>&1` in
-	*"Compilers 5.0"*)
-	  wlarc=''
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
-	  ;;
-	*)
-	  wlarc='${wl}'
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-	  ;;
-	esac
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      case $host_os in
-      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-      *)
-	# The compiler driver will combine and reorder linker options,
-	# but understands `-z linker_flag'.  GCC discards it without `$wl',
-	# but is careful enough not to reorder.
-	# Supported since Solaris 2.6 (maybe 2.5.1?)
-	if test "$GCC" = yes; then
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-	else
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-	fi
-	;;
-      esac
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-	# Use $CC to link under sequent, because it throws in some extra .o
-	# files that make .init and .fini sections work.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-	sni)
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
-	;;
-	siemens)
-	  ## LD is ld it makes a PLAMLIB
-	  ## CC just makes a GrossModule.
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
-	  _LT_TAGVAR(hardcode_direct, $1)=no
-        ;;
-	motorola)
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
-	;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4.3*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	runpath_var=LD_RUN_PATH
-	hardcode_runpath_var=yes
-	_LT_TAGVAR(ld_shlibs, $1)=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
-      # link with -lc, and that would cause any symbols used from libc to
-      # always be unresolved, which means just about no library would
-      # ever link correctly.  If we're not using GNU ld we use -z text
-      # though, which does catch some bad symbols but isn't as heavy-handed
-      # as -z defs.
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    esac
-
-    if test x$host_vendor = xsni; then
-      case $host in
-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
-	;;
-      esac
-    fi
-  fi
-])
-AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
-
-_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
-_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
-_LT_DECL([], [extract_expsyms_cmds], [2],
-    [The commands to extract the exported symbol list from a shared archive])
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
-  # Assume -lc should be added
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $_LT_TAGVAR(archive_cmds, $1) in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
-	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
-        _LT_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
-        then
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
-    [Whether or not to add -lc for building shared libraries])
-_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
-    [enable_shared_with_static_runtimes], [0],
-    [Whether or not to disallow shared libs when runtime libs are static])
-_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
-    [Compiler flag to allow reflexive dlopens])
-_LT_TAGDECL([], [whole_archive_flag_spec], [1],
-    [Compiler flag to generate shared objects directly from archives])
-_LT_TAGDECL([], [compiler_needs_object], [1],
-    [Whether the compiler copes with passing no objects directly])
-_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
-    [Create an old-style archive from a shared archive])
-_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
-    [Create a temporary old-style archive to link instead of a shared archive])
-_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
-_LT_TAGDECL([], [archive_expsym_cmds], [2])
-_LT_TAGDECL([], [module_cmds], [2],
-    [Commands used to build a loadable module if different from building
-    a shared archive.])
-_LT_TAGDECL([], [module_expsym_cmds], [2])
-_LT_TAGDECL([], [with_gnu_ld], [1],
-    [Whether we are building with GNU ld or not])
-_LT_TAGDECL([], [allow_undefined_flag], [1],
-    [Flag that allows shared libraries with undefined symbols to be built])
-_LT_TAGDECL([], [no_undefined_flag], [1],
-    [Flag that enforces no undefined symbols])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
-    [Flag to hardcode $libdir into a binary during linking.
-    This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
-    [[If ld is used when linking, flag to hardcode $libdir into a binary
-    during linking.  This must work even if $libdir does not exist]])
-_LT_TAGDECL([], [hardcode_libdir_separator], [1],
-    [Whether we need a single "-rpath" flag with a separated argument])
-_LT_TAGDECL([], [hardcode_direct], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary])
-_LT_TAGDECL([], [hardcode_direct_absolute], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary and the resulting library dependency is
-    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
-    library is relocated])
-_LT_TAGDECL([], [hardcode_minus_L], [0],
-    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
-    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_automatic], [0],
-    [Set to "yes" if building a shared library automatically hardcodes DIR
-    into the library and all subsequent libraries and executables linked
-    against it])
-_LT_TAGDECL([], [inherit_rpath], [0],
-    [Set to yes if linker adds runtime paths of dependent libraries
-    to runtime path list])
-_LT_TAGDECL([], [link_all_deplibs], [0],
-    [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
-    [Fix the shell variable $srcfile for the compiler])
-_LT_TAGDECL([], [always_export_symbols], [0],
-    [Set to "yes" if exported symbols are required])
-_LT_TAGDECL([], [export_symbols_cmds], [2],
-    [The commands to list exported symbols])
-_LT_TAGDECL([], [exclude_expsyms], [1],
-    [Symbols that should not be listed in the preloaded symbols])
-_LT_TAGDECL([], [include_expsyms], [1],
-    [Symbols that must always be exported])
-_LT_TAGDECL([], [prelink_cmds], [2],
-    [Commands necessary for linking programs (against libraries) with templates])
-_LT_TAGDECL([], [file_list_spec], [1],
-    [Specify filename containing input files])
-dnl FIXME: Not yet implemented
-dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
-dnl    [Compiler flag to generate thread safe objects])
-])# _LT_LINKER_SHLIBS
-
-
-# _LT_LANG_C_CONFIG([TAG])
-# ------------------------
-# Ensure that the configuration variables for a C compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_C_CONFIG],
-[m4_require([_LT_DECL_EGREP])dnl
-lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-_LT_TAG_COMPILER
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_SYS_DYNAMIC_LINKER($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-  LT_SYS_DLOPEN_SELF
-  _LT_CMD_STRIPLIB
-
-  # Report which library types will actually be built
-  AC_MSG_CHECKING([if libtool supports shared libraries])
-  AC_MSG_RESULT([$can_build_shared])
-
-  AC_MSG_CHECKING([whether to build shared libraries])
-  test "$can_build_shared" = "no" && enable_shared=no
-
-  # On AIX, shared libraries and static libraries use the same namespace, and
-  # are all built from PIC.
-  case $host_os in
-  aix3*)
-    test "$enable_shared" = yes && enable_static=no
-    if test -n "$RANLIB"; then
-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
-      postinstall_cmds='$RANLIB $lib'
-    fi
-    ;;
-
-  aix[[4-9]]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
-    fi
-    ;;
-  esac
-  AC_MSG_RESULT([$enable_shared])
-
-  AC_MSG_CHECKING([whether to build static libraries])
-  # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
-  AC_MSG_RESULT([$enable_static])
-
-  _LT_CONFIG($1)
-fi
-AC_LANG_POP
-CC="$lt_save_CC"
-])# _LT_LANG_C_CONFIG
-
-
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-else
-  _lt_caught_CXX_error=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
-# _LT_LANG_CXX_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a C++ compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_CXX_CONFIG],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_LANG_PUSH(C++)
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(compiler_needs_object, $1)=no
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the CXX compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="int some_variable = 0;"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC=$CC
-  lt_save_LD=$LD
-  lt_save_GCC=$GCC
-  GCC=$GXX
-  lt_save_with_gnu_ld=$with_gnu_ld
-  lt_save_path_LD=$lt_cv_path_LD
-  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-  else
-    $as_unset lt_cv_prog_gnu_ld
-  fi
-  if test -n "${lt_cv_path_LDCXX+set}"; then
-    lt_cv_path_LD=$lt_cv_path_LDCXX
-  else
-    $as_unset lt_cv_path_LD
-  fi
-  test -z "${LDCXX+set}" || LD=$LDCXX
-  CC=${CXX-"c++"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    # We don't want -fno-exception when compiling C++ code, so set the
-    # no_builtin_flag separately
-    if test "$GXX" = yes; then
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-    else
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-    fi
-
-    if test "$GXX" = yes; then
-      # Set up default GNU C++ configuration
-
-      LT_PATH_LD
-
-      # Check if GNU C++ uses GNU ld as the underlying linker, since the
-      # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-        # If archive_cmds runs LD, not CC, wlarc should be empty
-        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-        #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
-
-        # ancient GNU ld didn't support --whole-archive et. al.
-        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
-	  $GREP 'no-whole-archive' > /dev/null; then
-          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-        else
-          _LT_TAGVAR(whole_archive_flag_spec, $1)=
-        fi
-      else
-        with_gnu_ld=no
-        wlarc=
-
-        # A generic and very simple default shared library creation
-        # command for GNU C++ for the case where it uses the native
-        # linker, instead of GNU ld.  If possible, this setting should
-        # overridden to take advantage of the native linker features on
-        # the platform it is being used on.
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-      fi
-
-      # Commands to make compiler produce verbose output that lists
-      # what "hidden" libraries, object files and flags are used when
-      # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-    else
-      GXX=no
-      with_gnu_ld=no
-      wlarc=
-    fi
-
-    # PORTME: fill in a description of your system's C++ link characteristics
-    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-    _LT_TAGVAR(ld_shlibs, $1)=yes
-    case $host_os in
-      aix3*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-      aix[[4-9]]*)
-        if test "$host_cpu" = ia64; then
-          # On IA64, the linker does run time linking by default, so we don't
-          # have to do anything special.
-          aix_use_runtimelinking=no
-          exp_sym_flag='-Bexport'
-          no_entry_flag=""
-        else
-          aix_use_runtimelinking=no
-
-          # Test if we are trying to use run time linking or normal
-          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-          # need to do runtime linking.
-          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-	    for ld_flag in $LDFLAGS; do
-	      case $ld_flag in
-	      *-brtl*)
-	        aix_use_runtimelinking=yes
-	        break
-	        ;;
-	      esac
-	    done
-	    ;;
-          esac
-
-          exp_sym_flag='-bexport'
-          no_entry_flag='-bnoentry'
-        fi
-
-        # When large executables or shared objects are built, AIX ld can
-        # have problems creating the table of contents.  If linking a library
-        # or program results in "error TOC overflow" add -mminimal-toc to
-        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-        _LT_TAGVAR(archive_cmds, $1)=''
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-        _LT_TAGVAR(link_all_deplibs, $1)=yes
-        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-        if test "$GXX" = yes; then
-          case $host_os in aix4.[[012]]|aix4.[[012]].*)
-          # We only want to do this on AIX 4.2 and lower, the check
-          # below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	    # We have reworked collect2
-	    :
-	  else
-	    # We have old collect2
-	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
-	    # It fails to find uninstalled libraries when the uninstalled
-	    # path is not listed in the libpath.  Setting hardcode_minus_L
-	    # to unsupported forces relinking
-	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
-	  fi
-          esac
-          shared_flag='-shared'
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag="$shared_flag "'${wl}-G'
-	  fi
-        else
-          # not using gcc
-          if test "$host_cpu" = ia64; then
-	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	  # chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-          else
-	    if test "$aix_use_runtimelinking" = yes; then
-	      shared_flag='${wl}-G'
-	    else
-	      shared_flag='${wl}-bM:SRE'
-	    fi
-          fi
-        fi
-
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-        # It seems that -bexpall does not export symbols beginning with
-        # underscore (_), so it is better to generate a list of symbols to
-	# export.
-        _LT_TAGVAR(always_export_symbols, $1)=yes
-        if test "$aix_use_runtimelinking" = yes; then
-          # Warning - without using the other runtime loading flags (-brtl),
-          # -berok will link without error, but may produce a broken library.
-          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-          # Determine the default libpath from the value encoded in an empty
-          # executable.
-          _LT_SYS_MODULE_PATH_AIX
-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-        else
-          if test "$host_cpu" = ia64; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-          else
-	    # Determine the default libpath from the value encoded in an
-	    # empty executable.
-	    _LT_SYS_MODULE_PATH_AIX
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	    # Warning - without using the other run time loading flags,
-	    # -berok will link without error, but may produce a broken library.
-	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	    # This is similar to how AIX traditionally builds its shared
-	    # libraries.
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-          fi
-        fi
-        ;;
-
-      beos*)
-	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-	  # support --undefined.  This deserves some investigation.  FIXME
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	else
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-
-      chorus*)
-        case $cc_basename in
-          *)
-	  # FIXME: insert proper C++ library support
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	  ;;
-        esac
-        ;;
-
-      cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-        # as there is no search path for DLLs.
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-        _LT_TAGVAR(always_export_symbols, $1)=no
-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          _LT_TAGVAR(ld_shlibs, $1)=no
-        fi
-        ;;
-      darwin* | rhapsody*)
-        _LT_DARWIN_LINKER_FEATURES($1)
-	;;
-
-      dgux*)
-        case $cc_basename in
-          ec++*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          ghcx*)
-	    # Green Hills C++ Compiler
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      freebsd[[12]]*)
-        # C++ shared libraries reported to be fairly broken before
-	# switch to ELF
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      freebsd-elf*)
-        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        ;;
-
-      freebsd* | dragonfly*)
-        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-        # conventions
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-        ;;
-
-      gnu*)
-        ;;
-
-      hpux9*)
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-				             # but as the default
-				             # location of the library.
-
-        case $cc_basename in
-          CC*)
-            # FIXME: insert proper C++ library support
-            _LT_TAGVAR(ld_shlibs, $1)=no
-            ;;
-          aCC*)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            # Commands to make compiler produce verbose output that lists
-            # what "hidden" libraries, object files and flags are used when
-            # linking a shared library.
-            #
-            # There doesn't appear to be a way to prevent this compiler from
-            # explicitly linking system object files so we need to strip them
-            # from the output so that they don't get included in the library
-            # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-            ;;
-          *)
-            if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            else
-              # FIXME: insert proper C++ library support
-              _LT_TAGVAR(ld_shlibs, $1)=no
-            fi
-            ;;
-        esac
-        ;;
-
-      hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-          case $host_cpu in
-            hppa*64*|ia64*)
-              ;;
-            *)
-	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-              ;;
-          esac
-        fi
-        case $host_cpu in
-          hppa*64*|ia64*)
-            _LT_TAGVAR(hardcode_direct, $1)=no
-            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-            ;;
-          *)
-            _LT_TAGVAR(hardcode_direct, $1)=yes
-            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-					         # but as the default
-					         # location of the library.
-            ;;
-        esac
-
-        case $cc_basename in
-          CC*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          aCC*)
-	    case $host_cpu in
-	      hppa*64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      ia64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      *)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	    esac
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test $with_gnu_ld = no; then
-	        case $host_cpu in
-	          hppa*64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          ia64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          *)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	        esac
-	      fi
-	    else
-	      # FIXME: insert proper C++ library support
-	      _LT_TAGVAR(ld_shlibs, $1)=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      interix[[3-9]]*)
-	_LT_TAGVAR(hardcode_direct, $1)=no
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-	# Instead, shared libraries are loaded at an image base (0x10000000 by
-	# default) and relocated if they conflict, which is a slow very memory
-	# consuming and fragmenting process.  To avoid this, we pick a random,
-	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	;;
-      irix5* | irix6*)
-        case $cc_basename in
-          CC*)
-	    # SGI C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test "$with_gnu_ld" = no; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	      else
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
-	      fi
-	    fi
-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
-	    ;;
-        esac
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(inherit_rpath, $1)=yes
-        ;;
-
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-	    ;;
-	  icpc* | ecpc* )
-	    # Intel C++
-	    with_gnu_ld=yes
-	    # version 8.0 and above of icpc choke on multiply defined symbols
-	    # if we add $predep_objects and $postdep_objects, however 7.1 and
-	    # earlier do not add the objects themselves.
-	    case `$CC -V 2>&1` in
-	      *"Version 7."*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	      *)  # Version 8.0 or newer
-	        tmp_idyn=
-	        case $host_cpu in
-		  ia64*) tmp_idyn=' -i_dynamic';;
-		esac
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	    esac
-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-	    ;;
-          pgCC* | pgcpp*)
-            # Portland Group C++ compiler
-	    case `$CC -V` in
-	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
-	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
-	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
-		$RANLIB $oldlib'
-	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    *) # Version 6 will use weak symbols
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    esac
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-            ;;
-	  cxx*)
-	    # Compaq C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
-	    runpath_var=LD_RUN_PATH
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  xl*)
-	    # IBM XL 8.0 on PPC, with GNU ld
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    if test "x$supports_anon_versioning" = xyes; then
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-		echo "local: *; };" >> $output_objdir/$libname.ver~
-		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-	    fi
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	      _LT_TAGVAR(compiler_needs_object, $1)=yes
-
-	      # Not sure whether something based on
-	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
-	      # would be better.
-	      output_verbose_link_cmd='echo'
-
-	      # Archives containing C++ object files must be created using
-	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	      # necessary to make sure instantiated templates are included
-	      # in the archive.
-	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-
-      lynxos*)
-        # FIXME: insert proper C++ library support
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      m88k*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      mvs*)
-        case $cc_basename in
-          cxx*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-	  *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-	esac
-	;;
-
-      netbsd*)
-        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-	  wlarc=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	fi
-	# Workaround some broken pre-1.5 toolchains
-	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-	;;
-
-      *nto* | *qnx*)
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-	;;
-
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      openbsd*)
-	if test -f /usr/libexec/ld.so; then
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-	  fi
-	  output_verbose_link_cmd=echo
-	else
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-
-      osf3* | osf4* | osf5*)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Archives containing C++ object files must be created using
-	    # the KAI C++ compiler.
-	    case $host in
-	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
-	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
-	    esac
-	    ;;
-          RCC*)
-	    # Rational C++ 2.4.1
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          cxx*)
-	    case $host in
-	      osf3*)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-		;;
-	      *)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
-	          $RM $lib.exp'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-		;;
-	    esac
-
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  *)
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	      case $host in
-	        osf3*)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	        *)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	      esac
-
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	      # Commands to make compiler produce verbose output that lists
-	      # what "hidden" libraries, object files and flags are used when
-	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-	    else
-	      # FIXME: insert proper C++ library support
-	      _LT_TAGVAR(ld_shlibs, $1)=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      psos*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      sunos4*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.x
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          lcc*)
-	    # Lucid
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      solaris*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
-	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	    case $host_os in
-	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-	      *)
-		# The compiler driver will combine and reorder linker options,
-		# but understands `-z linker_flag'.
-	        # Supported since Solaris 2.6 (maybe 2.5.1?)
-		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-	        ;;
-	    esac
-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
-
-	    output_verbose_link_cmd='echo'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	    ;;
-          gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
-	    # The C++ compiler must be used to create the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    # GNU C++ compiler with Solaris linker
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
-	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      else
-	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
-	        # platform.
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      fi
-
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
-	      case $host_os in
-		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-		*)
-		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-		  ;;
-	      esac
-	    fi
-	    ;;
-        esac
-        ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      case $cc_basename in
-        CC*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-      esac
-      ;;
-
-      sysv5* | sco3.2v5* | sco5v6*)
-	# Note: We can NOT use -z defs as we might desire, because we do not
-	# link with -lc, and that would cause any symbols used from libc to
-	# always be unresolved, which means just about no library would
-	# ever link correctly.  If we're not using GNU ld we use -z text
-	# though, which does catch some bad symbols but isn't as heavy-handed
-	# as -z defs.
-	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-	_LT_TAGVAR(link_all_deplibs, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-	runpath_var='LD_RUN_PATH'
-
-	case $cc_basename in
-          CC*)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	  *)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	esac
-      ;;
-
-      tandem*)
-        case $cc_basename in
-          NCC*)
-	    # NonStop-UX NCC 3.20
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      vxworks*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      *)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-    esac
-
-    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-    _LT_TAGVAR(GCC, $1)="$GXX"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  CC=$lt_save_CC
-  LDCXX=$LD
-  LD=$lt_save_LD
-  GCC=$lt_save_GCC
-  with_gnu_ld=$lt_save_with_gnu_ld
-  lt_cv_path_LDCXX=$lt_cv_path_LD
-  lt_cv_path_LD=$lt_save_path_LD
-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
-
-AC_LANG_POP
-])# _LT_LANG_CXX_CONFIG
-
-
-# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
-# ---------------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-# Dependencies to place before and after the object being linked:
-_LT_TAGVAR(predep_objects, $1)=
-_LT_TAGVAR(postdep_objects, $1)=
-_LT_TAGVAR(predeps, $1)=
-_LT_TAGVAR(postdeps, $1)=
-_LT_TAGVAR(compiler_lib_search_path, $1)=
-
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library.  It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
-int a;
-void foo (void) { a = 0; }
-_LT_EOF
-], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-_LT_EOF
-], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer*4 a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
-public class foo {
-  private int a;
-  public void bar (void) {
-    a = 0;
-  }
-};
-_LT_EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
-  # Parse the compiler output and extract the necessary
-  # objects, libraries and library flags.
-
-  # Sentinel used to keep track of whether or not we are before
-  # the conftest object file.
-  pre_test_object_deps_done=no
-
-  for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
-	 prev=$p
-	 continue
-       else
-	 prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
-	   # Internal compiler library paths should come after those
-	   # provided the user.  The postdeps already come after the
-	   # user supplied libs so there is no need to process them.
-	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
-	   else
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
-	   fi
-	   ;;
-	 # The "-l" case would never come before the object being
-	 # linked, so don't bother handling this case.
-	 esac
-       else
-	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
-	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
-	 else
-	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
-	 fi
-       fi
-       ;;
-
-    *.$objext)
-       # This assumes that the test object file only shows up
-       # once in the compiler output.
-       if test "$p" = "conftest.$objext"; then
-	 pre_test_object_deps_done=yes
-	 continue
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
-	   _LT_TAGVAR(predep_objects, $1)="$p"
-	 else
-	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
-	 fi
-       else
-	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
-	   _LT_TAGVAR(postdep_objects, $1)="$p"
-	 else
-	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
-	 fi
-       fi
-       ;;
-
-    *) ;; # Ignore the rest.
-
-    esac
-  done
-
-  # Clean up.
-  rm -f a.out a.exe
-else
-  echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$RM -f confest.$objext
-
-# PORTME: override above test on systems where it is broken
-m4_if([$1], [CXX],
-[case $host_os in
-interix[[3-9]]*)
-  # Interix 3.5 installs completely hosed .la files for C++, so rather than
-  # hack all around it, let's just trust "g++" to DTRT.
-  _LT_TAGVAR(predep_objects,$1)=
-  _LT_TAGVAR(postdep_objects,$1)=
-  _LT_TAGVAR(postdeps,$1)=
-  ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-esac
-])
-
-case " $_LT_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
-    [The directories searched by this compiler when creating a shared library])
-_LT_TAGDECL([], [predep_objects], [1],
-    [Dependencies to place before and after the objects being linked to
-    create a shared library])
-_LT_TAGDECL([], [postdep_objects], [1])
-_LT_TAGDECL([], [predeps], [1])
-_LT_TAGDECL([], [postdeps], [1])
-_LT_TAGDECL([], [compiler_lib_search_path], [1],
-    [The library search path used internally by the compiler when linking
-    a shared library])
-])# _LT_SYS_HIDDEN_LIBDEPS
-
-
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
-  _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
-# _LT_LANG_F77_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a Fortran 77 compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_F77_CONFIG],
-[AC_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the F77 compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_F77" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${F77-"f77"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-  GCC=$G77
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
-	fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$G77"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_F77" != yes
-
-AC_LANG_POP
-])# _LT_LANG_F77_CONFIG
-
-
-# _LT_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
-# _LT_LANG_FC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for a Fortran compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_FC_CONFIG],
-[AC_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for fc test sources.
-ac_ext=${ac_fc_srcext-f}
-
-# Object file extension for compiled fc test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the FC compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_FC" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${FC-"f95"}
-  compiler=$CC
-  GCC=$ac_cv_fc_compiler_gnu
-
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
-	fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_FC" != yes
-
-AC_LANG_POP
-])# _LT_LANG_FC_CONFIG
-
-
-# _LT_LANG_GCJ_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for the GNU Java Compiler compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_GCJ_CONFIG],
-[AC_REQUIRE([LT_PROG_GCJ])dnl
-AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=yes
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-
-  _LT_CONFIG($1)
-fi
-
-AC_LANG_RESTORE
-
-GCC=$lt_save_GCC
-CC="$lt_save_CC"
-])# _LT_LANG_GCJ_CONFIG
-
-
-# _LT_LANG_RC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for the Windows resource compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_RC_CONFIG],
-[AC_REQUIRE([LT_PROG_RC])dnl
-AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=
-CC=${RC-"windres"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-if test -n "$compiler"; then
-  :
-  _LT_CONFIG($1)
-fi
-
-GCC=$lt_save_GCC
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# _LT_LANG_RC_CONFIG
-
-
-# LT_PROG_GCJ
-# -----------
-AC_DEFUN([LT_PROG_GCJ],
-[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
-  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
-    [AC_CHECK_TOOL(GCJ, gcj,)
-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-      AC_SUBST(GCJFLAGS)])])[]dnl
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
-
-
-# LT_PROG_RC
-# ----------
-AC_DEFUN([LT_PROG_RC],
-[AC_CHECK_TOOL(RC, windres,)
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_RC], [])
-
-
-# _LT_DECL_EGREP
-# --------------
-# If we don't have a new enough Autoconf to choose the best grep
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_EGREP],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_REQUIRE([AC_PROG_FGREP])dnl
-test -z "$GREP" && GREP=grep
-_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
-_LT_DECL([], [EGREP], [1], [An ERE matcher])
-_LT_DECL([], [FGREP], [1], [A literal string matcher])
-dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
-AC_SUBST([GREP])
-])
-
-
-# _LT_DECL_OBJDUMP
-# --------------
-# If we don't have a new enough Autoconf to choose the best objdump
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_OBJDUMP],
-[AC_CHECK_TOOL(OBJDUMP, objdump, false)
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
-AC_SUBST([OBJDUMP])
-])
-
-
-# _LT_DECL_SED
-# ------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible.  Prefer GNU sed if found.
-m4_defun([_LT_DECL_SED],
-[AC_PROG_SED
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
-_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
-    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
-])# _LT_DECL_SED
-
-m4_ifndef([AC_PROG_SED], [
-# NOTE: This macro has been submitted for inclusion into   #
-#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
-#  a released version of Autoconf we should remove this    #
-#  macro and use it instead.                               #
-
-m4_defun([AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for lt_ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
-        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
-      fi
-    done
-  done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-  test ! -f $lt_ac_sed && continue
-  cat /dev/null > conftest.in
-  lt_ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
-  # Check for GNU sed and select it if it is found.
-  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
-    lt_cv_path_SED=$lt_ac_sed
-    break
-  fi
-  while true; do
-    cat conftest.in conftest.in >conftest.tmp
-    mv conftest.tmp conftest.in
-    cp conftest.in conftest.nl
-    echo >>conftest.nl
-    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
-    cmp -s conftest.out conftest.nl || break
-    # 10000 chars as input seems more than enough
-    test $lt_ac_count -gt 10 && break
-    lt_ac_count=`expr $lt_ac_count + 1`
-    if test $lt_ac_count -gt $lt_ac_max; then
-      lt_ac_max=$lt_ac_count
-      lt_cv_path_SED=$lt_ac_sed
-    fi
-  done
-done
-])
-SED=$lt_cv_path_SED
-AC_SUBST([SED])
-AC_MSG_RESULT([$SED])
-])#AC_PROG_SED
-])#m4_ifndef
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_SED], [])
-
-
-# _LT_CHECK_SHELL_FEATURES
-# ------------------------
-# Find out whether the shell is Bourne or XSI compatible,
-# or has some other useful features.
-m4_defun([_LT_CHECK_SHELL_FEATURES],
-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-AC_MSG_RESULT([$xsi_shell])
-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
-
-AC_MSG_CHECKING([whether the shell understands "+="])
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-AC_MSG_RESULT([$lt_shell_append])
-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  lt_unset=unset
-else
-  lt_unset=false
-fi
-_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
-  lt_SP2NL='tr \040 \012'
-  lt_NL2SP='tr \015\012 \040\040'
-  ;;
- *) # EBCDIC based system
-  lt_SP2NL='tr \100 \n'
-  lt_NL2SP='tr \r\n \100\100'
-  ;;
-esac
-_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
-_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
-])# _LT_CHECK_SHELL_FEATURES
-
-
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $[*] ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$[@]"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]+=\$[2]"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
-    ;;
-  esac
-])
-
-# Helper functions for option handling.                    -*- Autoconf -*-
-#
-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltoptions.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
-
-
-# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
-# ------------------------------------------
-m4_define([_LT_MANGLE_OPTION],
-[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
-
-
-# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
-# ---------------------------------------
-# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
-# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
-# saved as a flag.
-m4_define([_LT_SET_OPTION],
-[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
-m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
-        _LT_MANGLE_DEFUN([$1], [$2]),
-    [m4_warning([Unknown $1 option `$2'])])[]dnl
-])
-
-
-# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
-# ------------------------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-m4_define([_LT_IF_OPTION],
-[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
-
-
-# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
-# -------------------------------------------------------
-# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
-# are set.
-m4_define([_LT_UNLESS_OPTIONS],
-[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
-		      [m4_define([$0_found])])])[]dnl
-m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
-])[]dnl
-])
-
-
-# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
-# ----------------------------------------
-# OPTION-LIST is a space-separated list of Libtool options associated
-# with MACRO-NAME.  If any OPTION has a matching handler declared with
-# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
-# the unknown option and exit.
-m4_defun([_LT_SET_OPTIONS],
-[# Set options
-m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-    [_LT_SET_OPTION([$1], _LT_Option)])
-
-m4_if([$1],[LT_INIT],[
-  dnl
-  dnl Simply set some default values (i.e off) if boolean options were not
-  dnl specified:
-  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
-  ])
-  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
-  ])
-  dnl
-  dnl If no reference was made to various pairs of opposing options, then
-  dnl we run the default mode handler for the pair.  For example, if neither
-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
-  dnl archives by default:
-  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
-  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
-  		   [_LT_ENABLE_FAST_INSTALL])
-  ])
-])# _LT_SET_OPTIONS
-
-
-
-# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
-# -----------------------------------------
-m4_define([_LT_MANGLE_DEFUN],
-[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
-
-
-# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
-# -----------------------------------------------
-m4_define([LT_OPTION_DEFINE],
-[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
-])# LT_OPTION_DEFINE
-
-
-# dlopen
-# ------
-LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
-])
-
-AU_DEFUN([AC_LIBTOOL_DLOPEN],
-[_LT_SET_OPTION([LT_INIT], [dlopen])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `dlopen' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
-
-
-# win32-dll
-# ---------
-# Declare package support for building win32 dll's.
-LT_OPTION_DEFINE([LT_INIT], [win32-dll],
-[enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-esac
-
-test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [0], [Assembler program])dnl
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
-])# win32-dll
-
-AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-_LT_SET_OPTION([LT_INIT], [win32-dll])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `win32-dll' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
-
-
-# _LT_ENABLE_SHARED([DEFAULT])
-# ----------------------------
-# implement the --enable-shared flag, and supports the `shared' and
-# `disable-shared' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_SHARED],
-[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([shared],
-    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_shared=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
-
-    _LT_DECL([build_libtool_libs], [enable_shared], [0],
-	[Whether or not to build shared libraries])
-])# _LT_ENABLE_SHARED
-
-LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
-])
-
-AC_DEFUN([AC_DISABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], [disable-shared])
-])
-
-AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_SHARED], [])
-dnl AC_DEFUN([AM_DISABLE_SHARED], [])
-
-
-
-# _LT_ENABLE_STATIC([DEFAULT])
-# ----------------------------
-# implement the --enable-static flag, and support the `static' and
-# `disable-static' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_STATIC],
-[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([static],
-    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_static=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
-
-    _LT_DECL([build_old_libs], [enable_static], [0],
-	[Whether or not to build static libraries])
-])# _LT_ENABLE_STATIC
-
-LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
-])
-
-AC_DEFUN([AC_DISABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], [disable-static])
-])
-
-AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_STATIC], [])
-dnl AC_DEFUN([AM_DISABLE_STATIC], [])
-
-
-
-# _LT_ENABLE_FAST_INSTALL([DEFAULT])
-# ----------------------------------
-# implement the --enable-fast-install flag, and support the `fast-install'
-# and `disable-fast-install' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_FAST_INSTALL],
-[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([fast-install],
-    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_fast_install=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
-
-_LT_DECL([fast_install], [enable_fast_install], [0],
-	 [Whether or not to optimize for fast installation])dnl
-])# _LT_ENABLE_FAST_INSTALL
-
-LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
-
-# Old names:
-AU_DEFUN([AC_ENABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `fast-install' option into LT_INIT's first parameter.])
-])
-
-AU_DEFUN([AC_DISABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `disable-fast-install' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
-dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
-
-
-# _LT_WITH_PIC([MODE])
-# --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
-# LT_INIT options.
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
-m4_define([_LT_WITH_PIC],
-[AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
-	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
-    [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
-
-_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
-])# _LT_WITH_PIC
-
-LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
-
-# Old name:
-AU_DEFUN([AC_LIBTOOL_PICMODE],
-[_LT_SET_OPTION([LT_INIT], [pic-only])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `pic-only' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
-
-
-m4_define([_LTDL_MODE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
-		 [m4_define([_LTDL_MODE], [nonrecursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [recursive],
-		 [m4_define([_LTDL_MODE], [recursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [subproject],
-		 [m4_define([_LTDL_MODE], [subproject])])
-
-m4_define([_LTDL_TYPE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [installable],
-		 [m4_define([_LTDL_TYPE], [installable])])
-LT_OPTION_DEFINE([LTDL_INIT], [convenience],
-		 [m4_define([_LTDL_TYPE], [convenience])])
-
-# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
-#
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltsugar.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
-
-
-# lt_join(SEP, ARG1, [ARG2...])
-# -----------------------------
-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
-# associated separator.
-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
-# versions in m4sugar had bugs.
-m4_define([lt_join],
-[m4_if([$#], [1], [],
-       [$#], [2], [[$2]],
-       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
-m4_define([_lt_join],
-[m4_if([$#$2], [2], [],
-       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
-
-
-# lt_car(LIST)
-# lt_cdr(LIST)
-# ------------
-# Manipulate m4 lists.
-# These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
-m4_define([lt_car], [[$1]])
-m4_define([lt_cdr],
-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
-       [$#], 1, [],
-       [m4_dquote(m4_shift($@))])])
-m4_define([lt_unquote], $1)
-
-
-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
-# ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
-# Note that neither SEPARATOR nor STRING are expanded; they are appended
-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
-# than defined and empty).
-#
-# This macro is needed until we can rely on Autoconf 2.62, since earlier
-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
-m4_define([lt_append],
-[m4_define([$1],
-	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
-
-
-
-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
-# ----------------------------------------------------------
-# Produce a SEP delimited list of all paired combinations of elements of
-# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
-# has the form PREFIXmINFIXSUFFIXn.
-# Needed until we can rely on m4_combine added in Autoconf 2.62.
-m4_define([lt_combine],
-[m4_if(m4_eval([$# > 3]), [1],
-       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
-[[m4_foreach([_Lt_prefix], [$2],
-	     [m4_foreach([_Lt_suffix],
-		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
-	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
-
-
-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
-# -----------------------------------------------------------------------
-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
-m4_define([lt_if_append_uniq],
-[m4_ifdef([$1],
-	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
-		 [lt_append([$1], [$2], [$3])$4],
-		 [$5])],
-	  [lt_append([$1], [$2], [$3])$4])])
-
-
-# lt_dict_add(DICT, KEY, VALUE)
-# -----------------------------
-m4_define([lt_dict_add],
-[m4_define([$1($2)], [$3])])
-
-
-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
-# --------------------------------------------
-m4_define([lt_dict_add_subkey],
-[m4_define([$1($2:$3)], [$4])])
-
-
-# lt_dict_fetch(DICT, KEY, [SUBKEY])
-# ----------------------------------
-m4_define([lt_dict_fetch],
-[m4_ifval([$3],
-	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
-    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
-
-
-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
-# -----------------------------------------------------------------
-m4_define([lt_if_dict_fetch],
-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
-	[$5],
-    [$6])])
-
-
-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
-# --------------------------------------------------------------
-m4_define([lt_dict_filter],
-[m4_if([$5], [], [],
-  [lt_join(m4_quote(m4_default([$4], [[, ]])),
-           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
-		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
-])
-
-# ltversion.m4 -- version numbers			-*- Autoconf -*-
-#
-#   Copyright (C) 2004 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# Generated from ltversion.in.
-
-# serial 3017 ltversion.m4
-# This file is part of GNU Libtool
-
-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
-m4_define([LT_PACKAGE_REVISION], [1.3017])
-
-AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6b'
-macro_revision='1.3017'
-_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
-_LT_DECL(, macro_revision, 0)
-])
-
-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
-#
-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004.
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 4 lt~obsolete.m4
-
-# These exist entirely to fool aclocal when bootstrapping libtool.
-#
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
-# which have later been changed to m4_define as they aren't part of the
-# exported API, or moved to Autoconf or Automake where they belong.
-#
-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
-# using a macro with the same name in our local m4/libtool.m4 it'll
-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
-# and doesn't know about Autoconf macros at all.)
-#
-# So we provide this file, which has a silly filename so it's always
-# included after everything else.  This provides aclocal with the
-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
-# because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
-#
-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
-# Yes, that means every name once taken will need to remain here until
-# we give up compatibility with versions before 1.7, at which point
-# we need to keep only those names which we still refer to.
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
-
-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
-m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
-m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
-m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
-m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
-m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
-m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
-m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
-m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
-m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
-m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
-m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
-m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
-m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
-m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
-m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
-m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
-m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
-m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
-m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
-m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
-m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
-m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
-m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
-m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
-m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
-m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
-m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
-m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
-m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
-
 # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
@@ -8617,6 +651,41 @@
 rm -f confinc confmf
 ])
 
+# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
 # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
diff --git a/autotools/compile b/autotools/compile
new file mode 120000
index 0000000..cf0edba
--- /dev/null
+++ b/autotools/compile
@@ -0,0 +1 @@
+/usr/share/automake-1.11/compile
\ No newline at end of file
diff --git a/configure b/configure
index 418e632..aaa92ea 100755
--- a/configure
+++ b/configure
@@ -2,7 +2,7 @@
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.65 for breakpad 0.1.
 #
-# Report bugs to <opensource@google.com>.
+# Report bugs to <google-breakpad-dev@googlegroups.com>.
 #
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -231,7 +231,7 @@
     $as_echo "$0: be upgraded to zsh 4.3.4 or later."
   else
     $as_echo "$0: Please tell bug-autoconf@gnu.org and
-$0: opensource@google.com about your system, including any
+$0: google-breakpad-dev@googlegroups.com about your system, including any
 $0: error possibly output before this message. Then install
 $0: a modern shell, or manually run the script under such a
 $0: shell if you do have one."
@@ -529,155 +529,6 @@
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-$*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
-
-	  if test "$prev" != 'sed 50q "$0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
-
 test -n "$DJDIR" || exec 7<&0 </dev/null
 exec 6>&1
 
@@ -703,85 +554,27 @@
 PACKAGE_TARNAME='breakpad'
 PACKAGE_VERSION='0.1'
 PACKAGE_STRING='breakpad 0.1'
-PACKAGE_BUGREPORT='opensource@google.com'
+PACKAGE_BUGREPORT='google-breakpad-dev@googlegroups.com'
 PACKAGE_URL=''
 
 ac_unique_file="README"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
 ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
 LIBOBJS
 SELFTEST_FALSE
 SELFTEST_TRUE
+DISABLE_PROCESSOR_FALSE
+DISABLE_PROCESSOR_TRUE
+LINUX_HOST_FALSE
+LINUX_HOST_TRUE
 PTHREAD_CFLAGS
 PTHREAD_LIBS
 PTHREAD_CC
 ax_pthread_config
-LIBTOOL_DEPS
-CXXCPP
-OTOOL64
-OTOOL
-LIPO
-NMEDIT
-DSYMUTIL
-lt_ECHO
-RANLIB
-AR
-OBJDUMP
-LN_S
-NM
-ac_ct_DUMPBIN
-DUMPBIN
-LD
-FGREP
 EGREP
 GREP
-SED
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-LIBTOOL
+RANLIB
 am__fastdepCXX_FALSE
 am__fastdepCXX_TRUE
 CXXDEPMODE
@@ -828,6 +621,14 @@
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
 target_alias
 host_alias
 build_alias
@@ -870,13 +671,8 @@
 ac_user_opts='
 enable_option_checking
 enable_dependency_tracking
-enable_shared
-enable_static
-with_pic
-enable_fast_install
-with_gnu_ld
-enable_libtool_lock
 enable_m32
+enable_processor
 enable_selftest
 '
       ac_precious_vars='build_alias
@@ -890,8 +686,7 @@
 CPP
 CXX
 CXXFLAGS
-CCC
-CXXCPP'
+CCC'
 
 
 # Initialize some variables set by options.
@@ -1513,22 +1308,11 @@
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
-  --enable-shared[=PKGS]  build shared libraries [default=yes]
-  --enable-static[=PKGS]  build static libraries [default=yes]
-  --enable-fast-install[=PKGS]
-                          optimize for fast installation [default=yes]
-  --disable-libtool-lock  avoid locking (might break parallel builds)
   --enable-m32            Compile/build with -m32 (default is no)
+  --disable-processor     Don't build processor library (default is no)
   --enable-selftest       Run extra tests with "make check" (may conflict with
                           optimizations) (default is no)
 
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-pic              try to use only PIC/non-PIC objects [default=use
-                          both]
-  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-
 Some influential environment variables:
   CC          C compiler command
   CFLAGS      C compiler flags
@@ -1540,12 +1324,11 @@
   CPP         C preprocessor
   CXX         C++ compiler command
   CXXFLAGS    C++ compiler flags
-  CXXCPP      C++ preprocessor
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
-Report bugs to <opensource@google.com>.
+Report bugs to <google-breakpad-dev@googlegroups.com>.
 _ACEOF
 ac_status=$?
 fi
@@ -1735,6 +1518,48 @@
 
 } # ac_fn_cxx_try_compile
 
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
 # ac_fn_c_try_link LINENO
 # -----------------------
 # Try to link conftest.$ac_ext, and return whether this succeeded.
@@ -1781,229 +1606,6 @@
 
 } # ac_fn_c_try_link
 
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_func
-
-# ac_fn_cxx_try_cpp LINENO
-# ------------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
-	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_cpp
-
-# ac_fn_cxx_try_link LINENO
-# -------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_link
-
 # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
 # ----------------------------------------------------
 # Tries to find if the field MEMBER exists in type AGGR, after including
@@ -2436,6 +2038,78 @@
 
 
 
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
 am__api_version='1.11'
 
 # Find a good install program.  We prefer a C program (faster),
@@ -3978,6 +3652,132 @@
 fi
 
 
+if test "x$CC" != xcc; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+fi
+set dummy $CC; ac_cc=`$as_echo "$2" |
+		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+   test -f conftest2.$ac_objext && { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
+then
+  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+  if test "x$CC" != xcc; then
+    # Test first that cc exists at all.
+    if { ac_try='cc -c conftest.$ac_ext >&5'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+      rm -f conftest2.*
+      if { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+	 test -f conftest2.$ac_objext && { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
+      then
+	# cc works too.
+	:
+      else
+	# cc exists but doesn't like -o.
+	eval ac_cv_prog_cc_${ac_cc}_c_o=no
+      fi
+    fi
+  fi
+else
+  eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -4499,182 +4299,98 @@
 fi
 
 
-
-case `pwd` in
-  *\ * | *\	*)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
-$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
-esac
-
-
-
-macro_version='2.2.6b'
-macro_revision='1.3017'
-
-
-
-
-
-
-
-
-
-
-
-
-
-ltmain="$ac_aux_dir/ltmain.sh"
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
 else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
-     for ac_i in 1 2 3 4 5 6 7; do
-       ac_script="$ac_script$as_nl$ac_script"
-     done
-     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
-     { ac_script=; unset ac_script;}
-     if test -z "$SED"; then
-  ac_path_SED_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_prog in sed gsed; do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
-# Check for GNU ac_path_SED and select it if it is found.
-  # Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
-*GNU*)
-  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo '' >> "conftest.nl"
-    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_SED_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_SED="$ac_path_SED"
-      ac_path_SED_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_SED_found && break 3
-    done
-  done
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
   done
 IFS=$as_save_IFS
-  if test -z "$ac_cv_path_SED"; then
-    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
   fi
 else
-  ac_cv_path_SED=$SED
+  RANLIB="$ac_cv_prog_RANLIB"
 fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
- SED="$ac_cv_path_SED"
-  rm -f conftest.sed
-
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-
-
-
-
-
-
-
-
 
 
 
@@ -4808,9561 +4524,6 @@
  EGREP="$ac_cv_path_EGREP"
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
-$as_echo_n "checking for fgrep... " >&6; }
-if test "${ac_cv_path_FGREP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
-   then ac_cv_path_FGREP="$GREP -F"
-   else
-     if test -z "$FGREP"; then
-  ac_path_FGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in fgrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
-# Check for GNU ac_path_FGREP and select it if it is found.
-  # Check for GNU $ac_path_FGREP
-case `"$ac_path_FGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'FGREP' >> "conftest.nl"
-    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_FGREP="$ac_path_FGREP"
-      ac_path_FGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_FGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_FGREP"; then
-    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_FGREP=$FGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
-$as_echo "$ac_cv_path_FGREP" >&6; }
- FGREP="$ac_cv_path_FGREP"
-
-
-test -z "$GREP" && GREP=grep
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
-  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [\\/]* | ?:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if test "${lt_cv_path_LD+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
-	;;
-      *)
-	test "$with_gnu_ld" != yes && break
-	;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  # I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
-$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if test "${lt_cv_path_NM+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-    lt_nm_to_check="$lt_nm_to_check nm"
-  fi
-  for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
-      test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
-	#   nm: unknown option "B" ignored
-	# Tru64's nm complains that /dev/null is an invalid object file
-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-	*/dev/null* | *'Invalid file or object type'*)
-	  lt_cv_path_NM="$tmp_nm -B"
-	  break
-	  ;;
-	*)
-	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-	  */dev/null*)
-	    lt_cv_path_NM="$tmp_nm -p"
-	    break
-	    ;;
-	  *)
-	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-	    continue # so that we can try to find one that supports BSD flags
-	    ;;
-	  esac
-	  ;;
-	esac
-      fi
-    done
-    IFS="$lt_save_ifs"
-  done
-  : ${lt_cv_path_NM=no}
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
-$as_echo "$lt_cv_path_NM" >&6; }
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
-else
-  # Didn't find any BSD compatible name lister, look for dumpbin.
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$DUMPBIN"; then
-  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-DUMPBIN=$ac_cv_prog_DUMPBIN
-if test -n "$DUMPBIN"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
-$as_echo "$DUMPBIN" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$DUMPBIN" && break
-  done
-fi
-if test -z "$DUMPBIN"; then
-  ac_ct_DUMPBIN=$DUMPBIN
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_DUMPBIN"; then
-  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
-if test -n "$ac_ct_DUMPBIN"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
-$as_echo "$ac_ct_DUMPBIN" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_DUMPBIN" && break
-done
-
-  if test "x$ac_ct_DUMPBIN" = x; then
-    DUMPBIN=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    DUMPBIN=$ac_ct_DUMPBIN
-  fi
-fi
-
-
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
-  fi
-fi
-test -z "$NM" && NM=nm
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
-$as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if test "${lt_cv_nm_interface+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_nm_interface="BSD nm"
-  echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:5183: $ac_compile\"" >&5)
-  (eval "$ac_compile" 2>conftest.err)
-  cat conftest.err >&5
-  (eval echo "\"\$as_me:5186: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
-  cat conftest.err >&5
-  (eval echo "\"\$as_me:5189: output\"" >&5)
-  cat conftest.out >&5
-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
-    lt_cv_nm_interface="MS dumpbin"
-  fi
-  rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
-$as_echo "$lt_cv_nm_interface" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
-# find the maximum length of command line arguments
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
-$as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-    i=0
-  teststring="ABCD"
-
-  case $build_os in
-  msdosdjgpp*)
-    # On DJGPP, this test can blow up pretty badly due to problems in libc
-    # (any single argument exceeding 2000 bytes causes a buffer overrun
-    # during glob expansion).  Even if it were fixed, the result of this
-    # check would be larger than it should be.
-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
-    ;;
-
-  gnu*)
-    # Under GNU Hurd, this test is not required because there is
-    # no limit to the length of command line arguments.
-    # Libtool will interpret -1 as no limit whatsoever
-    lt_cv_sys_max_cmd_len=-1;
-    ;;
-
-  cygwin* | mingw* | cegcc*)
-    # On Win9x/ME, this test blows up -- it succeeds, but takes
-    # about 5 minutes as the teststring grows exponentially.
-    # Worse, since 9x/ME are not pre-emptively multitasking,
-    # you end up with a "frozen" computer, even though with patience
-    # the test eventually succeeds (with a max line length of 256k).
-    # Instead, let's just punt: use the minimum linelength reported by
-    # all of the supported platforms: 8192 (on NT/2K/XP).
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  amigaos*)
-    # On AmigaOS with pdksh, this test takes hours, literally.
-    # So we just punt and use a minimum line length of 8192.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # This has been around since 386BSD, at least.  Likely further.
-    if test -x /sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-    elif test -x /usr/sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-    else
-      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
-    fi
-    # And add a safety zone
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    ;;
-
-  interix*)
-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
-    lt_cv_sys_max_cmd_len=196608
-    ;;
-
-  osf*)
-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-    # nice to cause kernel panics so lets avoid the loop below.
-    # First set a reasonable default.
-    lt_cv_sys_max_cmd_len=16384
-    #
-    if test -x /sbin/sysconfig; then
-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
-      esac
-    fi
-    ;;
-  sco3.2v5*)
-    lt_cv_sys_max_cmd_len=102400
-    ;;
-  sysv5* | sco5v6* | sysv4.2uw2*)
-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-    if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[	 ]//'`
-    else
-      lt_cv_sys_max_cmd_len=32768
-    fi
-    ;;
-  *)
-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    else
-      # Make teststring a little bigger before we do anything with it.
-      # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
-        teststring=$teststring$teststring
-      done
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      # If test is not a shell built-in, we'll probably end up computing a
-      # maximum length that is only half of the actual maximum length, but
-      # we can't tell.
-      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
-	      test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      # Only check the string length outside the loop.
-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
-      teststring=
-      # Add a significant safety factor because C++ compilers can tack on
-      # massive amounts of additional arguments before passing them to the
-      # linker.  It appears as though 1/2 is a usable value.
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-    fi
-    ;;
-  esac
-
-fi
-
-if test -n $lt_cv_sys_max_cmd_len ; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
-$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
-$as_echo "none" >&6; }
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-
-
-
-
-
-: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
-$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
-$as_echo "$xsi_shell" >&6; }
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
-$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
-$as_echo "$lt_shell_append" >&6; }
-
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  lt_unset=unset
-else
-  lt_unset=false
-fi
-
-
-
-
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
-  lt_SP2NL='tr \040 \012'
-  lt_NL2SP='tr \015\012 \040\040'
-  ;;
- *) # EBCDIC based system
-  lt_SP2NL='tr \100 \n'
-  lt_NL2SP='tr \r\n \100\100'
-  ;;
-esac
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
-$as_echo_n "checking for $LD option to reload object files... " >&6; }
-if test "${lt_cv_ld_reload_flag+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_ld_reload_flag='-r'
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
-$as_echo "$lt_cv_ld_reload_flag" >&6; }
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
-set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$OBJDUMP"; then
-  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-OBJDUMP=$ac_cv_prog_OBJDUMP
-if test -n "$OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OBJDUMP"; then
-  ac_ct_OBJDUMP=$OBJDUMP
-  # Extract the first word of "objdump", so it can be a program name with args.
-set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_OBJDUMP"; then
-  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_OBJDUMP="objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
-if test -n "$ac_ct_OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_OBJDUMP" = x; then
-    OBJDUMP="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    OBJDUMP=$ac_ct_OBJDUMP
-  fi
-else
-  OBJDUMP="$ac_cv_prog_OBJDUMP"
-fi
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
-$as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if test "${lt_cv_deplibs_check_method+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[4-9]*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi[45]*)
-  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin*)
-  # func_win32_libid is a shell function defined in ltmain.sh
-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-  lt_cv_file_magic_cmd='func_win32_libid'
-  ;;
-
-mingw* | pw32*)
-  # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
-  # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-    lt_cv_file_magic_cmd='func_win32_libid'
-  else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-cegcc)
-  # use the weaker test based on 'objdump'. See mingw*.
-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | dragonfly*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  case $host_cpu in
-  ia64*)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-    ;;
-  hppa*64*)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-    ;;
-  *)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-interix[3-9]*)
-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $LD in
-  *-32|*"-32 ") libmagic=32-bit;;
-  *-n32|*"-n32 ") libmagic=N32;;
-  *-64|*"-64 ") libmagic=64-bit;;
-  *) libmagic=never-match;;
-  esac
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-netbsd* | netbsdelf*-gnu)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-*nto* | *qnx*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-rdos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.3*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  pc)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-
-tpf*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
-$as_echo "$lt_cv_deplibs_check_method" >&6; }
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
-  ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_AR"; then
-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_AR="ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_AR" = x; then
-    AR="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    AR=$ac_ct_AR
-  fi
-else
-  AR="$ac_cv_prog_AR"
-fi
-
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-
-
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_STRIP"; then
-  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_STRIP" = x; then
-    STRIP=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    STRIP=$ac_ct_STRIP
-  fi
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-test -z "$STRIP" && STRIP=:
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-test -z "$RANLIB" && RANLIB=:
-
-
-
-
-
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
-$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[BCDT]'
-  ;;
-cygwin* | mingw* | pw32* | cegcc*)
-  symcode='[ABCDGISTW]'
-  ;;
-hpux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[ABCDEGRST]'
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[BCDEGRST]'
-  ;;
-osf*)
-  symcode='[BCDEGQRST]'
-  ;;
-solaris*)
-  symcode='[BDRT]'
-  ;;
-sco3.2v5*)
-  symcode='[DT]'
-  ;;
-sysv4.2uw2*)
-  symcode='[DT]'
-  ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
-  symcode='[ABDT]'
-  ;;
-sysv4)
-  symcode='[DFNSTU]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[ABCDGIRSTW]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-  symxfrm="\\1 $ac_symprfx\\2 \\2"
-
-  # Write the raw and C identifiers.
-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
-    # Also find C++ and __fastcall symbols from MSVC++,
-    # which start with @ or ?.
-    lt_cv_sys_global_symbol_pipe="$AWK '"\
-"     {last_section=section; section=\$ 3};"\
-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-"     \$ 0!~/External *\|/{next};"\
-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-"     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-"     ' prfx=^$ac_symprfx"
-  else
-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-  fi
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
-  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-	mv -f "$nlist"T "$nlist"
-      else
-	rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
-	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
-	  cat <<_LT_EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
-	  # Now generate the symbol file.
-	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
-	  cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols.  */
-const struct {
-  const char *name;
-  void       *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[] =
-{
-  { "@PROGRAM@", (void *) 0 },
-_LT_EOF
-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
-	  cat <<\_LT_EOF >> conftest.$ac_ext
-  {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
-	  # Now try linking the two files.
-	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
-	  LIBS="conftstm.$ac_objext"
-	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
-	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
-	    pipe_works=yes
-	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
-	else
-	  echo "cannot find nm_test_func in $nlist" >&5
-	fi
-      else
-	echo "cannot find nm_test_var in $nlist" >&5
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
-    fi
-  else
-    echo "$progname: failed program was:" >&5
-    cat conftest.$ac_ext >&5
-  fi
-  rm -rf conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-
-fi
-
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then :
-  enableval=$enable_libtool_lock;
-fi
-
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    case `/usr/bin/file conftest.$ac_objext` in
-      *ELF-32*)
-	HPUX_IA64_MODE="32"
-	;;
-      *ELF-64*)
-	HPUX_IA64_MODE="64"
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '#line 6395 "configure"' > conftest.$ac_ext
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -melf32bsmip"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -melf32bmipn32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -melf64bmip"
-	;;
-      esac
-    else
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -32"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -n32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -64"
-	  ;;
-      esac
-    fi
-  fi
-  rm -rf conftest*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    case `/usr/bin/file conftest.o` in
-      *32-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_i386_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_i386"
-	    ;;
-	  ppc64-*linux*|powerpc64-*linux*)
-	    LD="${LD-ld} -m elf32ppclinux"
-	    ;;
-	  s390x-*linux*)
-	    LD="${LD-ld} -m elf_s390"
-	    ;;
-	  sparc64-*linux*)
-	    LD="${LD-ld} -m elf32_sparc"
-	    ;;
-	esac
-	;;
-      *64-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_x86_64_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_x86_64"
-	    ;;
-	  ppc*-*linux*|powerpc*-*linux*)
-	    LD="${LD-ld} -m elf64ppc"
-	    ;;
-	  s390*-*linux*|s390*-*tpf*)
-	    LD="${LD-ld} -m elf64_s390"
-	    ;;
-	  sparc*-*linux*)
-	    LD="${LD-ld} -m elf64_sparc"
-	    ;;
-	esac
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
-$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if test "${lt_cv_cc_needs_belf+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  lt_cv_cc_needs_belf=yes
-else
-  lt_cv_cc_needs_belf=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-     ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
-$as_echo "$lt_cv_cc_needs_belf" >&6; }
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-sparc*-*solaris*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    case `/usr/bin/file conftest.o` in
-    *64-bit*)
-      case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
-      *)
-	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
-	  LD="${LD-ld} -64"
-	fi
-	;;
-      esac
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-esac
-
-need_locks="$enable_libtool_lock"
-
-
-  case $host_os in
-    rhapsody* | darwin*)
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$DSYMUTIL"; then
-  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-DSYMUTIL=$ac_cv_prog_DSYMUTIL
-if test -n "$DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DSYMUTIL"; then
-  ac_ct_DSYMUTIL=$DSYMUTIL
-  # Extract the first word of "dsymutil", so it can be a program name with args.
-set dummy dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_DSYMUTIL"; then
-  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
-if test -n "$ac_ct_DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_DSYMUTIL" = x; then
-    DSYMUTIL=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    DSYMUTIL=$ac_ct_DSYMUTIL
-  fi
-else
-  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
-fi
-
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_NMEDIT+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$NMEDIT"; then
-  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-NMEDIT=$ac_cv_prog_NMEDIT
-if test -n "$NMEDIT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_NMEDIT"; then
-  ac_ct_NMEDIT=$NMEDIT
-  # Extract the first word of "nmedit", so it can be a program name with args.
-set dummy nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_NMEDIT"; then
-  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_NMEDIT="nmedit"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
-if test -n "$ac_ct_NMEDIT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
-$as_echo "$ac_ct_NMEDIT" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_NMEDIT" = x; then
-    NMEDIT=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    NMEDIT=$ac_ct_NMEDIT
-  fi
-else
-  NMEDIT="$ac_cv_prog_NMEDIT"
-fi
-
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
-set dummy ${ac_tool_prefix}lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_LIPO+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$LIPO"; then
-  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-LIPO=$ac_cv_prog_LIPO
-if test -n "$LIPO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
-$as_echo "$LIPO" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_LIPO"; then
-  ac_ct_LIPO=$LIPO
-  # Extract the first word of "lipo", so it can be a program name with args.
-set dummy lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_LIPO"; then
-  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_LIPO="lipo"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
-if test -n "$ac_ct_LIPO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
-$as_echo "$ac_ct_LIPO" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_LIPO" = x; then
-    LIPO=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    LIPO=$ac_ct_LIPO
-  fi
-else
-  LIPO="$ac_cv_prog_LIPO"
-fi
-
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$OTOOL"; then
-  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-OTOOL=$ac_cv_prog_OTOOL
-if test -n "$OTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
-$as_echo "$OTOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OTOOL"; then
-  ac_ct_OTOOL=$OTOOL
-  # Extract the first word of "otool", so it can be a program name with args.
-set dummy otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_OTOOL"; then
-  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_OTOOL="otool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
-if test -n "$ac_ct_OTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
-$as_echo "$ac_ct_OTOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_OTOOL" = x; then
-    OTOOL=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    OTOOL=$ac_ct_OTOOL
-  fi
-else
-  OTOOL="$ac_cv_prog_OTOOL"
-fi
-
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
-set dummy ${ac_tool_prefix}otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL64+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$OTOOL64"; then
-  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-OTOOL64=$ac_cv_prog_OTOOL64
-if test -n "$OTOOL64"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
-$as_echo "$OTOOL64" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OTOOL64"; then
-  ac_ct_OTOOL64=$OTOOL64
-  # Extract the first word of "otool64", so it can be a program name with args.
-set dummy otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_OTOOL64"; then
-  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_OTOOL64="otool64"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
-if test -n "$ac_ct_OTOOL64"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
-$as_echo "$ac_ct_OTOOL64" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_OTOOL64" = x; then
-    OTOOL64=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    OTOOL64=$ac_ct_OTOOL64
-  fi
-else
-  OTOOL64="$ac_cv_prog_OTOOL64"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
-$as_echo_n "checking for -single_module linker flag... " >&6; }
-if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
-	# By default we will add the -single_module flag. You can override
-	# by either setting the environment variable LT_MULTI_MODULE
-	# non-empty at configure time, or by adding -multi_module to the
-	# link flags.
-	rm -rf libconftest.dylib*
-	echo "int foo(void){return 1;}" > conftest.c
-	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&5
-	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
-        _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
-	  lt_cv_apple_cc_single_mod=yes
-	else
-	  cat conftest.err >&5
-	fi
-	rm -rf libconftest.dylib*
-	rm -f conftest.*
-      fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
-$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
-$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_ld_exported_symbols_list=no
-      save_LDFLAGS=$LDFLAGS
-      echo "_main" > conftest.sym
-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  lt_cv_ld_exported_symbols_list=yes
-else
-  lt_cv_ld_exported_symbols_list=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-	LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
-$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
-    case $host_os in
-    rhapsody* | darwin1.[012])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[012]*)
-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-	10.*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-		  inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in dlfcn.h
-do :
-  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
-_ACEOF
-
-fi
-
-done
-
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CXX" && break
-done
-
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CXX=$ac_ct_CXX
-  fi
-fi
-
-  fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-	 CXXFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  fi
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CXX"  am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CXX_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CXX_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CXX_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
-  am__fastdepCXX_TRUE=
-  am__fastdepCXX_FALSE='#'
-else
-  am__fastdepCXX_TRUE='#'
-  am__fastdepCXX_FALSE=
-fi
-
-
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
-$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
-if test -z "$CXXCPP"; then
-  if test "${ac_cv_prog_CXXCPP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CXXCPP needs to be expanded
-    for CXXCPP in "$CXX -E" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CXXCPP=$CXXCPP
-
-fi
-  CXXCPP=$ac_cv_prog_CXXCPP
-else
-  ac_cv_prog_CXXCPP=$CXXCPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
-$as_echo "$CXXCPP" >&6; }
-ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-_lt_caught_CXX_error=yes; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-else
-  _lt_caught_CXX_error=yes
-fi
-
-
-
-
-
-# Set options
-
-
-
-        enable_dlopen=no
-
-
-  enable_win32_dll=no
-
-
-            # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then :
-  enableval=$enable_shared; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_shared=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_shared=yes
-fi
-
-
-
-
-
-
-
-
-
-  # Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then :
-  enableval=$enable_static; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_static=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_static=yes
-fi
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then :
-  withval=$with_pic; pic_mode="$withval"
-else
-  pic_mode=default
-fi
-
-
-test -z "$pic_mode" && pic_mode=default
-
-
-
-
-
-
-
-  # Check whether --enable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then :
-  enableval=$enable_fast_install; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_fast_install=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_fast_install=yes
-fi
-
-
-
-
-
-
-
-
-
-
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-test -z "$LN_S" && LN_S="ln -s"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-if test -n "${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
-$as_echo_n "checking for objdir... " >&6; }
-if test "${lt_cv_objdir+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  lt_cv_objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
-$as_echo "$lt_cv_objdir" >&6; }
-objdir=$lt_cv_objdir
-
-
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define LT_OBJDIR "$lt_cv_objdir/"
-_ACEOF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
-$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $MAGIC_CMD in
-[\\/*] |  ?:[\\/]*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/${ac_tool_prefix}file; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
-      if test -n "$file_magic_test_file"; then
-	case $deplibs_check_method in
-	"file_magic "*)
-	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-	    $EGREP "$file_magic_regex" > /dev/null; then
-	    :
-	  else
-	    cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
-	  fi ;;
-	esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
-
-
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
-$as_echo_n "checking for file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $MAGIC_CMD in
-[\\/*] |  ?:[\\/]*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/file; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/file"
-      if test -n "$file_magic_test_file"; then
-	case $deplibs_check_method in
-	"file_magic "*)
-	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-	    $EGREP "$file_magic_regex" > /dev/null; then
-	    :
-	  else
-	    cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
-	  fi ;;
-	esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  else
-    MAGIC_CMD=:
-  fi
-fi
-
-  fi
-  ;;
-esac
-
-# Use C for the default configuration in the libtool script
-
-lt_save_CC="$CC"
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-objext=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-
-
-if test -n "$compiler"; then
-
-lt_prog_compiler_no_builtin_flag=
-
-if test "$GCC" = yes; then
-  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_rtti_exceptions=no
-   ac_outfile=conftest.$ac_objext
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="-fno-rtti -fno-exceptions"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8311: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:8315: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_rtti_exceptions=yes
-     fi
-   fi
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
-
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
-    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
-else
-    :
-fi
-
-fi
-
-
-
-
-
-
-  lt_prog_compiler_wl=
-lt_prog_compiler_pic=
-lt_prog_compiler_static=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
-  if test "$GCC" = yes; then
-    lt_prog_compiler_wl='-Wl,'
-    lt_prog_compiler_static='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	lt_prog_compiler_static='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            lt_prog_compiler_pic='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      lt_prog_compiler_pic='-DDLL_EXPORT'
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      lt_prog_compiler_pic='-fno-common'
-      ;;
-
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	# +Z the default
-	;;
-      *)
-	lt_prog_compiler_pic='-fPIC'
-	;;
-      esac
-      ;;
-
-    interix[3-9]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      lt_prog_compiler_can_build_shared=no
-      enable_shared=no
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      lt_prog_compiler_pic='-fPIC -shared'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	lt_prog_compiler_pic=-Kconform_pic
-      fi
-      ;;
-
-    *)
-      lt_prog_compiler_pic='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      lt_prog_compiler_wl='-Wl,'
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	lt_prog_compiler_static='-Bstatic'
-      else
-	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      lt_prog_compiler_pic='-DDLL_EXPORT'
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      lt_prog_compiler_wl='-Wl,'
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case $host_cpu in
-      hppa*64*|ia64*)
-	# +Z the default
-	;;
-      *)
-	lt_prog_compiler_pic='+Z'
-	;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      lt_prog_compiler_static='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      lt_prog_compiler_wl='-Wl,'
-      # PIC (with -KPIC) is the default.
-      lt_prog_compiler_static='-non_shared'
-      ;;
-
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
-      case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
-      ecc*)
-	lt_prog_compiler_wl='-Wl,'
-	lt_prog_compiler_pic='-KPIC'
-	lt_prog_compiler_static='-static'
-        ;;
-      # icc used to be incompatible with GCC.
-      # ICC 10 doesn't accept -KPIC any more.
-      icc* | ifort*)
-	lt_prog_compiler_wl='-Wl,'
-	lt_prog_compiler_pic='-fPIC'
-	lt_prog_compiler_static='-static'
-        ;;
-      # Lahey Fortran 8.1.
-      lf95*)
-	lt_prog_compiler_wl='-Wl,'
-	lt_prog_compiler_pic='--shared'
-	lt_prog_compiler_static='--static'
-	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-	# which looks to be a dead project)
-	lt_prog_compiler_wl='-Wl,'
-	lt_prog_compiler_pic='-fpic'
-	lt_prog_compiler_static='-Bstatic'
-        ;;
-      ccc*)
-        lt_prog_compiler_wl='-Wl,'
-        # All Alpha code is PIC.
-        lt_prog_compiler_static='-non_shared'
-        ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
-	lt_prog_compiler_wl='-Wl,'
-	lt_prog_compiler_pic='-qpic'
-	lt_prog_compiler_static='-qstaticlink'
-	;;
-      *)
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)
-	  # Sun C 5.9
-	  lt_prog_compiler_pic='-KPIC'
-	  lt_prog_compiler_static='-Bstatic'
-	  lt_prog_compiler_wl='-Wl,'
-	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  lt_prog_compiler_pic='-KPIC'
-	  lt_prog_compiler_static='-Bstatic'
-	  lt_prog_compiler_wl=''
-	  ;;
-	esac
-	;;
-      esac
-      ;;
-
-    newsos6)
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      lt_prog_compiler_pic='-fPIC -shared'
-      ;;
-
-    osf3* | osf4* | osf5*)
-      lt_prog_compiler_wl='-Wl,'
-      # All OSF/1 code is PIC.
-      lt_prog_compiler_static='-non_shared'
-      ;;
-
-    rdos*)
-      lt_prog_compiler_static='-non_shared'
-      ;;
-
-    solaris*)
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-	lt_prog_compiler_wl='-Qoption ld ';;
-      *)
-	lt_prog_compiler_wl='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      lt_prog_compiler_wl='-Qoption ld '
-      lt_prog_compiler_pic='-PIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      lt_prog_compiler_wl='-Wl,'
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-	lt_prog_compiler_pic='-Kconform_pic'
-	lt_prog_compiler_static='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      lt_prog_compiler_wl='-Wl,'
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    unicos*)
-      lt_prog_compiler_wl='-Wl,'
-      lt_prog_compiler_can_build_shared=no
-      ;;
-
-    uts4*)
-      lt_prog_compiler_pic='-pic'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    *)
-      lt_prog_compiler_can_build_shared=no
-      ;;
-    esac
-  fi
-
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    lt_prog_compiler_pic=
-    ;;
-  *)
-    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
-    ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
-$as_echo "$lt_prog_compiler_pic" >&6; }
-
-
-
-
-
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_pic_works=no
-   ac_outfile=conftest.$ac_objext
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8650: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:8654: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_pic_works=yes
-     fi
-   fi
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
-    case $lt_prog_compiler_pic in
-     "" | " "*) ;;
-     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
-     esac
-else
-    lt_prog_compiler_pic=
-     lt_prog_compiler_can_build_shared=no
-fi
-
-fi
-
-
-
-
-
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_static_works=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         lt_cv_prog_compiler_static_works=yes
-       fi
-     else
-       lt_cv_prog_compiler_static_works=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
-$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works" = xyes; then
-    :
-else
-    lt_prog_compiler_static=
-fi
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_c_o=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8755: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:8759: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o=yes
-     fi
-   fi
-   chmod u+w . 2>&5
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_c_o=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8810: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:8814: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o=yes
-     fi
-   fi
-   chmod u+w . 2>&5
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
-  runpath_var=
-  allow_undefined_flag=
-  always_export_symbols=no
-  archive_cmds=
-  archive_expsym_cmds=
-  compiler_needs_object=no
-  enable_shared_with_static_runtimes=no
-  export_dynamic_flag_spec=
-  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  hardcode_automatic=no
-  hardcode_direct=no
-  hardcode_direct_absolute=no
-  hardcode_libdir_flag_spec=
-  hardcode_libdir_flag_spec_ld=
-  hardcode_libdir_separator=
-  hardcode_minus_L=no
-  hardcode_shlibpath_var=unsupported
-  inherit_rpath=no
-  link_all_deplibs=unknown
-  module_cmds=
-  module_expsym_cmds=
-  old_archive_from_new_cmds=
-  old_archive_from_expsyms_cmds=
-  thread_safe_flag_spec=
-  whole_archive_flag_spec=
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  include_expsyms=
-  # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
-  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-  # platforms (ab)use it in PIC code, but their linkers get confused if
-  # the symbol is explicitly referenced.  Since portable code cannot
-  # rely on this symbol name, it's probably fine to never include it in
-  # preloaded symbol tables.
-  # Exclude shared library initialization/finalization symbols.
-  extract_expsyms_cmds=
-
-  case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  linux* | k*bsd*-gnu)
-    link_all_deplibs=no
-    ;;
-  esac
-
-  ld_shlibs=yes
-  if test "$with_gnu_ld" = yes; then
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
-
-    # Set some defaults for GNU ld with shared library support. These
-    # are reset later if shared libraries are not supported. Putting them
-    # here allows them to be overridden if necessary.
-    runpath_var=LD_RUN_PATH
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    export_dynamic_flag_spec='${wl}--export-dynamic'
-    # ancient GNU ld didn't support --whole-archive et. al.
-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      whole_archive_flag_spec=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>&1` in
-      *GNU\ gold*) supports_anon_versioning=yes ;;
-      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-      *\ 2.11.*) ;; # other 2.11 versions
-      *) supports_anon_versioning=yes ;;
-    esac
-
-    # See if GNU ld supports shared libraries.
-    case $host_os in
-    aix[3-9]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-	ld_shlibs=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-_LT_EOF
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            archive_expsym_cmds=''
-        ;;
-      m68k)
-            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            hardcode_libdir_flag_spec='-L$libdir'
-            hardcode_minus_L=yes
-        ;;
-      esac
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	allow_undefined_flag=unsupported
-	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-	# support --undefined.  This deserves some investigation.  FIXME
-	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-	ld_shlibs=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
-      # as there is no search path for DLLs.
-      hardcode_libdir_flag_spec='-L$libdir'
-      allow_undefined_flag=unsupported
-      always_export_symbols=no
-      enable_shared_with_static_runtimes=yes
-      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	  cp $export_symbols $output_objdir/$soname.def;
-	else
-	  echo EXPORTS > $output_objdir/$soname.def;
-	  cat $export_symbols >> $output_objdir/$soname.def;
-	fi~
-	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-      else
-	ld_shlibs=no
-      fi
-      ;;
-
-    interix[3-9]*)
-      hardcode_direct=no
-      hardcode_shlibpath_var=no
-      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-      export_dynamic_flag_spec='${wl}-E'
-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-      # Instead, shared libraries are loaded at an image base (0x10000000 by
-      # default) and relocated if they conflict, which is a slow very memory
-      # consuming and fragmenting process.  To avoid this, we pick a random,
-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      ;;
-
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
-      tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
-	case $cc_basename in
-	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
-	esac
-      fi
-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-	 && test "$tmp_diet" = no
-      then
-	tmp_addflag=
-	tmp_sharedflag='-shared'
-	case $cc_basename,$host_cpu in
-        pgcc*)				# Portland Group C compiler
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag'
-	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag -Mnomain' ;;
-	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
-	  tmp_addflag=' -i_dynamic' ;;
-	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
-	  tmp_addflag=' -i_dynamic -nofor_main' ;;
-	ifc* | ifort*)			# Intel Fortran compiler
-	  tmp_addflag=' -nofor_main' ;;
-	lf95*)				# Lahey Fortran 8.1
-	  whole_archive_flag_spec=
-	  tmp_sharedflag='--shared' ;;
-	xl[cC]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
-	  tmp_sharedflag='-qmkshrobj'
-	  tmp_addflag= ;;
-	esac
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)			# Sun C 5.9
-	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  compiler_needs_object=yes
-	  tmp_sharedflag='-G' ;;
-	*Sun\ F*)			# Sun Fortran 8.3
-	  tmp_sharedflag='-G' ;;
-	esac
-	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-        if test "x$supports_anon_versioning" = xyes; then
-          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
-	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	    echo "local: *; };" >> $output_objdir/$libname.ver~
-	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-        fi
-
-	case $cc_basename in
-	xlf*)
-	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
-	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
-	  hardcode_libdir_flag_spec=
-	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
-	  archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-	  if test "x$supports_anon_versioning" = xyes; then
-	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
-	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-	  fi
-	  ;;
-	esac
-      else
-        ld_shlibs=no
-      fi
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-	wlarc=
-      else
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris*)
-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
-	ld_shlibs=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	ld_shlibs=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
-	ld_shlibs=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-	;;
-	*)
-	  # For security reasons, it is highly recommended that you always
-	  # use absolute paths for naming shared libraries, and exclude the
-	  # DT_RUNPATH tag from executables and libraries.  But doing so
-	  # requires that you compile everything twice, which is a pain.
-	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-	  else
-	    ld_shlibs=no
-	  fi
-	;;
-      esac
-      ;;
-
-    sunos4*)
-      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	ld_shlibs=no
-      fi
-      ;;
-    esac
-
-    if test "$ld_shlibs" = no; then
-      runpath_var=
-      hardcode_libdir_flag_spec=
-      export_dynamic_flag_spec=
-      whole_archive_flag_spec=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      allow_undefined_flag=unsupported
-      always_export_symbols=yes
-      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      hardcode_minus_L=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-	# Neither direct hardcoding nor static linking is supported with a
-	# broken collect2.
-	hardcode_direct=unsupported
-      fi
-      ;;
-
-    aix[4-9]*)
-      if test "$host_cpu" = ia64; then
-	# On IA64, the linker does run time linking by default, so we don't
-	# have to do anything special.
-	aix_use_runtimelinking=no
-	exp_sym_flag='-Bexport'
-	no_entry_flag=""
-      else
-	# If we're using GNU nm, then we don't want the "-C" option.
-	# -C means demangle to AIX nm, but means don't demangle with GNU nm
-	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	else
-	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	fi
-	aix_use_runtimelinking=no
-
-	# Test if we are trying to use run time linking or normal
-	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
-	# need to do runtime linking.
-	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
-	  for ld_flag in $LDFLAGS; do
-	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-	    aix_use_runtimelinking=yes
-	    break
-	  fi
-	  done
-	  ;;
-	esac
-
-	exp_sym_flag='-bexport'
-	no_entry_flag='-bnoentry'
-      fi
-
-      # When large executables or shared objects are built, AIX ld can
-      # have problems creating the table of contents.  If linking a library
-      # or program results in "error TOC overflow" add -mminimal-toc to
-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-      archive_cmds=''
-      hardcode_direct=yes
-      hardcode_direct_absolute=yes
-      hardcode_libdir_separator=':'
-      link_all_deplibs=yes
-      file_list_spec='${wl}-f,'
-
-      if test "$GCC" = yes; then
-	case $host_os in aix4.[012]|aix4.[012].*)
-	# We only want to do this on AIX 4.2 and lower, the check
-	# below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	  # We have reworked collect2
-	  :
-	  else
-	  # We have old collect2
-	  hardcode_direct=unsupported
-	  # It fails to find uninstalled libraries when the uninstalled
-	  # path is not listed in the libpath.  Setting hardcode_minus_L
-	  # to unsupported forces relinking
-	  hardcode_minus_L=yes
-	  hardcode_libdir_flag_spec='-L$libdir'
-	  hardcode_libdir_separator=
-	  fi
-	  ;;
-	esac
-	shared_flag='-shared'
-	if test "$aix_use_runtimelinking" = yes; then
-	  shared_flag="$shared_flag "'${wl}-G'
-	fi
-	link_all_deplibs=no
-      else
-	# not using gcc
-	if test "$host_cpu" = ia64; then
-	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	# chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-	else
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag='${wl}-G'
-	  else
-	    shared_flag='${wl}-bM:SRE'
-	  fi
-	fi
-      fi
-
-      export_dynamic_flag_spec='${wl}-bexpall'
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      always_export_symbols=yes
-      if test "$aix_use_runtimelinking" = yes; then
-	# Warning - without using the other runtime loading flags (-brtl),
-	# -berok will link without error, but may produce a broken library.
-	allow_undefined_flag='-berok'
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-      else
-	if test "$host_cpu" = ia64; then
-	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
-	  allow_undefined_flag="-z nodefs"
-	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-	else
-	 # Determine the default libpath from the value encoded in an
-	 # empty executable.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-	  # Warning - without using the other run time loading flags,
-	  # -berok will link without error, but may produce a broken library.
-	  no_undefined_flag=' ${wl}-bernotok'
-	  allow_undefined_flag=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  whole_archive_flag_spec='$convenience'
-	  archive_cmds_need_lc=yes
-	  # This is similar to how AIX traditionally builds its shared libraries.
-	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-	fi
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            archive_expsym_cmds=''
-        ;;
-      m68k)
-            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            hardcode_libdir_flag_spec='-L$libdir'
-            hardcode_minus_L=yes
-        ;;
-      esac
-      ;;
-
-    bsdi[45]*)
-      export_dynamic_flag_spec=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      hardcode_libdir_flag_spec=' '
-      allow_undefined_flag=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      old_archive_from_new_cmds='true'
-      # FIXME: Should let the user specify the lib program.
-      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes=yes
-      ;;
-
-    darwin* | rhapsody*)
-
-
-  archive_cmds_need_lc=no
-  hardcode_direct=no
-  hardcode_automatic=yes
-  hardcode_shlibpath_var=unsupported
-  whole_archive_flag_spec=''
-  link_all_deplibs=yes
-  allow_undefined_flag="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
-    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
-  else
-  ld_shlibs=no
-  fi
-
-      ;;
-
-    dgux*)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_shlibpath_var=no
-      ;;
-
-    freebsd1*)
-      ld_shlibs=no
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # does not break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct=yes
-      hardcode_minus_L=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-	archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-      hardcode_libdir_separator=:
-      hardcode_direct=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      hardcode_minus_L=yes
-      export_dynamic_flag_spec='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-	hardcode_libdir_flag_spec_ld='+b $libdir'
-	hardcode_libdir_separator=:
-	hardcode_direct=yes
-	hardcode_direct_absolute=yes
-	export_dynamic_flag_spec='${wl}-E'
-	# hardcode_minus_L: Not really in the search PATH,
-	# but as the default location of the library.
-	hardcode_minus_L=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	case $host_cpu in
-	hppa*64*)
-	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      else
-	case $host_cpu in
-	hppa*64*)
-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      fi
-      if test "$with_gnu_ld" = no; then
-	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-	hardcode_libdir_separator=:
-
-	case $host_cpu in
-	hppa*64*|ia64*)
-	  hardcode_direct=no
-	  hardcode_shlibpath_var=no
-	  ;;
-	*)
-	  hardcode_direct=yes
-	  hardcode_direct_absolute=yes
-	  export_dynamic_flag_spec='${wl}-E'
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  hardcode_minus_L=yes
-	  ;;
-	esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	# Try to use the -exported_symbol ld option, if it does not
-	# work, assume that -exports_file does not work either and
-	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int foo(void) {}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-        LDFLAGS="$save_LDFLAGS"
-      else
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-      fi
-      archive_cmds_need_lc='no'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      inherit_rpath=yes
-      link_all_deplibs=yes
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    newsos6)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct=yes
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      hardcode_shlibpath_var=no
-      ;;
-
-    *nto* | *qnx*)
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-	hardcode_direct=yes
-	hardcode_shlibpath_var=no
-	hardcode_direct_absolute=yes
-	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-	  export_dynamic_flag_spec='${wl}-E'
-	else
-	  case $host_os in
-	   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-	     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	     hardcode_libdir_flag_spec='-R$libdir'
-	     ;;
-	   *)
-	     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-	     ;;
-	  esac
-	fi
-      else
-	ld_shlibs=no
-      fi
-      ;;
-
-    os2*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      allow_undefined_flag=unsupported
-      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      archive_cmds_need_lc='no'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-
-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      else
-	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
-	# Both c and cxx compiler support -rpath directly
-	hardcode_libdir_flag_spec='-rpath $libdir'
-      fi
-      archive_cmds_need_lc='no'
-      hardcode_libdir_separator=:
-      ;;
-
-    solaris*)
-      no_undefined_flag=' -z defs'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-      else
-	case `$CC -V 2>&1` in
-	*"Compilers 5.0"*)
-	  wlarc=''
-	  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
-	  ;;
-	*)
-	  wlarc='${wl}'
-	  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
-	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-	  ;;
-	esac
-      fi
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_shlibpath_var=no
-      case $host_os in
-      solaris2.[0-5] | solaris2.[0-5].*) ;;
-      *)
-	# The compiler driver will combine and reorder linker options,
-	# but understands `-z linker_flag'.  GCC discards it without `$wl',
-	# but is careful enough not to reorder.
-	# Supported since Solaris 2.6 (maybe 2.5.1?)
-	if test "$GCC" = yes; then
-	  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-	else
-	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
-	fi
-	;;
-      esac
-      link_all_deplibs=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-	# Use $CC to link under sequent, because it throws in some extra .o
-	# files that make .init and .fini sections work.
-	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_direct=yes
-      hardcode_minus_L=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-	sni)
-	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  hardcode_direct=yes # is this really true???
-	;;
-	siemens)
-	  ## LD is ld it makes a PLAMLIB
-	  ## CC just makes a GrossModule.
-	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-	  reload_cmds='$CC -r -o $output$reload_objs'
-	  hardcode_direct=no
-        ;;
-	motorola)
-	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
-	;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      hardcode_shlibpath_var=no
-      ;;
-
-    sysv4.3*)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_shlibpath_var=no
-      export_dynamic_flag_spec='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	hardcode_shlibpath_var=no
-	runpath_var=LD_RUN_PATH
-	hardcode_runpath_var=yes
-	ld_shlibs=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      no_undefined_flag='${wl}-z,text'
-      archive_cmds_need_lc=no
-      hardcode_shlibpath_var=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
-      # link with -lc, and that would cause any symbols used from libc to
-      # always be unresolved, which means just about no library would
-      # ever link correctly.  If we're not using GNU ld we use -z text
-      # though, which does catch some bad symbols but isn't as heavy-handed
-      # as -z defs.
-      no_undefined_flag='${wl}-z,text'
-      allow_undefined_flag='${wl}-z,nodefs'
-      archive_cmds_need_lc=no
-      hardcode_shlibpath_var=no
-      hardcode_libdir_flag_spec='${wl}-R,$libdir'
-      hardcode_libdir_separator=':'
-      link_all_deplibs=yes
-      export_dynamic_flag_spec='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_shlibpath_var=no
-      ;;
-
-    *)
-      ld_shlibs=no
-      ;;
-    esac
-
-    if test x$host_vendor = xsni; then
-      case $host in
-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-	export_dynamic_flag_spec='${wl}-Blargedynsym'
-	;;
-      esac
-    fi
-  fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
-$as_echo "$ld_shlibs" >&6; }
-test "$ld_shlibs" = no && can_build_shared=no
-
-with_gnu_ld=$with_gnu_ld
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc" in
-x|xyes)
-  # Assume -lc should be added
-  archive_cmds_need_lc=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $archive_cmds in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl
-	pic_flag=$lt_prog_compiler_pic
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag
-        allow_undefined_flag=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
-  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-        then
-	  archive_cmds_need_lc=no
-        else
-	  archive_cmds_need_lc=yes
-        fi
-        allow_undefined_flag=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
-$as_echo "$archive_cmds_need_lc" >&6; }
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
-    # if the path contains ";" then we assume it to be the separator
-    # otherwise default to the standard path separator (i.e. ":") - it is
-    # assumed that no part of a normal pathname contains ";" but that should
-    # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
-  # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
-  lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
-  for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
-      test -d "$lt_sys_path" && \
-	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
-    fi
-  done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
-  for (lt_i = NF; lt_i > 0; lt_i--) {
-    if ($lt_i != "" && $lt_i != ".") {
-      if ($lt_i == "..") {
-        lt_count++;
-      } else {
-        if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
-        } else {
-          lt_count--;
-        }
-      }
-    }
-  }
-  if (lt_foo != "") { lt_freq[lt_foo]++; }
-  if (lt_freq[lt_foo] == 1) { print lt_foo; }
-}'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[4-9]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[01] | aix4.[01].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-	:
-      else
-	can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[45]*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[123]*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[01]* | freebsdelf3.[01]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
-  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-interix[3-9]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
-	else
-		version_type=irix
-	fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-	;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" ||
-   test -n "$runpath_var" ||
-   test "X$hardcode_automatic" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$hardcode_direct" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
-     test "$hardcode_minus_L" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action=unsupported
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
-$as_echo "$hardcode_action" >&6; }
-
-if test "$hardcode_action" = relink ||
-   test "$inherit_rpath" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-
-
-
-
-
-  if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-    ;;
-
-  cygwin*)
-    lt_cv_dlopen="dlopen"
-    lt_cv_dlopen_libs=
-    ;;
-
-  darwin*)
-  # if libdl is installed we need to link against it
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dl_dlopen=yes
-else
-  ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-
-    lt_cv_dlopen="dyld"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-
-fi
-
-    ;;
-
-  *)
-    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = x""yes; then :
-  lt_cv_dlopen="shl_load"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-int
-main ()
-{
-return shl_load ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dld_shl_load=yes
-else
-  ac_cv_lib_dld_shl_load=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else
-  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = x""yes; then :
-  lt_cv_dlopen="dlopen"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dl_dlopen=yes
-else
-  ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_svld_dlopen=yes
-else
-  ac_cv_lib_svld_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
-$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
-$as_echo_n "checking for dld_link in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link ();
-int
-main ()
-{
-return dld_link ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dld_dld_link=yes
-else
-  ac_cv_lib_dld_dld_link=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
-$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
-$as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  	  if test "$cross_compiling" = yes; then :
-  lt_cv_dlopen_self=cross
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-#line 11194 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL		RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL		DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL		0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW		DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW	RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW	DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW	0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}
-_LT_EOF
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&5 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
-      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
-      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
-$as_echo "$lt_cv_dlopen_self" >&6; }
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
-$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self_static+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  	  if test "$cross_compiling" = yes; then :
-  lt_cv_dlopen_self_static=cross
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-#line 11290 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL		RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL		DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL		0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW		DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW	RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW	DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW	0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}
-_LT_EOF
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&5 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
-      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
-      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self_static=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
-$as_echo "$lt_cv_dlopen_self_static" >&6; }
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-striplib=
-old_striplib=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
-$as_echo_n "checking whether stripping libraries is possible... " >&6; }
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-# FIXME - insert some real tests, host_os isn't really good enough
-  case $host_os in
-  darwin*)
-    if test -n "$STRIP" ; then
-      striplib="$STRIP -x"
-      old_striplib="$STRIP -S"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-    else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-    fi
-    ;;
-  *)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-    ;;
-  esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-  # Report which library types will actually be built
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
-  test "$can_build_shared" = "no" && enable_shared=no
-
-  # On AIX, shared libraries and static libraries use the same namespace, and
-  # are all built from PIC.
-  case $host_os in
-  aix3*)
-    test "$enable_shared" = yes && enable_static=no
-    if test -n "$RANLIB"; then
-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
-      postinstall_cmds='$RANLIB $lib'
-    fi
-    ;;
-
-  aix[4-9]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
-    fi
-    ;;
-  esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
-$as_echo_n "checking whether to build static libraries... " >&6; }
-  # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
-$as_echo "$enable_static" >&6; }
-
-
-
-
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-CC="$lt_save_CC"
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-archive_cmds_need_lc_CXX=no
-allow_undefined_flag_CXX=
-always_export_symbols_CXX=no
-archive_expsym_cmds_CXX=
-compiler_needs_object_CXX=no
-export_dynamic_flag_spec_CXX=
-hardcode_direct_CXX=no
-hardcode_direct_absolute_CXX=no
-hardcode_libdir_flag_spec_CXX=
-hardcode_libdir_flag_spec_ld_CXX=
-hardcode_libdir_separator_CXX=
-hardcode_minus_L_CXX=no
-hardcode_shlibpath_var_CXX=unsupported
-hardcode_automatic_CXX=no
-inherit_rpath_CXX=no
-module_cmds_CXX=
-module_expsym_cmds_CXX=
-link_all_deplibs_CXX=unknown
-old_archive_cmds_CXX=$old_archive_cmds
-no_undefined_flag_CXX=
-whole_archive_flag_spec_CXX=
-enable_shared_with_static_runtimes_CXX=no
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-objext_CXX=$objext
-
-# No sense in running all these tests if we already determined that
-# the CXX compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="int some_variable = 0;"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-  # save warnings/boilerplate of simple test code
-  ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-
-  ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC=$CC
-  lt_save_LD=$LD
-  lt_save_GCC=$GCC
-  GCC=$GXX
-  lt_save_with_gnu_ld=$with_gnu_ld
-  lt_save_path_LD=$lt_cv_path_LD
-  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-  else
-    $as_unset lt_cv_prog_gnu_ld
-  fi
-  if test -n "${lt_cv_path_LDCXX+set}"; then
-    lt_cv_path_LD=$lt_cv_path_LDCXX
-  else
-    $as_unset lt_cv_path_LD
-  fi
-  test -z "${LDCXX+set}" || LD=$LDCXX
-  CC=${CXX-"c++"}
-  compiler=$CC
-  compiler_CXX=$CC
-  for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-  if test -n "$compiler"; then
-    # We don't want -fno-exception when compiling C++ code, so set the
-    # no_builtin_flag separately
-    if test "$GXX" = yes; then
-      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
-    else
-      lt_prog_compiler_no_builtin_flag_CXX=
-    fi
-
-    if test "$GXX" = yes; then
-      # Set up default GNU C++ configuration
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
-  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [\\/]* | ?:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if test "${lt_cv_path_LD+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
-	;;
-      *)
-	test "$with_gnu_ld" != yes && break
-	;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  # I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-
-
-
-
-
-      # Check if GNU C++ uses GNU ld as the underlying linker, since the
-      # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
-        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-
-        # If archive_cmds runs LD, not CC, wlarc should be empty
-        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-        #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
-
-        # ancient GNU ld didn't support --whole-archive et. al.
-        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
-	  $GREP 'no-whole-archive' > /dev/null; then
-          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-        else
-          whole_archive_flag_spec_CXX=
-        fi
-      else
-        with_gnu_ld=no
-        wlarc=
-
-        # A generic and very simple default shared library creation
-        # command for GNU C++ for the case where it uses the native
-        # linker, instead of GNU ld.  If possible, this setting should
-        # overridden to take advantage of the native linker features on
-        # the platform it is being used on.
-        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-      fi
-
-      # Commands to make compiler produce verbose output that lists
-      # what "hidden" libraries, object files and flags are used when
-      # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-    else
-      GXX=no
-      with_gnu_ld=no
-      wlarc=
-    fi
-
-    # PORTME: fill in a description of your system's C++ link characteristics
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-    ld_shlibs_CXX=yes
-    case $host_os in
-      aix3*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
-        ;;
-      aix[4-9]*)
-        if test "$host_cpu" = ia64; then
-          # On IA64, the linker does run time linking by default, so we don't
-          # have to do anything special.
-          aix_use_runtimelinking=no
-          exp_sym_flag='-Bexport'
-          no_entry_flag=""
-        else
-          aix_use_runtimelinking=no
-
-          # Test if we are trying to use run time linking or normal
-          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-          # need to do runtime linking.
-          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
-	    for ld_flag in $LDFLAGS; do
-	      case $ld_flag in
-	      *-brtl*)
-	        aix_use_runtimelinking=yes
-	        break
-	        ;;
-	      esac
-	    done
-	    ;;
-          esac
-
-          exp_sym_flag='-bexport'
-          no_entry_flag='-bnoentry'
-        fi
-
-        # When large executables or shared objects are built, AIX ld can
-        # have problems creating the table of contents.  If linking a library
-        # or program results in "error TOC overflow" add -mminimal-toc to
-        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-        archive_cmds_CXX=''
-        hardcode_direct_CXX=yes
-        hardcode_direct_absolute_CXX=yes
-        hardcode_libdir_separator_CXX=':'
-        link_all_deplibs_CXX=yes
-        file_list_spec_CXX='${wl}-f,'
-
-        if test "$GXX" = yes; then
-          case $host_os in aix4.[012]|aix4.[012].*)
-          # We only want to do this on AIX 4.2 and lower, the check
-          # below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	    # We have reworked collect2
-	    :
-	  else
-	    # We have old collect2
-	    hardcode_direct_CXX=unsupported
-	    # It fails to find uninstalled libraries when the uninstalled
-	    # path is not listed in the libpath.  Setting hardcode_minus_L
-	    # to unsupported forces relinking
-	    hardcode_minus_L_CXX=yes
-	    hardcode_libdir_flag_spec_CXX='-L$libdir'
-	    hardcode_libdir_separator_CXX=
-	  fi
-          esac
-          shared_flag='-shared'
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag="$shared_flag "'${wl}-G'
-	  fi
-        else
-          # not using gcc
-          if test "$host_cpu" = ia64; then
-	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	  # chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-          else
-	    if test "$aix_use_runtimelinking" = yes; then
-	      shared_flag='${wl}-G'
-	    else
-	      shared_flag='${wl}-bM:SRE'
-	    fi
-          fi
-        fi
-
-        export_dynamic_flag_spec_CXX='${wl}-bexpall'
-        # It seems that -bexpall does not export symbols beginning with
-        # underscore (_), so it is better to generate a list of symbols to
-	# export.
-        always_export_symbols_CXX=yes
-        if test "$aix_use_runtimelinking" = yes; then
-          # Warning - without using the other runtime loading flags (-brtl),
-          # -berok will link without error, but may produce a broken library.
-          allow_undefined_flag_CXX='-berok'
-          # Determine the default libpath from the value encoded in an empty
-          # executable.
-          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-        else
-          if test "$host_cpu" = ia64; then
-	    hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
-	    allow_undefined_flag_CXX="-z nodefs"
-	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-          else
-	    # Determine the default libpath from the value encoded in an
-	    # empty executable.
-	    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-	    hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
-	    # Warning - without using the other run time loading flags,
-	    # -berok will link without error, but may produce a broken library.
-	    no_undefined_flag_CXX=' ${wl}-bernotok'
-	    allow_undefined_flag_CXX=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    whole_archive_flag_spec_CXX='$convenience'
-	    archive_cmds_need_lc_CXX=yes
-	    # This is similar to how AIX traditionally builds its shared
-	    # libraries.
-	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-          fi
-        fi
-        ;;
-
-      beos*)
-	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	  allow_undefined_flag_CXX=unsupported
-	  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-	  # support --undefined.  This deserves some investigation.  FIXME
-	  archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	else
-	  ld_shlibs_CXX=no
-	fi
-	;;
-
-      chorus*)
-        case $cc_basename in
-          *)
-	  # FIXME: insert proper C++ library support
-	  ld_shlibs_CXX=no
-	  ;;
-        esac
-        ;;
-
-      cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
-        # as there is no search path for DLLs.
-        hardcode_libdir_flag_spec_CXX='-L$libdir'
-        allow_undefined_flag_CXX=unsupported
-        always_export_symbols_CXX=no
-        enable_shared_with_static_runtimes_CXX=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          ld_shlibs_CXX=no
-        fi
-        ;;
-      darwin* | rhapsody*)
-
-
-  archive_cmds_need_lc_CXX=no
-  hardcode_direct_CXX=no
-  hardcode_automatic_CXX=yes
-  hardcode_shlibpath_var_CXX=unsupported
-  whole_archive_flag_spec_CXX=''
-  link_all_deplibs_CXX=yes
-  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
-    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
-    fi
-
-  else
-  ld_shlibs_CXX=no
-  fi
-
-	;;
-
-      dgux*)
-        case $cc_basename in
-          ec++*)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          ghcx*)
-	    # Green Hills C++ Compiler
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-        esac
-        ;;
-
-      freebsd[12]*)
-        # C++ shared libraries reported to be fairly broken before
-	# switch to ELF
-        ld_shlibs_CXX=no
-        ;;
-
-      freebsd-elf*)
-        archive_cmds_need_lc_CXX=no
-        ;;
-
-      freebsd* | dragonfly*)
-        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-        # conventions
-        ld_shlibs_CXX=yes
-        ;;
-
-      gnu*)
-        ;;
-
-      hpux9*)
-        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
-        hardcode_libdir_separator_CXX=:
-        export_dynamic_flag_spec_CXX='${wl}-E'
-        hardcode_direct_CXX=yes
-        hardcode_minus_L_CXX=yes # Not in the search PATH,
-				             # but as the default
-				             # location of the library.
-
-        case $cc_basename in
-          CC*)
-            # FIXME: insert proper C++ library support
-            ld_shlibs_CXX=no
-            ;;
-          aCC*)
-            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            # Commands to make compiler produce verbose output that lists
-            # what "hidden" libraries, object files and flags are used when
-            # linking a shared library.
-            #
-            # There doesn't appear to be a way to prevent this compiler from
-            # explicitly linking system object files so we need to strip them
-            # from the output so that they don't get included in the library
-            # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-            ;;
-          *)
-            if test "$GXX" = yes; then
-              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            else
-              # FIXME: insert proper C++ library support
-              ld_shlibs_CXX=no
-            fi
-            ;;
-        esac
-        ;;
-
-      hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-	  hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
-	  hardcode_libdir_separator_CXX=:
-
-          case $host_cpu in
-            hppa*64*|ia64*)
-              ;;
-            *)
-	      export_dynamic_flag_spec_CXX='${wl}-E'
-              ;;
-          esac
-        fi
-        case $host_cpu in
-          hppa*64*|ia64*)
-            hardcode_direct_CXX=no
-            hardcode_shlibpath_var_CXX=no
-            ;;
-          *)
-            hardcode_direct_CXX=yes
-            hardcode_direct_absolute_CXX=yes
-            hardcode_minus_L_CXX=yes # Not in the search PATH,
-					         # but as the default
-					         # location of the library.
-            ;;
-        esac
-
-        case $cc_basename in
-          CC*)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          aCC*)
-	    case $host_cpu in
-	      hppa*64*)
-	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      ia64*)
-	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      *)
-	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	    esac
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test $with_gnu_ld = no; then
-	        case $host_cpu in
-	          hppa*64*)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          ia64*)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          *)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	        esac
-	      fi
-	    else
-	      # FIXME: insert proper C++ library support
-	      ld_shlibs_CXX=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      interix[3-9]*)
-	hardcode_direct_CXX=no
-	hardcode_shlibpath_var_CXX=no
-	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	export_dynamic_flag_spec_CXX='${wl}-E'
-	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-	# Instead, shared libraries are loaded at an image base (0x10000000 by
-	# default) and relocated if they conflict, which is a slow very memory
-	# consuming and fragmenting process.  To avoid this, we pick a random,
-	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	;;
-      irix5* | irix6*)
-        case $cc_basename in
-          CC*)
-	    # SGI C++
-	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test "$with_gnu_ld" = no; then
-	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	      else
-	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
-	      fi
-	    fi
-	    link_all_deplibs_CXX=yes
-	    ;;
-        esac
-        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-        hardcode_libdir_separator_CXX=:
-        inherit_rpath_CXX=yes
-        ;;
-
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-	    archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-
-	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-	    old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
-	    ;;
-	  icpc* | ecpc* )
-	    # Intel C++
-	    with_gnu_ld=yes
-	    # version 8.0 and above of icpc choke on multiply defined symbols
-	    # if we add $predep_objects and $postdep_objects, however 7.1 and
-	    # earlier do not add the objects themselves.
-	    case `$CC -V 2>&1` in
-	      *"Version 7."*)
-	        archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	      *)  # Version 8.0 or newer
-	        tmp_idyn=
-	        case $host_cpu in
-		  ia64*) tmp_idyn=' -i_dynamic';;
-		esac
-	        archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	    esac
-	    archive_cmds_need_lc_CXX=no
-	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-	    whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-	    ;;
-          pgCC* | pgcpp*)
-            # Portland Group C++ compiler
-	    case `$CC -V` in
-	    *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
-	      prelink_cmds_CXX='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
-	      old_archive_cmds_CXX='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
-		$RANLIB $oldlib'
-	      archive_cmds_CXX='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      archive_expsym_cmds_CXX='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    *) # Version 6 will use weak symbols
-	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    esac
-
-	    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
-	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-            ;;
-	  cxx*)
-	    # Compaq C++
-	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
-	    runpath_var=LD_RUN_PATH
-	    hardcode_libdir_flag_spec_CXX='-rpath $libdir'
-	    hardcode_libdir_separator_CXX=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  xl*)
-	    # IBM XL 8.0 on PPC, with GNU ld
-	    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-	    archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    if test "x$supports_anon_versioning" = xyes; then
-	      archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
-		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-		echo "local: *; };" >> $output_objdir/$libname.ver~
-		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-	    fi
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      no_undefined_flag_CXX=' -zdefs'
-	      archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	      archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
-	      hardcode_libdir_flag_spec_CXX='-R$libdir'
-	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	      compiler_needs_object_CXX=yes
-
-	      # Not sure whether something based on
-	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
-	      # would be better.
-	      output_verbose_link_cmd='echo'
-
-	      # Archives containing C++ object files must be created using
-	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	      # necessary to make sure instantiated templates are included
-	      # in the archive.
-	      old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-
-      lynxos*)
-        # FIXME: insert proper C++ library support
-	ld_shlibs_CXX=no
-	;;
-
-      m88k*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
-	;;
-
-      mvs*)
-        case $cc_basename in
-          cxx*)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-	  *)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-	esac
-	;;
-
-      netbsd*)
-        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	  archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-	  wlarc=
-	  hardcode_libdir_flag_spec_CXX='-R$libdir'
-	  hardcode_direct_CXX=yes
-	  hardcode_shlibpath_var_CXX=no
-	fi
-	# Workaround some broken pre-1.5 toolchains
-	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-	;;
-
-      *nto* | *qnx*)
-        ld_shlibs_CXX=yes
-	;;
-
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-	ld_shlibs_CXX=no
-	;;
-
-      openbsd*)
-	if test -f /usr/libexec/ld.so; then
-	  hardcode_direct_CXX=yes
-	  hardcode_shlibpath_var_CXX=no
-	  hardcode_direct_absolute_CXX=yes
-	  archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-	  hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	    archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-	    export_dynamic_flag_spec_CXX='${wl}-E'
-	    whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-	  fi
-	  output_verbose_link_cmd=echo
-	else
-	  ld_shlibs_CXX=no
-	fi
-	;;
-
-      osf3* | osf4* | osf5*)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
-	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	    hardcode_libdir_separator_CXX=:
-
-	    # Archives containing C++ object files must be created using
-	    # the KAI C++ compiler.
-	    case $host in
-	      osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
-	      *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
-	    esac
-	    ;;
-          RCC*)
-	    # Rational C++ 2.4.1
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          cxx*)
-	    case $host in
-	      osf3*)
-	        allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-		;;
-	      *)
-	        allow_undefined_flag_CXX=' -expect_unresolved \*'
-	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
-	          $RM $lib.exp'
-	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
-		;;
-	    esac
-
-	    hardcode_libdir_separator_CXX=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  *)
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-	      case $host in
-	        osf3*)
-	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	        *)
-	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	      esac
-
-	      hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-	      hardcode_libdir_separator_CXX=:
-
-	      # Commands to make compiler produce verbose output that lists
-	      # what "hidden" libraries, object files and flags are used when
-	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-	    else
-	      # FIXME: insert proper C++ library support
-	      ld_shlibs_CXX=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      psos*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
-        ;;
-
-      sunos4*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.x
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          lcc*)
-	    # Lucid
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-        esac
-        ;;
-
-      solaris*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-            archive_cmds_need_lc_CXX=yes
-	    no_undefined_flag_CXX=' -zdefs'
-	    archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	    archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	    hardcode_libdir_flag_spec_CXX='-R$libdir'
-	    hardcode_shlibpath_var_CXX=no
-	    case $host_os in
-	      solaris2.[0-5] | solaris2.[0-5].*) ;;
-	      *)
-		# The compiler driver will combine and reorder linker options,
-		# but understands `-z linker_flag'.
-	        # Supported since Solaris 2.6 (maybe 2.5.1?)
-		whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
-	        ;;
-	    esac
-	    link_all_deplibs_CXX=yes
-
-	    output_verbose_link_cmd='echo'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
-	    ;;
-          gcx*)
-	    # Green Hills C++ Compiler
-	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
-	    # The C++ compiler must be used to create the archive.
-	    old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    # GNU C++ compiler with Solaris linker
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
-	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      else
-	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
-	        # platform.
-	        archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      fi
-
-	      hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
-	      case $host_os in
-		solaris2.[0-5] | solaris2.[0-5].*) ;;
-		*)
-		  whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-		  ;;
-	      esac
-	    fi
-	    ;;
-        esac
-        ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      no_undefined_flag_CXX='${wl}-z,text'
-      archive_cmds_need_lc_CXX=no
-      hardcode_shlibpath_var_CXX=no
-      runpath_var='LD_RUN_PATH'
-
-      case $cc_basename in
-        CC*)
-	  archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-      esac
-      ;;
-
-      sysv5* | sco3.2v5* | sco5v6*)
-	# Note: We can NOT use -z defs as we might desire, because we do not
-	# link with -lc, and that would cause any symbols used from libc to
-	# always be unresolved, which means just about no library would
-	# ever link correctly.  If we're not using GNU ld we use -z text
-	# though, which does catch some bad symbols but isn't as heavy-handed
-	# as -z defs.
-	no_undefined_flag_CXX='${wl}-z,text'
-	allow_undefined_flag_CXX='${wl}-z,nodefs'
-	archive_cmds_need_lc_CXX=no
-	hardcode_shlibpath_var_CXX=no
-	hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
-	hardcode_libdir_separator_CXX=':'
-	link_all_deplibs_CXX=yes
-	export_dynamic_flag_spec_CXX='${wl}-Bexport'
-	runpath_var='LD_RUN_PATH'
-
-	case $cc_basename in
-          CC*)
-	    archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	  *)
-	    archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	esac
-      ;;
-
-      tandem*)
-        case $cc_basename in
-          NCC*)
-	    # NonStop-UX NCC 3.20
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-        esac
-        ;;
-
-      vxworks*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
-        ;;
-
-      *)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
-        ;;
-    esac
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
-$as_echo "$ld_shlibs_CXX" >&6; }
-    test "$ld_shlibs_CXX" = no && can_build_shared=no
-
-    GCC_CXX="$GXX"
-    LD_CXX="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    # Dependencies to place before and after the object being linked:
-predep_objects_CXX=
-postdep_objects_CXX=
-predeps_CXX=
-postdeps_CXX=
-compiler_lib_search_path_CXX=
-
-cat > conftest.$ac_ext <<_LT_EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-_LT_EOF
-
-if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  # Parse the compiler output and extract the necessary
-  # objects, libraries and library flags.
-
-  # Sentinel used to keep track of whether or not we are before
-  # the conftest object file.
-  pre_test_object_deps_done=no
-
-  for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
-	 prev=$p
-	 continue
-       else
-	 prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
-	   # Internal compiler library paths should come after those
-	   # provided the user.  The postdeps already come after the
-	   # user supplied libs so there is no need to process them.
-	   if test -z "$compiler_lib_search_path_CXX"; then
-	     compiler_lib_search_path_CXX="${prev}${p}"
-	   else
-	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
-	   fi
-	   ;;
-	 # The "-l" case would never come before the object being
-	 # linked, so don't bother handling this case.
-	 esac
-       else
-	 if test -z "$postdeps_CXX"; then
-	   postdeps_CXX="${prev}${p}"
-	 else
-	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
-	 fi
-       fi
-       ;;
-
-    *.$objext)
-       # This assumes that the test object file only shows up
-       # once in the compiler output.
-       if test "$p" = "conftest.$objext"; then
-	 pre_test_object_deps_done=yes
-	 continue
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 if test -z "$predep_objects_CXX"; then
-	   predep_objects_CXX="$p"
-	 else
-	   predep_objects_CXX="$predep_objects_CXX $p"
-	 fi
-       else
-	 if test -z "$postdep_objects_CXX"; then
-	   postdep_objects_CXX="$p"
-	 else
-	   postdep_objects_CXX="$postdep_objects_CXX $p"
-	 fi
-       fi
-       ;;
-
-    *) ;; # Ignore the rest.
-
-    esac
-  done
-
-  # Clean up.
-  rm -f a.out a.exe
-else
-  echo "libtool.m4: error: problem compiling CXX test program"
-fi
-
-$RM -f confest.$objext
-
-# PORTME: override above test on systems where it is broken
-case $host_os in
-interix[3-9]*)
-  # Interix 3.5 installs completely hosed .la files for C++, so rather than
-  # hack all around it, let's just trust "g++" to DTRT.
-  predep_objects_CXX=
-  postdep_objects_CXX=
-  postdeps_CXX=
-  ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    if test "$solaris_use_stlport4" != yes; then
-      postdeps_CXX='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      postdeps_CXX='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-esac
-
-
-case " $postdeps_CXX " in
-*" -lc "*) archive_cmds_need_lc_CXX=no ;;
-esac
- compiler_lib_search_dirs_CXX=
-if test -n "${compiler_lib_search_path_CXX}"; then
- compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    lt_prog_compiler_wl_CXX=
-lt_prog_compiler_pic_CXX=
-lt_prog_compiler_static_CXX=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    lt_prog_compiler_wl_CXX='-Wl,'
-    lt_prog_compiler_static_CXX='-static'
-
-    case $host_os in
-    aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	lt_prog_compiler_static_CXX='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            lt_prog_compiler_pic_CXX='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | cygwin* | os2* | pw32* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      lt_prog_compiler_pic_CXX='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      lt_prog_compiler_pic_CXX=
-      ;;
-    interix[3-9]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	lt_prog_compiler_pic_CXX=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	;;
-      *)
-	lt_prog_compiler_pic_CXX='-fPIC'
-	;;
-      esac
-      ;;
-    *qnx* | *nto*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      lt_prog_compiler_pic_CXX='-fPIC -shared'
-      ;;
-    *)
-      lt_prog_compiler_pic_CXX='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix[4-9]*)
-	# All AIX code is PIC.
-	if test "$host_cpu" = ia64; then
-	  # AIX 5 now supports IA64 processor
-	  lt_prog_compiler_static_CXX='-Bstatic'
-	else
-	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
-	fi
-	;;
-      chorus*)
-	case $cc_basename in
-	cxch68*)
-	  # Green Hills C++ Compiler
-	  # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-	  ;;
-	esac
-	;;
-      dgux*)
-	case $cc_basename in
-	  ec++*)
-	    lt_prog_compiler_pic_CXX='-KPIC'
-	    ;;
-	  ghcx*)
-	    # Green Hills C++ Compiler
-	    lt_prog_compiler_pic_CXX='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      freebsd* | dragonfly*)
-	# FreeBSD uses GNU C++
-	;;
-      hpux9* | hpux10* | hpux11*)
-	case $cc_basename in
-	  CC*)
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
-	    if test "$host_cpu" != ia64; then
-	      lt_prog_compiler_pic_CXX='+Z'
-	    fi
-	    ;;
-	  aCC*)
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
-	    case $host_cpu in
-	    hppa*64*|ia64*)
-	      # +Z the default
-	      ;;
-	    *)
-	      lt_prog_compiler_pic_CXX='+Z'
-	      ;;
-	    esac
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      interix*)
-	# This is c89, which is MS Visual C++ (no shared libs)
-	# Anyone wants to do a port?
-	;;
-      irix5* | irix6* | nonstopux*)
-	case $cc_basename in
-	  CC*)
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_static_CXX='-non_shared'
-	    # CC pic flag -KPIC is the default.
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
-	case $cc_basename in
-	  KCC*)
-	    # KAI C++ Compiler
-	    lt_prog_compiler_wl_CXX='--backend -Wl,'
-	    lt_prog_compiler_pic_CXX='-fPIC'
-	    ;;
-	  ecpc* )
-	    # old Intel C++ for x86_64 which still supported -KPIC.
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_pic_CXX='-KPIC'
-	    lt_prog_compiler_static_CXX='-static'
-	    ;;
-	  icpc* )
-	    # Intel C++, used to be incompatible with GCC.
-	    # ICC 10 doesn't accept -KPIC any more.
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_pic_CXX='-fPIC'
-	    lt_prog_compiler_static_CXX='-static'
-	    ;;
-	  pgCC* | pgcpp*)
-	    # Portland Group C++ compiler
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_pic_CXX='-fpic'
-	    lt_prog_compiler_static_CXX='-Bstatic'
-	    ;;
-	  cxx*)
-	    # Compaq C++
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    lt_prog_compiler_pic_CXX=
-	    lt_prog_compiler_static_CXX='-non_shared'
-	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_pic_CXX='-qpic'
-	    lt_prog_compiler_static_CXX='-qstaticlink'
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      lt_prog_compiler_pic_CXX='-KPIC'
-	      lt_prog_compiler_static_CXX='-Bstatic'
-	      lt_prog_compiler_wl_CXX='-Qoption ld '
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-      lynxos*)
-	;;
-      m88k*)
-	;;
-      mvs*)
-	case $cc_basename in
-	  cxx*)
-	    lt_prog_compiler_pic_CXX='-W c,exportall'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      netbsd* | netbsdelf*-gnu)
-	;;
-      *qnx* | *nto*)
-        # QNX uses GNU C++, but need to define -shared option too, otherwise
-        # it will coredump.
-        lt_prog_compiler_pic_CXX='-fPIC -shared'
-        ;;
-      osf3* | osf4* | osf5*)
-	case $cc_basename in
-	  KCC*)
-	    lt_prog_compiler_wl_CXX='--backend -Wl,'
-	    ;;
-	  RCC*)
-	    # Rational C++ 2.4.1
-	    lt_prog_compiler_pic_CXX='-pic'
-	    ;;
-	  cxx*)
-	    # Digital/Compaq C++
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    lt_prog_compiler_pic_CXX=
-	    lt_prog_compiler_static_CXX='-non_shared'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      psos*)
-	;;
-      solaris*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-	    lt_prog_compiler_pic_CXX='-KPIC'
-	    lt_prog_compiler_static_CXX='-Bstatic'
-	    lt_prog_compiler_wl_CXX='-Qoption ld '
-	    ;;
-	  gcx*)
-	    # Green Hills C++ Compiler
-	    lt_prog_compiler_pic_CXX='-PIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sunos4*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.x
-	    lt_prog_compiler_pic_CXX='-pic'
-	    lt_prog_compiler_static_CXX='-Bstatic'
-	    ;;
-	  lcc*)
-	    # Lucid
-	    lt_prog_compiler_pic_CXX='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-	case $cc_basename in
-	  CC*)
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_pic_CXX='-KPIC'
-	    lt_prog_compiler_static_CXX='-Bstatic'
-	    ;;
-	esac
-	;;
-      tandem*)
-	case $cc_basename in
-	  NCC*)
-	    # NonStop-UX NCC 3.20
-	    lt_prog_compiler_pic_CXX='-KPIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      vxworks*)
-	;;
-      *)
-	lt_prog_compiler_can_build_shared_CXX=no
-	;;
-    esac
-  fi
-
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    lt_prog_compiler_pic_CXX=
-    ;;
-  *)
-    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
-    ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
-$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
-
-
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_pic_works_CXX=no
-   ac_outfile=conftest.$ac_objext
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13246: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:13250: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_pic_works_CXX=yes
-     fi
-   fi
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
-    case $lt_prog_compiler_pic_CXX in
-     "" | " "*) ;;
-     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
-     esac
-else
-    lt_prog_compiler_pic_CXX=
-     lt_prog_compiler_can_build_shared_CXX=no
-fi
-
-fi
-
-
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_static_works_CXX=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         lt_cv_prog_compiler_static_works_CXX=yes
-       fi
-     else
-       lt_cv_prog_compiler_static_works_CXX=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
-    :
-else
-    lt_prog_compiler_static_CXX=
-fi
-
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_c_o_CXX=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13345: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:13349: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o_CXX=yes
-     fi
-   fi
-   chmod u+w . 2>&5
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_c_o_CXX=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13397: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:13401: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o_CXX=yes
-     fi
-   fi
-   chmod u+w . 2>&5
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
-
-
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
-  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  case $host_os in
-  aix[4-9]*)
-    # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    else
-      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    export_symbols_cmds_CXX="$ltdll_cmds"
-  ;;
-  cygwin* | mingw* | cegcc*)
-    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
-    link_all_deplibs_CXX=no
-  ;;
-  *)
-    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
-$as_echo "$ld_shlibs_CXX" >&6; }
-test "$ld_shlibs_CXX" = no && can_build_shared=no
-
-with_gnu_ld_CXX=$with_gnu_ld
-
-
-
-
-
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc_CXX" in
-x|xyes)
-  # Assume -lc should be added
-  archive_cmds_need_lc_CXX=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $archive_cmds_CXX in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl_CXX
-	pic_flag=$lt_prog_compiler_pic_CXX
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
-        allow_undefined_flag_CXX=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
-  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-        then
-	  archive_cmds_need_lc_CXX=no
-        else
-	  archive_cmds_need_lc_CXX=yes
-        fi
-        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5
-$as_echo "$archive_cmds_need_lc_CXX" >&6; }
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[4-9]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[01] | aix4.[01].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-	:
-      else
-	can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[45]*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[123]*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[01]* | freebsdelf3.[01]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
-  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-interix[3-9]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
-	else
-		version_type=irix
-	fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-	;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action_CXX=
-if test -n "$hardcode_libdir_flag_spec_CXX" ||
-   test -n "$runpath_var_CXX" ||
-   test "X$hardcode_automatic_CXX" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$hardcode_direct_CXX" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
-     test "$hardcode_minus_L_CXX" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action_CXX=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action_CXX=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action_CXX=unsupported
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
-$as_echo "$hardcode_action_CXX" >&6; }
-
-if test "$hardcode_action_CXX" = relink ||
-   test "$inherit_rpath_CXX" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-
-
-
-
-
-
-  fi # test -n "$compiler"
-
-  CC=$lt_save_CC
-  LDCXX=$LD
-  LD=$lt_save_LD
-  GCC=$lt_save_GCC
-  with_gnu_ld=$lt_save_with_gnu_ld
-  lt_cv_path_LDCXX=$lt_cv_path_LD
-  lt_cv_path_LD=$lt_save_path_LD
-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-
-
-
-
-
-
-
-
-        ac_config_commands="$ac_config_commands libtool"
-
-
-
-
-# Only expand once:
-
-
-
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
 if test "${ac_cv_header_stdc+set}" = set; then :
@@ -14929,11 +5090,27 @@
 
 
 
+# Only build Linux client libs when compiling for Linux
+case $host in
+     *-*-linux* | *-android* )
+        LINUX_HOST=true
+        ;;
+esac
+ if test x$LINUX_HOST = xtrue; then
+  LINUX_HOST_TRUE=
+  LINUX_HOST_FALSE='#'
+else
+  LINUX_HOST_TRUE='#'
+  LINUX_HOST_FALSE=
+fi
+
+
 # Check whether --enable-m32 was given.
 if test "${enable_m32+set}" = set; then :
   enableval=$enable_m32; case "${enableval}" in
                  yes)
-		   CFLAGS=$(CFLAGS) -m32
+                   CFLAGS="${CFLAGS} -m32"
+                   CXXFLAGS="${CXXFLAGS} -m32"
                    usem32=true
                    ;;
                  no)
@@ -14948,6 +5125,36 @@
 fi
 
 
+# Check whether --enable-processor was given.
+if test "${enable_processor+set}" = set; then :
+  enableval=$enable_processor; case "${enableval}" in
+                 yes)
+                   disable_processor=false
+                   ;;
+                 no)
+                   disable_processor=true
+                   ;;
+                 *)
+                   as_fn_error "bad value ${enableval} for --disable-processor" "$LINENO" 5
+                   ;;
+               esac
+else
+  disable_processor=false
+fi
+
+ if test x$disable_processor = xtrue; then
+  DISABLE_PROCESSOR_TRUE=
+  DISABLE_PROCESSOR_FALSE='#'
+else
+  DISABLE_PROCESSOR_TRUE='#'
+  DISABLE_PROCESSOR_FALSE=
+fi
+
+
+if test x$LINUX_HOST = xfalse -a x$disable_processor = xtrue; then
+   as_fn_error "--disable-processor was specified, and not building for Linux. Nothing to build!" "$LINENO" 5
+fi
+
 ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" "#include <sys/socket.h>
 "
 if test "x$ac_cv_member_struct_sockaddr_sa_len" = x""yes; then :
@@ -15107,8 +5314,12 @@
   as_fn_error "conditional \"am__fastdepCXX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+if test -z "${LINUX_HOST_TRUE}" && test -z "${LINUX_HOST_FALSE}"; then
+  as_fn_error "conditional \"LINUX_HOST\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DISABLE_PROCESSOR_TRUE}" && test -z "${DISABLE_PROCESSOR_FALSE}"; then
+  as_fn_error "conditional \"DISABLE_PROCESSOR\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${SELFTEST_TRUE}" && test -z "${SELFTEST_FALSE}"; then
@@ -15583,7 +5794,7 @@
 Configuration commands:
 $config_commands
 
-Report bugs to <opensource@google.com>."
+Report bugs to <google-breakpad-dev@googlegroups.com>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
@@ -15704,357 +5915,6 @@
 #
 AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
-enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
-host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
-host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
-host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
-build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
-build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
-build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
-SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
-Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
-GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
-EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
-FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
-LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
-NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
-LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
-exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
-AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
-GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
-SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
-ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
-need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
-LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
-libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
-version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
-striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
-LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# Quote evaled strings.
-for var in SED \
-GREP \
-EGREP \
-FGREP \
-LD \
-NM \
-LN_S \
-lt_SP2NL \
-lt_NL2SP \
-reload_flag \
-OBJDUMP \
-deplibs_check_method \
-file_magic_cmd \
-AR \
-AR_FLAGS \
-STRIP \
-RANLIB \
-CC \
-CFLAGS \
-compiler \
-lt_cv_sys_global_symbol_pipe \
-lt_cv_sys_global_symbol_to_cdecl \
-lt_cv_sys_global_symbol_to_c_name_address \
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-SHELL \
-ECHO \
-lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_wl \
-lt_prog_compiler_pic \
-lt_prog_compiler_static \
-lt_cv_prog_compiler_c_o \
-need_locks \
-DSYMUTIL \
-NMEDIT \
-LIPO \
-OTOOL \
-OTOOL64 \
-shrext_cmds \
-export_dynamic_flag_spec \
-whole_archive_flag_spec \
-compiler_needs_object \
-with_gnu_ld \
-allow_undefined_flag \
-no_undefined_flag \
-hardcode_libdir_flag_spec \
-hardcode_libdir_flag_spec_ld \
-hardcode_libdir_separator \
-fix_srcfile_path \
-exclude_expsyms \
-include_expsyms \
-file_list_spec \
-variables_saved_for_relink \
-libname_spec \
-library_names_spec \
-soname_spec \
-finish_eval \
-old_striplib \
-striplib \
-compiler_lib_search_dirs \
-predep_objects \
-postdep_objects \
-predeps \
-postdeps \
-compiler_lib_search_path \
-LD_CXX \
-compiler_CXX \
-lt_prog_compiler_no_builtin_flag_CXX \
-lt_prog_compiler_wl_CXX \
-lt_prog_compiler_pic_CXX \
-lt_prog_compiler_static_CXX \
-lt_cv_prog_compiler_c_o_CXX \
-export_dynamic_flag_spec_CXX \
-whole_archive_flag_spec_CXX \
-compiler_needs_object_CXX \
-with_gnu_ld_CXX \
-allow_undefined_flag_CXX \
-no_undefined_flag_CXX \
-hardcode_libdir_flag_spec_CXX \
-hardcode_libdir_flag_spec_ld_CXX \
-hardcode_libdir_separator_CXX \
-fix_srcfile_path_CXX \
-exclude_expsyms_CXX \
-include_expsyms_CXX \
-file_list_spec_CXX \
-compiler_lib_search_dirs_CXX \
-predep_objects_CXX \
-postdep_objects_CXX \
-predeps_CXX \
-postdeps_CXX \
-compiler_lib_search_path_CXX; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Double-quote double-evaled strings.
-for var in reload_cmds \
-old_postinstall_cmds \
-old_postuninstall_cmds \
-old_archive_cmds \
-extract_expsyms_cmds \
-old_archive_from_new_cmds \
-old_archive_from_expsyms_cmds \
-archive_cmds \
-archive_expsym_cmds \
-module_cmds \
-module_expsym_cmds \
-export_symbols_cmds \
-prelink_cmds \
-postinstall_cmds \
-postuninstall_cmds \
-finish_cmds \
-sys_lib_search_path_spec \
-sys_lib_dlsearch_path_spec \
-old_archive_cmds_CXX \
-old_archive_from_new_cmds_CXX \
-old_archive_from_expsyms_cmds_CXX \
-archive_cmds_CXX \
-archive_expsym_cmds_CXX \
-module_cmds_CXX \
-module_expsym_cmds_CXX \
-export_symbols_cmds_CXX \
-prelink_cmds_CXX; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
-  ;;
-esac
-
-ac_aux_dir='$ac_aux_dir'
-xsi_shell='$xsi_shell'
-lt_shell_append='$lt_shell_append'
-
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-
-    PACKAGE='$PACKAGE'
-    VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
-    RM='$RM'
-    ofile='$ofile'
-
-
-
-
-
-
 _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -16065,7 +5925,6 @@
   case $ac_config_target in
     "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;;
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
 
   *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
@@ -16746,808 +6605,6 @@
   done
 }
  ;;
-    "libtool":C)
-
-    # See if we are running on zsh, and set the options which allow our
-    # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
-      setopt NO_GLOB_SUBST
-    fi
-
-    cfgfile="${ofile}T"
-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
-    $RM "$cfgfile"
-
-    cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-#   This file is part of GNU Libtool.
-#
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-
-# The names of the tagged configurations supported by this script.
-available_tags="CXX "
-
-# ### BEGIN LIBTOOL CONFIG
-
-# Which release of libtool.m4 was used?
-macro_version=$macro_version
-macro_revision=$macro_revision
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# What type of objects to build.
-pic_mode=$pic_mode
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# A sed program that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="\$SED -e 1s/^X//"
-
-# A grep program that handles long lines.
-GREP=$lt_GREP
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# A literal string matcher.
-FGREP=$lt_FGREP
-
-# A BSD- or MS-compatible name lister.
-NM=$lt_NM
-
-# Whether we need soft or hard links.
-LN_S=$lt_LN_S
-
-# What is the maximum length of a command?
-max_cmd_len=$max_cmd_len
-
-# Object file suffix (normally "o").
-objext=$ac_objext
-
-# Executable file suffix (normally "").
-exeext=$exeext
-
-# whether the shell understands "unset".
-lt_unset=$lt_unset
-
-# turn spaces into newlines.
-SP2NL=$lt_lt_SP2NL
-
-# turn newlines into spaces.
-NL2SP=$lt_lt_NL2SP
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# An object symbol dumper.
-OBJDUMP=$lt_OBJDUMP
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == "file_magic".
-file_magic_cmd=$lt_file_magic_cmd
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A symbol stripping program.
-STRIP=$lt_STRIP
-
-# Commands used to install an old-style archive.
-RANLIB=$lt_RANLIB
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# A C compiler.
-LTCC=$lt_CC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_CFLAGS
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration.
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair.
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# Transform the output of nm in a C name address pair when lib prefix is needed.
-global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# An echo program that does not interpret backslashes.
-ECHO=$lt_ECHO
-
-# Used to examine libraries when file_magic_cmd begins with "file".
-MAGIC_CMD=$MAGIC_CMD
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
-DSYMUTIL=$lt_DSYMUTIL
-
-# Tool to change global to local symbols on Mac OS X.
-NMEDIT=$lt_NMEDIT
-
-# Tool to manipulate fat objects and archives on Mac OS X.
-LIPO=$lt_LIPO
-
-# ldd/readelf like tool for Mach-O binaries on Mac OS X.
-OTOOL=$lt_OTOOL
-
-# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
-OTOOL64=$lt_OTOOL64
-
-# Old archive suffix (normally "a").
-libext=$libext
-
-# Shared library suffix (normally ".so").
-shrext_cmds=$lt_shrext_cmds
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at link time.
-variables_saved_for_relink=$lt_variables_saved_for_relink
-
-# Do we need the "lib" prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Library versioning type.
-version_type=$version_type
-
-# Shared library runtime path variable.
-runpath_var=$runpath_var
-
-# Shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names.  First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Command to use after installation of a shared archive.
-postinstall_cmds=$lt_postinstall_cmds
-
-# Command to use after uninstallation of a shared archive.
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# As "finish_cmds", except a single script fragment to be evaled but
-# not shown.
-finish_eval=$lt_finish_eval
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Compile-time system search path for libraries.
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries.
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-
-# The linker used to build libraries.
-LD=$lt_LD
-
-# Commands used to build an old-style archive.
-old_archive_cmds=$lt_old_archive_cmds
-
-# A language specific compiler.
-CC=$lt_compiler
-
-# Is the compiler the GNU compiler?
-with_gcc=$GCC
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc
-
-# Whether or not to disallow shared libs when runtime libs are static.
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec
-
-# Whether the compiler copes with passing no objects directly.
-compiler_needs_object=$lt_compiler_needs_object
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
-
-# Commands used to build a shared archive.
-archive_cmds=$lt_archive_cmds
-archive_expsym_cmds=$lt_archive_expsym_cmds
-
-# Commands used to build a loadable module if different from building
-# a shared archive.
-module_cmds=$lt_module_cmds
-module_expsym_cmds=$lt_module_expsym_cmds
-
-# Whether we are building with GNU ld or not.
-with_gnu_ld=$lt_with_gnu_ld
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag
-
-# Flag that enforces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
-
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
-# Whether we need a single "-rpath" flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator
-
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
-# DIR into the resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
-# DIR into the resulting binary and the resulting library dependency is
-# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
-# library is relocated.
-hardcode_direct_absolute=$hardcode_direct_absolute
-
-# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-# into the resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-# into the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Set to "yes" if building a shared library automatically hardcodes DIR
-# into the library and all subsequent libraries and executables linked
-# against it.
-hardcode_automatic=$hardcode_automatic
-
-# Set to yes if linker adds runtime paths of dependent libraries
-# to runtime path list.
-inherit_rpath=$inherit_rpath
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to "yes" if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms
-
-# Commands necessary for linking programs (against libraries) with templates.
-prelink_cmds=$lt_prelink_cmds
-
-# Specify filename containing input files.
-file_list_spec=$lt_file_list_spec
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# The directories searched by this compiler when creating a shared library.
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
-
-# Dependencies to place before and after the objects being linked to
-# create a shared library.
-predep_objects=$lt_predep_objects
-postdep_objects=$lt_postdep_objects
-predeps=$lt_predeps
-postdeps=$lt_postdeps
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path
-
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
-  case $host_os in
-  aix3*)
-    cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-_LT_EOF
-    ;;
-  esac
-
-
-ltmain="$ac_aux_dir/ltmain.sh"
-
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $* ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[^=]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$@"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1+=\$2"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1=\$$1\$2"
-}
-
-_LT_EOF
-    ;;
-  esac
-
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-
-
-    cat <<_LT_EOF >> "$ofile"
-
-# ### BEGIN LIBTOOL TAG CONFIG: CXX
-
-# The linker used to build libraries.
-LD=$lt_LD_CXX
-
-# Commands used to build an old-style archive.
-old_archive_cmds=$lt_old_archive_cmds_CXX
-
-# A language specific compiler.
-CC=$lt_compiler_CXX
-
-# Is the compiler the GNU compiler?
-with_gcc=$GCC_CXX
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_CXX
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_CXX
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_CXX
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_CXX
-
-# Whether or not to disallow shared libs when runtime libs are static.
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
-
-# Whether the compiler copes with passing no objects directly.
-compiler_needs_object=$lt_compiler_needs_object_CXX
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
-
-# Commands used to build a shared archive.
-archive_cmds=$lt_archive_cmds_CXX
-archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
-
-# Commands used to build a loadable module if different from building
-# a shared archive.
-module_cmds=$lt_module_cmds_CXX
-module_expsym_cmds=$lt_module_expsym_cmds_CXX
-
-# Whether we are building with GNU ld or not.
-with_gnu_ld=$lt_with_gnu_ld_CXX
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_CXX
-
-# Flag that enforces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_CXX
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
-
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
-
-# Whether we need a single "-rpath" flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
-
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
-# DIR into the resulting binary.
-hardcode_direct=$hardcode_direct_CXX
-
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
-# DIR into the resulting binary and the resulting library dependency is
-# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
-# library is relocated.
-hardcode_direct_absolute=$hardcode_direct_absolute_CXX
-
-# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-# into the resulting binary.
-hardcode_minus_L=$hardcode_minus_L_CXX
-
-# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-# into the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
-
-# Set to "yes" if building a shared library automatically hardcodes DIR
-# into the library and all subsequent libraries and executables linked
-# against it.
-hardcode_automatic=$hardcode_automatic_CXX
-
-# Set to yes if linker adds runtime paths of dependent libraries
-# to runtime path list.
-inherit_rpath=$inherit_rpath_CXX
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_CXX
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path_CXX
-
-# Set to "yes" if exported symbols are required.
-always_export_symbols=$always_export_symbols_CXX
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_CXX
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_CXX
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_CXX
-
-# Commands necessary for linking programs (against libraries) with templates.
-prelink_cmds=$lt_prelink_cmds_CXX
-
-# Specify filename containing input files.
-file_list_spec=$lt_file_list_spec_CXX
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_CXX
-
-# The directories searched by this compiler when creating a shared library.
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
-
-# Dependencies to place before and after the objects being linked to
-# create a shared library.
-predep_objects=$lt_predep_objects_CXX
-postdep_objects=$lt_postdep_objects_CXX
-predeps=$lt_predeps_CXX
-postdeps=$lt_postdeps_CXX
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
-
-# ### END LIBTOOL TAG CONFIG: CXX
-_LT_EOF
-
- ;;
 
   esac
 done # for ac_tag
diff --git a/configure.ac b/configure.ac
index 70baccb..8379a50 100644
--- a/configure.ac
+++ b/configure.ac
@@ -30,32 +30,42 @@
 
 AC_PREREQ(2.57)
 
-AC_INIT(breakpad, 0.1, opensource@google.com)
+AC_INIT(breakpad, 0.1, google-breakpad-dev@googlegroups.com)
 dnl Sanity check: the argument is just a file that should exist.
 AC_CONFIG_SRCDIR(README)
 AC_CONFIG_AUX_DIR(autotools)
+AC_CONFIG_MACRO_DIR([m4])
+AC_CANONICAL_HOST
 
 AM_INIT_AUTOMAKE(subdir-objects tar-ustar 1.11.1)
 AM_CONFIG_HEADER(src/config.h)
 
 AC_PROG_CC
+AM_PROG_CC_C_O
 AC_PROG_CPP
 AC_PROG_CXX
-
-AC_PROG_LIBTOOL
-AC_SUBST(LIBTOOL_DEPS)
+AC_PROG_RANLIB
 
 AC_HEADER_STDC
 m4_include(m4/ax_pthread.m4)
 AX_PTHREAD
 
+# Only build Linux client libs when compiling for Linux
+case $host in
+     *-*-linux* | *-android* )
+        LINUX_HOST=true
+        ;;
+esac
+AM_CONDITIONAL(LINUX_HOST, test x$LINUX_HOST = xtrue)
+
 AC_ARG_ENABLE(m32,
               AS_HELP_STRING([--enable-m32],
                              [Compile/build with -m32]
                              [(default is no)]),
               [case "${enableval}" in
                  yes)
-		   CFLAGS=$(CFLAGS) -m32
+                   CFLAGS="${CFLAGS} -m32"
+                   CXXFLAGS="${CXXFLAGS} -m32"
                    usem32=true
                    ;;
                  no)
@@ -67,6 +77,28 @@
                esac],
               [usem32=false])
 
+AC_ARG_ENABLE(processor,
+              AS_HELP_STRING([--disable-processor],
+                             [Don't build processor library]
+                             [(default is no)]),
+              [case "${enableval}" in
+                 yes)
+                   disable_processor=false
+                   ;;
+                 no)
+                   disable_processor=true
+                   ;;
+                 *)
+                   AC_MSG_ERROR(bad value ${enableval} for --disable-processor)
+                   ;;
+               esac],
+              [disable_processor=false])
+AM_CONDITIONAL(DISABLE_PROCESSOR, test x$disable_processor = xtrue)
+
+if test x$LINUX_HOST = xfalse -a x$disable_processor = xtrue; then
+   AC_MSG_ERROR([--disable-processor was specified, and not building for Linux. Nothing to build!])
+fi
+
 AC_CHECK_MEMBER(struct sockaddr.sa_len,
                 [AC_DEFINE([GET_SA_LEN(X)],[(((struct sockaddr*)&(X))->sa_len)],
                            [actual length of specific struct sockaddr])],
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644
index 0000000..a3fee53
--- /dev/null
+++ b/m4/libtool.m4
@@ -0,0 +1,7377 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 56 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+		   [m4_fatal([Libtool version $1 or higher is required],
+		             63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\	*)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+	[m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+	[tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+	   m4_quote(lt_decl_varnames),
+	m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+					   [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+	dnl If the libtool generation code has been placed in $CONFIG_LT,
+	dnl instead of duplicating it all over again into config.status,
+	dnl then we will have config.status run $CONFIG_LT later, so it
+	dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+  ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+  lt_cl_success=:
+  test "$silent" = yes &&
+    lt_config_lt_args="$lt_config_lt_args --quiet"
+  exec AS_MESSAGE_LOG_FD>/dev/null
+  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+  exec AS_MESSAGE_LOG_FD>>config.log
+  $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_XSI_SHELLFNS
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],			[_LT_LANG(C)],
+  [C++],		[_LT_LANG(CXX)],
+  [Java],		[_LT_LANG(GCJ)],
+  [Fortran 77],		[_LT_LANG(F77)],
+  [Fortran],		[_LT_LANG(FC)],
+  [Windows Resource],	[_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+	[lt_cv_ld_exported_symbols_list=yes],
+	[lt_cv_ld_exported_symbols_list=no])
+	LDFLAGS="$save_LDFLAGS"
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[[012]]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+	 [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+[$]*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+	   test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	  # Cool, printf works
+	  :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	     test "X$echo_testing_string" = 'X\t' &&
+	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	     test "X$echo_testing_string" = "X$echo_test_string"; then
+	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	  export CONFIG_SHELL
+	  SHELL="$CONFIG_SHELL"
+	  export SHELL
+	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	     test "X$echo_testing_string" = 'X\t' &&
+	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	     test "X$echo_testing_string" = "X$echo_test_string"; then
+	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        else
+	  # maybe with a smaller string...
+	  prev=:
+
+	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+	    then
+	      break
+	    fi
+	    prev="$cmd"
+	  done
+
+	  if test "$prev" != 'sed 50q "[$]0"'; then
+	    echo_test_string=`eval $prev`
+	    export echo_test_string
+	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+	  else
+	    # Oops.  We lost completely, so just stick with echo.
+	    ECHO=echo
+	  fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+    [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  ppc64-*linux*|powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  ppc*-*linux*|powerpc*-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+	  lt_cv_dlopen_self_static, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+	 [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+	 [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+	 [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+	[Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+	[], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+       [shlibpath_overrides_runpath=yes])])
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+	[Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  xlc* | xlC*)
+	    # IBM XL 8.0 on PPC
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd* | netbsdelf*-gnu)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl*)
+	# IBM XL C 8.0/Fortran 10.1 on PPC
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)
+	  # Sun C 5.9
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  ;;
+	*Sun\ F*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+	[How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+	[Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+	[Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw* | cegcc*)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  linux* | k*bsd*-gnu)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+  ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+	  tmp_sharedflag='--shared' ;;
+	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+	_LT_TAGVAR(link_all_deplibs, $1)=no
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 _LT_SYS_MODULE_PATH_AIX
+	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	  # Exported symbols can be pulled into shared objects from archives
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	*)
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        AC_LINK_IFELSE(int foo(void) {},
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+        )
+        LDFLAGS="$save_LDFLAGS"
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	     ;;
+	   *)
+	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+        _LT_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+        then
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+    [[If ld is used when linking, flag to hardcode $libdir into a binary
+    during linking.  This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+    [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    _LT_SYS_MODULE_PATH_AIX
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	    # Exported symbols can be pulled into shared objects from archives
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+        # as there is no search path for DLLs.
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+        _LT_TAGVAR(always_export_symbols, $1)=no
+        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    cp $export_symbols $output_objdir/$soname.def;
+          else
+	    echo EXPORTS > $output_objdir/$soname.def;
+	    cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          _LT_TAGVAR(ld_shlibs, $1)=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      freebsd[[12]]*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+	_LT_TAGVAR(hardcode_direct, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+	      fi
+	    fi
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+	    ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+		$RANLIB $oldlib'
+	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 will use weak symbols
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+	  xl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	      _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='echo'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=echo
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+		;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	    case $host_os in
+	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+	    output_verbose_link_cmd='echo'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      fi
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+		*)
+		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+	_LT_TAGVAR(link_all_deplibs, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	  *)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	   else
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+	 else
+	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+	   _LT_TAGVAR(predep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+	   _LT_TAGVAR(postdep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${F77-"f77"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${FC-"f95"}
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+dnl func_dirname_and_basename
+dnl A portable version of this function is already defined in general.m4sh
+dnl so there is no need for it here.
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$[@]"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]+=\$[2]"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]=\$$[1]\$[2]"
+}
+
+_LT_EOF
+    ;;
+  esac
+])
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644
index 0000000..34151a3
--- /dev/null
+++ b/m4/ltoptions.m4
@@ -0,0 +1,368 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+		      [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+  		   [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+	[Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+	[Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+	 [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+		 [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+		 [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+		 [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+		 [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+		 [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644
index 0000000..9000a05
--- /dev/null
+++ b/m4/ltsugar.m4
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+	     [m4_foreach([_Lt_suffix],
+		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+		 [lt_append([$1], [$2], [$3])$4],
+		 [$5])],
+	  [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+	[$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644
index 0000000..f3c5309
--- /dev/null
+++ b/m4/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers			-*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# Generated from ltversion.in.
+
+# serial 3017 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+m4_define([LT_PACKAGE_REVISION], [1.3017])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.6b'
+macro_revision='1.3017'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644
index 0000000..637bb20
--- /dev/null
+++ b/m4/lt~obsolete.m4
@@ -0,0 +1,92 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
diff --git a/src/client/linux/Makefile b/src/client/linux/Makefile
deleted file mode 100644
index 5cf4bae..0000000
--- a/src/client/linux/Makefile
+++ /dev/null
@@ -1,115 +0,0 @@
-CXX=g++
-CC=gcc
-
-CXXFLAGS=-gstabs+ -I../../ -I../../testing/gtest/include -I../../testing -I../../third_party/linux/include -I../../testing/include -I../../testing/gtest -D_REENTRANT -Wall
-CFLAGS=$(CXXFLAGS)
-LDFLAGS=-lpthread
-
-OBJ_DIR=.
-BIN_DIR=.
-
-
-# Source vars for components
-
-# Google Test (meant to be included in each test source list)
-GOOGLETEST_CC_SRC=../../testing/gtest/src/gtest_main.cc \
-	          ../../testing/gtest/src/gtest-all.cc \
-		  ../../testing/src/gmock-all.cc
-
-# Google Logging
-GOOGLELOG_LIB=../../third_party/linux/lib/glog/libglog.a
-
-# Google Flags lib
-GOOGLEFLAGS_LIB=../../third_party/linux/lib/gflags/libgflags.a
-
-# Client exception handling & minidump writing library
-LIB_CC_SRC= \
-	   crash_generation/crash_generation_client.cc \
-	   crash_generation/crash_generation_server.cc \
-	   handler/exception_handler.cc \
-	   minidump_writer/linux_dumper.cc \
-	   minidump_writer/minidump_writer.cc \
-	   ../minidump_file_writer.cc \
-           ../../common/linux/file_id.cc \
-	   ../../common/linux/guid_creator.cc \
-	   ../../common/string_conversion.cc
-LIB_C_SRC = ../../common/convert_UTF.c
-LIB_CC_OBJ=$(patsubst %.cc, $(OBJ_DIR)/%.o,$(LIB_CC_SRC))
-LIB_C_OBJ=$(patsubst %.c, $(OBJ_DIR)/%.o, $(LIB_C_SRC))
-
-DUMPER_HELPER_TEST_C_SRC=minidump_writer/linux_dumper_unittest_helper.cc
-
-DUMPER_HELPER_TEST_C_OBJ=$(patsubst %.cc, $(OBJ_DIR)/%.o, \
-			   $(DUMPER_HELPER_TEST_C_SRC))
-
-# Unit tests for client library 
-
-TEST_CC_SRC=handler/exception_handler_unittest.cc \
-	    minidump_writer/directory_reader_unittest.cc \
-	    minidump_writer/line_reader_unittest.cc \
-	    minidump_writer/linux_dumper_unittest.cc \
-	    minidump_writer/minidump_writer_unittest.cc \
-	    $(GOOGLETEST_CC_SRC)
-
-TEST_CC_OBJ=$(patsubst %.cc, $(OBJ_DIR)/%.o,$(TEST_CC_SRC))
-
-# Library for crash dump uploader
-SENDER_LIBRARY_SRC=../../common/linux/google_crashdump_uploader.cc ../../common/linux/libcurl_wrapper.cc
-SENDER_LIBRARY_OBJ=$(patsubst %.cc, $(OBJ_DIR)/%.o,$(SENDER_LIBRARY_SRC))
-SENDER_LDFLAGS=-ldl
-
-# Unit test for crash dump uploader
-SENDER_TEST_SRC=../../common/linux/google_crashdump_uploader_test.cc \
-                $(GOOGLETEST_CC_SRC)
-
-SENDER_TEST_OBJ=$(patsubst %.cc, $(OBJ_DIR)/%.o,$(SENDER_TEST_SRC))
-
-# CLI tool for crash dump uploaer
-SENDER_TOOL_SRC=sender/google_crash_report_sender.cc
-SENDER_TOOL_OBJ=$(patsubst %.cc, $(OBJ_DIR)/%.o,$(SENDER_TOOL_SRC))
-
-# Vars for binary targets
-BREAKPAD_LIBRARY=$(BIN_DIR)/libbreakpad.a
-SENDER_LIBRARY=$(BIN_DIR)/libcrash_sender.a
-# Client unit test binary
-UNITTEST_BIN=$(BIN_DIR)/linux_client_test
-# Uploader unit test binary
-SENDER_UNITTEST_BIN=$(BIN_DIR)/google_crashdump_uploader_test
-# Sender CLI tool binary
-SENDER_CLI_TOOL_BIN=$(BIN_DIR)/google_crashdump_uploader
-
-DUMPER_HELPER_TEST_BIN=$(BIN_DIR)/linux_dumper_unittest_helper
-
-.PHONY:all clean
-
-all:$(BREAKPAD_LIBRARY) $(UNITTEST_BIN) #$(SENDER_LIBRARY) $(SENDER_UNITTEST_BIN) $(SENDER_CLI_TOOL_BIN)
-
-check:$(UNITTEST_BIN) $(SENDER_UNITTEST_BIN)
-	$(UNITTEST_BIN)
-	$(SENDER_UNITTEST_BIN)
-
-$(BIN_DIR)/libbreakpad.a:$(LIB_CC_OBJ) $(LIB_C_OBJ)
-	$(AR) rcs $@ $^
-
-$(BIN_DIR)/linux_dumper_unittest_helper:$(DUMPER_HELPER_TEST_C_OBJ)
-	$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@
-
-$(BIN_DIR)/linux_client_test:$(TEST_CC_OBJ) $(BREAKPAD_LIBRARY) $(DUMPER_HELPER_TEST_BIN)
-	$(CXX) $(CXXFLAGS) $(LDFLAGS) $(TEST_CC_OBJ) $(BREAKPAD_LIBRARY) -o $@
-
-$(BIN_DIR)/libcrash_sender.a:$(SENDER_LIBRARY_OBJ)
-	$(AR) rcs $@ $^
-
-$(BIN_DIR)/google_crashdump_uploader_test:$(SENDER_TEST_OBJ) $(SENDER_LIBRARY) \
-	$(GOOGLELOG_LIB)
-	$(CXX) $(CXXFLAGS) $(LDFLAGS) $(SENDER_LDFLAGS) $^ -o $@
-
-$(BIN_DIR)/google_crashdump_uploader:$(SENDER_TOOL_OBJ) $(SENDER_LIBRARY) \
-	$(GOOGLELOG_LIB) $(GOOGLEFLAGS_LIB)
-	$(CXX) $(CXXFLAGS) $(LDFLAGS) $(SENDER_LDFLAGS) $^ -o $@
-
-clean:
-	rm -f $(UNITTEST_BIN) $(BREAKPAD_LIBRARY) $(LIB_CC_OBJ) $(LIB_C_OBJ) \
-	$(TEST_CC_OBJ) $(SENDER_LIBRARY_OBJ) $(SENDER_LIBRARY) \
-	$(SENDER_TOOL_OBJ) $(SENDER_CLI_TOOL_BIN) $(SENDER_UNITTEST_BIN) \
-	$(DUMPER_HELPER_TEST_BIN) core
diff --git a/src/client/windows/tests/crash_generation_app/precompile.cc b/src/client/linux/android_link.h
similarity index 74%
copy from src/client/windows/tests/crash_generation_app/precompile.cc
copy to src/client/linux/android_link.h
index 9d2173c..430ac3b 100644
--- a/src/client/windows/tests/crash_generation_app/precompile.cc
+++ b/src/client/linux/android_link.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2008, Google Inc.
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -27,11 +27,18 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// precompile.cpp : source file that includes just the standard includes
-// CrashGenerationApp.pch will be the pre-compiled header
-// precompile.obj will contain the pre-compiled type information
+// The Android NDK doesn't have link.h. Fortunately, the only thing
+// that Breakpad uses from it is the ElfW macro, so define it here.
 
-#include "precompile.h"
+#ifndef GOOGLE_BREAKPAD_CLIENT_LINUX_ANDROID_LINK_H_
+#define GOOGLE_BREAKPAD_CLIENT_LINUX_ANDROID_LINK_H_
 
-// Reference any additional headers you need in PRECOMPILE.H
-// and not in this file.
+#include <sys/exec_elf.h>
+
+#ifndef ElfW
+#define ElfW(type)	_ElfW (Elf, ELFSIZE, type)
+#define _ElfW(e,w,t)	_ElfW_1 (e, w, _##t)
+#define _ElfW_1(e,w,t)	e##w##t
+#endif
+
+#endif  // GOOGLE_BREAKPAD_CLIENT_LINUX_ANDROID_LINK_H_
diff --git a/src/client/linux/android_ucontext.h b/src/client/linux/android_ucontext.h
new file mode 100644
index 0000000..30a4e6c
--- /dev/null
+++ b/src/client/linux/android_ucontext.h
@@ -0,0 +1,77 @@
+// Copyright (c) 2009, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Android runs a fairly new Linux kernel, so signal info is there,
+// but the NDK doesn't have the structs defined, so define
+// them here.
+// Adapted from platform-linux.cc in V8
+
+#ifndef GOOGLE_BREAKPAD_CLIENT_LINUX_ANDROID_UCONTEXT_H_
+#define GOOGLE_BREAKPAD_CLIENT_LINUX_ANDROID_UCONTEXT_H_
+
+#include <signal.h>
+
+#if !defined(__GLIBC__) && (defined(__arm__) || defined(__thumb__))
+
+struct sigcontext {
+  uint32_t trap_no;
+  uint32_t error_code;
+  uint32_t oldmask;
+  uint32_t arm_r0;
+  uint32_t arm_r1;
+  uint32_t arm_r2;
+  uint32_t arm_r3;
+  uint32_t arm_r4;
+  uint32_t arm_r5;
+  uint32_t arm_r6;
+  uint32_t arm_r7;
+  uint32_t arm_r8;
+  uint32_t arm_r9;
+  uint32_t arm_r10;
+  uint32_t arm_fp;
+  uint32_t arm_ip;
+  uint32_t arm_sp;
+  uint32_t arm_lr;
+  uint32_t arm_pc;
+  uint32_t arm_cpsr;
+  uint32_t fault_address;
+};
+typedef uint32_t __sigset_t;
+typedef struct sigcontext mcontext_t;
+typedef struct ucontext {
+  uint32_t uc_flags;
+  struct ucontext* uc_link;
+  stack_t uc_stack;
+  mcontext_t uc_mcontext;
+  __sigset_t uc_sigmask;
+} ucontext_t;
+
+#endif
+
+#endif  // GOOGLE_BREAKPAD_CLIENT_LINUX_ANDROID_UCONTEXT_H_
diff --git a/src/client/linux/crash_generation/crash_generation_client.cc b/src/client/linux/crash_generation/crash_generation_client.cc
index b05ebc5..3cc7eb4 100644
--- a/src/client/linux/crash_generation/crash_generation_client.cc
+++ b/src/client/linux/crash_generation/crash_generation_client.cc
@@ -36,7 +36,7 @@
 #include "client/linux/crash_generation/crash_generation_client.h"
 #include "common/linux/eintr_wrapper.h"
 #include "common/linux/linux_libc_support.h"
-#include "common/linux/linux_syscall_support.h"
+#include "third_party/lss/linux_syscall_support.h"
 
 namespace google_breakpad {
 
diff --git a/src/client/linux/crash_generation/crash_generation_server.cc b/src/client/linux/crash_generation/crash_generation_server.cc
index ff380aa..2f7edb6 100644
--- a/src/client/linux/crash_generation/crash_generation_server.cc
+++ b/src/client/linux/crash_generation/crash_generation_server.cc
@@ -39,6 +39,8 @@
 #include <sys/types.h>
 #include <unistd.h>
 
+#include <vector>
+
 #include "client/linux/crash_generation/crash_generation_server.h"
 #include "client/linux/crash_generation/client_info.h"
 #include "client/linux/handler/exception_handler.h"
@@ -142,15 +144,15 @@
 
       ino_t fd_inode;
       if (GetInodeForProcPath(&fd_inode, buf)
-	  && fd_inode == socket_inode) {
-	if (already_found) {
-	  closedir(fd);
-	  return false;
-	}
+          && fd_inode == socket_inode) {
+        if (already_found) {
+          closedir(fd);
+          return false;
+        }
 
-	already_found = true;
-	*pid_out = current_pid;
-	break;
+        already_found = true;
+        *pid_out = current_pid;
+        break;
       }
     }
 
@@ -224,11 +226,11 @@
 {
   assert(pthread_self() != thread_);
 
- if (!started_)
-   return;
+  if (!started_)
+    return;
 
   HANDLE_EINTR(write(control_pipe_out_, &kCommandQuit, 1));
-  
+
   void* dummy;
   pthread_join(thread_, &dummy);
 
@@ -280,7 +282,7 @@
       if (EINTR == errno) {
         continue;
       } else {
-	return;
+        return;
       }
     }
 
@@ -463,4 +465,4 @@
   return NULL;
 }
 
-} // namespace google_breakpad
+}  // namespace google_breakpad
diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc
index 038612f..592c9e5 100644
--- a/src/client/linux/handler/exception_handler.cc
+++ b/src/client/linux/handler/exception_handler.cc
@@ -72,22 +72,34 @@
 #include <signal.h>
 #include <stdio.h>
 #include <sys/mman.h>
+#include <sys/prctl.h>
+#if !defined(__ANDROID__)
 #include <sys/signal.h>
+#endif
 #include <sys/syscall.h>
+#if !defined(__ANDROID__)
 #include <sys/ucontext.h>
 #include <sys/user.h>
+#endif
 #include <sys/wait.h>
+#if !defined(__ANDROID__)
 #include <ucontext.h>
+#endif
 #include <unistd.h>
 
 #include <algorithm>
 #include <vector>
 
 #include "common/linux/linux_libc_support.h"
-#include "common/linux/linux_syscall_support.h"
-#include "common/linux/memory.h"
+#include "common/memory.h"
 #include "client/linux/minidump_writer/minidump_writer.h"
 #include "common/linux/guid_creator.h"
+#include "common/linux/eintr_wrapper.h"
+#include "third_party/lss/linux_syscall_support.h"
+
+#ifndef PR_SET_PTRACER
+#define PR_SET_PTRACER 0x59616d61
+#endif
 
 // A wrapper for the tgkill syscall: send a signal to a specific thread.
 static int tgkill(pid_t tgid, pid_t tid, int sig) {
@@ -180,7 +192,7 @@
   stack.ss_sp = signal_stack;
   stack.ss_size = kSigStackSize;
 
-  if (sigaltstack(&stack, NULL) == -1)
+  if (sys_sigaltstack(&stack, NULL) == -1)
     return false;
 
   struct sigaction sa;
@@ -264,13 +276,28 @@
 
   pthread_mutex_unlock(&handler_stack_mutex_);
 
-  // Terminate ourselves with the same signal so that our parent knows that we
-  // crashed. The default action for all the signals which we catch is Core, so
+  if (info->si_pid) {
+    // This signal was triggered by somebody sending us the signal with kill().
+    // In order to retrigger it, we have to queue a new signal by calling
+    // kill() ourselves.
+    if (tgkill(getpid(), syscall(__NR_gettid), sig) < 0) {
+      // If we failed to kill ourselves (e.g. because a sandbox disallows us
+      // to do so), we instead resort to terminating our process. This will
+      // result in an incorrect exit code.
+      _exit(1);
+    }
+  } else {
+    // This was a synchronous signal triggered by a hard fault (e.g. SIGSEGV).
+    // No need to reissue the signal. It will automatically trigger again,
+    // when we return from the signal handler.
+  }
+
+  // As soon as we return from the signal handler, our signal will become
+  // unmasked. At that time, we will  get terminated with the same signal that
+  // was triggered originally. This allows our parent to know that we crashed.
+  // The default action for all the signals which we catch is Core, so
   // this is the end of us.
   signal(sig, SIG_DFL);
-  tgkill(getpid(), sys_gettid(), sig);
-
-  // not reached.
 }
 
 struct ThreadArgument {
@@ -285,6 +312,11 @@
 // static
 int ExceptionHandler::ThreadEntry(void *arg) {
   const ThreadArgument *thread_arg = reinterpret_cast<ThreadArgument*>(arg);
+
+  // Block here until the crashing process unblocks us when
+  // we're allowed to use ptrace
+  thread_arg->handler->WaitForContinueSignal();
+
   return thread_arg->handler->DoDump(thread_arg->pid, thread_arg->context,
                                      thread_arg->context_size) == false;
 }
@@ -309,7 +341,7 @@
            sizeof(context.float_state));
   }
 #endif
-  context.tid = sys_gettid();
+  context.tid = syscall(__NR_gettid);
   if (crash_handler_ != NULL) {
     if (crash_handler_(&context, sizeof(context),
                        callback_context_)) {
@@ -339,14 +371,35 @@
   thread_arg.context = context;
   thread_arg.context_size = sizeof(*context);
 
+  // We need to explicitly enable ptrace of parent processes on some
+  // kernels, but we need to know the PID of the cloned process before we
+  // can do this. Create a pipe here which we can use to block the
+  // cloned process after creating it, until we have explicitly enabled ptrace
+  if(sys_pipe(fdes) == -1) {
+    // Creating the pipe failed. We'll log an error but carry on anyway,
+    // as we'll probably still get a useful crash report. All that will happen
+    // is the write() and read() calls will fail with EBADF
+    static const char no_pipe_msg[] = "ExceptionHandler::GenerateDump \
+                                       sys_pipe failed:";
+    sys_write(2, no_pipe_msg, sizeof(no_pipe_msg) - 1);
+    sys_write(2, strerror(errno), strlen(strerror(errno)));
+    sys_write(2, "\n", 1);
+  }
+
   const pid_t child = sys_clone(
       ThreadEntry, stack, CLONE_FILES | CLONE_FS | CLONE_UNTRACED,
       &thread_arg, NULL, NULL, NULL);
   int r, status;
+  // Allow the child to ptrace us
+  prctl(PR_SET_PTRACER, child, 0, 0, 0);
+  SendContinueSignalToChild();
   do {
     r = sys_waitpid(child, &status, __WALL);
   } while (r == -1 && errno == EINTR);
 
+  sys_close(fdes[0]);
+  sys_close(fdes[1]);
+
   if (r == -1) {
     static const char msg[] = "ExceptionHandler::GenerateDump waitpid failed:";
     sys_write(2, msg, sizeof(msg) - 1);
@@ -364,6 +417,35 @@
 }
 
 // This function runs in a compromised context: see the top of the file.
+void ExceptionHandler::SendContinueSignalToChild() {
+  static const char okToContinueMessage = 'a';
+  int r;
+  r = HANDLE_EINTR(sys_write(fdes[1], &okToContinueMessage, sizeof(char)));
+  if(r == -1) {
+    static const char msg[] = "ExceptionHandler::SendContinueSignalToChild \
+                               sys_write failed:";
+    sys_write(2, msg, sizeof(msg) - 1);
+    sys_write(2, strerror(errno), strlen(strerror(errno)));
+    sys_write(2, "\n", 1);
+  }
+}
+
+// This function runs in a compromised context: see the top of the file.
+// Runs on the cloned process.
+void ExceptionHandler::WaitForContinueSignal() {
+  int r;
+  char receivedMessage;
+  r = HANDLE_EINTR(sys_read(fdes[0], &receivedMessage, sizeof(char)));
+  if(r == -1) {
+    static const char msg[] = "ExceptionHandler::WaitForContinueSignal \
+                               sys_read failed:";
+    sys_write(2, msg, sizeof(msg) - 1);
+    sys_write(2, strerror(errno), strlen(strerror(errno)));
+    sys_write(2, "\n", 1);
+  }
+}
+
+// This function runs in a compromised context: see the top of the file.
 // Runs on the cloned process.
 bool ExceptionHandler::DoDump(pid_t crashing_process, const void* context,
                               size_t context_size) {
diff --git a/src/client/linux/handler/exception_handler.h b/src/client/linux/handler/exception_handler.h
index 2a49703..82f7fb4 100644
--- a/src/client/linux/handler/exception_handler.h
+++ b/src/client/linux/handler/exception_handler.h
@@ -33,9 +33,13 @@
 #include <vector>
 #include <string>
 
+#include <pthread.h>
 #include <signal.h>
 #include <stdio.h>
 
+#if defined(__ANDROID__)
+#include "client/linux/android_ucontext.h"
+#endif
 #include "client/linux/crash_generation/crash_generation_client.h"
 #include "processor/scoped_ptr.h"
 
@@ -105,7 +109,7 @@
 
   // In certain cases, a user may wish to handle the generation of the minidump
   // themselves. In this case, they can install a handler callback which is
-  // called when a crash has occured. If this function returns true, no other
+  // called when a crash has occurred. If this function returns true, no other
   // processing of occurs and the process will shortly be crashed. If this
   // returns false, the normal processing continues.
   typedef bool (*HandlerCallback)(const void* crash_context,
@@ -184,6 +188,8 @@
   void UninstallHandlers();
   void PreresolveSymbols();
   bool GenerateDump(CrashContext *context);
+  void SendContinueSignalToChild();
+  void WaitForContinueSignal();
 
   void UpdateNextID();
   static void SignalHandler(int sig, siginfo_t* info, void* uc);
@@ -223,6 +229,13 @@
 
   // A vector of the old signal handlers.
   std::vector<std::pair<int, struct sigaction *> > old_handlers_;
+
+  // We need to explicitly enable ptrace of parent processes on some
+  // kernels, but we need to know the PID of the cloned process before we
+  // can do this. We create a pipe which we can use to block the
+  // cloned process after creating it, until we have explicitly enabled 
+  // ptrace. This is used to store the file descriptors for the pipe
+  int fdes[2];
 };
 
 }  // namespace google_breakpad
diff --git a/src/client/linux/handler/exception_handler_unittest.cc b/src/client/linux/handler/exception_handler_unittest.cc
index 9747fe7..988de06 100644
--- a/src/client/linux/handler/exception_handler_unittest.cc
+++ b/src/client/linux/handler/exception_handler_unittest.cc
@@ -27,24 +27,33 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include <string>
-
 #include <stdint.h>
 #include <unistd.h>
 #include <signal.h>
+#include <sys/mman.h>
 #include <sys/poll.h>
 #include <sys/socket.h>
 #include <sys/uio.h>
+#include <sys/wait.h>
 
+#include <string>
+
+#include "breakpad_googletest_includes.h"
 #include "client/linux/handler/exception_handler.h"
 #include "client/linux/minidump_writer/minidump_writer.h"
 #include "common/linux/eintr_wrapper.h"
 #include "common/linux/linux_libc_support.h"
-#include "common/linux/linux_syscall_support.h"
-#include "breakpad_googletest_includes.h"
+#include "third_party/lss/linux_syscall_support.h"
+#include "google_breakpad/processor/minidump.h"
 
 using namespace google_breakpad;
 
+#if !defined(__ANDROID__)
+#define TEMPDIR "/tmp"
+#else
+#define TEMPDIR "/data/local/tmp"
+#endif
+
 static void sigchld_handler(int signo) { }
 
 class ExceptionHandlerTest : public ::testing::Test {
@@ -65,7 +74,7 @@
 };
 
 TEST(ExceptionHandlerTest, Simple) {
-  ExceptionHandler handler("/tmp", NULL, NULL, NULL, true);
+  ExceptionHandler handler(TEMPDIR, NULL, NULL, NULL, true);
 }
 
 static bool DoneCallback(const char* dump_path,
@@ -91,7 +100,7 @@
   const pid_t child = fork();
   if (child == 0) {
     close(fds[0]);
-    ExceptionHandler handler("/tmp", NULL, DoneCallback, (void*) fds[1],
+    ExceptionHandler handler(TEMPDIR, NULL, DoneCallback, (void*) fds[1],
                              true);
     *reinterpret_cast<int*>(NULL) = 0;
   }
@@ -119,7 +128,7 @@
   filename[len] = 0;
   close(fds[0]);
 
-  const std::string minidump_filename = std::string("/tmp/") + filename +
+  const std::string minidump_filename = std::string(TEMPDIR) + "/" + filename +
                                         ".dmp";
 
   struct stat st;
@@ -128,6 +137,442 @@
   unlink(minidump_filename.c_str());
 }
 
+// Test that memory around the instruction pointer is written
+// to the dump as a MinidumpMemoryRegion.
+TEST(ExceptionHandlerTest, InstructionPointerMemory) {
+  int fds[2];
+  ASSERT_NE(pipe(fds), -1);
+
+  // These are defined here so the parent can use them to check the
+  // data from the minidump afterwards.
+  const u_int32_t kMemorySize = 256;  // bytes
+  const int kOffset = kMemorySize / 2;
+  // This crashes with SIGILL on x86/x86-64/arm.
+  const unsigned char instructions[] = { 0xff, 0xff, 0xff, 0xff };
+
+  const pid_t child = fork();
+  if (child == 0) {
+    close(fds[0]);
+    ExceptionHandler handler(TEMPDIR, NULL, DoneCallback, (void*) fds[1],
+                             true);
+    // Get some executable memory.
+    char* memory =
+      reinterpret_cast<char*>(mmap(NULL,
+                                   kMemorySize,
+                                   PROT_READ | PROT_WRITE | PROT_EXEC,
+                                   MAP_PRIVATE | MAP_ANON,
+                                   -1,
+                                   0));
+    if (!memory)
+      exit(0);
+
+    // Write some instructions that will crash. Put them in the middle
+    // of the block of memory, because the minidump should contain 128
+    // bytes on either side of the instruction pointer.
+    memcpy(memory + kOffset, instructions, sizeof(instructions));
+
+    // Now execute the instructions, which should crash.
+    typedef void (*void_function)(void);
+    void_function memory_function =
+      reinterpret_cast<void_function>(memory + kOffset);
+    memory_function();
+  }
+  close(fds[1]);
+
+  int status;
+  ASSERT_NE(HANDLE_EINTR(waitpid(child, &status, 0)), -1);
+  ASSERT_TRUE(WIFSIGNALED(status));
+  ASSERT_EQ(WTERMSIG(status), SIGILL);
+
+  struct pollfd pfd;
+  memset(&pfd, 0, sizeof(pfd));
+  pfd.fd = fds[0];
+  pfd.events = POLLIN | POLLERR;
+
+  const int r = HANDLE_EINTR(poll(&pfd, 1, 0));
+  ASSERT_EQ(r, 1);
+  ASSERT_TRUE(pfd.revents & POLLIN);
+
+  uint32_t len;
+  ASSERT_EQ(read(fds[0], &len, sizeof(len)), (ssize_t)sizeof(len));
+  ASSERT_LT(len, (uint32_t)2048);
+  char* filename = reinterpret_cast<char*>(malloc(len + 1));
+  ASSERT_EQ(read(fds[0], filename, len), len);
+  filename[len] = 0;
+  close(fds[0]);
+
+  const std::string minidump_filename = std::string(TEMPDIR) + "/" + filename +
+                                        ".dmp";
+
+  struct stat st;
+  ASSERT_EQ(stat(minidump_filename.c_str(), &st), 0);
+  ASSERT_GT(st.st_size, 0u);
+
+  // Read the minidump. Locate the exception record and the
+  // memory list, and then ensure that there is a memory region
+  // in the memory list that covers the instruction pointer from
+  // the exception record.
+  Minidump minidump(minidump_filename);
+  ASSERT_TRUE(minidump.Read());
+
+  MinidumpException* exception = minidump.GetException();
+  MinidumpMemoryList* memory_list = minidump.GetMemoryList();
+  ASSERT_TRUE(exception);
+  ASSERT_TRUE(memory_list);
+  ASSERT_LT(0, memory_list->region_count());
+
+  MinidumpContext* context = exception->GetContext();
+  ASSERT_TRUE(context);
+
+  u_int64_t instruction_pointer;
+  switch (context->GetContextCPU()) {
+  case MD_CONTEXT_X86:
+    instruction_pointer = context->GetContextX86()->eip;
+    break;
+  case MD_CONTEXT_AMD64:
+    instruction_pointer = context->GetContextAMD64()->rip;
+    break;
+  case MD_CONTEXT_ARM:
+    instruction_pointer = context->GetContextARM()->iregs[15];
+    break;
+  default:
+    FAIL() << "Unknown context CPU: " << context->GetContextCPU();
+    break;
+  }
+
+  MinidumpMemoryRegion* region =
+    memory_list->GetMemoryRegionForAddress(instruction_pointer);
+  ASSERT_TRUE(region);
+
+  EXPECT_EQ(kMemorySize, region->GetSize());
+  const u_int8_t* bytes = region->GetMemory();
+  ASSERT_TRUE(bytes);
+
+  u_int8_t prefix_bytes[kOffset];
+  u_int8_t suffix_bytes[kMemorySize - kOffset - sizeof(instructions)];
+  memset(prefix_bytes, 0, sizeof(prefix_bytes));
+  memset(suffix_bytes, 0, sizeof(suffix_bytes));
+  EXPECT_TRUE(memcmp(bytes, prefix_bytes, sizeof(prefix_bytes)) == 0);
+  EXPECT_TRUE(memcmp(bytes + kOffset, instructions, sizeof(instructions)) == 0);
+  EXPECT_TRUE(memcmp(bytes + kOffset + sizeof(instructions),
+                     suffix_bytes, sizeof(suffix_bytes)) == 0);
+
+  unlink(minidump_filename.c_str());
+  free(filename);
+}
+
+// Test that the memory region around the instruction pointer is
+// bounded correctly on the low end.
+TEST(ExceptionHandlerTest, InstructionPointerMemoryMinBound) {
+  int fds[2];
+  ASSERT_NE(pipe(fds), -1);
+
+  // These are defined here so the parent can use them to check the
+  // data from the minidump afterwards.
+  const u_int32_t kMemorySize = 256;  // bytes
+  const int kOffset = 0;
+  // This crashes with SIGILL on x86/x86-64/arm.
+  const unsigned char instructions[] = { 0xff, 0xff, 0xff, 0xff };
+
+  const pid_t child = fork();
+  if (child == 0) {
+    close(fds[0]);
+    ExceptionHandler handler(TEMPDIR, NULL, DoneCallback, (void*) fds[1],
+                             true);
+    // Get some executable memory.
+    char* memory =
+      reinterpret_cast<char*>(mmap(NULL,
+                                   kMemorySize,
+                                   PROT_READ | PROT_WRITE | PROT_EXEC,
+                                   MAP_PRIVATE | MAP_ANON,
+                                   -1,
+                                   0));
+    if (!memory)
+      exit(0);
+
+    // Write some instructions that will crash. Put them in the middle
+    // of the block of memory, because the minidump should contain 128
+    // bytes on either side of the instruction pointer.
+    memcpy(memory + kOffset, instructions, sizeof(instructions));
+
+    // Now execute the instructions, which should crash.
+    typedef void (*void_function)(void);
+    void_function memory_function =
+      reinterpret_cast<void_function>(memory + kOffset);
+    memory_function();
+  }
+  close(fds[1]);
+
+  int status;
+  ASSERT_NE(HANDLE_EINTR(waitpid(child, &status, 0)), -1);
+  ASSERT_TRUE(WIFSIGNALED(status));
+  ASSERT_EQ(WTERMSIG(status), SIGILL);
+
+  struct pollfd pfd;
+  memset(&pfd, 0, sizeof(pfd));
+  pfd.fd = fds[0];
+  pfd.events = POLLIN | POLLERR;
+
+  const int r = HANDLE_EINTR(poll(&pfd, 1, 0));
+  ASSERT_EQ(r, 1);
+  ASSERT_TRUE(pfd.revents & POLLIN);
+
+  uint32_t len;
+  ASSERT_EQ(read(fds[0], &len, sizeof(len)), (ssize_t)sizeof(len));
+  ASSERT_LT(len, (uint32_t)2048);
+  char* filename = reinterpret_cast<char*>(malloc(len + 1));
+  ASSERT_EQ(read(fds[0], filename, len), len);
+  filename[len] = 0;
+  close(fds[0]);
+
+  const std::string minidump_filename = std::string(TEMPDIR) + "/" + filename +
+                                        ".dmp";
+
+  struct stat st;
+  ASSERT_EQ(stat(minidump_filename.c_str(), &st), 0);
+  ASSERT_GT(st.st_size, 0u);
+
+  // Read the minidump. Locate the exception record and the
+  // memory list, and then ensure that there is a memory region
+  // in the memory list that covers the instruction pointer from
+  // the exception record.
+  Minidump minidump(minidump_filename);
+  ASSERT_TRUE(minidump.Read());
+
+  MinidumpException* exception = minidump.GetException();
+  MinidumpMemoryList* memory_list = minidump.GetMemoryList();
+  ASSERT_TRUE(exception);
+  ASSERT_TRUE(memory_list);
+  ASSERT_LT(0, memory_list->region_count());
+
+  MinidumpContext* context = exception->GetContext();
+  ASSERT_TRUE(context);
+
+  u_int64_t instruction_pointer;
+  switch (context->GetContextCPU()) {
+  case MD_CONTEXT_X86:
+    instruction_pointer = context->GetContextX86()->eip;
+    break;
+  case MD_CONTEXT_AMD64:
+    instruction_pointer = context->GetContextAMD64()->rip;
+    break;
+  case MD_CONTEXT_ARM:
+    instruction_pointer = context->GetContextARM()->iregs[15];
+    break;
+  default:
+    FAIL() << "Unknown context CPU: " << context->GetContextCPU();
+    break;
+  }
+
+  MinidumpMemoryRegion* region =
+    memory_list->GetMemoryRegionForAddress(instruction_pointer);
+  ASSERT_TRUE(region);
+
+  EXPECT_EQ(kMemorySize / 2, region->GetSize());
+  const u_int8_t* bytes = region->GetMemory();
+  ASSERT_TRUE(bytes);
+
+  u_int8_t suffix_bytes[kMemorySize / 2 - sizeof(instructions)];
+  memset(suffix_bytes, 0, sizeof(suffix_bytes));
+  EXPECT_TRUE(memcmp(bytes + kOffset, instructions, sizeof(instructions)) == 0);
+  EXPECT_TRUE(memcmp(bytes + kOffset + sizeof(instructions),
+                     suffix_bytes, sizeof(suffix_bytes)) == 0);
+
+  unlink(minidump_filename.c_str());
+  free(filename);
+}
+
+// Test that the memory region around the instruction pointer is
+// bounded correctly on the high end.
+TEST(ExceptionHandlerTest, InstructionPointerMemoryMaxBound) {
+  int fds[2];
+  ASSERT_NE(pipe(fds), -1);
+
+  // These are defined here so the parent can use them to check the
+  // data from the minidump afterwards.
+  // Use 4k here because the OS will hand out a single page even
+  // if a smaller size is requested, and this test wants to
+  // test the upper bound of the memory range.
+  const u_int32_t kMemorySize = 4096;  // bytes
+  // This crashes with SIGILL on x86/x86-64/arm.
+  const unsigned char instructions[] = { 0xff, 0xff, 0xff, 0xff };
+  const int kOffset = kMemorySize - sizeof(instructions);
+
+  const pid_t child = fork();
+  if (child == 0) {
+    close(fds[0]);
+    ExceptionHandler handler(TEMPDIR, NULL, DoneCallback, (void*) fds[1],
+                             true);
+    // Get some executable memory.
+    char* memory =
+      reinterpret_cast<char*>(mmap(NULL,
+                                   kMemorySize,
+                                   PROT_READ | PROT_WRITE | PROT_EXEC,
+                                   MAP_PRIVATE | MAP_ANON,
+                                   -1,
+                                   0));
+    if (!memory)
+      exit(0);
+
+    // Write some instructions that will crash. Put them in the middle
+    // of the block of memory, because the minidump should contain 128
+    // bytes on either side of the instruction pointer.
+    memcpy(memory + kOffset, instructions, sizeof(instructions));
+
+    // Now execute the instructions, which should crash.
+    typedef void (*void_function)(void);
+    void_function memory_function =
+      reinterpret_cast<void_function>(memory + kOffset);
+    memory_function();
+  }
+  close(fds[1]);
+
+  int status;
+  ASSERT_NE(HANDLE_EINTR(waitpid(child, &status, 0)), -1);
+  ASSERT_TRUE(WIFSIGNALED(status));
+  ASSERT_EQ(WTERMSIG(status), SIGILL);
+
+  struct pollfd pfd;
+  memset(&pfd, 0, sizeof(pfd));
+  pfd.fd = fds[0];
+  pfd.events = POLLIN | POLLERR;
+
+  const int r = HANDLE_EINTR(poll(&pfd, 1, 0));
+  ASSERT_EQ(r, 1);
+  ASSERT_TRUE(pfd.revents & POLLIN);
+
+  uint32_t len;
+  ASSERT_EQ(read(fds[0], &len, sizeof(len)), (ssize_t)sizeof(len));
+  ASSERT_LT(len, (uint32_t)2048);
+  char* filename = reinterpret_cast<char*>(malloc(len + 1));
+  ASSERT_EQ(read(fds[0], filename, len), len);
+  filename[len] = 0;
+  close(fds[0]);
+
+  const std::string minidump_filename = std::string(TEMPDIR) + "/" + filename +
+                                        ".dmp";
+
+  struct stat st;
+  ASSERT_EQ(stat(minidump_filename.c_str(), &st), 0);
+  ASSERT_GT(st.st_size, 0u);
+
+  // Read the minidump. Locate the exception record and the
+  // memory list, and then ensure that there is a memory region
+  // in the memory list that covers the instruction pointer from
+  // the exception record.
+  Minidump minidump(minidump_filename);
+  ASSERT_TRUE(minidump.Read());
+
+  MinidumpException* exception = minidump.GetException();
+  MinidumpMemoryList* memory_list = minidump.GetMemoryList();
+  ASSERT_TRUE(exception);
+  ASSERT_TRUE(memory_list);
+  ASSERT_LT(0, memory_list->region_count());
+
+  MinidumpContext* context = exception->GetContext();
+  ASSERT_TRUE(context);
+
+  u_int64_t instruction_pointer;
+  switch (context->GetContextCPU()) {
+  case MD_CONTEXT_X86:
+    instruction_pointer = context->GetContextX86()->eip;
+    break;
+  case MD_CONTEXT_AMD64:
+    instruction_pointer = context->GetContextAMD64()->rip;
+    break;
+  case MD_CONTEXT_ARM:
+    instruction_pointer = context->GetContextARM()->iregs[15];
+    break;
+  default:
+    FAIL() << "Unknown context CPU: " << context->GetContextCPU();
+    break;
+  }
+
+  MinidumpMemoryRegion* region =
+    memory_list->GetMemoryRegionForAddress(instruction_pointer);
+  ASSERT_TRUE(region);
+
+  const size_t kPrefixSize = 128;  // bytes
+  EXPECT_EQ(kPrefixSize + sizeof(instructions), region->GetSize());
+  const u_int8_t* bytes = region->GetMemory();
+  ASSERT_TRUE(bytes);
+
+  u_int8_t prefix_bytes[kPrefixSize];
+  memset(prefix_bytes, 0, sizeof(prefix_bytes));
+  EXPECT_TRUE(memcmp(bytes, prefix_bytes, sizeof(prefix_bytes)) == 0);
+  EXPECT_TRUE(memcmp(bytes + kPrefixSize,
+                     instructions, sizeof(instructions)) == 0);
+
+  unlink(minidump_filename.c_str());
+  free(filename);
+}
+
+// Ensure that an extra memory block doesn't get added when the
+// instruction pointer is not in mapped memory.
+TEST(ExceptionHandlerTest, InstructionPointerMemoryNullPointer) {
+  int fds[2];
+  ASSERT_NE(pipe(fds), -1);
+
+
+  const pid_t child = fork();
+  if (child == 0) {
+    close(fds[0]);
+    ExceptionHandler handler(TEMPDIR, NULL, DoneCallback, (void*) fds[1],
+                             true);
+    // Try calling a NULL pointer.
+    typedef void (*void_function)(void);
+    void_function memory_function =
+      reinterpret_cast<void_function>(NULL);
+    memory_function();
+  }
+  close(fds[1]);
+
+  int status;
+  ASSERT_NE(HANDLE_EINTR(waitpid(child, &status, 0)), -1);
+  ASSERT_TRUE(WIFSIGNALED(status));
+  ASSERT_EQ(WTERMSIG(status), SIGSEGV);
+
+  struct pollfd pfd;
+  memset(&pfd, 0, sizeof(pfd));
+  pfd.fd = fds[0];
+  pfd.events = POLLIN | POLLERR;
+
+  const int r = HANDLE_EINTR(poll(&pfd, 1, 0));
+  ASSERT_EQ(r, 1);
+  ASSERT_TRUE(pfd.revents & POLLIN);
+
+  uint32_t len;
+  ASSERT_EQ(read(fds[0], &len, sizeof(len)), (ssize_t)sizeof(len));
+  ASSERT_LT(len, (uint32_t)2048);
+  char* filename = reinterpret_cast<char*>(malloc(len + 1));
+  ASSERT_EQ(read(fds[0], filename, len), len);
+  filename[len] = 0;
+  close(fds[0]);
+
+  const std::string minidump_filename = std::string(TEMPDIR) + "/" + filename +
+                                        ".dmp";
+
+  struct stat st;
+  ASSERT_EQ(stat(minidump_filename.c_str(), &st), 0);
+  ASSERT_GT(st.st_size, 0u);
+
+  // Read the minidump. Locate the exception record and the
+  // memory list, and then ensure that there is a memory region
+  // in the memory list that covers the instruction pointer from
+  // the exception record.
+  Minidump minidump(minidump_filename);
+  ASSERT_TRUE(minidump.Read());
+
+  MinidumpException* exception = minidump.GetException();
+  MinidumpMemoryList* memory_list = minidump.GetMemoryList();
+  ASSERT_TRUE(exception);
+  ASSERT_TRUE(memory_list);
+  ASSERT_EQ((unsigned int)1, memory_list->region_count());
+
+  unlink(minidump_filename.c_str());
+  free(filename);
+}
+
 static const unsigned kControlMsgSize =
     CMSG_SPACE(sizeof(int)) + CMSG_SPACE(sizeof(struct ucred));
 
@@ -225,7 +670,7 @@
   ASSERT_NE(crashing_pid, -1);
   ASSERT_NE(signal_fd, -1);
 
-  char templ[] = "/tmp/exception-handler-unittest-XXXXXX";
+  char templ[] = TEMPDIR "/exception-handler-unittest-XXXXXX";
   mktemp(templ);
   ASSERT_TRUE(WriteMinidump(templ, crashing_pid, context,
                             kCrashContextSize));
diff --git a/src/client/linux/minidump_writer/directory_reader.h b/src/client/linux/minidump_writer/directory_reader.h
index 4698b7e..1336537 100644
--- a/src/client/linux/minidump_writer/directory_reader.h
+++ b/src/client/linux/minidump_writer/directory_reader.h
@@ -37,7 +37,7 @@
 #include <errno.h>
 #include <string.h>
 
-#include "common/linux/linux_syscall_support.h"
+#include "third_party/lss/linux_syscall_support.h"
 
 namespace google_breakpad {
 
diff --git a/src/client/linux/minidump_writer/line_reader.h b/src/client/linux/minidump_writer/line_reader.h
index 5c0a115..2d19c66 100644
--- a/src/client/linux/minidump_writer/line_reader.h
+++ b/src/client/linux/minidump_writer/line_reader.h
@@ -34,7 +34,7 @@
 #include <assert.h>
 #include <string.h>
 
-#include "common/linux/linux_syscall_support.h"
+#include "third_party/lss/linux_syscall_support.h"
 
 namespace google_breakpad {
 
diff --git a/src/client/linux/minidump_writer/line_reader_unittest.cc b/src/client/linux/minidump_writer/line_reader_unittest.cc
index 7c4c3ce..a2ea17f 100644
--- a/src/client/linux/minidump_writer/line_reader_unittest.cc
+++ b/src/client/linux/minidump_writer/line_reader_unittest.cc
@@ -36,8 +36,14 @@
 
 using namespace google_breakpad;
 
+#if !defined(__ANDROID__)
+#define TEMPDIR "/tmp"
+#else
+#define TEMPDIR "/data/local/tmp"
+#endif
+
 static int TemporaryFile() {
-  static const char templ[] = "/tmp/line-reader-unittest-XXXXXX";
+  static const char templ[] = TEMPDIR "/line-reader-unittest-XXXXXX";
   char templ_copy[sizeof(templ)];
   memcpy(templ_copy, templ, sizeof(templ));
   const int fd = mkstemp(templ_copy);
diff --git a/src/client/linux/minidump_writer/linux_dumper.cc b/src/client/linux/minidump_writer/linux_dumper.cc
index c693e90..4885136 100644
--- a/src/client/linux/minidump_writer/linux_dumper.cc
+++ b/src/client/linux/minidump_writer/linux_dumper.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2009, Google Inc.
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -34,22 +34,21 @@
 
 #include "client/linux/minidump_writer/linux_dumper.h"
 
+#include <asm/ptrace.h>
 #include <assert.h>
+#include <errno.h>
+#include <fcntl.h>
 #include <limits.h>
+#if !defined(__ANDROID__)
+#include <link.h>
+#endif
 #include <stddef.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
-
-#include <unistd.h>
-#include <elf.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <link.h>
-
-#include <sys/types.h>
 #include <sys/ptrace.h>
 #include <sys/wait.h>
+#include <unistd.h>
 
 #include <algorithm>
 
@@ -57,9 +56,10 @@
 #include "client/linux/minidump_writer/line_reader.h"
 #include "common/linux/file_id.h"
 #include "common/linux/linux_libc_support.h"
-#include "common/linux/linux_syscall_support.h"
+#include "third_party/lss/linux_syscall_support.h"
 
 static const char kMappedFileUnsafePrefix[] = "/dev/";
+static const char kDeletedSuffix[] = " (deleted)";
 
 // Suspend a thread by attaching to it.
 static bool SuspendThread(pid_t pid) {
@@ -75,6 +75,26 @@
       return false;
     }
   }
+#if defined(__i386) || defined(__x86_64)
+  // On x86, the stack pointer is NULL or -1, when executing trusted code in
+  // the seccomp sandbox. Not only does this cause difficulties down the line
+  // when trying to dump the thread's stack, it also results in the minidumps
+  // containing information about the trusted threads. This information is
+  // generally completely meaningless and just pollutes the minidumps.
+  // We thus test the stack pointer and exclude any threads that are part of
+  // the seccomp sandbox's trusted code.
+  user_regs_struct regs;
+  if (sys_ptrace(PTRACE_GETREGS, pid, NULL, &regs) == -1 ||
+#if defined(__i386)
+      !regs.esp
+#elif defined(__x86_64)
+      !regs.rsp
+#endif
+      ) {
+    sys_ptrace(PTRACE_DETACH, pid, NULL, NULL);
+    return false;
+  }
+#endif
   return true;
 }
 
@@ -111,11 +131,19 @@
 bool LinuxDumper::ThreadsSuspend() {
   if (threads_suspended_)
     return true;
-  bool good = true;
-  for (size_t i = 0; i < threads_.size(); ++i)
-    good &= SuspendThread(threads_[i]);
+  for (size_t i = 0; i < threads_.size(); ++i) {
+    if (!SuspendThread(threads_[i])) {
+      // If the thread either disappeared before we could attach to it, or if
+      // it was part of the seccomp sandbox's trusted code, it is OK to
+      // silently drop it from the minidump.
+      memmove(&threads_[i], &threads_[i+1],
+              (threads_.size() - i - 1) * sizeof(threads_[i]));
+      threads_.resize(threads_.size() - 1);
+      --i;
+    }
+  }
   threads_suspended_ = true;
-  return good;
+  return threads_.size() > 0;
 }
 
 bool LinuxDumper::ThreadsResume() {
@@ -171,7 +199,7 @@
   my_itos(path + 6, pid, pid_len);
   memcpy(path + 6 + pid_len, "/", 1);
   memcpy(path + 6 + pid_len + 1, node, node_len);
-  memcpy(path + total_length, "\0", 1);
+  path[total_length] = '\0';
 }
 
 bool
@@ -180,11 +208,20 @@
 {
   assert(mapping_id < mappings_.size());
   my_memset(identifier, 0, sizeof(MDGUID));
-  const MappingInfo* mapping = mappings_[mapping_id];
-  if (IsMappedFileOpenUnsafe(mapping)) {
+  MappingInfo* mapping = mappings_[mapping_id];
+  if (IsMappedFileOpenUnsafe(mapping))
     return false;
-  }
-  int fd = sys_open(mapping->name, O_RDONLY, 0);
+
+  char filename[NAME_MAX];
+  size_t filename_len = my_strlen(mapping->name);
+  assert(filename_len < NAME_MAX);
+  if (filename_len >= NAME_MAX)
+    return false;
+  memcpy(filename, mapping->name, filename_len);
+  filename[filename_len] = '\0';
+  bool filename_modified = HandleDeletedFileInMapping(filename);
+
+  int fd = sys_open(filename, O_RDONLY, 0);
   if (fd < 0)
     return false;
   struct kernel_stat st;
@@ -202,6 +239,8 @@
 
   bool success = FileID::ElfFileIdentifierFromMappedFile(base, identifier);
   sys_munmap(base, st.st_size);
+  if (success && filename_modified)
+    mapping->name[filename_len - sizeof(kDeletedSuffix) + 1] = '\0';
   return success;
 }
 
@@ -360,11 +399,16 @@
   if (info->ppid == -1 || info->tgid == -1)
     return false;
 
-  if (sys_ptrace(PTRACE_GETREGS, tid, NULL, &info->regs) == -1 ||
-      sys_ptrace(PTRACE_GETFPREGS, tid, NULL, &info->fpregs) == -1) {
+  if (sys_ptrace(PTRACE_GETREGS, tid, NULL, &info->regs) == -1) {
     return false;
   }
 
+#if !defined(__ANDROID__)
+  if (sys_ptrace(PTRACE_GETFPREGS, tid, NULL, &info->fpregs) == -1) {
+    return false;
+  }
+#endif
+
 #if defined(__i386)
   if (sys_ptrace(PTRACE_GETFPXREGS, tid, NULL, &info->fpxregs) == -1)
     return false;
@@ -389,16 +433,13 @@
 #elif defined(__x86_64)
   memcpy(&stack_pointer, &info->regs.rsp, sizeof(info->regs.rsp));
 #elif defined(__ARM_EABI__)
-  memcpy(&stack_pointer, &info->regs.uregs[R13], sizeof(info->regs.uregs[R13]));
+  memcpy(&stack_pointer, &info->regs.ARM_sp, sizeof(info->regs.ARM_sp));
 #else
 #error "This code hasn't been ported to your platform yet."
 #endif
 
-  if (!GetStackInfo(&info->stack, &info->stack_len,
-                    (uintptr_t) stack_pointer))
-    return false;
-
-  return true;
+  return GetStackInfo(&info->stack, &info->stack_len,
+                      (uintptr_t) stack_pointer);
 }
 
 // Get information about the stack, given the stack pointer. We don't try to
@@ -413,7 +454,7 @@
       reinterpret_cast<uint8_t*>(int_stack_pointer & ~(page_size - 1));
 
   // The number of bytes of stack which we try to capture.
-  static ptrdiff_t kStackToCapture = 32 * 1024;
+  static const ptrdiff_t kStackToCapture = 32 * 1024;
 
   const MappingInfo* mapping = FindMapping(stack_pointer);
   if (!mapping)
@@ -459,4 +500,42 @@
   return NULL;
 }
 
+bool LinuxDumper::HandleDeletedFileInMapping(char* path) {
+  static const size_t kDeletedSuffixLen = sizeof(kDeletedSuffix) - 1;
+
+  // Check for ' (deleted)' in |path|.
+  // |path| has to be at least as long as "/x (deleted)".
+  const size_t path_len = my_strlen(path);
+  if (path_len < kDeletedSuffixLen + 2)
+    return false;
+  if (my_strncmp(path + path_len - kDeletedSuffixLen, kDeletedSuffix,
+                 kDeletedSuffixLen) != 0) {
+    return false;
+  }
+
+  // Check |path| against the /proc/pid/exe 'symlink'.
+  char exe_link[NAME_MAX];
+  char new_path[NAME_MAX];
+  BuildProcPath(exe_link, pid_, "exe");
+  ssize_t new_path_len = sys_readlink(exe_link, new_path, NAME_MAX);
+  if (new_path_len <= 0 || new_path_len == NAME_MAX)
+    return false;
+  new_path[new_path_len] = '\0';
+  if (my_strcmp(path, new_path) != 0)
+    return false;
+
+  // Check to see if someone actually named their executable 'foo (deleted)'.
+  struct kernel_stat exe_stat;
+  struct kernel_stat new_path_stat;
+  if (sys_stat(exe_link, &exe_stat) == 0 &&
+      sys_stat(new_path, &new_path_stat) == 0 &&
+      exe_stat.st_dev == new_path_stat.st_dev &&
+      exe_stat.st_ino == new_path_stat.st_ino) {
+    return false;
+  }
+
+  memcpy(path, exe_link, NAME_MAX);
+  return true;
+}
+
 }  // namespace google_breakpad
diff --git a/src/client/linux/minidump_writer/linux_dumper.h b/src/client/linux/minidump_writer/linux_dumper.h
index 7a4cd3a..16b15f3 100644
--- a/src/client/linux/minidump_writer/linux_dumper.h
+++ b/src/client/linux/minidump_writer/linux_dumper.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2009, Google Inc.
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -34,18 +34,38 @@
 #include <linux/limits.h>
 #include <stdint.h>
 #include <sys/types.h>
+#if !defined(__ANDROID__)
 #include <sys/user.h>
+#endif
 
-#include "common/linux/memory.h"
+#include "common/memory.h"
 #include "google_breakpad/common/minidump_format.h"
 
 namespace google_breakpad {
 
+#if defined(__i386) || defined(__x86_64)
 typedef typeof(((struct user*) 0)->u_debugreg[0]) debugreg_t;
+#endif
 
 // Typedef for our parsing of the auxv variables in /proc/pid/auxv.
 #if defined(__i386) || defined(__ARM_EABI__)
+#if !defined(__ANDROID__)
 typedef Elf32_auxv_t elf_aux_entry;
+#else
+// Android is missing this structure definition
+typedef struct
+{
+  uint32_t a_type;              /* Entry type */
+  union
+    {
+      uint32_t a_val;           /* Integer value */
+    } a_un;
+} elf_aux_entry;
+
+#if !defined(AT_SYSINFO_EHDR)
+#define AT_SYSINFO_EHDR 33
+#endif
+#endif  // __ANDROID__
 #elif defined(__x86_64__)
 typedef Elf64_auxv_t elf_aux_entry;
 #endif
@@ -76,8 +96,12 @@
 
 #elif defined(__ARM_EABI__)
   // Mimicking how strace does this(see syscall.c, search for GETREGS)
+#if defined(__ANDROID__)
+  struct pt_regs regs;
+#else
   struct user_regs regs;
   struct user_fpregs fpregs;
+#endif  // __ANDROID__
 #endif
 };
 
@@ -141,6 +165,17 @@
   bool EnumerateMappings(wasteful_vector<MappingInfo*>* result) const;
   bool EnumerateThreads(wasteful_vector<pid_t>* result) const;
 
+  // For the case where a running program has been deleted, it'll show up in
+  // /proc/pid/maps as "/path/to/program (deleted)". If this is the case, then
+  // see if '/path/to/program (deleted)' matches /proc/pid/exe and return
+  // /proc/pid/exe in |path| so ELF identifier generation works correctly. This
+  // also checks to see if '/path/to/program (deleted)' exists, so it does not
+  // get fooled by a poorly named binary.
+  // For programs that don't end with ' (deleted)', this is a no-op.
+  // This assumes |path| is a buffer with length NAME_MAX.
+  // Returns true if |path| is modified.
+  bool HandleDeletedFileInMapping(char* path);
+
   const pid_t pid_;
 
   mutable PageAllocator allocator_;
diff --git a/src/client/linux/minidump_writer/linux_dumper_unittest.cc b/src/client/linux/minidump_writer/linux_dumper_unittest.cc
index a859bde..323a23a 100644
--- a/src/client/linux/minidump_writer/linux_dumper_unittest.cc
+++ b/src/client/linux/minidump_writer/linux_dumper_unittest.cc
@@ -27,6 +27,8 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+#include <string>
+
 #include <limits.h>
 #include <unistd.h>
 #include <signal.h>
@@ -35,8 +37,9 @@
 #include "breakpad_googletest_includes.h"
 #include "client/linux/minidump_writer/linux_dumper.h"
 #include "common/linux/file_id.h"
-#include "common/linux/memory.h"
+#include "common/memory.h"
 
+using std::string;
 using namespace google_breakpad;
 
 // This provides a wrapper around system calls which may be
@@ -91,21 +94,36 @@
 
   pid_t child_pid = fork();
   if (child_pid == 0) {
+    // Locate helper binary next to the current binary.
+    char self_path[PATH_MAX];
+    if (readlink("/proc/self/exe", self_path, sizeof(self_path) - 1) == -1) {
+      FAIL() << "readlink failed: " << strerror(errno);
+      exit(1);
+    }
+    string helper_path(self_path);
+    size_t pos = helper_path.rfind('/');
+    if (pos == string::npos) {
+      FAIL() << "no trailing slash in path: " << helper_path;
+      exit(1);
+    }
+    helper_path.erase(pos + 1);
+    helper_path += "linux_dumper_unittest_helper";
+
     // Set the number of threads
-    execl("src/client/linux/linux_dumper_unittest_helper",
+    execl(helper_path.c_str(),
           "linux_dumper_unittest_helper",
           kNumberOfThreadsArgument,
           NULL);
     // Kill if we get here.
     printf("Errno from exec: %d", errno);
-    FAIL() << "Exec failed: " << strerror(errno);
+    FAIL() << "Exec of " << helper_path << " failed: " << strerror(errno);
     exit(0);
   }
   // The sleep is flaky, but prevents us from reading
   // the child process before all threads have been created.
   sleep(1);
   LinuxDumper dumper(child_pid);
-  EXPECT_TRUE(dumper.Init());
+  ASSERT_TRUE(dumper.Init());
   EXPECT_EQ((size_t)kNumberOfThreadsInHelperProgram, dumper.threads().size());
   EXPECT_TRUE(dumper.ThreadsSuspend());
 
diff --git a/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc b/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
index e91e976..6b7ad5a 100644
--- a/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
+++ b/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
@@ -37,6 +37,8 @@
 #include <sys/syscall.h>
 #include <unistd.h>
 
+#include "third_party/lss/linux_syscall_support.h"
+
 #if defined(__ARM_EABI__)
 #define TID_PTR_REGISTER "r3"
 #elif defined(__i386)
@@ -48,7 +50,7 @@
 #endif
 
 void *thread_function(void *data) {
-  volatile pid_t thread_id = syscall(SYS_gettid);
+  volatile pid_t thread_id = syscall(__NR_gettid);
   register volatile pid_t *thread_id_ptr asm(TID_PTR_REGISTER) = &thread_id;
   while (true)
     asm volatile ("" : : "r" (thread_id_ptr));
diff --git a/src/client/linux/minidump_writer/minidump_extension_linux.h b/src/client/linux/minidump_writer/minidump_extension_linux.h
new file mode 100644
index 0000000..90acc6a
--- /dev/null
+++ b/src/client/linux/minidump_writer/minidump_extension_linux.h
@@ -0,0 +1,75 @@
+/* Copyright (c) 2010, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
+
+/* minidump_extension_linux.h: A definition of exception codes for
+ * Linux
+ *
+ * (This is C99 source, please don't corrupt it with C++.)
+ *
+ * Author: Adam Langley
+ * Split into its own file: Markus Gutschke */
+
+
+#ifndef SRC_CLIENT_LINUX_MINIDUMP_WRITER_MINIDUMP_EXTENSION_LINUX_H_
+#define SRC_CLIENT_LINUX_MINIDUMP_WRITER_MINIDUMP_EXTENSION_LINUX_H_
+
+#include <stddef.h>
+
+#include "google_breakpad/common/breakpad_types.h"
+#include "google_breakpad/common/minidump_format.h"
+
+// These are additional minidump stream values which are specific to the linux
+// breakpad implementation.
+enum {
+  MD_LINUX_CPU_INFO              = 0x47670003,    /* /proc/cpuinfo    */
+  MD_LINUX_PROC_STATUS           = 0x47670004,    /* /proc/$x/status  */
+  MD_LINUX_LSB_RELEASE           = 0x47670005,    /* /etc/lsb-release */
+  MD_LINUX_CMD_LINE              = 0x47670006,    /* /proc/$x/cmdline */
+  MD_LINUX_ENVIRON               = 0x47670007,    /* /proc/$x/environ */
+  MD_LINUX_AUXV                  = 0x47670008,    /* /proc/$x/auxv    */
+  MD_LINUX_MAPS                  = 0x47670009,    /* /proc/$x/maps    */
+  MD_LINUX_DSO_DEBUG             = 0x4767000A     /* DSO data         */
+};
+
+typedef struct {
+  void*     addr;
+  MDRVA     name;
+  void*     ld;
+} MDRawLinkMap;
+
+typedef struct {
+  u_int32_t version;
+  MDRVA     map;
+  u_int32_t dso_count;
+  void*     brk;
+  void*     ldbase;
+  void*     dynamic;
+} MDRawDebug;
+
+#endif  // SRC_CLIENT_LINUX_MINIDUMP_WRITER_MINIDUMP_EXTENSION_LINUX_H_
diff --git a/src/client/linux/minidump_writer/minidump_writer.cc b/src/client/linux/minidump_writer/minidump_writer.cc
index 1ee9098..bb365a1 100644
--- a/src/client/linux/minidump_writer/minidump_writer.cc
+++ b/src/client/linux/minidump_writer/minidump_writer.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2009, Google Inc.
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -48,33 +48,34 @@
 
 #include <errno.h>
 #include <fcntl.h>
+#if !defined(__ANDROID__)
+#include <link.h>
+#endif
 #include <stdio.h>
 #include <unistd.h>
+#if !defined(__ANDROID__)
 #include <sys/ucontext.h>
 #include <sys/user.h>
+#endif
 #include <sys/utsname.h>
 
+#include <algorithm>
+
 #include "client/minidump_file_writer.h"
 #include "google_breakpad/common/minidump_format.h"
 #include "google_breakpad/common/minidump_cpu_amd64.h"
 #include "google_breakpad/common/minidump_cpu_x86.h"
 
+#if defined(__ANDROID__)
+#include "client/linux/android_link.h"
+#include "client/linux/android_ucontext.h"
+#endif
 #include "client/linux/handler/exception_handler.h"
 #include "client/linux/minidump_writer/line_reader.h"
 #include "client/linux/minidump_writer/linux_dumper.h"
+#include "client/linux/minidump_writer/minidump_extension_linux.h"
 #include "common/linux/linux_libc_support.h"
-#include "common/linux/linux_syscall_support.h"
-
-// These are additional minidump stream values which are specific to the linux
-// breakpad implementation.
-enum {
-  MD_LINUX_CPU_INFO              = 0x47670003,    /* /proc/cpuinfo    */
-  MD_LINUX_PROC_STATUS           = 0x47670004,    /* /proc/$x/status  */
-  MD_LINUX_LSB_RELEASE           = 0x47670005,    /* /etc/lsb-release */
-  MD_LINUX_CMD_LINE              = 0x47670006,    /* /proc/$x/cmdline */
-  MD_LINUX_ENVIRON               = 0x47670007,    /* /proc/$x/environ */
-  MD_LINUX_AUXV                  = 0x47670008     /* /proc/$x/auxv    */
-};
+#include "third_party/lss/linux_syscall_support.h"
 
 // Minidump defines register structures which are different from the raw
 // structures which we get from the kernel. These are platform specific
@@ -251,9 +252,9 @@
   out->flt_save.tag_word = info.fpregs.ftw;
   out->flt_save.error_opcode = info.fpregs.fop;
   out->flt_save.error_offset = info.fpregs.rip;
-  out->flt_save.error_selector = 0; // We don't have this.
+  out->flt_save.error_selector = 0;  // We don't have this.
   out->flt_save.data_offset = info.fpregs.rdp;
-  out->flt_save.data_selector = 0;  // We don't have this.
+  out->flt_save.data_selector = 0;   // We don't have this.
   out->flt_save.mx_csr = info.fpregs.mxcsr;
   out->flt_save.mx_csr_mask = info.fpregs.mxcr_mask;
   memcpy(&out->flt_save.float_registers, &info.fpregs.st_space, 8 * 16);
@@ -299,7 +300,7 @@
   out->flt_save.error_opcode = fpregs->fop;
   out->flt_save.error_offset = fpregs->rip;
   out->flt_save.data_offset = fpregs->rdp;
-  out->flt_save.error_selector = 0; // We don't have this.
+  out->flt_save.error_selector = 0;  // We don't have this.
   out->flt_save.data_selector = 0;  // We don't have this.
   out->flt_save.mx_csr = fpregs->mxcsr;
   out->flt_save.mx_csr_mask = fpregs->mxcr_mask;
@@ -318,11 +319,13 @@
     out->iregs[i] = info.regs.uregs[i];
   // No CPSR register in ThreadInfo(it's not accessible via ptrace)
   out->cpsr = 0;
+#if !defined(__ANDROID__)
   out->float_save.fpscr = info.fpregs.fpsr |
     (static_cast<u_int64_t>(info.fpregs.fpcr) << 32);
-  //TODO: sort this out, actually collect floating point registers
+  // TODO: sort this out, actually collect floating point registers
   memset(&out->float_save.regs, 0, sizeof(out->float_save.regs));
   memset(&out->float_save.extra, 0, sizeof(out->float_save.extra));
+#endif
 }
 
 static void CPUFillFromUContext(MDRawContextARM *out, const ucontext *uc,
@@ -349,7 +352,7 @@
 
   out->cpsr = uc->uc_mcontext.arm_cpsr;
 
-  //TODO: fix this after fixing ExceptionHandler
+  // TODO: fix this after fixing ExceptionHandler
   out->float_save.fpscr = 0;
   memset(&out->float_save.regs, 0, sizeof(out->float_save.regs));
   memset(&out->float_save.extra, 0, sizeof(out->float_save.extra));
@@ -372,11 +375,12 @@
 #if !defined(__ARM_EABI__)
         float_state_(&context->float_state),
 #else
-        //TODO: fix this after fixing ExceptionHandler
+        // TODO: fix this after fixing ExceptionHandler
         float_state_(NULL),
 #endif
         crashing_tid_(context->tid),
-        dumper_(crashing_pid) {
+        dumper_(crashing_pid),
+        memory_blocks_(dumper_.allocator()) {
   }
 
   bool Init() {
@@ -390,9 +394,32 @@
   }
 
   bool Dump() {
+    // The dynamic linker makes information available that helps gdb find all
+    // DSOs loaded into the program. If we can access this information, we dump
+    // it to a MD_LINUX_DSO_DEBUG stream.
+    struct r_debug* r_debug = NULL;
+    uint32_t dynamic_length = 0;
+#if !defined(__ANDROID__)
+    // The Android NDK is missing structure definitions for most of this.
+    // For now, it's simpler just to skip it.
+    for (int i = 0;;) {
+      ElfW(Dyn) dyn;
+      dynamic_length += sizeof(dyn);
+      dumper_.CopyFromProcess(&dyn, crashing_tid_, _DYNAMIC+i++, sizeof(dyn));
+      if (dyn.d_tag == DT_DEBUG) {
+        r_debug = (struct r_debug*)dyn.d_un.d_ptr;
+        continue;
+      } else if (dyn.d_tag == DT_NULL) {
+        break;
+      }
+    }
+#endif
+
     // A minidump file contains a number of tagged streams. This is the number
     // of stream which we write.
-    static const unsigned kNumWriters = 11;
+    unsigned kNumWriters = 12;
+    if (r_debug)
+      ++kNumWriters;
 
     TypedMDRVA<MDRawHeader> header(&minidump_writer_);
     TypedMDRVA<MDRawDirectory> dir(&minidump_writer_);
@@ -419,6 +446,10 @@
       return false;
     dir.CopyIndex(dir_index++, &dirent);
 
+    if (!WriteMemoryListStream(&dirent))
+      return false;
+    dir.CopyIndex(dir_index++, &dirent);
+
     if (!WriteExceptionStream(&dirent))
       return false;
     dir.CopyIndex(dir_index++, &dirent);
@@ -457,11 +488,18 @@
       NullifyDirectoryEntry(&dirent);
     dir.CopyIndex(dir_index++, &dirent);
 
-    dirent.stream_type = MD_LINUX_AUXV;
+    dirent.stream_type = MD_LINUX_MAPS;
     if (!WriteProcFile(&dirent.location, crashing_tid_, "maps"))
       NullifyDirectoryEntry(&dirent);
     dir.CopyIndex(dir_index++, &dirent);
 
+    if (r_debug) {
+      dirent.stream_type = MD_LINUX_DSO_DEBUG;
+      if (!WriteDSODebugStream(&dirent, r_debug, dynamic_length))
+        NullifyDirectoryEntry(&dirent);
+      dir.CopyIndex(dir_index++, &dirent);
+    }
+
     // If you add more directory entries, don't forget to update kNumWriters,
     // above.
 
@@ -469,6 +507,123 @@
     return true;
   }
 
+  // Check if the top of the stack is part of a system call that has been
+  // redirected by the seccomp sandbox. If so, try to pop the stack frames
+  // all the way back to the point where the interception happened.
+  void PopSeccompStackFrame(RawContextCPU* cpu, const MDRawThread& thread,
+                            uint8_t* stack_copy) {
+#if defined(__x86_64)
+    u_int64_t bp = cpu->rbp;
+    u_int64_t top = thread.stack.start_of_memory_range;
+    for (int i = 4; i--; ) {
+      if (bp < top ||
+          bp + sizeof(bp) > thread.stack.start_of_memory_range +
+          thread.stack.memory.data_size ||
+          bp & 1) {
+        break;
+      }
+      uint64_t old_top = top;
+      top = bp;
+      u_int8_t* bp_addr = stack_copy + bp - thread.stack.start_of_memory_range;
+      memcpy(&bp, bp_addr, sizeof(bp));
+      if (bp == 0xDEADBEEFDEADBEEFull) {
+        struct {
+          uint64_t r15;
+          uint64_t r14;
+          uint64_t r13;
+          uint64_t r12;
+          uint64_t r11;
+          uint64_t r10;
+          uint64_t r9;
+          uint64_t r8;
+          uint64_t rdi;
+          uint64_t rsi;
+          uint64_t rdx;
+          uint64_t rcx;
+          uint64_t rbx;
+          uint64_t deadbeef;
+          uint64_t rbp;
+          uint64_t fakeret;
+          uint64_t ret;
+          /* char redzone[128]; */
+        } seccomp_stackframe;
+        if (top - offsetof(typeof(seccomp_stackframe), deadbeef) < old_top ||
+            top - offsetof(typeof(seccomp_stackframe), deadbeef) +
+            sizeof(seccomp_stackframe) >
+            thread.stack.start_of_memory_range+thread.stack.memory.data_size) {
+          break;
+        }
+        memcpy(&seccomp_stackframe,
+               bp_addr - offsetof(typeof(seccomp_stackframe), deadbeef),
+               sizeof(seccomp_stackframe));
+        cpu->rbx = seccomp_stackframe.rbx;
+        cpu->rcx = seccomp_stackframe.rcx;
+        cpu->rdx = seccomp_stackframe.rdx;
+        cpu->rsi = seccomp_stackframe.rsi;
+        cpu->rdi = seccomp_stackframe.rdi;
+        cpu->rbp = seccomp_stackframe.rbp;
+        cpu->rsp = top + 4*sizeof(uint64_t) + 128;
+        cpu->r8  = seccomp_stackframe.r8;
+        cpu->r9  = seccomp_stackframe.r9;
+        cpu->r10 = seccomp_stackframe.r10;
+        cpu->r11 = seccomp_stackframe.r11;
+        cpu->r12 = seccomp_stackframe.r12;
+        cpu->r13 = seccomp_stackframe.r13;
+        cpu->r14 = seccomp_stackframe.r14;
+        cpu->r15 = seccomp_stackframe.r15;
+        cpu->rip = seccomp_stackframe.fakeret;
+        return;
+      }
+    }
+#elif defined(__i386)
+    u_int32_t bp = cpu->ebp;
+    u_int32_t top = thread.stack.start_of_memory_range;
+    for (int i = 4; i--; ) {
+      if (bp < top ||
+          bp + sizeof(bp) > thread.stack.start_of_memory_range +
+          thread.stack.memory.data_size ||
+          bp & 1) {
+        break;
+      }
+      uint32_t old_top = top;
+      top = bp;
+      u_int8_t* bp_addr = stack_copy + bp - thread.stack.start_of_memory_range;
+      memcpy(&bp, bp_addr, sizeof(bp));
+      if (bp == 0xDEADBEEFu) {
+        struct {
+          uint32_t edi;
+          uint32_t esi;
+          uint32_t edx;
+          uint32_t ecx;
+          uint32_t ebx;
+          uint32_t deadbeef;
+          uint32_t ebp;
+          uint32_t fakeret;
+          uint32_t ret;
+        } seccomp_stackframe;
+        if (top - offsetof(typeof(seccomp_stackframe), deadbeef) < old_top ||
+            top - offsetof(typeof(seccomp_stackframe), deadbeef) +
+            sizeof(seccomp_stackframe) >
+            thread.stack.start_of_memory_range+thread.stack.memory.data_size) {
+          break;
+        }
+        memcpy(&seccomp_stackframe,
+               bp_addr - offsetof(typeof(seccomp_stackframe), deadbeef),
+               sizeof(seccomp_stackframe));
+        cpu->ebx = seccomp_stackframe.ebx;
+        cpu->ecx = seccomp_stackframe.ecx;
+        cpu->edx = seccomp_stackframe.edx;
+        cpu->esi = seccomp_stackframe.esi;
+        cpu->edi = seccomp_stackframe.edi;
+        cpu->ebp = seccomp_stackframe.ebp;
+        cpu->esp = top + 4*sizeof(void*);
+        cpu->eip = seccomp_stackframe.fakeret;
+        return;
+      }
+    }
+#endif
+  }
+
   // Write information about the threads.
   bool WriteThreadListStream(MDRawDirectory* dirent) {
     const unsigned num_threads = dumper_.threads().size();
@@ -503,11 +658,57 @@
         memory.Copy(stack_copy, stack_len);
         thread.stack.start_of_memory_range = (uintptr_t) (stack);
         thread.stack.memory = memory.location();
+        memory_blocks_.push_back(thread.stack);
+
+        // Copy 256 bytes around crashing instruction pointer to minidump.
+        const size_t kIPMemorySize = 256;
+        u_int64_t ip = GetInstructionPointer();
+        // Bound it to the upper and lower bounds of the memory map
+        // it's contained within. If it's not in mapped memory,
+        // don't bother trying to write it.
+        bool ip_is_mapped = false;
+        MDMemoryDescriptor ip_memory_d;
+        for (unsigned i = 0; i < dumper_.mappings().size(); ++i) {
+          const MappingInfo& mapping = *dumper_.mappings()[i];
+          if (ip >= mapping.start_addr &&
+              ip < mapping.start_addr + mapping.size) {
+            ip_is_mapped = true;
+            // Try to get 128 bytes before and after the IP, but
+            // settle for whatever's available.
+            ip_memory_d.start_of_memory_range =
+              std::max(mapping.start_addr,
+                       uintptr_t(ip - (kIPMemorySize / 2)));
+            uintptr_t end_of_range =
+              std::min(uintptr_t(ip + (kIPMemorySize / 2)),
+                       uintptr_t(mapping.start_addr + mapping.size));
+            ip_memory_d.memory.data_size =
+              end_of_range - ip_memory_d.start_of_memory_range;
+            break;
+          }
+        }
+
+        if (ip_is_mapped) {
+          UntypedMDRVA ip_memory(&minidump_writer_);
+          if (!ip_memory.Allocate(ip_memory_d.memory.data_size))
+            return false;
+          uint8_t* memory_copy =
+            (uint8_t*) dumper_.allocator()->Alloc(ip_memory_d.memory.data_size);
+          dumper_.CopyFromProcess(
+            memory_copy,
+            thread.thread_id,
+            reinterpret_cast<void*>(ip_memory_d.start_of_memory_range),
+            ip_memory_d.memory.data_size);
+          ip_memory.Copy(memory_copy, ip_memory_d.memory.data_size);
+          ip_memory_d.memory = ip_memory.location();
+          memory_blocks_.push_back(ip_memory_d);
+        }
+
         TypedMDRVA<RawContextCPU> cpu(&minidump_writer_);
         if (!cpu.Allocate())
           return false;
         my_memset(cpu.get(), 0, sizeof(RawContextCPU));
         CPUFillFromUContext(cpu.get(), ucontext_, float_state_);
+        PopSeccompStackFrame(cpu.get(), thread, stack_copy);
         thread.thread_context = cpu.location();
         crashing_thread_context_ = cpu.location();
       } else {
@@ -524,11 +725,14 @@
         memory.Copy(stack_copy, info.stack_len);
         thread.stack.start_of_memory_range = (uintptr_t)(info.stack);
         thread.stack.memory = memory.location();
+        memory_blocks_.push_back(thread.stack);
+
         TypedMDRVA<RawContextCPU> cpu(&minidump_writer_);
         if (!cpu.Allocate())
           return false;
         my_memset(cpu.get(), 0, sizeof(RawContextCPU));
         CPUFillFromThreadInfo(cpu.get(), info);
+        PopSeccompStackFrame(cpu.get(), thread, stack_copy);
         thread.thread_context = cpu.location();
       }
 
@@ -539,8 +743,8 @@
   }
 
   static bool ShouldIncludeMapping(const MappingInfo& mapping) {
-    if (mapping.name[0] == 0 || // we only want modules with filenames.
-        mapping.offset || // we only want to include one mapping per shared lib.
+    if (mapping.name[0] == 0 ||  // only want modules with filenames.
+        mapping.offset ||  // only want to include one mapping per shared lib.
         mapping.size < 4096) {  // too small to get a signature for.
       return false;
     }
@@ -623,6 +827,24 @@
     return true;
   }
 
+  bool WriteMemoryListStream(MDRawDirectory* dirent) {
+    TypedMDRVA<uint32_t> list(&minidump_writer_);
+    if (!list.AllocateObjectAndArray(memory_blocks_.size(),
+                                     sizeof(MDMemoryDescriptor)))
+      return false;
+
+    dirent->stream_type = MD_MEMORY_LIST_STREAM;
+    dirent->location = list.location();
+
+    *list.get() = memory_blocks_.size();
+
+    for (size_t i = 0; i < memory_blocks_.size(); ++i) {
+      list.CopyIndexAfterObject(i, &memory_blocks_[i],
+                                sizeof(MDMemoryDescriptor));
+    }
+    return true;
+  }
+
   bool WriteExceptionStream(MDRawDirectory* dirent) {
     TypedMDRVA<MDRawExceptionStream> exc(&minidump_writer_);
     if (!exc.Allocate())
@@ -656,19 +878,112 @@
     return true;
   }
 
+  bool WriteDSODebugStream(MDRawDirectory* dirent, struct r_debug* r_debug,
+                           uint32_t dynamic_length) {
+#if defined(__ANDROID__)
+    return false;
+#else
+    // The caller provided us with a pointer to "struct r_debug". We can
+    // look up the "r_map" field to get a linked list of all loaded DSOs.
+    // Our list of DSOs potentially is different from the ones in the crashing
+    // process. So, we have to be careful to never dereference pointers
+    // directly. Instead, we use CopyFromProcess() everywhere.
+    // See <link.h> for a more detailed discussion of the how the dynamic
+    // loader communicates with debuggers.
+
+    // Count the number of loaded DSOs
+    int dso_count = 0;
+    struct r_debug debug_entry;
+    dumper_.CopyFromProcess(&debug_entry, crashing_tid_, r_debug,
+                            sizeof(debug_entry));
+    for (struct link_map* ptr = debug_entry.r_map; ptr; ) {
+      struct link_map map;
+      dumper_.CopyFromProcess(&map, crashing_tid_, ptr, sizeof(map));
+      ptr = map.l_next;
+      dso_count++;
+    }
+
+    MDRVA linkmap_rva = minidump_writer_.kInvalidMDRVA;
+    if (dso_count > 0) {
+      // If we have at least one DSO, create an array of MDRawLinkMap
+      // entries in the minidump file.
+      TypedMDRVA<MDRawLinkMap> linkmap(&minidump_writer_);
+      if (!linkmap.AllocateArray(dso_count))
+        return false;
+      linkmap_rva = linkmap.location().rva;
+      int idx = 0;
+
+      // Iterate over DSOs and write their information to mini dump
+      for (struct link_map* ptr = debug_entry.r_map; ptr; ) {
+        struct link_map map;
+        dumper_.CopyFromProcess(&map, crashing_tid_, ptr, sizeof(map));
+        ptr = map.l_next;
+        char filename[257] = { 0 };
+        if (map.l_name) {
+          dumper_.CopyFromProcess(filename, crashing_tid_, map.l_name,
+                                  sizeof(filename) - 1);
+        }
+        MDLocationDescriptor location;
+        if (!minidump_writer_.WriteString(filename, 0, &location))
+          return false;
+        MDRawLinkMap entry;
+        entry.name = location.rva;
+        entry.addr = (void*)map.l_addr;
+        entry.ld = (void*)map.l_ld;
+        linkmap.CopyIndex(idx++, &entry);
+      }
+    }
+
+    // Write MD_LINUX_DSO_DEBUG record
+    TypedMDRVA<MDRawDebug> debug(&minidump_writer_);
+    if (!debug.AllocateObjectAndArray(1, dynamic_length))
+      return false;
+    my_memset(debug.get(), 0, sizeof(MDRawDebug));
+    dirent->stream_type = MD_LINUX_DSO_DEBUG;
+    dirent->location = debug.location();
+
+    debug.get()->version = debug_entry.r_version;
+    debug.get()->map = linkmap_rva;
+    debug.get()->dso_count = dso_count;
+    debug.get()->brk = (void*)debug_entry.r_brk;
+    debug.get()->ldbase = (void*)debug_entry.r_ldbase;
+    debug.get()->dynamic = (void*)&_DYNAMIC;
+
+    char *dso_debug_data = new char[dynamic_length];
+    dumper_.CopyFromProcess(dso_debug_data, crashing_tid_, &_DYNAMIC,
+                            dynamic_length);
+    debug.CopyIndexAfterObject(0, dso_debug_data, dynamic_length);
+    delete[] dso_debug_data;
+
+    return true;
+#endif
+  }
+
  private:
 #if defined(__i386)
   uintptr_t GetStackPointer() {
     return ucontext_->uc_mcontext.gregs[REG_ESP];
   }
+
+  uintptr_t GetInstructionPointer() {
+    return ucontext_->uc_mcontext.gregs[REG_EIP];
+  }
 #elif defined(__x86_64)
   uintptr_t GetStackPointer() {
     return ucontext_->uc_mcontext.gregs[REG_RSP];
   }
+
+  uintptr_t GetInstructionPointer() {
+    return ucontext_->uc_mcontext.gregs[REG_RIP];
+  }
 #elif defined(__ARM_EABI__)
   uintptr_t GetStackPointer() {
     return ucontext_->uc_mcontext.arm_sp;
   }
+
+  uintptr_t GetInstructionPointer() {
+    return ucontext_->uc_mcontext.arm_ip;
+  }
 #else
 #error "This code has not been ported to your platform yet."
 #endif
@@ -721,7 +1036,7 @@
              i < sizeof(cpu_info_table) / sizeof(cpu_info_table[0]);
              i++) {
           CpuInfoEntry* entry = &cpu_info_table[i];
-          if (entry->found)
+          if (entry->found && i)
             continue;
           if (!strncmp(line, entry->info_name, strlen(entry->info_name))) {
             const char* value = strchr(line, ':');
@@ -770,7 +1085,7 @@
           }
         }
 
-popline:
+ popline:
         line_reader->PopLine(line_len);
       }
       sys_close(fd);
@@ -807,29 +1122,48 @@
     // We can't stat the files because several of the files that we want to
     // read are kernel seqfiles, which always have a length of zero. So we have
     // to read as much as we can into a buffer.
-    static const unsigned kMaxFileSize = 1024;
-    uint8_t* data = (uint8_t*) dumper_.allocator()->Alloc(kMaxFileSize);
+    static const unsigned kBufSize = 1024 - 2*sizeof(void*);
+    struct Buffers {
+      struct Buffers* next;
+      size_t len;
+      uint8_t data[kBufSize];
+    } *buffers =
+        (struct Buffers*) dumper_.allocator()->Alloc(sizeof(struct Buffers));
+    buffers->next = NULL;
+    buffers->len = 0;
 
-    size_t done = 0;
-    while (done < kMaxFileSize) {
+    size_t total = 0;
+    for (struct Buffers* bufptr = buffers;;) {
       ssize_t r;
       do {
-        r = sys_read(fd, data + done, kMaxFileSize - done);
+        r = sys_read(fd, &bufptr->data[bufptr->len], kBufSize - bufptr->len);
       } while (r == -1 && errno == EINTR);
 
       if (r < 1)
         break;
-      done += r;
+
+      total += r;
+      bufptr->len += r;
+      if (bufptr->len == kBufSize) {
+        bufptr->next =
+          (struct Buffers*) dumper_.allocator()->Alloc(sizeof(struct Buffers));
+        bufptr = bufptr->next;
+        bufptr->next = NULL;
+        bufptr->len = 0;
+      }
     }
     sys_close(fd);
 
-    if (!done)
+    if (!total)
       return false;
 
     UntypedMDRVA memory(&minidump_writer_);
-    if (!memory.Allocate(done))
+    if (!memory.Allocate(total))
       return false;
-    memory.Copy(data, done);
+    for (MDRVA pos = memory.position(); buffers; buffers = buffers->next) {
+      memory.Copy(pos, &buffers->data, buffers->len);
+      pos += buffers->len;
+    }
     *result = memory.location();
     return true;
   }
@@ -899,6 +1233,10 @@
   LinuxDumper dumper_;
   MinidumpFileWriter minidump_writer_;
   MDLocationDescriptor crashing_thread_context_;
+  // Blocks of memory written to the dump. These are all currently
+  // written while writing the thread list stream, but saved here
+  // so a memory list stream can be written afterwards.
+  wasteful_vector<MDMemoryDescriptor> memory_blocks_;
 };
 
 bool WriteMinidump(const char* filename, pid_t crashing_process,
diff --git a/src/client/linux/minidump_writer/minidump_writer_unittest.cc b/src/client/linux/minidump_writer/minidump_writer_unittest.cc
index 0c02f58..e7a6214 100644
--- a/src/client/linux/minidump_writer/minidump_writer_unittest.cc
+++ b/src/client/linux/minidump_writer/minidump_writer_unittest.cc
@@ -37,6 +37,12 @@
 
 using namespace google_breakpad;
 
+#if !defined(__ANDROID__)
+#define TEMPDIR "/tmp"
+#else
+#define TEMPDIR "/data/local/tmp"
+#endif
+
 namespace {
 typedef testing::Test MinidumpWriterTest;
 }
@@ -58,7 +64,7 @@
   ExceptionHandler::CrashContext context;
   memset(&context, 0, sizeof(context));
 
-  char templ[] = "/tmp/minidump-writer-unittest-XXXXXX";
+  char templ[] = TEMPDIR "/minidump-writer-unittest-XXXXXX";
   mktemp(templ);
   ASSERT_TRUE(WriteMinidump(templ, child, &context, sizeof(context)));
   struct stat st;
diff --git a/src/client/linux/sender/google_crash_report_sender.cc b/src/client/linux/sender/google_crash_report_sender.cc
index da9661d..c1641b4 100644
--- a/src/client/linux/sender/google_crash_report_sender.cc
+++ b/src/client/linux/sender/google_crash_report_sender.cc
@@ -28,9 +28,11 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include "common/linux/google_crashdump_uploader.h"
-#include "third_party/linux/include/glog/logging.h"
 #include "third_party/linux/include/gflags/gflags.h"
 #include <string>
+#include <iostream>
+
+using std::string;
 
 DEFINE_string(crash_server, "http://clients2.google.com/cr",
               "The crash server to upload minidumps to.");
@@ -75,7 +77,7 @@
   }
 
   if (!error_text.empty()) {
-    LOG(ERROR) << error_text;
+    std::cout << error_text;
     return false;
   }
   return true;
diff --git a/src/client/mac/Breakpad.xcodeproj/project.pbxproj b/src/client/mac/Breakpad.xcodeproj/project.pbxproj
index 90e890d..3f18a72 100644
--- a/src/client/mac/Breakpad.xcodeproj/project.pbxproj
+++ b/src/client/mac/Breakpad.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 42;
+	objectVersion = 45;
 	objects = {
 
 /* Begin PBXAggregateTarget section */
@@ -22,6 +22,12 @@
 				F95BB8B3101F94D300AA053B /* PBXTargetDependency */,
 				F95BB8B5101F94D300AA053B /* PBXTargetDependency */,
 				F95BB8B7101F94D300AA053B /* PBXTargetDependency */,
+				8B31023911F0CF0600FCF3E4 /* PBXTargetDependency */,
+				8B31051711F1010E00FCF3E4 /* PBXTargetDependency */,
+				8B31051911F1010E00FCF3E4 /* PBXTargetDependency */,
+				8B31051B11F1010E00FCF3E4 /* PBXTargetDependency */,
+				8B31051D11F1010E00FCF3E4 /* PBXTargetDependency */,
+				8B31051F11F1010E00FCF3E4 /* PBXTargetDependency */,
 			);
 			name = All;
 			productName = All;
@@ -29,13 +35,66 @@
 /* End PBXAggregateTarget section */
 
 /* Begin PBXBuildFile section */
-		3329D4ED0FA16D820007BBC5 /* Breakpad.nib in Resources */ = {isa = PBXBuildFile; fileRef = 3329D4EC0FA16D820007BBC5 /* Breakpad.nib */; };
+		3329D4ED0FA16D820007BBC5 /* Breakpad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3329D4EC0FA16D820007BBC5 /* Breakpad.xib */; };
 		33880C800F9E097100817F82 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 33880C7E0F9E097100817F82 /* InfoPlist.strings */; };
 		4084699D0F5D9CF900FDCA37 /* crash_report_sender.icns in Resources */ = {isa = PBXBuildFile; fileRef = 4084699C0F5D9CF900FDCA37 /* crash_report_sender.icns */; };
+		8B3101C611F0CD9F00FCF3E4 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D6A5FE840307C02AAC07 /* AppKit.framework */; };
+		8B3101C711F0CD9F00FCF3E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; };
+		8B3101CA11F0CDB000FCF3E4 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D6A5FE840307C02AAC07 /* AppKit.framework */; };
+		8B3101CB11F0CDB000FCF3E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; };
+		8B3101EA11F0CDE300FCF3E4 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B3101E911F0CDE300FCF3E4 /* SenTestingKit.framework */; };
+		8B31029411F0D54300FCF3E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; };
+		8B3102E611F0D74C00FCF3E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; };
+		8B3102EB11F0D78000FCF3E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; };
+		8B31FC8211EFD2B800FCF3E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; };
+		8B4BDAAF12012BC5009C7060 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B4BDAA7120124EA009C7060 /* libcrypto.dylib */; };
+		8B4BDABE12012CEF009C7060 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B4BDAA7120124EA009C7060 /* libcrypto.dylib */; };
+		8B4BDAC512012D05009C7060 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B4BDAA7120124EA009C7060 /* libcrypto.dylib */; };
 		8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; };
+		D244536A12426F00009BBCE0 /* logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = D244535112426EBB009BBCE0 /* logging.cc */; };
+		D244536B12426F00009BBCE0 /* minidump.cc in Sources */ = {isa = PBXBuildFile; fileRef = D244535212426EBB009BBCE0 /* minidump.cc */; };
+		D244536C12426F00009BBCE0 /* pathname_stripper.cc in Sources */ = {isa = PBXBuildFile; fileRef = D244535312426EBB009BBCE0 /* pathname_stripper.cc */; };
+		D244536D12426F00009BBCE0 /* basic_code_modules.cc in Sources */ = {isa = PBXBuildFile; fileRef = D244534F12426E98009BBCE0 /* basic_code_modules.cc */; };
+		D244540B12439BA0009BBCE0 /* memory_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = D244540A12439BA0009BBCE0 /* memory_unittest.cc */; };
+		D24BBBFD121050F000F3D417 /* breakpadUtilities.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F92C563C0ECD10B3009BE4BA /* breakpadUtilities.dylib */; };
+		D24BBD291211EDB100F3D417 /* MachIPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C53790ECCE635009BE4BA /* MachIPC.mm */; };
+		D24BBD321212CACF00F3D417 /* MachIPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C53790ECCE635009BE4BA /* MachIPC.mm */; };
 		D2A5DD301188633800081F03 /* breakpad_nlist_64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53690ECCE3FD009BE4BA /* breakpad_nlist_64.cc */; };
 		D2A5DD401188640400081F03 /* breakpad_nlist_64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53690ECCE3FD009BE4BA /* breakpad_nlist_64.cc */; };
 		D2A5DD411188642E00081F03 /* breakpad_nlist_64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53690ECCE3FD009BE4BA /* breakpad_nlist_64.cc */; };
+		D2F9A3D51212F87C002747C1 /* exception_handler_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A3D41212F87C002747C1 /* exception_handler_test.cc */; };
+		D2F9A43D12131F55002747C1 /* gmock-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A43C12131F55002747C1 /* gmock-all.cc */; };
+		D2F9A44012131F65002747C1 /* gtest_main.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A43E12131F65002747C1 /* gtest_main.cc */; };
+		D2F9A44112131F65002747C1 /* gtest-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A43F12131F65002747C1 /* gtest-all.cc */; };
+		D2F9A44412131F84002747C1 /* libgtest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2F9A41512131EF0002747C1 /* libgtest.a */; };
+		D2F9A4C9121336C7002747C1 /* client_info.h in Headers */ = {isa = PBXBuildFile; fileRef = D2F9A4C4121336C7002747C1 /* client_info.h */; };
+		D2F9A4CA121336C7002747C1 /* crash_generation_client.h in Headers */ = {isa = PBXBuildFile; fileRef = D2F9A4C5121336C7002747C1 /* crash_generation_client.h */; };
+		D2F9A4CB121336C7002747C1 /* crash_generation_client.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A4C6121336C7002747C1 /* crash_generation_client.cc */; };
+		D2F9A4CC121336C7002747C1 /* crash_generation_server.h in Headers */ = {isa = PBXBuildFile; fileRef = D2F9A4C7121336C7002747C1 /* crash_generation_server.h */; };
+		D2F9A4CD121336C7002747C1 /* crash_generation_server.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A4C8121336C7002747C1 /* crash_generation_server.cc */; };
+		D2F9A4DF12133AD9002747C1 /* crash_generation_client.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A4C6121336C7002747C1 /* crash_generation_client.cc */; };
+		D2F9A4E012133AD9002747C1 /* crash_generation_server.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A4C8121336C7002747C1 /* crash_generation_server.cc */; };
+		D2F9A4E112133AE2002747C1 /* crash_generation_client.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A4C6121336C7002747C1 /* crash_generation_client.cc */; };
+		D2F9A4E212133AE2002747C1 /* crash_generation_server.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A4C8121336C7002747C1 /* crash_generation_server.cc */; };
+		D2F9A52E121383A1002747C1 /* crash_generation_client.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A4C6121336C7002747C1 /* crash_generation_client.cc */; };
+		D2F9A52F121383A1002747C1 /* crash_generation_server.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A4C8121336C7002747C1 /* crash_generation_server.cc */; };
+		D2F9A530121383A1002747C1 /* MachIPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C53790ECCE635009BE4BA /* MachIPC.mm */; };
+		D2F9A531121383A1002747C1 /* breakpad_nlist_64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53690ECCE3FD009BE4BA /* breakpad_nlist_64.cc */; };
+		D2F9A532121383A1002747C1 /* dynamic_images.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536B0ECCE3FD009BE4BA /* dynamic_images.cc */; };
+		D2F9A533121383A1002747C1 /* exception_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536D0ECCE3FD009BE4BA /* exception_handler.cc */; };
+		D2F9A534121383A1002747C1 /* minidump_generator.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536F0ECCE3FD009BE4BA /* minidump_generator.cc */; };
+		D2F9A535121383A1002747C1 /* minidump_file_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C538F0ECCE70A009BE4BA /* minidump_file_writer.cc */; };
+		D2F9A536121383A1002747C1 /* convert_UTF.c in Sources */ = {isa = PBXBuildFile; fileRef = F92C53870ECCE6C0009BE4BA /* convert_UTF.c */; };
+		D2F9A537121383A1002747C1 /* string_conversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53850ECCE6AD009BE4BA /* string_conversion.cc */; };
+		D2F9A538121383A1002747C1 /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53740ECCE635009BE4BA /* file_id.cc */; };
+		D2F9A539121383A1002747C1 /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537A0ECCE635009BE4BA /* macho_id.cc */; };
+		D2F9A53A121383A1002747C1 /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537C0ECCE635009BE4BA /* macho_utilities.cc */; };
+		D2F9A53B121383A1002747C1 /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537E0ECCE635009BE4BA /* macho_walker.cc */; };
+		D2F9A53C121383A1002747C1 /* string_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53820ECCE635009BE4BA /* string_utilities.cc */; };
+		D2F9A53F121383A1002747C1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; };
+		D2F9A540121383A1002747C1 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B4BDAA7120124EA009C7060 /* libcrypto.dylib */; };
+		D2F9A541121383A1002747C1 /* libgtest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2F9A41512131EF0002747C1 /* libgtest.a */; };
+		D2F9A553121383DC002747C1 /* crash_generation_server_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A4CE121336F7002747C1 /* crash_generation_server_test.cc */; };
 		F91AF5D00FD60393009D8BE2 /* BreakpadFramework_Test.mm in Sources */ = {isa = PBXBuildFile; fileRef = F91AF5CF0FD60393009D8BE2 /* BreakpadFramework_Test.mm */; };
 		F91AF6210FD60784009D8BE2 /* Breakpad.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* Breakpad.framework */; };
 		F9286B3A0F7EB25800A4DCC8 /* InspectorMain.mm in Sources */ = {isa = PBXBuildFile; fileRef = F9286B390F7EB25800A4DCC8 /* InspectorMain.mm */; };
@@ -92,7 +151,6 @@
 		F93DE33D0F82C66B00608B94 /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537C0ECCE635009BE4BA /* macho_utilities.cc */; };
 		F93DE33E0F82C66B00608B94 /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537E0ECCE635009BE4BA /* macho_walker.cc */; };
 		F93DE33F0F82C66B00608B94 /* string_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53820ECCE635009BE4BA /* string_utilities.cc */; };
-		F93DE3410F82C68300608B94 /* exception_handler_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = F93DE3400F82C68300608B94 /* exception_handler_test.cc */; };
 		F945849E0F280E3C009A47BF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F945849C0F280E3C009A47BF /* Localizable.strings */; };
 		F9B630A0100FF96B00D0F4AC /* goArrow.png in Resources */ = {isa = PBXBuildFile; fileRef = F9B6309F100FF96B00D0F4AC /* goArrow.png */; };
 		F9C44DB20EF07288003AEBAA /* Controller.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C44DAC0EF07288003AEBAA /* Controller.m */; };
@@ -101,7 +159,7 @@
 		F9C44DB60EF07288003AEBAA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C44DB00EF07288003AEBAA /* main.m */; };
 		F9C44DB70EF07288003AEBAA /* TestClass.mm in Sources */ = {isa = PBXBuildFile; fileRef = F9C44DB10EF07288003AEBAA /* TestClass.mm */; };
 		F9C44DBC0EF072A0003AEBAA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = F9C44DB80EF072A0003AEBAA /* InfoPlist.strings */; };
-		F9C44DBD0EF072A0003AEBAA /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = F9C44DBA0EF072A0003AEBAA /* MainMenu.nib */; };
+		F9C44DBD0EF072A0003AEBAA /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = F9C44DBA0EF072A0003AEBAA /* MainMenu.xib */; };
 		F9C44E000EF077CD003AEBAA /* Breakpad.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* Breakpad.framework */; };
 		F9C44E3C0EF08B12003AEBAA /* Breakpad.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* Breakpad.framework */; };
 		F9C44E980EF09F56003AEBAA /* crash_report_sender.app in Resources */ = {isa = PBXBuildFile; fileRef = F92C56A00ECE04A7009BE4BA /* crash_report_sender.app */; };
@@ -114,6 +172,167 @@
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
+		8B31023811F0CF0600FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FAFC9116BDCAD00407530;
+			remoteInfo = all_unittests;
+		};
+		8B31051611F1010E00FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F93803BD0F80820F004D428B;
+			remoteInfo = generator_test;
+		};
+		8B31051811F1010E00FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F93DE2D00F82A67300608B94;
+			remoteInfo = minidump_file_writer_unittest;
+		};
+		8B31051A11F1010E00FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F93DE32B0F82C55600608B94;
+			remoteInfo = handler_test;
+		};
+		8B31051C11F1010E00FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = B89E0E731166575200DD08C9;
+			remoteInfo = macho_dump;
+		};
+		8B31051E11F1010E00FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB894101F94C000AA053B /* symupload.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = 9BD835FA0B0544950055103E;
+			remoteInfo = minidump_upload;
+		};
+		8B31F7A011EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B89E0E741166575200DD08C9;
+			remoteInfo = macho_dump;
+		};
+		8B31F7A211EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B88FB024116BDFFF00407530;
+			remoteInfo = gtestmockall;
+		};
+		8B31F7A411EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B88FB14B116CF4A700407530;
+			remoteInfo = byte_cursor_unittest;
+		};
+		8B31F7A611EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B89E0E9511665A6400DD08C9;
+			remoteInfo = macho_reader_unittest;
+		};
+		8B31F7A811EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B88FB007116BDE8300407530;
+			remoteInfo = stabs_reader_unittest;
+		};
+		8B31F7AA11EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B88FB135116CF30F00407530;
+			remoteInfo = bytereader_unittest;
+		};
+		8B31F7AC11EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B88FAF2F116A591E00407530;
+			remoteInfo = dwarf2reader_cfi_unittest;
+		};
+		8B31F7AE11EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B88FB0DF116CEEA800407530;
+			remoteInfo = dwarf2diehandler_unittest;
+		};
+		8B31F7B011EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B88FB10A116CF07900407530;
+			remoteInfo = dwarf_cu_to_module_unittest;
+		};
+		8B31F7B211EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B88FB0F2116CEF1900407530;
+			remoteInfo = dwarf_line_to_module_unittest;
+		};
+		8B31F7B411EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B88FB11F116CF27F00407530;
+			remoteInfo = dwarf_cfi_to_module_unittest;
+		};
+		8B31F7B611EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B84A91F4116CF784006C210E;
+			remoteInfo = stabs_to_module_unittest;
+		};
+		8B31F7B811EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = B88FB0B9116CEABF00407530;
+			remoteInfo = module_unittest;
+		};
+		8B31F7BA11EF9A8700FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = D21F97D211CBA0F200239E38;
+			remoteInfo = test_assembler_unittest;
+		};
+		D2F9A44212131F80002747C1 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = D2F9A41412131EF0002747C1;
+			remoteInfo = gtest;
+		};
+		D2F9A52C121383A1002747C1 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = D2F9A41412131EF0002747C1;
+			remoteInfo = gtest;
+		};
+		D2F9A5DE12142A6A002747C1 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = D2F9A52A121383A1002747C1;
+			remoteInfo = crash_generation_server_test;
+		};
 		F91AF6370FD60A74009D8BE2 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
@@ -230,7 +449,7 @@
 			isa = PBXContainerItemProxy;
 			containerPortal = F95BB889101F94AC00AA053B /* dump_syms.xcodeproj */;
 			proxyType = 1;
-			remoteGlobalIDString = 8DD76F960486AA7600D96B5E;
+			remoteGlobalIDString = B8C5B5101166531A00D34F4E;
 			remoteInfo = dump_syms;
 		};
 		F95BB8B4101F94D300AA053B /* PBXContainerItemProxy */ = {
@@ -278,14 +497,60 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
-		0867D69BFE84028FC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
-		0867D6A5FE840307C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
-		1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+		0867D69BFE84028FC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		0867D6A5FE840307C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
+		1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
 		32DBCF5E0370ADEE00C91783 /* Breakpad_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Breakpad_Prefix.pch; path = Framework/Breakpad_Prefix.pch; sourceTree = "<group>"; };
-		3329D4EC0FA16D820007BBC5 /* Breakpad.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Breakpad.nib; path = sender/Breakpad.nib; sourceTree = "<group>"; };
+		3329D4EC0FA16D820007BBC5 /* Breakpad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Breakpad.xib; path = sender/Breakpad.xib; sourceTree = "<group>"; };
 		33880C7F0F9E097100817F82 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = sender/English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		4084699C0F5D9CF900FDCA37 /* crash_report_sender.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = crash_report_sender.icns; path = sender/crash_report_sender.icns; sourceTree = "<group>"; };
+		8B31007011F0CD3C00FCF3E4 /* GTMDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GTMDefines.h; path = ../../common/mac/GTMDefines.h; sourceTree = SOURCE_ROOT; };
+		8B3101E911F0CDE300FCF3E4 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; };
+		8B31022211F0CE1000FCF3E4 /* GTMGarbageCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GTMGarbageCollection.h; path = ../../common/mac/GTMGarbageCollection.h; sourceTree = SOURCE_ROOT; };
+		8B31027711F0D3AF00FCF3E4 /* BreakpadDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadDebug.xcconfig; path = ../../common/mac/BreakpadDebug.xcconfig; sourceTree = SOURCE_ROOT; };
+		8B31027811F0D3AF00FCF3E4 /* BreakpadRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadRelease.xcconfig; path = ../../common/mac/BreakpadRelease.xcconfig; sourceTree = SOURCE_ROOT; };
+		8B31FFF611F0C90500FCF3E4 /* Breakpad.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Breakpad.xcconfig; path = ../../common/mac/Breakpad.xcconfig; sourceTree = SOURCE_ROOT; };
+		8B4BDAA7120124EA009C7060 /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; };
 		8DC2EF5B0486A6940098B216 /* Breakpad.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Breakpad.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		D244534F12426E98009BBCE0 /* basic_code_modules.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = basic_code_modules.cc; path = ../../processor/basic_code_modules.cc; sourceTree = SOURCE_ROOT; };
+		D244535112426EBB009BBCE0 /* logging.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = logging.cc; path = ../../processor/logging.cc; sourceTree = SOURCE_ROOT; };
+		D244535212426EBB009BBCE0 /* minidump.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = minidump.cc; path = ../../processor/minidump.cc; sourceTree = SOURCE_ROOT; };
+		D244535312426EBB009BBCE0 /* pathname_stripper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pathname_stripper.cc; path = ../../processor/pathname_stripper.cc; sourceTree = SOURCE_ROOT; };
+		D244540A12439BA0009BBCE0 /* memory_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = memory_unittest.cc; path = ../../common/memory_unittest.cc; sourceTree = SOURCE_ROOT; };
+		D2F9A3D41212F87C002747C1 /* exception_handler_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exception_handler_test.cc; path = tests/exception_handler_test.cc; sourceTree = "<group>"; };
+		D2F9A41512131EF0002747C1 /* libgtest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgtest.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		D2F9A43C12131F55002747C1 /* gmock-all.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gmock-all.cc"; path = "../../testing/src/gmock-all.cc"; sourceTree = SOURCE_ROOT; };
+		D2F9A43E12131F65002747C1 /* gtest_main.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gtest_main.cc; path = ../../testing/gtest/src/gtest_main.cc; sourceTree = "<group>"; };
+		D2F9A43F12131F65002747C1 /* gtest-all.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gtest-all.cc"; path = "../../testing/gtest/src/gtest-all.cc"; sourceTree = "<group>"; };
+		D2F9A4C4121336C7002747C1 /* client_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = client_info.h; path = crash_generation/client_info.h; sourceTree = "<group>"; };
+		D2F9A4C5121336C7002747C1 /* crash_generation_client.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = crash_generation_client.h; path = crash_generation/crash_generation_client.h; sourceTree = "<group>"; };
+		D2F9A4C6121336C7002747C1 /* crash_generation_client.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = crash_generation_client.cc; path = crash_generation/crash_generation_client.cc; sourceTree = "<group>"; };
+		D2F9A4C7121336C7002747C1 /* crash_generation_server.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = crash_generation_server.h; path = crash_generation/crash_generation_server.h; sourceTree = "<group>"; };
+		D2F9A4C8121336C7002747C1 /* crash_generation_server.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = crash_generation_server.cc; path = crash_generation/crash_generation_server.cc; sourceTree = "<group>"; };
+		D2F9A4CE121336F7002747C1 /* crash_generation_server_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = crash_generation_server_test.cc; path = tests/crash_generation_server_test.cc; sourceTree = "<group>"; };
+		D2F9A546121383A1002747C1 /* crash_generation_server_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = crash_generation_server_test; sourceTree = BUILT_PRODUCTS_DIR; };
+		DE43467411C72855004F095F /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = sender/da.lproj/Localizable.strings; sourceTree = "<group>"; };
+		DE43467511C72857004F095F /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = sender/de.lproj/Localizable.strings; sourceTree = "<group>"; };
+		DE43467611C7285B004F095F /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = sender/es.lproj/Localizable.strings; sourceTree = "<group>"; };
+		DE43467711C72862004F095F /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = sender/fr.lproj/Localizable.strings; sourceTree = "<group>"; };
+		DE43467811C72869004F095F /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = sender/it.lproj/Localizable.strings; sourceTree = "<group>"; };
+		DE43467911C7286D004F095F /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = sender/nl.lproj/Localizable.strings; sourceTree = "<group>"; };
+		DE43467A11C72873004F095F /* no */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = no; path = sender/no.lproj/Localizable.strings; sourceTree = "<group>"; };
+		DE43467B11C72877004F095F /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sender/sl.lproj/Localizable.strings; sourceTree = "<group>"; };
+		DE43467C11C7287A004F095F /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sender/sv.lproj/Localizable.strings; sourceTree = "<group>"; };
+		DE43467E11C728DC004F095F /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = sender/ja.lproj/Localizable.strings; sourceTree = "<group>"; };
+		DE43467F11C728E1004F095F /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = sender/tr.lproj/Localizable.strings; sourceTree = "<group>"; };
+		DE43468611C72958004F095F /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = sender/de.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		DE43468711C7295D004F095F /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = sender/da.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		DE43468811C7295F004F095F /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = sender/es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		DE43468911C72964004F095F /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = sender/fr.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		DE43468A11C72967004F095F /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = sender/it.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		DE43468B11C7296B004F095F /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = sender/ja.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		DE43468C11C7296D004F095F /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = sender/nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		DE43468D11C7296F004F095F /* no */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = no; path = sender/no.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		DE43468E11C72971004F095F /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sender/sl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		DE43468F11C72973004F095F /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sender/sv.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		DE43469011C72976004F095F /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = sender/tr.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		F91AF5CF0FD60393009D8BE2 /* BreakpadFramework_Test.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = BreakpadFramework_Test.mm; path = tests/BreakpadFramework_Test.mm; sourceTree = "<group>"; };
 		F9286B380F7EB25800A4DCC8 /* Inspector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Inspector.h; path = crash_generation/Inspector.h; sourceTree = "<group>"; };
 		F9286B390F7EB25800A4DCC8 /* InspectorMain.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InspectorMain.mm; path = crash_generation/InspectorMain.mm; sourceTree = "<group>"; };
@@ -326,7 +591,7 @@
 		F92C538F0ECCE70A009BE4BA /* minidump_file_writer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = minidump_file_writer.cc; path = ../minidump_file_writer.cc; sourceTree = SOURCE_ROOT; };
 		F92C53900ECCE70A009BE4BA /* minidump_file_writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = minidump_file_writer.h; path = ../minidump_file_writer.h; sourceTree = SOURCE_ROOT; };
 		F92C53B70ECCE7B3009BE4BA /* Inspector.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Inspector.mm; path = crash_generation/Inspector.mm; sourceTree = SOURCE_ROOT; };
-		F92C554A0ECCF530009BE4BA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
+		F92C554A0ECCF530009BE4BA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
 		F92C55CE0ECD0064009BE4BA /* Breakpad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Breakpad.h; path = Framework/Breakpad.h; sourceTree = "<group>"; };
 		F92C55CF0ECD0064009BE4BA /* Breakpad.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Breakpad.mm; path = Framework/Breakpad.mm; sourceTree = "<group>"; };
 		F92C56310ECD0DF1009BE4BA /* OnDemandServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OnDemandServer.h; path = Framework/OnDemandServer.h; sourceTree = "<group>"; };
@@ -341,7 +606,6 @@
 		F93DE2D10F82A67300608B94 /* minidump_file_writer_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = minidump_file_writer_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
 		F93DE2D70F82A70E00608B94 /* minidump_file_writer_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = minidump_file_writer_unittest.cc; path = ../minidump_file_writer_unittest.cc; sourceTree = SOURCE_ROOT; };
 		F93DE32C0F82C55600608B94 /* handler_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = handler_test; sourceTree = BUILT_PRODUCTS_DIR; };
-		F93DE3400F82C68300608B94 /* exception_handler_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exception_handler_test.cc; path = handler/exception_handler_test.cc; sourceTree = "<group>"; };
 		F945849D0F280E3C009A47BF /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = sender/English.lproj/Localizable.strings; sourceTree = "<group>"; };
 		F945859D0F78241E009A47BF /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Framework/Info.plist; sourceTree = "<group>"; };
 		F95BB87C101F949F00AA053B /* crash_report.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = crash_report.xcodeproj; path = ../../tools/mac/crash_report/crash_report.xcodeproj; sourceTree = SOURCE_ROOT; };
@@ -356,10 +620,10 @@
 		F9C44DB00EF07288003AEBAA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = testapp/main.m; sourceTree = "<group>"; };
 		F9C44DB10EF07288003AEBAA /* TestClass.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = TestClass.mm; path = testapp/TestClass.mm; sourceTree = "<group>"; };
 		F9C44DB90EF072A0003AEBAA /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = testapp/English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-		F9C44DBB0EF072A0003AEBAA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = testapp/English.lproj/MainMenu.nib; sourceTree = "<group>"; };
+		F9C44DBB0EF072A0003AEBAA /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = testapp/English.lproj/MainMenu.xib; sourceTree = "<group>"; };
 		F9C44DBF0EF0778F003AEBAA /* Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Controller.h; path = testapp/Controller.h; sourceTree = "<group>"; };
 		F9C44DC00EF0778F003AEBAA /* TestClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestClass.h; path = testapp/TestClass.h; sourceTree = "<group>"; };
-		F9C44EE40EF0A006003AEBAA /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = "<absolute>"; };
+		F9C44EE40EF0A006003AEBAA /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
 		F9C44EE70EF0A3C1003AEBAA /* GTMLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GTMLogger.h; path = ../../common/mac/GTMLogger.h; sourceTree = SOURCE_ROOT; };
 		F9C44EE80EF0A3C1003AEBAA /* GTMLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GTMLogger.m; path = ../../common/mac/GTMLogger.m; sourceTree = SOURCE_ROOT; };
 		F9C77DDA0F7DD5CF0045F7DB /* UnitTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -380,6 +644,23 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		D2F9A41312131EF0002747C1 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D2F9A53E121383A1002747C1 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D2F9A53F121383A1002747C1 /* Foundation.framework in Frameworks */,
+				D2F9A540121383A1002747C1 /* libcrypto.dylib in Frameworks */,
+				D2F9A541121383A1002747C1 /* libgtest.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		F92C53520ECCE349009BE4BA /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
@@ -393,7 +674,9 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				8B31FC8211EFD2B800FCF3E4 /* Foundation.framework in Frameworks */,
 				F92C56570ECD113E009BE4BA /* Carbon.framework in Frameworks */,
+				8B4BDAAF12012BC5009C7060 /* libcrypto.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -402,6 +685,8 @@
 			buildActionMask = 2147483647;
 			files = (
 				F9C44EE50EF0A006003AEBAA /* SystemConfiguration.framework in Frameworks */,
+				8B3101C611F0CD9F00FCF3E4 /* AppKit.framework in Frameworks */,
+				8B3101C711F0CD9F00FCF3E4 /* Foundation.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -409,6 +694,8 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				8B31029411F0D54300FCF3E4 /* Foundation.framework in Frameworks */,
+				8B4BDABE12012CEF009C7060 /* libcrypto.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -423,6 +710,9 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				8B3102E611F0D74C00FCF3E4 /* Foundation.framework in Frameworks */,
+				8B4BDAC512012D05009C7060 /* libcrypto.dylib in Frameworks */,
+				D2F9A44412131F84002747C1 /* libgtest.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -431,6 +721,8 @@
 			buildActionMask = 2147483647;
 			files = (
 				F9C44E000EF077CD003AEBAA /* Breakpad.framework in Frameworks */,
+				8B3101CA11F0CDB000FCF3E4 /* AppKit.framework in Frameworks */,
+				8B3101CB11F0CDB000FCF3E4 /* Foundation.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -439,6 +731,9 @@
 			buildActionMask = 2147483647;
 			files = (
 				F91AF6210FD60784009D8BE2 /* Breakpad.framework in Frameworks */,
+				8B3101EA11F0CDE300FCF3E4 /* SenTestingKit.framework in Frameworks */,
+				8B3102EB11F0D78000FCF3E4 /* Foundation.framework in Frameworks */,
+				D24BBBFD121050F000F3D417 /* breakpadUtilities.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -457,6 +752,8 @@
 				F93803BE0F80820F004D428B /* generator_test */,
 				F93DE2D10F82A67300608B94 /* minidump_file_writer_unittest */,
 				F93DE32C0F82C55600608B94 /* handler_test */,
+				D2F9A41512131EF0002747C1 /* libgtest.a */,
+				D2F9A546121383A1002747C1 /* crash_generation_server_test */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -464,10 +761,15 @@
 		0867D691FE84028FC02AAC07 /* Breakpad */ = {
 			isa = PBXGroup;
 			children = (
+				D2F9A43812131F3B002747C1 /* gtest */,
+				8B31FFF611F0C90500FCF3E4 /* Breakpad.xcconfig */,
+				8B31027711F0D3AF00FCF3E4 /* BreakpadDebug.xcconfig */,
+				8B31027811F0D3AF00FCF3E4 /* BreakpadRelease.xcconfig */,
 				F95BB8A3101F94C300AA053B /* Tools */,
 				32DBCF5E0370ADEE00C91783 /* Breakpad_Prefix.pch */,
 				F92C538D0ECCE6F2009BE4BA /* client */,
 				F92C53600ECCE3D6009BE4BA /* common */,
+				D244536912426EE7009BBCE0 /* processor */,
 				0867D69AFE84028FC02AAC07 /* Frameworks */,
 				034768DFFF38A50411DB9C8B /* Products */,
 				F9C77DDB0F7DD5CF0045F7DB /* UnitTests-Info.plist */,
@@ -478,6 +780,8 @@
 		0867D69AFE84028FC02AAC07 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				8B4BDAA7120124EA009C7060 /* libcrypto.dylib */,
+				8B3101E911F0CDE300FCF3E4 /* SenTestingKit.framework */,
 				F9C44EE40EF0A006003AEBAA /* SystemConfiguration.framework */,
 				F92C554A0ECCF530009BE4BA /* Carbon.framework */,
 				1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */,
@@ -487,10 +791,30 @@
 			name = Frameworks;
 			sourceTree = "<group>";
 		};
+		D244536912426EE7009BBCE0 /* processor */ = {
+			isa = PBXGroup;
+			children = (
+				D244535112426EBB009BBCE0 /* logging.cc */,
+				D244535212426EBB009BBCE0 /* minidump.cc */,
+				D244535312426EBB009BBCE0 /* pathname_stripper.cc */,
+				D244534F12426E98009BBCE0 /* basic_code_modules.cc */,
+			);
+			name = processor;
+			sourceTree = "<group>";
+		};
+		D2F9A43812131F3B002747C1 /* gtest */ = {
+			isa = PBXGroup;
+			children = (
+				D2F9A43E12131F65002747C1 /* gtest_main.cc */,
+				D2F9A43F12131F65002747C1 /* gtest-all.cc */,
+				D2F9A43C12131F55002747C1 /* gmock-all.cc */,
+			);
+			name = gtest;
+			sourceTree = "<group>";
+		};
 		F92C53590ECCE3BB009BE4BA /* handler */ = {
 			isa = PBXGroup;
 			children = (
-				F93DE3400F82C68300608B94 /* exception_handler_test.cc */,
 				F93803D90F8083D8004D428B /* minidump_generator_test.cc */,
 				F92C53670ECCE3FD009BE4BA /* breakpad_exc_server.c */,
 				F92C53680ECCE3FD009BE4BA /* breakpad_exc_server.h */,
@@ -511,6 +835,7 @@
 		F92C53600ECCE3D6009BE4BA /* common */ = {
 			isa = PBXGroup;
 			children = (
+				D244540A12439BA0009BBCE0 /* memory_unittest.cc */,
 				F92C53870ECCE6C0009BE4BA /* convert_UTF.c */,
 				F92C53880ECCE6C0009BE4BA /* convert_UTF.h */,
 				F92C53850ECCE6AD009BE4BA /* string_conversion.cc */,
@@ -523,6 +848,8 @@
 		F92C53840ECCE68D009BE4BA /* mac */ = {
 			isa = PBXGroup;
 			children = (
+				8B31022211F0CE1000FCF3E4 /* GTMGarbageCollection.h */,
+				8B31007011F0CD3C00FCF3E4 /* GTMDefines.h */,
 				F9C77E0F0F7DDF650045F7DB /* testing */,
 				F9C44EE70EF0A3C1003AEBAA /* GTMLogger.h */,
 				F9C44EE80EF0A3C1003AEBAA /* GTMLogger.m */,
@@ -574,6 +901,11 @@
 		F92C53B50ECCE799009BE4BA /* crash_generation */ = {
 			isa = PBXGroup;
 			children = (
+				D2F9A4C4121336C7002747C1 /* client_info.h */,
+				D2F9A4C5121336C7002747C1 /* crash_generation_client.h */,
+				D2F9A4C6121336C7002747C1 /* crash_generation_client.cc */,
+				D2F9A4C7121336C7002747C1 /* crash_generation_server.h */,
+				D2F9A4C8121336C7002747C1 /* crash_generation_server.cc */,
 				F9286B380F7EB25800A4DCC8 /* Inspector.h */,
 				F9286B390F7EB25800A4DCC8 /* InspectorMain.mm */,
 				F92C53B70ECCE7B3009BE4BA /* Inspector.mm */,
@@ -601,7 +933,7 @@
 				F92C56A80ECE04C5009BE4BA /* crash_report_sender.m */,
 				F945849C0F280E3C009A47BF /* Localizable.strings */,
 				33880C7E0F9E097100817F82 /* InfoPlist.strings */,
-				3329D4EC0FA16D820007BBC5 /* Breakpad.nib */,
+				3329D4EC0FA16D820007BBC5 /* Breakpad.xib */,
 				4084699C0F5D9CF900FDCA37 /* crash_report_sender.icns */,
 				F92C56A20ECE04A7009BE4BA /* crash_report_sender-Info.plist */,
 			);
@@ -620,6 +952,20 @@
 			isa = PBXGroup;
 			children = (
 				F95BB892101F94AC00AA053B /* dump_syms */,
+				8B31F7A111EF9A8700FCF3E4 /* macho_dump */,
+				8B31F7A311EF9A8700FCF3E4 /* libgtestmockall.a */,
+				8B31F7A511EF9A8700FCF3E4 /* byte_cursor_unittest */,
+				8B31F7A711EF9A8700FCF3E4 /* macho_reader_unittest */,
+				8B31F7A911EF9A8700FCF3E4 /* stabs_reader_unittest */,
+				8B31F7AB11EF9A8700FCF3E4 /* bytereader_unittest */,
+				8B31F7AD11EF9A8700FCF3E4 /* dwarf2reader_cfi_unittest */,
+				8B31F7AF11EF9A8700FCF3E4 /* dwarf2diehandler_unittest */,
+				8B31F7B111EF9A8700FCF3E4 /* dwarf_cu_to_module_unittest */,
+				8B31F7B311EF9A8700FCF3E4 /* dwarf_line_to_module_unittest */,
+				8B31F7B511EF9A8700FCF3E4 /* dwarf_cfi_to_module_unittest */,
+				8B31F7B711EF9A8700FCF3E4 /* stabs_to_module_unittest */,
+				8B31F7B911EF9A8700FCF3E4 /* module_unittest */,
+				8B31F7BB11EF9A8700FCF3E4 /* test_assembler_unittest */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -649,7 +995,7 @@
 				F9C44DBF0EF0778F003AEBAA /* Controller.h */,
 				F9C44DC00EF0778F003AEBAA /* TestClass.h */,
 				F9C44DB80EF072A0003AEBAA /* InfoPlist.strings */,
-				F9C44DBA0EF072A0003AEBAA /* MainMenu.nib */,
+				F9C44DBA0EF072A0003AEBAA /* MainMenu.xib */,
 				F9C44DAC0EF07288003AEBAA /* Controller.m */,
 				F9C44DAD0EF07288003AEBAA /* crashduringload */,
 				F9C44DAE0EF07288003AEBAA /* crashInMain */,
@@ -663,6 +1009,8 @@
 		F9C77DDF0F7DD7CF0045F7DB /* tests */ = {
 			isa = PBXGroup;
 			children = (
+				D2F9A4CE121336F7002747C1 /* crash_generation_server_test.cc */,
+				D2F9A3D41212F87C002747C1 /* exception_handler_test.cc */,
 				F9C77DE00F7DD7E30045F7DB /* SimpleStringDictionaryTest.h */,
 				F9C77DE10F7DD7E30045F7DB /* SimpleStringDictionaryTest.mm */,
 				F91AF5CF0FD60393009D8BE2 /* BreakpadFramework_Test.mm */,
@@ -688,6 +1036,16 @@
 			files = (
 				F92C55D00ECD0064009BE4BA /* Breakpad.h in Headers */,
 				F92C56330ECD0DF1009BE4BA /* OnDemandServer.h in Headers */,
+				D2F9A4C9121336C7002747C1 /* client_info.h in Headers */,
+				D2F9A4CA121336C7002747C1 /* crash_generation_client.h in Headers */,
+				D2F9A4CC121336C7002747C1 /* crash_generation_server.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D2F9A41112131EF0002747C1 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -724,6 +1082,40 @@
 			productReference = 8DC2EF5B0486A6940098B216 /* Breakpad.framework */;
 			productType = "com.apple.product-type.framework";
 		};
+		D2F9A41412131EF0002747C1 /* gtest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = D2F9A42D12131F0E002747C1 /* Build configuration list for PBXNativeTarget "gtest" */;
+			buildPhases = (
+				D2F9A41112131EF0002747C1 /* Headers */,
+				D2F9A41212131EF0002747C1 /* Sources */,
+				D2F9A41312131EF0002747C1 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = gtest;
+			productName = gtest;
+			productReference = D2F9A41512131EF0002747C1 /* libgtest.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+		D2F9A52A121383A1002747C1 /* crash_generation_server_test */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = D2F9A542121383A1002747C1 /* Build configuration list for PBXNativeTarget "crash_generation_server_test" */;
+			buildPhases = (
+				D2F9A52D121383A1002747C1 /* Sources */,
+				D2F9A53E121383A1002747C1 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				D2F9A52B121383A1002747C1 /* PBXTargetDependency */,
+			);
+			name = crash_generation_server_test;
+			productName = handler_test;
+			productReference = D2F9A546121383A1002747C1 /* crash_generation_server_test */;
+			productType = "com.apple.product-type.tool";
+		};
 		F92C53530ECCE349009BE4BA /* Inspector */ = {
 			isa = PBXNativeTarget;
 			buildConfigurationList = F92C53580ECCE36D009BE4BA /* Build configuration list for PBXNativeTarget "Inspector" */;
@@ -818,6 +1210,7 @@
 			buildRules = (
 			);
 			dependencies = (
+				D2F9A44312131F80002747C1 /* PBXTargetDependency */,
 			);
 			name = handler_test;
 			productName = handler_test;
@@ -858,6 +1251,7 @@
 				F93DE2FC0F82C3C600608B94 /* PBXTargetDependency */,
 				F93DE3700F82CC1300608B94 /* PBXTargetDependency */,
 				F91AF6380FD60A74009D8BE2 /* PBXTargetDependency */,
+				D2F9A5DF12142A6A002747C1 /* PBXTargetDependency */,
 			);
 			name = UnitTests;
 			productName = UnitTests;
@@ -870,8 +1264,22 @@
 		0867D690FE84028FC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "Breakpad" */;
-			compatibilityVersion = "Xcode 2.4";
+			compatibilityVersion = "Xcode 3.1";
 			hasScannedForEncodings = 1;
+			knownRegions = (
+				English,
+				da,
+				de,
+				es,
+				fr,
+				it,
+				ja,
+				nl,
+				no,
+				sl,
+				sv,
+				tr,
+			);
 			mainGroup = 0867D691FE84028FC02AAC07 /* Breakpad */;
 			productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
 			projectDirPath = "";
@@ -901,11 +1309,111 @@
 				F93803BD0F80820F004D428B /* generator_test */,
 				F93DE2D00F82A67300608B94 /* minidump_file_writer_unittest */,
 				F93DE32B0F82C55600608B94 /* handler_test */,
+				D2F9A41412131EF0002747C1 /* gtest */,
+				D2F9A52A121383A1002747C1 /* crash_generation_server_test */,
 			);
 		};
 /* End PBXProject section */
 
 /* Begin PBXReferenceProxy section */
+		8B31F7A111EF9A8700FCF3E4 /* macho_dump */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = macho_dump;
+			remoteRef = 8B31F7A011EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7A311EF9A8700FCF3E4 /* libgtestmockall.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = libgtestmockall.a;
+			remoteRef = 8B31F7A211EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7A511EF9A8700FCF3E4 /* byte_cursor_unittest */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = byte_cursor_unittest;
+			remoteRef = 8B31F7A411EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7A711EF9A8700FCF3E4 /* macho_reader_unittest */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = macho_reader_unittest;
+			remoteRef = 8B31F7A611EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7A911EF9A8700FCF3E4 /* stabs_reader_unittest */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = stabs_reader_unittest;
+			remoteRef = 8B31F7A811EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7AB11EF9A8700FCF3E4 /* bytereader_unittest */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = bytereader_unittest;
+			remoteRef = 8B31F7AA11EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7AD11EF9A8700FCF3E4 /* dwarf2reader_cfi_unittest */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = dwarf2reader_cfi_unittest;
+			remoteRef = 8B31F7AC11EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7AF11EF9A8700FCF3E4 /* dwarf2diehandler_unittest */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = dwarf2diehandler_unittest;
+			remoteRef = 8B31F7AE11EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7B111EF9A8700FCF3E4 /* dwarf_cu_to_module_unittest */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = dwarf_cu_to_module_unittest;
+			remoteRef = 8B31F7B011EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7B311EF9A8700FCF3E4 /* dwarf_line_to_module_unittest */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = dwarf_line_to_module_unittest;
+			remoteRef = 8B31F7B211EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7B511EF9A8700FCF3E4 /* dwarf_cfi_to_module_unittest */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = dwarf_cfi_to_module_unittest;
+			remoteRef = 8B31F7B411EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7B711EF9A8700FCF3E4 /* stabs_to_module_unittest */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = stabs_to_module_unittest;
+			remoteRef = 8B31F7B611EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7B911EF9A8700FCF3E4 /* module_unittest */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = module_unittest;
+			remoteRef = 8B31F7B811EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		8B31F7BB11EF9A8700FCF3E4 /* test_assembler_unittest */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = test_assembler_unittest;
+			remoteRef = 8B31F7BA11EF9A8700FCF3E4 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
 		F95BB885101F949F00AA053B /* crash_report */ = {
 			isa = PBXReferenceProxy;
 			fileType = "compiled.mach-o.executable";
@@ -954,7 +1462,7 @@
 				F945849E0F280E3C009A47BF /* Localizable.strings in Resources */,
 				4084699D0F5D9CF900FDCA37 /* crash_report_sender.icns in Resources */,
 				33880C800F9E097100817F82 /* InfoPlist.strings in Resources */,
-				3329D4ED0FA16D820007BBC5 /* Breakpad.nib in Resources */,
+				3329D4ED0FA16D820007BBC5 /* Breakpad.xib in Resources */,
 				F9B630A0100FF96B00D0F4AC /* goArrow.png in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -966,7 +1474,7 @@
 				F9C44DB30EF07288003AEBAA /* crashduringload in Resources */,
 				F9C44DB40EF07288003AEBAA /* crashInMain in Resources */,
 				F9C44DBC0EF072A0003AEBAA /* InfoPlist.strings in Resources */,
-				F9C44DBD0EF072A0003AEBAA /* MainMenu.nib in Resources */,
+				F9C44DBD0EF072A0003AEBAA /* MainMenu.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1019,7 +1527,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n\necho running minidump generator tests...\n\"${BUILT_PRODUCTS_DIR}/generator_test\"\necho Running exception handler tests...\n\"${BUILT_PRODUCTS_DIR}/handler_test\"\n";
+			shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n\necho running minidump generator tests...\n\"${BUILT_PRODUCTS_DIR}/generator_test\"\necho Running exception handler tests...\n\"${BUILT_PRODUCTS_DIR}/handler_test\"\necho Running crash generation server tests...\n\"${BUILT_PRODUCTS_DIR}/crash_generation_server_test\"\n";
 		};
 /* End PBXShellScriptBuildPhase section */
 
@@ -1032,6 +1540,41 @@
 				F92C56630ECD1179009BE4BA /* exception_handler.cc in Sources */,
 				F92C55D10ECD0064009BE4BA /* Breakpad.mm in Sources */,
 				F92C56340ECD0DF1009BE4BA /* OnDemandServer.mm in Sources */,
+				D2F9A4CB121336C7002747C1 /* crash_generation_client.cc in Sources */,
+				D2F9A4CD121336C7002747C1 /* crash_generation_server.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D2F9A41212131EF0002747C1 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D2F9A43D12131F55002747C1 /* gmock-all.cc in Sources */,
+				D2F9A44012131F65002747C1 /* gtest_main.cc in Sources */,
+				D2F9A44112131F65002747C1 /* gtest-all.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D2F9A52D121383A1002747C1 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D2F9A553121383DC002747C1 /* crash_generation_server_test.cc in Sources */,
+				D2F9A52E121383A1002747C1 /* crash_generation_client.cc in Sources */,
+				D2F9A52F121383A1002747C1 /* crash_generation_server.cc in Sources */,
+				D2F9A530121383A1002747C1 /* MachIPC.mm in Sources */,
+				D2F9A531121383A1002747C1 /* breakpad_nlist_64.cc in Sources */,
+				D2F9A532121383A1002747C1 /* dynamic_images.cc in Sources */,
+				D2F9A533121383A1002747C1 /* exception_handler.cc in Sources */,
+				D2F9A534121383A1002747C1 /* minidump_generator.cc in Sources */,
+				D2F9A535121383A1002747C1 /* minidump_file_writer.cc in Sources */,
+				D2F9A536121383A1002747C1 /* convert_UTF.c in Sources */,
+				D2F9A537121383A1002747C1 /* string_conversion.cc in Sources */,
+				D2F9A538121383A1002747C1 /* file_id.cc in Sources */,
+				D2F9A539121383A1002747C1 /* macho_id.cc in Sources */,
+				D2F9A53A121383A1002747C1 /* macho_utilities.cc in Sources */,
+				D2F9A53B121383A1002747C1 /* macho_walker.cc in Sources */,
+				D2F9A53C121383A1002747C1 /* string_utilities.cc in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1078,6 +1621,9 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				D2F9A4DF12133AD9002747C1 /* crash_generation_client.cc in Sources */,
+				D2F9A4E012133AD9002747C1 /* crash_generation_server.cc in Sources */,
+				D24BBD291211EDB100F3D417 /* MachIPC.mm in Sources */,
 				D2A5DD401188640400081F03 /* breakpad_nlist_64.cc in Sources */,
 				F93803CD0F8083B7004D428B /* dynamic_images.cc in Sources */,
 				F93803CE0F8083B7004D428B /* exception_handler.cc in Sources */,
@@ -1109,6 +1655,13 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				D244536A12426F00009BBCE0 /* logging.cc in Sources */,
+				D244536B12426F00009BBCE0 /* minidump.cc in Sources */,
+				D244536C12426F00009BBCE0 /* pathname_stripper.cc in Sources */,
+				D244536D12426F00009BBCE0 /* basic_code_modules.cc in Sources */,
+				D2F9A4E112133AE2002747C1 /* crash_generation_client.cc in Sources */,
+				D2F9A4E212133AE2002747C1 /* crash_generation_server.cc in Sources */,
+				D24BBD321212CACF00F3D417 /* MachIPC.mm in Sources */,
 				D2A5DD411188642E00081F03 /* breakpad_nlist_64.cc in Sources */,
 				F93DE3350F82C66B00608B94 /* dynamic_images.cc in Sources */,
 				F93DE3360F82C66B00608B94 /* exception_handler.cc in Sources */,
@@ -1121,7 +1674,8 @@
 				F93DE33D0F82C66B00608B94 /* macho_utilities.cc in Sources */,
 				F93DE33E0F82C66B00608B94 /* macho_walker.cc in Sources */,
 				F93DE33F0F82C66B00608B94 /* string_utilities.cc in Sources */,
-				F93DE3410F82C68300608B94 /* exception_handler_test.cc in Sources */,
+				D2F9A3D51212F87C002747C1 /* exception_handler_test.cc in Sources */,
+				D244540B12439BA0009BBCE0 /* memory_unittest.cc in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1149,6 +1703,51 @@
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
+		8B31023911F0CF0600FCF3E4 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = all_unittests;
+			targetProxy = 8B31023811F0CF0600FCF3E4 /* PBXContainerItemProxy */;
+		};
+		8B31051711F1010E00FCF3E4 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F93803BD0F80820F004D428B /* generator_test */;
+			targetProxy = 8B31051611F1010E00FCF3E4 /* PBXContainerItemProxy */;
+		};
+		8B31051911F1010E00FCF3E4 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F93DE2D00F82A67300608B94 /* minidump_file_writer_unittest */;
+			targetProxy = 8B31051811F1010E00FCF3E4 /* PBXContainerItemProxy */;
+		};
+		8B31051B11F1010E00FCF3E4 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F93DE32B0F82C55600608B94 /* handler_test */;
+			targetProxy = 8B31051A11F1010E00FCF3E4 /* PBXContainerItemProxy */;
+		};
+		8B31051D11F1010E00FCF3E4 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = macho_dump;
+			targetProxy = 8B31051C11F1010E00FCF3E4 /* PBXContainerItemProxy */;
+		};
+		8B31051F11F1010E00FCF3E4 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = minidump_upload;
+			targetProxy = 8B31051E11F1010E00FCF3E4 /* PBXContainerItemProxy */;
+		};
+		D2F9A44312131F80002747C1 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = D2F9A41412131EF0002747C1 /* gtest */;
+			targetProxy = D2F9A44212131F80002747C1 /* PBXContainerItemProxy */;
+		};
+		D2F9A52B121383A1002747C1 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = D2F9A41412131EF0002747C1 /* gtest */;
+			targetProxy = D2F9A52C121383A1002747C1 /* PBXContainerItemProxy */;
+		};
+		D2F9A5DF12142A6A002747C1 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = D2F9A52A121383A1002747C1 /* crash_generation_server_test */;
+			targetProxy = D2F9A5DE12142A6A002747C1 /* PBXContainerItemProxy */;
+		};
 		F91AF6380FD60A74009D8BE2 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			target = 8DC2EF4F0486A6940098B216 /* Breakpad */;
@@ -1241,6 +1840,17 @@
 			isa = PBXVariantGroup;
 			children = (
 				33880C7F0F9E097100817F82 /* English */,
+				DE43468711C7295D004F095F /* da */,
+				DE43468611C72958004F095F /* de */,
+				DE43468811C7295F004F095F /* es */,
+				DE43468911C72964004F095F /* fr */,
+				DE43468A11C72967004F095F /* it */,
+				DE43468B11C7296B004F095F /* ja */,
+				DE43468C11C7296D004F095F /* nl */,
+				DE43468D11C7296F004F095F /* no */,
+				DE43468E11C72971004F095F /* sl */,
+				DE43468F11C72973004F095F /* sv */,
+				DE43469011C72976004F095F /* tr */,
 			);
 			name = InfoPlist.strings;
 			sourceTree = "<group>";
@@ -1249,6 +1859,17 @@
 			isa = PBXVariantGroup;
 			children = (
 				F945849D0F280E3C009A47BF /* English */,
+				DE43467411C72855004F095F /* da */,
+				DE43467511C72857004F095F /* de */,
+				DE43467611C7285B004F095F /* es */,
+				DE43467711C72862004F095F /* fr */,
+				DE43467811C72869004F095F /* it */,
+				DE43467E11C728DC004F095F /* ja */,
+				DE43467911C7286D004F095F /* nl */,
+				DE43467A11C72873004F095F /* no */,
+				DE43467B11C72877004F095F /* sl */,
+				DE43467C11C7287A004F095F /* sv */,
+				DE43467F11C728E1004F095F /* tr */,
 			);
 			name = Localizable.strings;
 			sourceTree = "<group>";
@@ -1261,12 +1882,12 @@
 			name = InfoPlist.strings;
 			sourceTree = "<group>";
 		};
-		F9C44DBA0EF072A0003AEBAA /* MainMenu.nib */ = {
+		F9C44DBA0EF072A0003AEBAA /* MainMenu.xib */ = {
 			isa = PBXVariantGroup;
 			children = (
 				F9C44DBB0EF072A0003AEBAA /* English */,
 			);
-			name = MainMenu.nib;
+			name = MainMenu.xib;
 			sourceTree = "<group>";
 		};
 /* End PBXVariantGroup section */
@@ -1275,18 +1896,12 @@
 		1DEB91AE08733DA50010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
 				DYLIB_COMPATIBILITY_VERSION = 1;
 				DYLIB_CURRENT_VERSION = 1;
 				FRAMEWORK_VERSION = A;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Framework/Breakpad_Prefix.pch;
-				HEADER_SEARCH_PATHS = "../..//**";
+				HEADER_SEARCH_PATHS = ../..;
 				INFOPLIST_FILE = Framework/Info.plist;
 				INSTALL_PATH = "@executable_path/../Frameworks";
 				PRODUCT_NAME = Breakpad;
@@ -1297,14 +1912,12 @@
 		1DEB91AF08733DA50010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				DYLIB_COMPATIBILITY_VERSION = 1;
 				DYLIB_CURRENT_VERSION = 1;
 				FRAMEWORK_VERSION = A;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Framework/Breakpad_Prefix.pch;
-				HEADER_SEARCH_PATHS = "../..//**";
+				HEADER_SEARCH_PATHS = ../..;
 				INFOPLIST_FILE = Framework/Info.plist;
 				INSTALL_PATH = "@executable_path/../Frameworks";
 				PRODUCT_NAME = Breakpad;
@@ -1314,48 +1927,110 @@
 		};
 		1DEB91B208733DA50010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 8B31027711F0D3AF00FCF3E4 /* BreakpadDebug.xcconfig */;
 			buildSettings = {
-				ARCHS = "$(ONLY_ACTIVE_ARCH_PRE_XCODE_3_1)";
-				GCC_C_LANGUAGE_STANDARD = c99;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				ONLY_ACTIVE_ARCH_PRE_XCODE_3_1 = "$(NATIVE_ARCH_ACTUAL)";
-				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+				GCC_TREAT_WARNINGS_AS_ERRORS = NO;
 			};
 			name = Debug;
 		};
 		1DEB91B308733DA50010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 8B31027811F0D3AF00FCF3E4 /* BreakpadRelease.xcconfig */;
 			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)";
-				ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386";
-				GCC_C_LANGUAGE_STANDARD = c99;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				HEADER_SEARCH_PATHS = "../..//**";
+				GCC_TREAT_WARNINGS_AS_ERRORS = NO;
+			};
+			name = Release;
+		};
+		D2F9A41612131EF0002747C1 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../testing,
+					../../testing/include,
+					../../testing/gtest,
+					../../testing/gtest/include,
+				);
 				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+				PRODUCT_NAME = gtest;
+			};
+			name = Debug;
+		};
+		D2F9A41712131EF0002747C1 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				PREBINDING = NO;
+				PRODUCT_NAME = gtest;
+			};
+			name = "Debug With Code Coverage";
+		};
+		D2F9A41812131EF0002747C1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				PREBINDING = NO;
+				PRODUCT_NAME = gtest;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		D2F9A543121383A1002747C1 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				HEADER_SEARCH_PATHS = (
+					../..,
+					../../testing,
+					../../testing/include,
+					../../testing/gtest,
+					../../testing/gtest/include,
+				);
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/build/Debug\"",
+				);
+				PRODUCT_NAME = crash_generation_server_test;
+			};
+			name = Debug;
+		};
+		D2F9A544121383A1002747C1 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = ../..;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\\\"$(SRCROOT)/build/Debug\\\"",
+				);
+				PRODUCT_NAME = handler_test;
+			};
+			name = "Debug With Code Coverage";
+		};
+		D2F9A545121383A1002747C1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = ../..;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\\\"$(SRCROOT)/build/Debug\\\"",
+				);
+				PRODUCT_NAME = handler_test;
 			};
 			name = Release;
 		};
 		F92C53560ECCE34A009BE4BA /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				HEADER_SEARCH_PATHS = "../..//**";
-				INSTALL_PATH = /usr/local/bin;
-				OTHER_LDFLAGS = (
-					"-lcrypto",
-					"$(inherited)",
-				);
-				PREBINDING = NO;
+				HEADER_SEARCH_PATHS = ../..;
 				PRODUCT_NAME = Inspector;
 			};
 			name = Debug;
@@ -1363,45 +2038,22 @@
 		F92C53570ECCE34A009BE4BA /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEAD_CODE_STRIPPING = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				HEADER_SEARCH_PATHS = "../..//**";
-				INSTALL_PATH = /usr/local/bin;
-				LD_GENERATE_MAP_FILE = YES;
-				OTHER_LDFLAGS = (
-					"$(inherited)",
-					"-lcrypto",
-				);
-				PREBINDING = NO;
+				HEADER_SEARCH_PATHS = ../..;
 				PRODUCT_NAME = Inspector;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		F92C563D0ECD10B3009BE4BA /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
 				DYLIB_COMPATIBILITY_VERSION = 1;
 				DYLIB_CURRENT_VERSION = 1;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				HEADER_SEARCH_PATHS = "../..//**";
-				INSTALL_PATH = /usr/local/lib;
+				HEADER_SEARCH_PATHS = ../..;
 				LD_DYLIB_INSTALL_NAME = "@executable_path/../Resources/$(EXECUTABLE_PATH)";
 				OTHER_LDFLAGS = (
 					"$(inherited)",
 					"-headerpad_max_install_names",
-					"-lcrypto",
 				);
-				PREBINDING = NO;
 				PRODUCT_NAME = breakpadUtilities;
 			};
 			name = Debug;
@@ -1409,47 +2061,23 @@
 		F92C563E0ECD10B3009BE4BA /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				DYLIB_COMPATIBILITY_VERSION = 1;
 				DYLIB_CURRENT_VERSION = 1;
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				HEADER_SEARCH_PATHS = "../..//**";
-				INSTALL_PATH = /usr/local/lib;
+				HEADER_SEARCH_PATHS = ../..;
 				LD_DYLIB_INSTALL_NAME = "@executable_path/../Resources/$(EXECUTABLE_PATH)";
 				OTHER_LDFLAGS = (
 					"$(inherited)",
 					"-headerpad_max_install_names",
-					"-lcrypto",
 				);
-				PREBINDING = NO;
 				PRODUCT_NAME = breakpadUtilities;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		F92C56A30ECE04A8009BE4BA /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				HEADER_SEARCH_PATHS = "../..//**";
+				HEADER_SEARCH_PATHS = ../..;
 				INFOPLIST_FILE = "sender/crash_report_sender-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Foundation,
-					"-framework",
-					AppKit,
-				);
-				PREBINDING = NO;
 				PRODUCT_NAME = crash_report_sender;
 			};
 			name = Debug;
@@ -1457,181 +2085,96 @@
 		F92C56A40ECE04A8009BE4BA /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				HEADER_SEARCH_PATHS = "../..//**";
+				HEADER_SEARCH_PATHS = ../..;
 				INFOPLIST_FILE = "sender/crash_report_sender-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Foundation,
-					"-framework",
-					AppKit,
-				);
-				PREBINDING = NO;
 				PRODUCT_NAME = crash_report_sender;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		F93803C00F808210004D428B /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				INSTALL_PATH = /usr/local/bin;
-				OTHER_LDFLAGS = (
-					"-lcrypto",
-					"-framework",
-					Foundation,
-				);
-				PREBINDING = NO;
+				HEADER_SEARCH_PATHS = ../..;
 				PRODUCT_NAME = generator_test;
-				USER_HEADER_SEARCH_PATHS = ../../;
 			};
 			name = Debug;
 		};
 		F93803C10F808210004D428B /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_MODEL_TUNING = G5;
-				INSTALL_PATH = /usr/local/bin;
-				OTHER_LDFLAGS = (
-					"-lcrypto",
-					"-framework",
-					Foundation,
-				);
-				PREBINDING = NO;
+				HEADER_SEARCH_PATHS = ../..;
 				PRODUCT_NAME = generator_test;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		F93DE2D30F82A67400608B94 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_CHAR_IS_UNSIGNED_CHAR = YES;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				INSTALL_PATH = /usr/local/bin;
-				OTHER_LDFLAGS = (
-					"-framework",
-					Foundation,
-					"-framework",
-					AppKit,
-				);
-				PREBINDING = NO;
+				HEADER_SEARCH_PATHS = ../..;
 				PRODUCT_NAME = minidump_file_writer_unittest;
-				USER_HEADER_SEARCH_PATHS = ../../;
 			};
 			name = Debug;
 		};
 		F93DE2D40F82A67400608B94 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_MODEL_TUNING = G5;
-				INSTALL_PATH = /usr/local/bin;
-				OTHER_LDFLAGS = (
-					"-framework",
-					Foundation,
-					"-framework",
-					AppKit,
-				);
-				PREBINDING = NO;
+				HEADER_SEARCH_PATHS = ../..;
 				PRODUCT_NAME = minidump_file_writer_unittest;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		F93DE32E0F82C55700608B94 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				INSTALL_PATH = /usr/local/bin;
-				OTHER_LDFLAGS = (
-					"-lcrypto",
-					"-framework",
-					Foundation,
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+				GCC_PREPROCESSOR_DEFINITIONS = "BP_LOGGING_INCLUDE=\\\"client/mac/tests/testlogging.h\\\"";
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				HEADER_SEARCH_PATHS = (
+					../../..,
+					../..,
+					../../testing,
+					../../testing/include,
+					../../testing/gtest,
+					../../testing/gtest/include,
 				);
-				PREBINDING = NO;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/build/Debug\"",
+				);
 				PRODUCT_NAME = handler_test;
-				USER_HEADER_SEARCH_PATHS = ../../;
 			};
 			name = Debug;
 		};
 		F93DE32F0F82C55700608B94 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_MODEL_TUNING = G5;
-				INSTALL_PATH = /usr/local/bin;
-				OTHER_LDFLAGS = (
-					"-lcrypto",
-					"-framework",
-					Foundation,
+				HEADER_SEARCH_PATHS = ../..;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/build/Debug\"",
 				);
-				PREBINDING = NO;
 				PRODUCT_NAME = handler_test;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		F93DE3B90F830E7000608B94 /* Debug With Code Coverage */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 8B31027711F0D3AF00FCF3E4 /* BreakpadDebug.xcconfig */;
 			buildSettings = {
-				ARCHS = "$(ONLY_ACTIVE_ARCH_PRE_XCODE_3_1)";
-				GCC_C_LANGUAGE_STANDARD = c99;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				ONLY_ACTIVE_ARCH_PRE_XCODE_3_1 = "$(NATIVE_ARCH)";
-				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+				GCC_TREAT_WARNINGS_AS_ERRORS = NO;
 			};
 			name = "Debug With Code Coverage";
 		};
 		F93DE3BA0F830E7000608B94 /* Debug With Code Coverage */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
 				DYLIB_COMPATIBILITY_VERSION = 1;
 				DYLIB_CURRENT_VERSION = 1;
 				FRAMEWORK_VERSION = A;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Framework/Breakpad_Prefix.pch;
-				HEADER_SEARCH_PATHS = "../..//**";
+				HEADER_SEARCH_PATHS = ../..;
 				INFOPLIST_FILE = Framework/Info.plist;
 				INSTALL_PATH = "@executable_path/../Frameworks";
 				PRODUCT_NAME = Breakpad;
@@ -1642,19 +2185,7 @@
 		F93DE3BB0F830E7000608B94 /* Debug With Code Coverage */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				HEADER_SEARCH_PATHS = "../..//**";
-				INSTALL_PATH = /usr/local/bin;
-				OTHER_LDFLAGS = (
-					"-lcrypto",
-					"$(inherited)",
-				);
-				PREBINDING = NO;
+				HEADER_SEARCH_PATHS = ../..;
 				PRODUCT_NAME = Inspector;
 			};
 			name = "Debug With Code Coverage";
@@ -1662,24 +2193,14 @@
 		F93DE3BC0F830E7000608B94 /* Debug With Code Coverage */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
 				DYLIB_COMPATIBILITY_VERSION = 1;
 				DYLIB_CURRENT_VERSION = 1;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				HEADER_SEARCH_PATHS = "../..//**";
-				INSTALL_PATH = /usr/local/lib;
+				HEADER_SEARCH_PATHS = ../..;
 				LD_DYLIB_INSTALL_NAME = "@executable_path/../Resources/$(EXECUTABLE_PATH)";
 				OTHER_LDFLAGS = (
 					"$(inherited)",
 					"-headerpad_max_install_names",
-					"-lcrypto",
 				);
-				PREBINDING = NO;
 				PRODUCT_NAME = breakpadUtilities;
 			};
 			name = "Debug With Code Coverage";
@@ -1687,23 +2208,8 @@
 		F93DE3BD0F830E7000608B94 /* Debug With Code Coverage */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				HEADER_SEARCH_PATHS = "../..//**";
+				HEADER_SEARCH_PATHS = ../..;
 				INFOPLIST_FILE = "sender/crash_report_sender-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Foundation,
-					"-framework",
-					AppKit,
-				);
-				PREBINDING = NO;
 				PRODUCT_NAME = crash_report_sender;
 			};
 			name = "Debug With Code Coverage";
@@ -1711,24 +2217,8 @@
 		F93DE3BE0F830E7000608B94 /* Debug With Code Coverage */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
 				FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
 				INFOPLIST_FILE = testapp/Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Foundation,
-					"-framework",
-					AppKit,
-				);
-				PREBINDING = NO;
 				PRODUCT_NAME = BreakpadTest;
 			};
 			name = "Debug With Code Coverage";
@@ -1736,9 +2226,6 @@
 		F93DE3BF0F830E7000608B94 /* Debug With Code Coverage */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_OPTIMIZATION_LEVEL = 0;
 				PRODUCT_NAME = All;
 			};
 			name = "Debug With Code Coverage";
@@ -1746,28 +2233,14 @@
 		F93DE3C00F830E7000608B94 /* Debug With Code Coverage */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_GENERATE_TEST_COVERAGE_FILES = YES;
-				GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Cocoa.framework/Headers/Cocoa.h";
-				INFOPLIST_FILE = "UnitTests-Info.plist";
-				INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
-				LIBRARY_SEARCH_PATHS = ./gcov;
-				OTHER_LDFLAGS = (
-					"-lgcov",
-					"-framework",
-					Cocoa,
-					"-framework",
-					SenTestingKit,
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(DEVELOPER_FRAMEWORKS_DIR)\"",
 				);
-				PREBINDING = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				HEADER_SEARCH_PATHS = ../..;
+				INFOPLIST_FILE = "UnitTests-Info.plist";
 				PRODUCT_NAME = UnitTests;
-				USER_HEADER_SEARCH_PATHS = "../../ ../../common/mac/**";
 				WRAPPER_EXTENSION = octest;
 			};
 			name = "Debug With Code Coverage";
@@ -1775,86 +2248,34 @@
 		F93DE3C10F830E7000608B94 /* Debug With Code Coverage */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_GENERATE_TEST_COVERAGE_FILES = YES;
-				GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				INSTALL_PATH = /usr/local/bin;
-				LIBRARY_SEARCH_PATHS = ./gcov;
-				OTHER_LDFLAGS = (
-					"-lgcov",
-					"-lcrypto",
-					"-framework",
-					Foundation,
-				);
-				PREBINDING = NO;
+				HEADER_SEARCH_PATHS = ../..;
 				PRODUCT_NAME = generator_test;
-				USER_HEADER_SEARCH_PATHS = ../../;
 			};
 			name = "Debug With Code Coverage";
 		};
 		F93DE3C20F830E7000608B94 /* Debug With Code Coverage */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_CHAR_IS_UNSIGNED_CHAR = YES;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_GENERATE_TEST_COVERAGE_FILES = YES;
-				GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				INSTALL_PATH = /usr/local/bin;
-				LIBRARY_SEARCH_PATHS = ./gcov;
-				OTHER_LDFLAGS = (
-					"-lgcov",
-					"-framework",
-					Foundation,
-					"-framework",
-					AppKit,
-				);
-				PREBINDING = NO;
+				HEADER_SEARCH_PATHS = ../..;
 				PRODUCT_NAME = minidump_file_writer_unittest;
-				USER_HEADER_SEARCH_PATHS = ../../;
 			};
 			name = "Debug With Code Coverage";
 		};
 		F93DE3C30F830E7000608B94 /* Debug With Code Coverage */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_GENERATE_TEST_COVERAGE_FILES = YES;
-				GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				INSTALL_PATH = /usr/local/bin;
-				LIBRARY_SEARCH_PATHS = ./gcov;
-				OTHER_LDFLAGS = (
-					"-lcrypto",
-					"-lgcov",
-					"-framework",
-					Foundation,
+				HEADER_SEARCH_PATHS = ../..;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/build/Debug\"",
 				);
-				PREBINDING = NO;
 				PRODUCT_NAME = handler_test;
-				USER_HEADER_SEARCH_PATHS = ../../;
 			};
 			name = "Debug With Code Coverage";
 		};
 		F94585850F782326009A47BF /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_OPTIMIZATION_LEVEL = 0;
 				PRODUCT_NAME = All;
 			};
 			name = Debug;
@@ -1862,35 +2283,15 @@
 		F94585860F782326009A47BF /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				PRODUCT_NAME = All;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		F9C44DA80EF060A8003AEBAA /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
 				FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
 				INFOPLIST_FILE = testapp/Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Foundation,
-					"-framework",
-					AppKit,
-				);
-				PREBINDING = NO;
 				PRODUCT_NAME = BreakpadTest;
 			};
 			name = Debug;
@@ -1898,46 +2299,22 @@
 		F9C44DA90EF060A8003AEBAA /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				INFOPLIST_FILE = testapp/Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Foundation,
-					"-framework",
-					AppKit,
-				);
-				PREBINDING = NO;
 				PRODUCT_NAME = BreakpadTest;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		F9C77DDC0F7DD5D00045F7DB /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Cocoa.framework/Headers/Cocoa.h";
-				INFOPLIST_FILE = "UnitTests-Info.plist";
-				INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-					"-framework",
-					SenTestingKit,
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(DEVELOPER_FRAMEWORKS_DIR)\"",
 				);
-				PREBINDING = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				INFOPLIST_FILE = "UnitTests-Info.plist";
 				PRODUCT_NAME = UnitTests;
-				USER_HEADER_SEARCH_PATHS = "../../ ../../common/mac/**";
 				WRAPPER_EXTENSION = octest;
 			};
 			name = Debug;
@@ -1945,25 +2322,14 @@
 		F9C77DDD0F7DD5D00045F7DB /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_MODEL_TUNING = G5;
-				INFOPLIST_FILE = "UnitTests-Info.plist";
-				INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-					"-framework",
-					SenTestingKit,
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(DEVELOPER_FRAMEWORKS_DIR)\"",
 				);
-				PREBINDING = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				INFOPLIST_FILE = "UnitTests-Info.plist";
 				PRODUCT_NAME = UnitTests;
 				WRAPPER_EXTENSION = octest;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
@@ -1990,6 +2356,26 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
+		D2F9A42D12131F0E002747C1 /* Build configuration list for PBXNativeTarget "gtest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D2F9A41612131EF0002747C1 /* Debug */,
+				D2F9A41712131EF0002747C1 /* Debug With Code Coverage */,
+				D2F9A41812131EF0002747C1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		D2F9A542121383A1002747C1 /* Build configuration list for PBXNativeTarget "crash_generation_server_test" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D2F9A543121383A1002747C1 /* Debug */,
+				D2F9A544121383A1002747C1 /* Debug With Code Coverage */,
+				D2F9A545121383A1002747C1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 		F92C53580ECCE36D009BE4BA /* Build configuration list for PBXNativeTarget "Inspector" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
diff --git a/src/client/mac/Framework/Breakpad.h b/src/client/mac/Framework/Breakpad.h
index 6b5ce66..52ea6c6 100644
--- a/src/client/mac/Framework/Breakpad.h
+++ b/src/client/mac/Framework/Breakpad.h
@@ -110,16 +110,19 @@
 // Key:                           Value:
 // BREAKPAD_PRODUCT               Product name (e.g., "MyAwesomeProduct")
 //                                This one is used as the key to identify
-//                                the product when uploading
+//                                the product when uploading. Falls back to
+//                                CFBundleName if not specified.
 //                                REQUIRED
 //
 // BREAKPAD_PRODUCT_DISPLAY       This is the display name, e.g. a pretty
 //                                name for the product when the crash_sender
-//                                pops up UI for the user.  Falls back to
+//                                pops up UI for the user. Falls back first to
+//                                CFBundleDisplayName and then to
 //                                BREAKPAD_PRODUCT if not specified.
 //
 // BREAKPAD_VERSION               Product version (e.g., 1.2.3), used
-//                                as metadata for crash report
+//                                as metadata for crash report. Falls back to
+//                                CFBundleVersion if not specified.
 //                                REQUIRED
 //
 // BREAKPAD_VENDOR                Vendor name, used in UI (e.g. "A report has
diff --git a/src/client/mac/Framework/Breakpad.mm b/src/client/mac/Framework/Breakpad.mm
index 23e5d9b..12b5f28 100644
--- a/src/client/mac/Framework/Breakpad.mm
+++ b/src/client/mac/Framework/Breakpad.mm
@@ -55,6 +55,10 @@
 
 
 using google_breakpad::KeyValueEntry;
+using google_breakpad::MachPortSender;
+using google_breakpad::MachReceiveMessage;
+using google_breakpad::MachSendMessage;
+using google_breakpad::ReceivePort;
 using google_breakpad::SimpleStringDictionary;
 using google_breakpad::SimpleStringDictionaryIterator;
 
@@ -164,7 +168,7 @@
     : handler_(NULL),
       config_params_(NULL),
       send_and_exit_(true),
-      filter_callback_(NULL), 
+      filter_callback_(NULL),
       filter_callback_context_(NULL) {
     inspector_path_[0] = 0;
   }
@@ -265,7 +269,7 @@
 //=============================================================================
 #pragma mark -
 
-#include <mach-o/dyld.h>
+#include <dlfcn.h>
 
 //=============================================================================
 // Returns the pathname to the Resources directory for this version of
@@ -286,28 +290,21 @@
   //
 
   // Get the pathname to the code which contains this function
-  void *address = nil;
-  NSModule module = nil;
-  _dyld_lookup_and_bind_fully("_GetResourcePath",
-                              &address,
-                              &module);
-
-  if (module && address) {
-    const char* moduleName = NSNameOfModule(module);
-    if (moduleName) {
-      // The "Resources" directory should be in the same directory as the
-      // executable code, since that's how the Breakpad framework is built.
-      resourcePath = [NSString stringWithUTF8String:moduleName];
-      resourcePath = [resourcePath stringByDeletingLastPathComponent];
-      resourcePath = [resourcePath stringByAppendingPathComponent:@"Resources/"];
-     } else {
-      DEBUGLOG(stderr, "Missing moduleName\n");
-    }
+  Dl_info info;
+  if (dladdr((const void*)GetResourcePath, &info) != 0) {
+    NSFileManager *filemgr = [NSFileManager defaultManager];
+    NSString *filePath =
+        [filemgr stringWithFileSystemRepresentation:info.dli_fname
+                                             length:strlen(info.dli_fname)];
+    NSString *bundlePath = [filePath stringByDeletingLastPathComponent];
+    // The "Resources" directory should be in the same directory as the
+    // executable code, since that's how the Breakpad framework is built.
+    resourcePath = [bundlePath stringByAppendingPathComponent:@"Resources/"];
   } else {
     DEBUGLOG(stderr, "Could not find GetResourcePath\n");
     // fallback plan
     NSBundle *bundle =
-      [NSBundle bundleWithIdentifier:@"com.Google.BreakpadFramework"];
+        [NSBundle bundleWithIdentifier:@"com.Google.BreakpadFramework"];
     resourcePath = [bundle resourcePath];
   }
 
@@ -371,9 +368,10 @@
 
   // Create the handler (allocating it in our special protected pool)
   handler_ =
-    new (gBreakpadAllocator->Allocate(sizeof(google_breakpad::ExceptionHandler)))
-      google_breakpad::ExceptionHandler(
-        Breakpad::ExceptionHandlerDirectCallback, this, true);
+      new (gBreakpadAllocator->Allocate(
+          sizeof(google_breakpad::ExceptionHandler)))
+          google_breakpad::ExceptionHandler(
+              Breakpad::ExceptionHandlerDirectCallback, this, true);
   return true;
 }
 
@@ -403,22 +401,23 @@
   NSString *urlStr = [parameters objectForKey:@BREAKPAD_URL];
   NSString *interval = [parameters objectForKey:@BREAKPAD_REPORT_INTERVAL];
   NSString *inspectorPathString =
-                [parameters objectForKey:@BREAKPAD_INSPECTOR_LOCATION];
+      [parameters objectForKey:@BREAKPAD_INSPECTOR_LOCATION];
   NSString *reporterPathString =
-                [parameters objectForKey:@BREAKPAD_REPORTER_EXE_LOCATION];
+      [parameters objectForKey:@BREAKPAD_REPORTER_EXE_LOCATION];
   NSString *timeout = [parameters objectForKey:@BREAKPAD_CONFIRM_TIMEOUT];
   NSArray  *logFilePaths = [parameters objectForKey:@BREAKPAD_LOGFILES];
-  NSString *logFileTailSize = [parameters objectForKey:@BREAKPAD_LOGFILE_UPLOAD_SIZE];
+  NSString *logFileTailSize =
+      [parameters objectForKey:@BREAKPAD_LOGFILE_UPLOAD_SIZE];
   NSString *requestUserText =
-                [parameters objectForKey:@BREAKPAD_REQUEST_COMMENTS];
+      [parameters objectForKey:@BREAKPAD_REQUEST_COMMENTS];
   NSString *requestEmail = [parameters objectForKey:@BREAKPAD_REQUEST_EMAIL];
   NSString *vendor =
-    [parameters objectForKey:@BREAKPAD_VENDOR];
+      [parameters objectForKey:@BREAKPAD_VENDOR];
   NSString *dumpSubdirectory =
-    [parameters objectForKey:@BREAKPAD_DUMP_DIRECTORY];
+      [parameters objectForKey:@BREAKPAD_DUMP_DIRECTORY];
 
-  NSDictionary *serverParameters = 
-    [parameters objectForKey:@BREAKPAD_SERVER_PARAMETER_DICT];
+  NSDictionary *serverParameters =
+      [parameters objectForKey:@BREAKPAD_SERVER_PARAMETER_DICT];
 
   // These may have been set above as user prefs, which take priority.
   if (!skipConfirm) {
@@ -431,8 +430,12 @@
   if (!product)
     product = [parameters objectForKey:@"CFBundleName"];
 
-  if (!display)
-    display = product;
+  if (!display) {
+    display = [parameters objectForKey:@"CFBundleDisplayName"];
+    if (!display) {
+      display = product;
+    }
+  }
 
   if (!version)
     version = [parameters objectForKey:@"CFBundleVersion"];
@@ -512,8 +515,10 @@
   // Find Reporter.
   if (!reporterPathString) {
     reporterPathString =
-      [resourcePath stringByAppendingPathComponent:@"crash_report_sender.app"];
-    reporterPathString = [[NSBundle bundleWithPath:reporterPathString] executablePath];
+        [resourcePath
+         stringByAppendingPathComponent:@"crash_report_sender.app"];
+    reporterPathString =
+        [[NSBundle bundleWithPath:reporterPathString] executablePath];
   }
 
   // Verify that there is a Reporter application.
@@ -558,9 +563,9 @@
   dictionary.SetKeyValue(BREAKPAD_SKIP_CONFIRM,    [skipConfirm UTF8String]);
   dictionary.SetKeyValue(BREAKPAD_CONFIRM_TIMEOUT, [timeout UTF8String]);
   dictionary.SetKeyValue(BREAKPAD_INSPECTOR_LOCATION,
-                           [inspectorPathString fileSystemRepresentation]);
+                         [inspectorPathString fileSystemRepresentation]);
   dictionary.SetKeyValue(BREAKPAD_REPORTER_EXE_LOCATION,
-                           [reporterPathString fileSystemRepresentation]);
+                         [reporterPathString fileSystemRepresentation]);
   dictionary.SetKeyValue(BREAKPAD_LOGFILE_UPLOAD_SIZE,
                          [logFileTailSize UTF8String]);
   dictionary.SetKeyValue(BREAKPAD_REQUEST_COMMENTS,
@@ -569,11 +574,11 @@
   dictionary.SetKeyValue(BREAKPAD_VENDOR, [vendor UTF8String]);
   dictionary.SetKeyValue(BREAKPAD_DUMP_DIRECTORY,
                          [dumpSubdirectory UTF8String]);
-  
+
   struct timeval tv;
   gettimeofday(&tv, NULL);
   char timeStartedString[32];
-  sprintf(timeStartedString, "%d", tv.tv_sec);
+  sprintf(timeStartedString, "%zd", tv.tv_sec);
   dictionary.SetKeyValue(BREAKPAD_PROCESS_START_TIME,
                          timeStartedString);
 
@@ -591,7 +596,7 @@
     // For each key-value pair, call BreakpadAddUploadParameter()
     NSEnumerator *keyEnumerator = [serverParameters keyEnumerator];
     NSString *aParameter;
-    while (aParameter = [keyEnumerator nextObject]) {
+    while ((aParameter = [keyEnumerator nextObject])) {
       BreakpadAddUploadParameter(this, aParameter,
 				 [serverParameters objectForKey:aParameter]);
     }
@@ -600,7 +605,7 @@
 }
 
 //=============================================================================
-void        Breakpad::SetKeyValue(NSString *key, NSString *value) {
+void Breakpad::SetKeyValue(NSString *key, NSString *value) {
   // We allow nil values. This is the same as removing the keyvalue.
   if (!config_params_ || !key)
     return;
@@ -609,7 +614,7 @@
 }
 
 //=============================================================================
-NSString *  Breakpad::KeyValue(NSString *key) {
+NSString *Breakpad::KeyValue(NSString *key) {
   if (!config_params_ || !key)
     return nil;
 
@@ -618,25 +623,24 @@
 }
 
 //=============================================================================
-void        Breakpad::RemoveKeyValue(NSString *key) {
-  if (!config_params_ || !key)
-    return;
+void Breakpad::RemoveKeyValue(NSString *key) {
+  if (!config_params_ || !key) return;
 
   config_params_->RemoveKey([key UTF8String]);
 }
 
 //=============================================================================
-void        Breakpad::GenerateAndSendReport() {
+void Breakpad::GenerateAndSendReport() {
   config_params_->SetKeyValue(BREAKPAD_ON_DEMAND, "YES");
-  HandleException(0, 0, 0, mach_thread_self()); 
+  HandleException(0, 0, 0, mach_thread_self());
   config_params_->SetKeyValue(BREAKPAD_ON_DEMAND, "NO");
 }
 
 //=============================================================================
-bool Breakpad::HandleException(int           exception_type,
-                               int           exception_code,
-                               int           exception_subcode,
-                               mach_port_t   crashing_thread) {
+bool Breakpad::HandleException(int exception_type,
+                               int exception_code,
+                               int exception_subcode,
+                               mach_port_t crashing_thread) {
   DEBUGLOG(stderr, "Breakpad: an exception occurred\n");
 
   if (filter_callback_) {
@@ -712,8 +716,7 @@
 
   // If we don't want any forwarding, return true here to indicate that we've
   // processed things as much as we want.
-  if (send_and_exit_)
-    return true;
+  if (send_and_exit_) return true;
 
   return false;
 }
@@ -739,11 +742,11 @@
     // since once it does its allocations and locks the memory, smashes to itself
     // don't affect anything we care about.
     gMasterAllocator =
-      new ProtectedMemoryAllocator(sizeof(ProtectedMemoryAllocator) * 2);
+        new ProtectedMemoryAllocator(sizeof(ProtectedMemoryAllocator) * 2);
 
     gKeyValueAllocator =
-      new (gMasterAllocator->Allocate(sizeof(ProtectedMemoryAllocator)))
-        ProtectedMemoryAllocator(sizeof(SimpleStringDictionary));
+        new (gMasterAllocator->Allocate(sizeof(ProtectedMemoryAllocator)))
+            ProtectedMemoryAllocator(sizeof(SimpleStringDictionary));
 
     // Create a mutex for use in accessing the SimpleStringDictionary
     int mutexResult = pthread_mutex_init(&gDictionaryMutex, NULL);
@@ -761,8 +764,8 @@
        */
 
       gBreakpadAllocator =
-        new (gMasterAllocator->Allocate(sizeof(ProtectedMemoryAllocator)))
-          ProtectedMemoryAllocator(breakpad_pool_size);
+          new (gMasterAllocator->Allocate(sizeof(ProtectedMemoryAllocator)))
+              ProtectedMemoryAllocator(breakpad_pool_size);
 
       // Stack-based autorelease pool for Breakpad::Create() obj-c code.
       NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
diff --git a/src/client/mac/Framework/OnDemandServer.mm b/src/client/mac/Framework/OnDemandServer.mm
index 11b126c..3868546 100644
--- a/src/client/mac/Framework/OnDemandServer.mm
+++ b/src/client/mac/Framework/OnDemandServer.mm
@@ -116,7 +116,7 @@
   // and holding on to this port delays launching until the current process
   // exits!
   mach_port_deallocate(mach_task_self(), server_port_);
-  server_port_ = NULL;
+  server_port_ = MACH_PORT_DEAD;
 
   // Now, the service is still registered and all we need to do is send
   // a mach message to the service port in order to launch the server.
diff --git a/src/client/mac/crash_generation/Inspector.mm b/src/client/mac/crash_generation/Inspector.mm
index d328ee5..a893085 100644
--- a/src/client/mac/crash_generation/Inspector.mm
+++ b/src/client/mac/crash_generation/Inspector.mm
@@ -44,6 +44,8 @@
 #import "common/mac/SimpleStringDictionary.h"
 #import "common/mac/MachIPC.h"
 
+#import "GTMDefines.h"
+
 #import <Foundation/Foundation.h>
 
 #if VERBOSE
@@ -91,14 +93,14 @@
   // Break up the difference into components
   NSString *diff = [dirPath substringFromIndex:[common length] + 1];
   NSArray *components = [diff pathComponents];
-  unsigned count = [components count];
+  NSUInteger count = [components count];
 
   // Rebuild the path one component at a time
   NSDictionary *attrs =
     [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedLong:0750]
                                 forKey:NSFilePosixPermissions];
   path = common;
-  for (unsigned i = 0; i < count; ++i) {
+  for (NSUInteger i = 0; i < count; ++i) {
     path = [path stringByAppendingPathComponent:[components objectAtIndex:i]];
 
     if (![mgr createDirectoryAtPath:path attributes:attrs])
@@ -329,12 +331,12 @@
     // we are expected to read.
     // Read each key/value pair, one mach message per key/value pair.
     for (unsigned int i = 0; i < info.parameter_count; ++i) {
-      MachReceiveMessage message;
-      result = receive_port.WaitForMessage(&message, 1000);
+      MachReceiveMessage parameter_message;
+      result = receive_port.WaitForMessage(&parameter_message, 1000);
 
       if(result == KERN_SUCCESS) {
         KeyValueMessageData &key_value_data =
-          (KeyValueMessageData&)*message.GetData();
+          (KeyValueMessageData&)*parameter_message.GetData();
         // If we get a blank key, make sure we don't increment the
         // parameter count; in some cases (notably on-demand generation
         // many times in a short period of time) caused the Mach IPC
@@ -376,11 +378,11 @@
   if (processStartTimeString) {
     time_t processStartTime = strtol(processStartTimeString, NULL, 10);
     time_t processUptime = tv.tv_sec - processStartTime;
-    sprintf(processUptimeString, "%d", processUptime);
+    sprintf(processUptimeString, "%zd", processUptime);
     config_params_.SetKeyValue(BREAKPAD_PROCESS_UP_TIME, processUptimeString);
   }
 
-  sprintf(processCrashtimeString, "%d", tv.tv_sec);
+  sprintf(processCrashtimeString, "%zd", tv.tv_sec);
   config_params_.SetKeyValue(BREAKPAD_PROCESS_CRASH_TIME,
                              processCrashtimeString);
 }
diff --git a/src/client/windows/tests/crash_generation_app/precompile.cc b/src/client/mac/crash_generation/client_info.h
similarity index 78%
copy from src/client/windows/tests/crash_generation_app/precompile.cc
copy to src/client/mac/crash_generation/client_info.h
index 9d2173c..a3a95dc 100644
--- a/src/client/windows/tests/crash_generation_app/precompile.cc
+++ b/src/client/mac/crash_generation/client_info.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2008, Google Inc.
+// Copyright (c) 2010 Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -27,11 +27,21 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// precompile.cpp : source file that includes just the standard includes
-// CrashGenerationApp.pch will be the pre-compiled header
-// precompile.obj will contain the pre-compiled type information
+#ifndef CLIENT_MAC_CRASH_GENERATION_CLIENT_INFO_H_
+#define CLIENT_MAC_CRASH_GENERATION_CLIENT_INFO_H_
 
-#include "precompile.h"
+namespace google_breakpad {
 
-// Reference any additional headers you need in PRECOMPILE.H
-// and not in this file.
+class ClientInfo {
+ public:
+  explicit ClientInfo(pid_t pid) : pid_(pid) {}
+
+  pid_t pid() const { return pid_; }
+
+ private:
+  pid_t pid_;
+};
+
+}  // namespace google_breakpad
+
+#endif  // CLIENT_MAC_CRASH_GENERATION_CLIENT_INFO_H_
diff --git a/src/client/mac/crash_generation/crash_generation_client.cc b/src/client/mac/crash_generation/crash_generation_client.cc
new file mode 100644
index 0000000..0742887
--- /dev/null
+++ b/src/client/mac/crash_generation/crash_generation_client.cc
@@ -0,0 +1,73 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "client/mac/crash_generation/crash_generation_client.h"
+
+#include "client/mac/crash_generation/crash_generation_server.h"
+#include "common/mac/MachIPC.h"
+
+namespace google_breakpad {
+
+bool CrashGenerationClient::RequestDumpForException(
+    int exception_type,
+    int exception_code,
+    int exception_subcode,
+    mach_port_t crashing_thread) {
+  // The server will send a message to this port indicating that it
+  // has finished its work.
+  ReceivePort acknowledge_port;
+
+  MachSendMessage message(kDumpRequestMessage);
+  message.AddDescriptor(mach_task_self());            // this task
+  message.AddDescriptor(crashing_thread);             // crashing thread
+  message.AddDescriptor(mach_thread_self());          // handler thread
+  message.AddDescriptor(acknowledge_port.GetPort());  // message receive port
+
+  ExceptionInfo info;
+  info.exception_type = exception_type;
+  info.exception_code = exception_code;
+  info.exception_subcode = exception_subcode;
+  message.SetData(&info, sizeof(info));
+  
+  const mach_msg_timeout_t kSendTimeoutMs = 2 * 1000;
+  kern_return_t result = sender_.SendMessage(message, kSendTimeoutMs);
+  if (result != KERN_SUCCESS)
+    return false;
+
+  // Give the server slightly longer to reply since it has to
+  // inspect this task and write the minidump.
+  const mach_msg_timeout_t kReceiveTimeoutMs = 5 * 1000;
+  MachReceiveMessage acknowledge_message;
+  result = acknowledge_port.WaitForMessage(&acknowledge_message,
+					   kReceiveTimeoutMs);
+  
+  return result == KERN_SUCCESS;
+}
+
+}  // namespace google_breakpad
diff --git a/src/client/mac/crash_generation/crash_generation_client.h b/src/client/mac/crash_generation/crash_generation_client.h
new file mode 100644
index 0000000..527f577
--- /dev/null
+++ b/src/client/mac/crash_generation/crash_generation_client.h
@@ -0,0 +1,65 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef GOOGLE_BREAKPAD_CLIENT_MAC_CRASH_GENERATION_CRASH_GENERATION_CLIENT_H_
+#define GOOGLE_BREAKPAD_CLIENT_MAC_CRASH_GENERATION_CRASH_GENERATION_CLIENT_H_
+
+#include "common/mac/MachIPC.h"
+
+namespace google_breakpad {
+
+class CrashGenerationClient {
+ public:
+  explicit CrashGenerationClient(const char* mach_port_name)
+    : sender_(mach_port_name) {
+  }
+
+  // Request the crash server to generate a dump.
+  //
+  // Return true if the dump was successful; false otherwise.
+  bool RequestDumpForException(int exception_type,
+			       int exception_code,
+			       int exception_subcode,
+			       mach_port_t crashing_thread);
+
+  bool RequestDump() {
+    return RequestDumpForException(0, 0, 0, MACH_PORT_NULL);
+  }
+
+ private:
+  MachPortSender sender_;
+
+  // Prevent copy construction and assignment.
+  CrashGenerationClient(const CrashGenerationClient&);
+  CrashGenerationClient& operator=(const CrashGenerationClient&);
+};
+
+}  // namespace google_breakpad
+
+#endif  // GOOGLE_BREAKPAD_CLIENT_MAC_CRASH_GENERATION_CRASH_GENERATION_CLIENT_H_
diff --git a/src/client/mac/crash_generation/crash_generation_server.cc b/src/client/mac/crash_generation/crash_generation_server.cc
new file mode 100644
index 0000000..44548ef
--- /dev/null
+++ b/src/client/mac/crash_generation/crash_generation_server.cc
@@ -0,0 +1,160 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "client/mac/crash_generation/crash_generation_server.h"
+
+#include "client/mac/crash_generation/client_info.h"
+#include "client/mac/handler/minidump_generator.h"
+#include "common/mac/scoped_task_suspend-inl.h"
+
+namespace google_breakpad {
+
+CrashGenerationServer::CrashGenerationServer(
+    const char *mach_port_name,
+    OnClientDumpRequestCallback dump_callback,
+    void *dump_context,
+    OnClientExitingCallback exit_callback,
+    void *exit_context,
+    bool generate_dumps,
+    const std::string &dump_path)
+    : dump_callback_(dump_callback),
+      dump_context_(dump_context),
+      exit_callback_(exit_callback),
+      exit_context_(exit_context),
+      generate_dumps_(generate_dumps),
+      dump_dir_(dump_path.empty() ? "/tmp" : dump_path),
+      started_(false),
+      receive_port_(mach_port_name),
+      mach_port_name_(mach_port_name) {
+}
+
+CrashGenerationServer::~CrashGenerationServer() {
+  if (started_)
+    Stop();
+}
+
+bool CrashGenerationServer::Start() {
+  int thread_create_result = pthread_create(&server_thread_, NULL,
+                                            &WaitForMessages, this);
+  started_ = thread_create_result == 0;
+  return started_;
+}
+
+bool CrashGenerationServer::Stop() {
+  if (!started_)
+    return false;
+
+  // Send a quit message to the background thread, and then join it.
+  MachPortSender sender(mach_port_name_.c_str());
+  MachSendMessage quit_message(kQuitMessage);
+  const mach_msg_timeout_t kSendTimeoutMs = 2 * 1000;
+  kern_return_t result = sender.SendMessage(quit_message, kSendTimeoutMs);
+  if (result == KERN_SUCCESS) {
+    int thread_join_result = pthread_join(server_thread_, NULL);
+    started_ = thread_join_result != 0;
+  }
+
+  return !started_;
+}
+
+// static
+void *CrashGenerationServer::WaitForMessages(void *server) {
+  CrashGenerationServer *self =
+      reinterpret_cast<CrashGenerationServer*>(server);
+  while (self->WaitForOneMessage()) {}
+  return NULL;
+}
+
+bool CrashGenerationServer::WaitForOneMessage() {
+  MachReceiveMessage message;
+  kern_return_t result = receive_port_.WaitForMessage(&message,
+                                                      MACH_MSG_TIMEOUT_NONE);
+  if (result == KERN_SUCCESS) {
+    switch (message.GetMessageID()) {
+      case kDumpRequestMessage: {
+        ExceptionInfo &info = (ExceptionInfo &)*message.GetData();
+      
+        mach_port_t remote_task = message.GetTranslatedPort(0);
+        mach_port_t crashing_thread = message.GetTranslatedPort(1);
+        mach_port_t handler_thread = message.GetTranslatedPort(2);
+        mach_port_t ack_port = message.GetTranslatedPort(3);
+        pid_t remote_pid = -1;
+        pid_for_task(remote_task, &remote_pid);
+        ClientInfo client(remote_pid);
+
+        bool result;
+        std::string dump_path;
+        if (generate_dumps_) {
+          ScopedTaskSuspend suspend(remote_task);
+
+          MinidumpGenerator generator(remote_task, handler_thread);
+          dump_path = generator.UniqueNameInDirectory(dump_dir_, NULL);
+        
+          if (info.exception_type && info.exception_code) {
+            generator.SetExceptionInformation(info.exception_type,
+                                              info.exception_code,
+                                              info.exception_subcode,
+                                              crashing_thread);
+          }
+          result = generator.Write(dump_path.c_str());
+        } else {
+          result = true;
+        }
+
+        if (result && dump_callback_) {
+          dump_callback_(dump_context_, client, dump_path);
+        }
+
+        // TODO(ted): support a way for the client to send additional data,
+        // perhaps with a callback so users of the server can read the data
+        // themselves?
+      
+        if (ack_port != MACH_PORT_DEAD && ack_port != MACH_PORT_NULL) {
+          MachPortSender sender(ack_port);
+          MachSendMessage ack_message(kAcknowledgementMessage);
+          const mach_msg_timeout_t kSendTimeoutMs = 2 * 1000;
+
+          sender.SendMessage(ack_message, kSendTimeoutMs);
+        }
+
+        if (exit_callback_) {
+          exit_callback_(exit_context_, client);
+        }
+        break;
+      }
+      case kQuitMessage:
+        return false;
+    }
+  } else {  // result != KERN_SUCCESS
+    return false;
+  }
+  return true;
+}
+
+}  // namespace google_breakpad
diff --git a/src/client/mac/crash_generation/crash_generation_server.h b/src/client/mac/crash_generation/crash_generation_server.h
new file mode 100644
index 0000000..e174f9d
--- /dev/null
+++ b/src/client/mac/crash_generation/crash_generation_server.h
@@ -0,0 +1,139 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef GOOGLE_BREAKPAD_CLIENT_MAC_CRASH_GENERATION_CRASH_GENERATION_SERVER_H_
+#define GOOGLE_BREAKPAD_CLIENT_MAC_CRASH_GENERATION_CRASH_GENERATION_SERVER_H_
+
+#include <string>
+
+#include "common/mac/MachIPC.h"
+
+namespace google_breakpad {
+
+class ClientInfo;
+
+// Messages the server can read via its mach port
+enum {
+  kDumpRequestMessage     = 1,
+  kAcknowledgementMessage = 2,
+  kQuitMessage            = 3
+};
+
+// Exception details sent by the client when requesting a dump.
+struct ExceptionInfo {
+  int exception_type;
+  int exception_code;
+  int exception_subcode;
+};
+
+class CrashGenerationServer {
+ public:
+  // WARNING: callbacks may be invoked on a different thread
+  // than that which creates the CrashGenerationServer.  They must
+  // be thread safe.
+  typedef void (*OnClientDumpRequestCallback)(void *context,
+                                              const ClientInfo &client_info,
+                                              const std::string &file_path);
+
+  typedef void (*OnClientExitingCallback)(void *context,
+                                          const ClientInfo &client_info);
+
+  // Create an instance with the given parameters.
+  //
+  // mach_port_name: Named server port to listen on.
+  // dump_callback: Callback for a client crash dump request.
+  // dump_context: Context for client crash dump request callback.
+  // exit_callback: Callback for client process exit.
+  // exit_context: Context for client exit callback.
+  // generate_dumps: Whether to automatically generate dumps.
+  //     Client code of this class might want to generate dumps explicitly
+  //     in the crash dump request callback. In that case, false can be
+  //     passed for this parameter.
+  // dump_path: Path for generating dumps; required only if true is
+  //     passed for generateDumps parameter; NULL can be passed otherwise.
+  CrashGenerationServer(const char *mach_port_name,
+                        OnClientDumpRequestCallback dump_callback,
+                        void *dump_context,
+                        OnClientExitingCallback exit_callback,
+                        void *exit_context,
+                        bool generate_dumps,
+                        const std::string &dump_path);
+
+  ~CrashGenerationServer();
+
+  // Perform initialization steps needed to start listening to clients.
+  //
+  // Return true if initialization is successful; false otherwise.
+  bool Start();
+
+  // Stop the server.
+  bool Stop();
+
+ private:
+  // Return a unique filename at which a minidump can be written.
+  bool MakeMinidumpFilename(std::string &outFilename);
+
+  // Loop reading client messages and responding to them until
+  // a quit message is received.
+  static void *WaitForMessages(void *server);
+
+  // Wait for a single client message and respond to it. Returns false
+  // if a quit message was received or if an error occurred.
+  bool WaitForOneMessage();
+
+  OnClientDumpRequestCallback dump_callback_;
+  void *dump_context_;
+
+  OnClientExitingCallback exit_callback_;
+  void *exit_context_;
+
+  bool generate_dumps_;
+
+  std::string dump_dir_;
+
+  bool started_;
+
+  // The mach port that receives requests to dump from child processes.
+  ReceivePort receive_port_;
+
+  // The name of the mach port. Stored so the Stop method can message
+  // the background thread to shut it down.
+  std::string mach_port_name_;
+
+  // The thread that waits on the receive port.
+  pthread_t server_thread_;
+
+  // Disable copy constructor and operator=.
+  CrashGenerationServer(const CrashGenerationServer&);
+  CrashGenerationServer& operator=(const CrashGenerationServer&);
+};
+
+}  // namespace google_breakpad
+
+#endif  // GOOGLE_BREAKPAD_CLIENT_MAC_CRASH_GENERATION_CRASH_GENERATION_SERVER_H_
diff --git a/src/client/mac/handler/breakpad_nlist_64.cc b/src/client/mac/handler/breakpad_nlist_64.cc
index c220d88..4b655c7 100644
--- a/src/client/mac/handler/breakpad_nlist_64.cc
+++ b/src/client/mac/handler/breakpad_nlist_64.cc
@@ -137,7 +137,7 @@
   breakpad_nlist space[BUFSIZ/sizeof (breakpad_nlist)];
 
   const register char *s1, *s2;
-  register int n, m;
+  register register_t n, m;
   int maxlen, nreq;
   off_t sa;             /* symbol address */
   off_t ss;             /* start of strings */
@@ -160,14 +160,14 @@
       (N_BADMAG(buf) && *((long *)&buf) != MH_MAGIC &&
        NXSwapBigLongToHost(*((long *)&buf)) != FAT_MAGIC) &&
       /* nealsid: The following is the big-endian ppc64 check */
-      (*((uint32_t*)&buf)) != FAT_MAGIC) {
+      (*((long*)&buf)) != FAT_MAGIC) {
     return (-1);
   }
 
   /* Deal with fat file if necessary */
   if (NXSwapBigLongToHost(*((long *)&buf)) == FAT_MAGIC ||
       /* nealsid: The following is the big-endian ppc64 check */
-      *((int*)&buf) == FAT_MAGIC) {
+      *((unsigned int *)&buf) == FAT_MAGIC) {
     struct host_basic_info hbi;
     struct fat_header fh;
     struct fat_arch *fat_archs, *fap;
@@ -191,7 +191,7 @@
     }
 
     /* Convert fat_narchs to host byte order */
-    fh.nfat_arch = NXSwapBigLongToHost(fh.nfat_arch);
+    fh.nfat_arch = NXSwapBigIntToHost(fh.nfat_arch);
 
     /* Read in the fat archs */
     fat_archs = (struct fat_arch *)malloc(fh.nfat_arch *
@@ -201,7 +201,7 @@
     }
     if (read(fd, (char *)fat_archs,
              sizeof(struct fat_arch) * fh.nfat_arch) !=
-        sizeof(struct fat_arch) * fh.nfat_arch) {
+        (ssize_t)sizeof(struct fat_arch) * fh.nfat_arch) {
       free(fat_archs);
       return (-1);
     }
@@ -212,15 +212,15 @@
      */
     for (i = 0; i < fh.nfat_arch; i++) {
       fat_archs[i].cputype =
-        NXSwapBigLongToHost(fat_archs[i].cputype);
+        NXSwapBigIntToHost(fat_archs[i].cputype);
       fat_archs[i].cpusubtype =
-        NXSwapBigLongToHost(fat_archs[i].cpusubtype);
+        NXSwapBigIntToHost(fat_archs[i].cpusubtype);
       fat_archs[i].offset =
-        NXSwapBigLongToHost(fat_archs[i].offset);
+        NXSwapBigIntToHost(fat_archs[i].offset);
       fat_archs[i].size =
-        NXSwapBigLongToHost(fat_archs[i].size);
+        NXSwapBigIntToHost(fat_archs[i].size);
       fat_archs[i].align =
-        NXSwapBigLongToHost(fat_archs[i].align);
+        NXSwapBigIntToHost(fat_archs[i].align);
     }
 
     fap = NULL;
@@ -257,7 +257,7 @@
       }
     }
 
-    if (*((int *)&buf) == MH_MAGIC_64) {
+    if (*((unsigned int *)&buf) == MH_MAGIC_64) {
       struct mach_header_64 mh;
       struct load_command *load_commands, *lcp;
       struct symtab_command *stp;
diff --git a/src/client/mac/handler/dynamic_images.cc b/src/client/mac/handler/dynamic_images.cc
index ac1cca4..1d5f1f9 100644
--- a/src/client/mac/handler/dynamic_images.cc
+++ b/src/client/mac/handler/dynamic_images.cc
@@ -34,6 +34,7 @@
 }
 
 #include "breakpad_nlist_64.h"
+#include <assert.h>
 #include <dlfcn.h>
 #include <mach/mach_vm.h>
 #include <algorithm>
@@ -129,7 +130,7 @@
       size_to_end > kMaxStringLength ? kMaxStringLength : size_to_end;
 
     kern_return_t kr;
-    return ReadTaskMemory(target_task, address, size_to_read, &kr);
+    return ReadTaskMemory(target_task, address, (size_t)size_to_read, &kr);
   }
 
   return NULL;
@@ -276,13 +277,11 @@
 //==============================================================================
 // Loads information about dynamically loaded code in the given task.
 DynamicImages::DynamicImages(mach_port_t task)
-  : task_(task) {
+  : task_(task), image_list_() {
   ReadImageInfoForTask();
 }
 
-void* DynamicImages::GetDyldAllImageInfosPointer()
-{
-
+void* DynamicImages::GetDyldAllImageInfosPointer() {
   const char *imageSymbolName = "_dyld_all_image_infos";
   const char *dyldPath = "/usr/lib/dyld";
 #ifndef __LP64__
@@ -364,7 +363,7 @@
         // Now determine the total amount we really want to read based on the
         // size of the load commands.  We need the header plus all of the
         // load commands.
-        unsigned int header_size =
+        size_t header_size =
             sizeof(breakpad_mach_header) + header->sizeofcmds;
 
         free(header);
diff --git a/src/client/mac/handler/dynamic_images.h b/src/client/mac/handler/dynamic_images.h
index 85ba8cf..72eb221 100644
--- a/src/client/mac/handler/dynamic_images.h
+++ b/src/client/mac/handler/dynamic_images.h
@@ -103,7 +103,7 @@
 class DynamicImage {
  public:
   DynamicImage(breakpad_mach_header *header, // we take ownership
-               int header_size,              // includes load commands
+               size_t header_size,              // includes load commands
                breakpad_mach_header *load_address,
                char *inFilePath,
                uintptr_t image_mod_date,
@@ -111,6 +111,11 @@
     : header_(header),
       header_size_(header_size),
       load_address_(load_address),
+      vmaddr_(0),
+      vmsize_(0),
+      slide_(0),
+      version_(0),
+      file_path_(NULL),
       file_mod_date_(image_mod_date),
       task_(task) {
     InitializeFilePath(inFilePath);
@@ -128,7 +133,7 @@
   breakpad_mach_header *GetMachHeader() {return header_;}
 
   // Size of mach_header plus load commands
-  int GetHeaderSize() const {return header_size_;}
+  size_t GetHeaderSize() const {return header_size_;}
 
   // Full path to mach-o binary
   char *GetFilePath() {return file_path_;}
@@ -158,8 +163,11 @@
 
   // Debugging
   void Print();
- 
+
  private:
+  DynamicImage(const DynamicImage &);
+  DynamicImage &operator=(const DynamicImage &);
+
   friend class DynamicImages;
 
   // Sanity checking
@@ -180,7 +188,7 @@
   void CalculateMemoryAndVersionInfo();
 
   breakpad_mach_header    *header_;        // our local copy of the header
-  int                     header_size_;    // mach_header plus load commands
+  size_t                  header_size_;    // mach_header plus load commands
   breakpad_mach_header    *load_address_;  // base address image is mapped into
   mach_vm_address_t       vmaddr_;
   mach_vm_size_t          vmsize_;
@@ -231,13 +239,13 @@
   explicit DynamicImages(mach_port_t task);
 
   ~DynamicImages() {
-    for (int i = 0; i < (int)image_list_.size(); ++i) {
+    for (int i = 0; i < GetImageCount(); ++i) {
       delete image_list_[i];
     }
   }
 
   // Returns the number of dynamically loaded mach-o images.
-  int GetImageCount() const {return image_list_.size();}
+  int GetImageCount() const {return static_cast<int>(image_list_.size());}
 
   // Returns an individual image.
   DynamicImage *GetImage(int i) {
@@ -256,14 +264,14 @@
 
   // Debugging
   void Print() {
-    for (int i = 0; i < (int)image_list_.size(); ++i) {
+    for (int i = 0; i < GetImageCount(); ++i) {
       image_list_[i]->Print();
     }
   }
 
   void TestPrint() {
     const breakpad_mach_header *header;
-    for (int i = 0; i < (int)image_list_.size(); ++i) {
+    for (int i = 0; i < GetImageCount(); ++i) {
       printf("dyld: %p: name = %s\n", _dyld_get_image_header(i),
              _dyld_get_image_name(i) );
 
diff --git a/src/client/mac/handler/exception_handler.cc b/src/client/mac/handler/exception_handler.cc
index 9886a52..89cc4e9 100644
--- a/src/client/mac/handler/exception_handler.cc
+++ b/src/client/mac/handler/exception_handler.cc
@@ -33,6 +33,7 @@
 #include "client/mac/handler/exception_handler.h"
 #include "client/mac/handler/minidump_generator.h"
 #include "common/mac/macho_utilities.h"
+#include "common/mac/scoped_task_suspend-inl.h"
 
 #ifndef USE_PROTECTED_ALLOCATIONS
 #define USE_PROTECTED_ALLOCATIONS 0
@@ -221,7 +222,8 @@
                                    FilterCallback filter,
                                    MinidumpCallback callback,
                                    void *callback_context,
-                                   bool install_handler)
+                                   bool install_handler,
+				   const char *port_name)
     : dump_path_(),
       filter_(filter),
       callback_(callback),
@@ -237,6 +239,8 @@
   // This will update to the ID and C-string pointers
   set_dump_path(dump_path);
   MinidumpGenerator::GatherSystemInformation();
+  if (port_name)
+    crash_generation_client_.reset(new CrashGenerationClient(port_name));
   Setup(install_handler);
 }
 
@@ -293,10 +297,42 @@
 bool ExceptionHandler::WriteMinidump(const string &dump_path,
                                      MinidumpCallback callback,
                                      void *callback_context) {
-  ExceptionHandler handler(dump_path, NULL, callback, callback_context, false);
+  ExceptionHandler handler(dump_path, NULL, callback, callback_context, false,
+			   NULL);
   return handler.WriteMinidump();
 }
 
+// static
+bool ExceptionHandler::WriteMinidumpForChild(mach_port_t child,
+					     mach_port_t child_blamed_thread,
+					     const string &dump_path,
+					     MinidumpCallback callback,
+					     void *callback_context) {
+  ScopedTaskSuspend suspend(child);
+
+  MinidumpGenerator generator(child, MACH_PORT_NULL);
+  string dump_id;
+  string dump_filename = generator.UniqueNameInDirectory(dump_path, &dump_id);
+
+  generator.SetExceptionInformation(EXC_BREAKPOINT,
+#if defined (__i386__) || defined(__x86_64__)
+				    EXC_I386_BPT,
+#elif defined (__ppc__) || defined (__ppc64__)
+				    EXC_PPC_BREAKPOINT,
+#else
+  #error architecture not supported
+#endif
+				    0,
+				    child_blamed_thread);
+  bool result = generator.Write(dump_filename.c_str());
+
+  if (callback) {
+    return callback(dump_path.c_str(), dump_id.c_str(),
+		    callback_context, result);
+  }
+  return result;
+}
+
 bool ExceptionHandler::WriteMinidumpWithException(int exception_type,
                                                   int exception_code,
                                                   int exception_subcode,
@@ -312,6 +348,18 @@
       if (exception_type && exception_code)
         _exit(exception_type);
     }
+  } else if (IsOutOfProcess()) {
+    if (exception_type && exception_code) {
+      // If this is a real exception, give the filter (if any) a chance to
+      // decide if this should be sent.
+      if (filter_ && !filter_(callback_context_))
+	return false;
+      return crash_generation_client_->RequestDumpForException(
+	         exception_type,
+		 exception_code,
+		 exception_subcode,
+		 thread_name);
+    }
   } else {
     string minidump_id;
 
@@ -321,7 +369,7 @@
       MinidumpGenerator md;
       if (exception_type && exception_code) {
         // If this is a real exception, give the filter (if any) a chance to
-        // decided if this should be sent
+        // decide if this should be sent.
         if (filter_ && !filter_(callback_context_))
           return false;
 
@@ -453,10 +501,11 @@
   // Wait for the exception info
   while (1) {
     receive.header.msgh_local_port = self->handler_port_;
-    receive.header.msgh_size = sizeof(receive);
+    receive.header.msgh_size = static_cast<mach_msg_size_t>(sizeof(receive));
     kern_return_t result = mach_msg(&(receive.header),
                                     MACH_RCV_MSG | MACH_RCV_LARGE, 0,
-                                    sizeof(receive), self->handler_port_,
+                                    receive.header.msgh_size,
+                                    self->handler_port_,
                                     MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
 
 
diff --git a/src/client/mac/handler/exception_handler.h b/src/client/mac/handler/exception_handler.h
index 896eecd..7635325 100644
--- a/src/client/mac/handler/exception_handler.h
+++ b/src/client/mac/handler/exception_handler.h
@@ -40,6 +40,9 @@
 
 #include <string>
 
+#include "client/mac/crash_generation/crash_generation_client.h"
+#include "processor/scoped_ptr.h"
+
 namespace google_breakpad {
 
 using std::string;
@@ -86,9 +89,12 @@
   // If install_handler is true, then a minidump will be written whenever
   // an unhandled exception occurs.  If it is false, minidumps will only
   // be written when WriteMinidump is called.
+  // If port_name is non-NULL, attempt to perform out-of-process dump generation
+  // If port_name is NULL, in-process dump generation will be used.
   ExceptionHandler(const string &dump_path,
                    FilterCallback filter, MinidumpCallback callback,
-                   void *callback_context, bool install_handler);
+                   void *callback_context, bool install_handler,
+		   const char *port_name);
 
   // A special constructor if we want to bypass minidump writing and
   // simply get a callback with the exception information.
@@ -115,6 +121,19 @@
   static bool WriteMinidump(const string &dump_path, MinidumpCallback callback,
                             void *callback_context);
 
+  // Write a minidump of child immediately. This can be used to capture
+  // the execution state of a child process independently of a crash.
+  static bool WriteMinidumpForChild(mach_port_t child,
+				    mach_port_t child_blamed_thread,
+				    const std::string &dump_path,
+				    MinidumpCallback callback,
+				    void *callback_context);
+
+  // Returns whether out-of-process dump generation is used or not.
+  bool IsOutOfProcess() const {
+    return crash_generation_client_.get() != NULL;
+  }
+
  private:
   // Install the mach exception handler
   bool InstallHandler();
@@ -206,6 +225,9 @@
 
   // True, if we're using the mutext to indicate when mindump writing occurs
   bool use_minidump_write_mutex_;
+
+  // Client for out-of-process dump generation.
+  scoped_ptr<CrashGenerationClient> crash_generation_client_;
 };
 
 }  // namespace google_breakpad
diff --git a/src/client/mac/handler/exception_handler_test.cc b/src/client/mac/handler/exception_handler_test.cc
deleted file mode 100644
index 0a1ecbe..0000000
--- a/src/client/mac/handler/exception_handler_test.cc
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright (c) 2006, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-/*
-g++ -framework CoreFoundation -I../../.. ../../minidump_file_writer.cc ../../../common/convert_UTF.c ../../../common/string_conversion.cc ../../../common/mac/string_utilities.cc exception_handler.cc minidump_generator.cc exception_handler_test.cc -o exception_handler_test -mmacosx-version-min=10.4 ../../../common/mac/file_id.cc  dynamic_images.cc ../../../common/mac/macho_id.cc  ../../../common/mac/macho_walker.cc  -lcrypto ../../../common/mac/macho_utilities.cc 
-*/
-
-#include <pthread.h>
-#include <pwd.h>
-#include <unistd.h>
-
-#include <CoreFoundation/CoreFoundation.h>
-
-#include "exception_handler.h"
-#include "minidump_generator.h"
-
-using std::string;
-using google_breakpad::ExceptionHandler;
-
-static void *SleepyFunction(void *) {
-  while (1) {
-    sleep(10000);
-  }
-  return NULL;
-}
-
-static void Crasher() {
-  int *a = (int*)0x42;
-
-	fprintf(stdout, "Going to crash...\n");
-  fprintf(stdout, "A = %d", *a);
-}
-
-static void SoonToCrash() {
-  Crasher();
-}
-
-bool MDCallback(const char *dump_dir, const char *file_name,
-                void *context, bool success) {
-  string path(dump_dir);
-  string dest(dump_dir);
-  path.append(file_name);
-  path.append(".dmp");
-
-  fprintf(stdout, "Minidump: %s\n", path.c_str());
-  // Indicate that we've handled the callback
-  exit(0);
-}
-
-int main(int argc, char * const argv[]) {
-  char buffer[PATH_MAX];
-
-  // Home dir
-  snprintf(buffer, sizeof(buffer), "/tmp/");
-
-  string path(buffer);
-  ExceptionHandler eh(path, NULL, MDCallback, NULL, true);
-  pthread_t t;
-
-  if (pthread_create(&t, NULL, SleepyFunction, NULL) == 0) {
-    pthread_detach(t);
-  } else {
-    perror("pthread_create");
-  }
-
-//   // Dump a test
-//   eh.WriteMinidump();
-
-	// Test the handler
-  SoonToCrash();
-
-  return 0;
-}
diff --git a/src/client/mac/handler/minidump_generator.cc b/src/client/mac/handler/minidump_generator.cc
index f6d0638..7308674 100644
--- a/src/client/mac/handler/minidump_generator.cc
+++ b/src/client/mac/handler/minidump_generator.cc
@@ -27,6 +27,7 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+#include <algorithm>
 #include <cstdio>
 
 #include <mach/host_info.h>
@@ -57,13 +58,15 @@
 
 // constructor when generating from within the crashed process
 MinidumpGenerator::MinidumpGenerator()
-    : exception_type_(0),
+    : writer_(),
+      exception_type_(0),
       exception_code_(0),
       exception_subcode_(0),
       exception_thread_(0),
       crashing_task_(mach_task_self()),
       handler_thread_(mach_thread_self()),
-      dynamic_images_(NULL) {
+      dynamic_images_(NULL),
+      memory_blocks_(&allocator_) {
   GatherSystemInformation();
 }
 
@@ -71,12 +74,15 @@
 // crashed process
 MinidumpGenerator::MinidumpGenerator(mach_port_t crashing_task,
                                      mach_port_t handler_thread)
-    : exception_type_(0),
+    : writer_(),
+      exception_type_(0),
       exception_code_(0),
       exception_subcode_(0),
       exception_thread_(0),
       crashing_task_(crashing_task),
-      handler_thread_(handler_thread) {
+      handler_thread_(handler_thread),
+      dynamic_images_(NULL),
+      memory_blocks_(&allocator_) {
   if (crashing_task != mach_task_self()) {
     dynamic_images_ = new DynamicImages(crashing_task_);
   } else {
@@ -170,6 +176,7 @@
 bool MinidumpGenerator::Write(const char *path) {
   WriteStreamFN writers[] = {
     &MinidumpGenerator::WriteThreadListStream,
+    &MinidumpGenerator::WriteMemoryListStream,
     &MinidumpGenerator::WriteSystemInfoStream,
     &MinidumpGenerator::WriteModuleListStream,
     &MinidumpGenerator::WriteMiscInfoStream,
@@ -191,7 +198,7 @@
     if (!header.Allocate())
       return false;
 
-    int writer_count = sizeof(writers) / sizeof(writers[0]);
+    int writer_count = static_cast<int>(sizeof(writers) / sizeof(writers[0]));
 
     // If we don't have exception information, don't write out the
     // exception stream
@@ -355,7 +362,7 @@
 
 #define AddReg(a) context_ptr->a = REGISTER_FROM_THREADSTATE(machine_state, a)
 #define AddGPR(a) context_ptr->gpr[a] = REGISTER_FROM_THREADSTATE(machine_state, r ## a)
- 
+
   AddReg(srr0);
   AddReg(cr);
   AddReg(xer);
@@ -488,7 +495,7 @@
   // not used in the flags register.  Since the minidump format
   // specifies 32 bits for the flags register, we can truncate safely
   // with no loss.
-  context_ptr->eflags = machine_state->__rflags;
+  context_ptr->eflags = static_cast<u_int32_t>(machine_state->__rflags);
   AddReg(cs);
   AddReg(fs);
   AddReg(gs);
@@ -502,7 +509,8 @@
 bool MinidumpGenerator::WriteThreadStream(mach_port_t thread_id,
                                           MDRawThread *thread) {
   breakpad_thread_state_data_t state;
-  mach_msg_type_number_t state_count = sizeof(state);
+  mach_msg_type_number_t state_count
+      = static_cast<mach_msg_type_number_t>(sizeof(state));
 
   if (thread_get_state(thread_id, BREAKPAD_MACHINE_THREAD_STATE,
                        state, &state_count) ==
@@ -510,6 +518,8 @@
     if (!WriteStack(state, &thread->stack))
       return false;
 
+    memory_blocks_.push_back(thread->stack);
+
     if (!WriteContext(state, &thread->thread_context))
       return false;
 
@@ -532,7 +542,10 @@
     return false;
 
   // Don't include the generator thread
-  non_generator_thread_count = thread_count - 1;
+  if (handler_thread_ != MACH_PORT_NULL)
+    non_generator_thread_count = thread_count - 1;
+  else
+    non_generator_thread_count = thread_count;
   if (!list.AllocateObjectAndArray(non_generator_thread_count,
                                    sizeof(MDRawThread)))
     return false;
@@ -559,6 +572,118 @@
   return true;
 }
 
+bool MinidumpGenerator::WriteMemoryListStream(
+    MDRawDirectory *memory_list_stream) {
+  TypedMDRVA<MDRawMemoryList> list(&writer_);
+
+  // If the dump has an exception, include some memory around the
+  // instruction pointer.
+  const size_t kIPMemorySize = 256;  // bytes
+  bool have_ip_memory = false;
+  MDMemoryDescriptor ip_memory_d;
+  if (exception_thread_ && exception_type_) {
+    breakpad_thread_state_data_t state;
+    mach_msg_type_number_t stateCount
+      = static_cast<mach_msg_type_number_t>(sizeof(state));
+
+    if (thread_get_state(exception_thread_,
+                         BREAKPAD_MACHINE_THREAD_STATE,
+                         state,
+                         &stateCount) == KERN_SUCCESS) {
+      u_int64_t ip = CurrentPCForStack(state);
+      // Bound it to the upper and lower bounds of the region
+      // it's contained within. If it's not in a known memory region,
+      // don't bother trying to write it.
+      mach_vm_address_t addr = ip;
+      mach_vm_size_t size;
+      natural_t nesting_level = 0;
+      vm_region_submap_info_64 info;
+      mach_msg_type_number_t info_count = VM_REGION_SUBMAP_INFO_COUNT_64;
+
+      kern_return_t ret =
+        mach_vm_region_recurse(crashing_task_,
+                               &addr,
+                               &size,
+                               &nesting_level,
+                               (vm_region_recurse_info_t)&info,
+                               &info_count);
+      if (ret == KERN_SUCCESS && ip >= addr && ip < (addr + size)) {
+        // Try to get 128 bytes before and after the IP, but
+        // settle for whatever's available.
+        ip_memory_d.start_of_memory_range =
+          std::max(uintptr_t(addr),
+                   uintptr_t(ip - (kIPMemorySize / 2)));
+        uintptr_t end_of_range = 
+          std::min(uintptr_t(ip + (kIPMemorySize / 2)),
+                   uintptr_t(addr + size));
+        ip_memory_d.memory.data_size =
+          end_of_range - ip_memory_d.start_of_memory_range;
+        have_ip_memory = true;
+        // This needs to get appended to the list even though
+        // the memory bytes aren't filled in yet so the entire
+        // list can be written first. The memory bytes will get filled
+        // in after the memory list is written.
+        memory_blocks_.push_back(ip_memory_d);
+      }
+    }
+  }
+
+  // Now fill in the memory list and write it.
+  unsigned memory_count = memory_blocks_.size();
+  if (!list.AllocateObjectAndArray(memory_count,
+                                   sizeof(MDMemoryDescriptor)))
+    return false;
+
+  memory_list_stream->stream_type = MD_MEMORY_LIST_STREAM;
+  memory_list_stream->location = list.location();
+
+  list.get()->number_of_memory_ranges = memory_count;
+
+  unsigned int i;
+  for (i = 0; i < memory_count; ++i) {
+    list.CopyIndexAfterObject(i++, &memory_blocks_[i],
+                              sizeof(MDMemoryDescriptor));
+  }
+
+  if (have_ip_memory) {
+    // Now read the memory around the instruction pointer.
+    UntypedMDRVA ip_memory(&writer_);
+    if (!ip_memory.Allocate(ip_memory_d.memory.data_size))
+      return false;
+
+    if (dynamic_images_) {
+      // Out-of-process.
+      kern_return_t kr;
+
+      void *memory =
+        ReadTaskMemory(
+          crashing_task_,
+          reinterpret_cast<const void *>(ip_memory_d.start_of_memory_range),
+          ip_memory_d.memory.data_size,
+          &kr);
+
+      if (memory == NULL) {
+        return false;
+      }
+
+      ip_memory.Copy(memory, ip_memory_d.memory.data_size);
+      free(memory);
+    } else {
+      // In-process, just copy from local memory.
+      ip_memory.Copy(
+        reinterpret_cast<const void *>(ip_memory_d.start_of_memory_range),
+        ip_memory_d.memory.data_size);
+    }
+
+    ip_memory_d.memory = ip_memory.location();
+    // Write this again now that the data location is filled in.
+    list.CopyIndexAfterObject(i - 1, &ip_memory_d,
+                              sizeof(MDMemoryDescriptor));
+  }
+
+  return true;
+}
+
 bool
 MinidumpGenerator::WriteExceptionStream(MDRawDirectory *exception_stream) {
   TypedMDRVA<MDRawExceptionStream> exception(&writer_);
@@ -577,7 +702,8 @@
   exception_ptr->exception_record.exception_flags = exception_code_;
 
   breakpad_thread_state_data_t state;
-  mach_msg_type_number_t stateCount = sizeof(state);
+  mach_msg_type_number_t stateCount
+      = static_cast<mach_msg_type_number_t>(sizeof(state));
 
   if (thread_get_state(exception_thread_,
                        BREAKPAD_MACHINE_THREAD_STATE,
@@ -727,7 +853,7 @@
       return false;
 
     module->base_of_image = image->GetVMAddr() + image->GetVMAddrSlide();
-    module->size_of_image = image->GetVMSize();
+    module->size_of_image = static_cast<u_int32_t>(image->GetVMSize());
     module->module_name_rva = string_location.rva;
 
     // We'll skip the executable module, because they don't have
@@ -794,7 +920,7 @@
             return false;
 
           module->base_of_image = seg->vmaddr + slide;
-          module->size_of_image = seg->vmsize;
+          module->size_of_image = static_cast<u_int32_t>(seg->vmsize);
           module->module_name_rva = string_location.rva;
 
           if (!WriteCVRecord(module, cpu_type, name))
@@ -931,7 +1057,7 @@
   misc_info_stream->location = info.location();
 
   MDRawMiscInfo *info_ptr = info.get();
-  info_ptr->size_of_info = sizeof(MDRawMiscInfo);
+  info_ptr->size_of_info = static_cast<u_int32_t>(sizeof(MDRawMiscInfo));
   info_ptr->flags1 = MD_MISCINFO_FLAGS1_PROCESS_ID |
     MD_MISCINFO_FLAGS1_PROCESS_TIMES |
     MD_MISCINFO_FLAGS1_PROCESSOR_POWER_INFO;
@@ -943,33 +1069,38 @@
   struct rusage usage;
   if (getrusage(RUSAGE_SELF, &usage) != -1) {
     // Omit the fractional time since the MDRawMiscInfo only wants seconds
-    info_ptr->process_user_time = usage.ru_utime.tv_sec;
-    info_ptr->process_kernel_time = usage.ru_stime.tv_sec;
+    info_ptr->process_user_time =
+        static_cast<u_int32_t>(usage.ru_utime.tv_sec);
+    info_ptr->process_kernel_time =
+        static_cast<u_int32_t>(usage.ru_stime.tv_sec);
   }
   int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, info_ptr->process_id };
+  u_int mibsize = static_cast<u_int>(sizeof(mib) / sizeof(mib[0]));
   size_t size;
-  if (!sysctl(mib, sizeof(mib) / sizeof(mib[0]), NULL, &size, NULL, 0)) {
+  if (!sysctl(mib, mibsize, NULL, &size, NULL, 0)) {
     mach_vm_address_t addr;
     if (mach_vm_allocate(mach_task_self(),
                          &addr,
                          size,
                          true) == KERN_SUCCESS) {
       struct kinfo_proc *proc = (struct kinfo_proc *)addr;
-      if (!sysctl(mib, sizeof(mib) / sizeof(mib[0]), proc, &size, NULL, 0))
-        info_ptr->process_create_time = proc->kp_proc.p_starttime.tv_sec;
+      if (!sysctl(mib, mibsize, proc, &size, NULL, 0))
+        info_ptr->process_create_time =
+            static_cast<u_int32_t>(proc->kp_proc.p_starttime.tv_sec);
       mach_vm_deallocate(mach_task_self(), addr, size);
     }
   }
 
   // Speed
   uint64_t speed;
+  const uint64_t kOneMillion = 1000 * 1000;
   size = sizeof(speed);
   sysctlbyname("hw.cpufrequency_max", &speed, &size, NULL, 0);
-  info_ptr->processor_max_mhz = speed / (1000 * 1000);
-  info_ptr->processor_mhz_limit = speed / (1000 * 1000);
+  info_ptr->processor_max_mhz = static_cast<u_int32_t>(speed / kOneMillion);
+  info_ptr->processor_mhz_limit = static_cast<u_int32_t>(speed / kOneMillion);
   size = sizeof(speed);
   sysctlbyname("hw.cpufrequency", &speed, &size, NULL, 0);
-  info_ptr->processor_current_mhz = speed / (1000 * 1000);
+  info_ptr->processor_current_mhz = static_cast<u_int32_t>(speed / kOneMillion);
 
   return true;
 }
diff --git a/src/client/mac/handler/minidump_generator.h b/src/client/mac/handler/minidump_generator.h
index b065fba..39f2840 100644
--- a/src/client/mac/handler/minidump_generator.h
+++ b/src/client/mac/handler/minidump_generator.h
@@ -37,8 +37,9 @@
 #include <string>
 
 #include "client/minidump_file_writer.h"
-#include "google_breakpad/common/minidump_format.h"
+#include "common/memory.h"
 #include "common/mac/macho_utilities.h"
+#include "google_breakpad/common/minidump_format.h"
 
 #include "dynamic_images.h"
 
@@ -119,6 +120,7 @@
 
   // Stream writers
   bool WriteThreadListStream(MDRawDirectory *thread_list_stream);
+  bool WriteMemoryListStream(MDRawDirectory *memory_list_stream);
   bool WriteExceptionStream(MDRawDirectory *exception_stream);
   bool WriteSystemInfoStream(MDRawDirectory *system_info_stream);
   bool WriteModuleListStream(MDRawDirectory *module_list_stream);
@@ -165,6 +167,15 @@
   
   // Information about dynamically loaded code
   DynamicImages *dynamic_images_;
+
+  // PageAllocator makes it possible to allocate memory
+  // directly from the system, even while handling an exception.
+  mutable PageAllocator allocator_;
+
+  // Blocks of memory written to the dump. These are all currently
+  // written while writing the thread list stream, but saved here
+  // so a memory list stream can be written afterwards.
+  wasteful_vector<MDMemoryDescriptor> memory_blocks_;
 };
 
 }  // namespace google_breakpad
diff --git a/src/client/mac/handler/minidump_test.xcodeproj/project.pbxproj b/src/client/mac/handler/minidump_test.xcodeproj/project.pbxproj
index 996ff42..b140a71 100644
--- a/src/client/mac/handler/minidump_test.xcodeproj/project.pbxproj
+++ b/src/client/mac/handler/minidump_test.xcodeproj/project.pbxproj
@@ -3,10 +3,24 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 42;
+	objectVersion = 46;
 	objects = {
 
 /* Begin PBXBuildFile section */
+		8BFC813F11FF9A58002CB4DC /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BFC813E11FF9A58002CB4DC /* libcrypto.dylib */; };
+		8BFC814411FF9A9C002CB4DC /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BFC813E11FF9A58002CB4DC /* libcrypto.dylib */; };
+		8BFC814511FF9A9D002CB4DC /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BFC813E11FF9A58002CB4DC /* libcrypto.dylib */; };
+		8BFC814811FF9B13002CB4DC /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BFC813E11FF9A58002CB4DC /* libcrypto.dylib */; };
+		8BFC814911FF9B13002CB4DC /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BFC813E11FF9A58002CB4DC /* libcrypto.dylib */; };
+		8BFC814A11FF9B13002CB4DC /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BFC813E11FF9A58002CB4DC /* libcrypto.dylib */; };
+		8BFC814B11FF9B3F002CB4DC /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9721FA10E8B0E2300D7E813 /* SenTestingKit.framework */; };
+		8BFC814C11FF9B3F002CB4DC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9721F6B0E8B0D7000D7E813 /* Cocoa.framework */; };
+		8BFC81A211FF9C2E002CB4DC /* CPlusTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BFC819211FF9C23002CB4DC /* CPlusTest.framework */; };
+		8BFC81A311FF9C2F002CB4DC /* CPlusTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BFC819211FF9C23002CB4DC /* CPlusTest.framework */; };
+		8BFC81AD11FF9C8A002CB4DC /* breakpad_nlist_64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F98208A10DB32CAE0017AECA /* breakpad_nlist_64.cc */; };
+		8BFC81AE11FF9C8C002CB4DC /* breakpad_nlist_64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F98208A10DB32CAE0017AECA /* breakpad_nlist_64.cc */; };
+		8BFC81AF11FF9C8C002CB4DC /* breakpad_nlist_64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F98208A10DB32CAE0017AECA /* breakpad_nlist_64.cc */; };
+		8BFC81B011FF9C8D002CB4DC /* breakpad_nlist_64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F98208A10DB32CAE0017AECA /* breakpad_nlist_64.cc */; };
 		9B35FF5A0B267D5F008DE8C7 /* convert_UTF.c in Sources */ = {isa = PBXBuildFile; fileRef = 9B35FF560B267D5F008DE8C7 /* convert_UTF.c */; };
 		9B35FF5B0B267D5F008DE8C7 /* string_conversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9B35FF580B267D5F008DE8C7 /* string_conversion.cc */; };
 		9B37CEEC0AF98ECD00FA4BD4 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B37CEEB0AF98ECD00FA4BD4 /* CoreFoundation.framework */; };
@@ -94,12 +108,18 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
+		8BFC812011FF99D5002CB4DC /* Breakpad.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Breakpad.xcconfig; path = ../../../common/mac/Breakpad.xcconfig; sourceTree = SOURCE_ROOT; };
+		8BFC812111FF99D5002CB4DC /* BreakpadDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadDebug.xcconfig; path = ../../../common/mac/BreakpadDebug.xcconfig; sourceTree = SOURCE_ROOT; };
+		8BFC812211FF99D5002CB4DC /* BreakpadRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadRelease.xcconfig; path = ../../../common/mac/BreakpadRelease.xcconfig; sourceTree = SOURCE_ROOT; };
+		8BFC813E11FF9A58002CB4DC /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; };
+		8BFC815411FF9B7F002CB4DC /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
+		8BFC819211FF9C23002CB4DC /* CPlusTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CPlusTest.framework; path = Library/Frameworks/CPlusTest.framework; sourceTree = DEVELOPER_DIR; };
 		8DD76F6C0486A84900D96B5E /* generator_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = generator_test; sourceTree = BUILT_PRODUCTS_DIR; };
 		9B35FF560B267D5F008DE8C7 /* convert_UTF.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = convert_UTF.c; path = ../../../common/convert_UTF.c; sourceTree = SOURCE_ROOT; };
 		9B35FF570B267D5F008DE8C7 /* convert_UTF.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = convert_UTF.h; path = ../../../common/convert_UTF.h; sourceTree = SOURCE_ROOT; };
 		9B35FF580B267D5F008DE8C7 /* string_conversion.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = string_conversion.cc; path = ../../../common/string_conversion.cc; sourceTree = SOURCE_ROOT; };
 		9B35FF590B267D5F008DE8C7 /* string_conversion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = string_conversion.h; path = ../../../common/string_conversion.h; sourceTree = SOURCE_ROOT; };
-		9B37CEEB0AF98ECD00FA4BD4 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; };
+		9B37CEEB0AF98ECD00FA4BD4 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
 		9B7CA84E0B1297F200CD3A1D /* unit_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = unit_test; sourceTree = BUILT_PRODUCTS_DIR; };
 		9B7CA8530B12989000CD3A1D /* minidump_file_writer_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = minidump_file_writer_unittest.cc; path = ../../minidump_file_writer_unittest.cc; sourceTree = "<group>"; };
 		9BD82A9B0B00267E0055103E /* handler_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = handler_test; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -132,11 +152,11 @@
 		F9721F310E8B07E800D7E813 /* dwarftests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = dwarftests.mm; sourceTree = "<group>"; };
 		F9721F380E8B0CFC00D7E813 /* dump_syms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dump_syms.h; path = ../../../common/mac/dump_syms.h; sourceTree = SOURCE_ROOT; };
 		F9721F390E8B0D0D00D7E813 /* dump_syms.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = dump_syms.mm; path = ../../../common/mac/dump_syms.mm; sourceTree = SOURCE_ROOT; };
-		F9721F6B0E8B0D7000D7E813 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+		F9721F6B0E8B0D7000D7E813 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
 		F9721F760E8B0DC700D7E813 /* bytereader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader.cc; path = ../../../common/dwarf/bytereader.cc; sourceTree = SOURCE_ROOT; };
 		F9721F770E8B0DC700D7E813 /* dwarf2reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2reader.cc; path = ../../../common/dwarf/dwarf2reader.cc; sourceTree = SOURCE_ROOT; };
 		F9721F780E8B0DC700D7E813 /* functioninfo.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = functioninfo.cc; path = ../../../common/dwarf/functioninfo.cc; sourceTree = SOURCE_ROOT; };
-		F9721FA10E8B0E2300D7E813 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = /System/Library/Frameworks/SenTestingKit.framework; sourceTree = "<absolute>"; };
+		F9721FA10E8B0E2300D7E813 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; };
 		F9721FA80E8B0E4800D7E813 /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = md5.c; path = ../../../common/md5.c; sourceTree = SOURCE_ROOT; };
 		F982089A0DB3280D0017AECA /* breakpad_nlist_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = breakpad_nlist_test.h; sourceTree = "<group>"; };
 		F982089B0DB3280D0017AECA /* breakpad_nlist_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = breakpad_nlist_test.cc; sourceTree = "<group>"; };
@@ -156,6 +176,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				9B37CEEC0AF98ECD00FA4BD4 /* CoreFoundation.framework in Frameworks */,
+				8BFC813F11FF9A58002CB4DC /* libcrypto.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -163,6 +184,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				8BFC814511FF9A9D002CB4DC /* libcrypto.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -171,6 +193,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				9BD82AC10B0029DF0055103E /* CoreFoundation.framework in Frameworks */,
+				8BFC814411FF9A9C002CB4DC /* libcrypto.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -178,6 +201,9 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				8BFC814A11FF9B13002CB4DC /* libcrypto.dylib in Frameworks */,
+				8BFC814B11FF9B3F002CB4DC /* SenTestingKit.framework in Frameworks */,
+				8BFC814C11FF9B3F002CB4DC /* Cocoa.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -185,6 +211,8 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				8BFC814811FF9B13002CB4DC /* libcrypto.dylib in Frameworks */,
+				8BFC81A211FF9C2E002CB4DC /* CPlusTest.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -194,6 +222,8 @@
 			files = (
 				F9721F6C0E8B0D7000D7E813 /* Cocoa.framework in Frameworks */,
 				F9721FA20E8B0E2300D7E813 /* SenTestingKit.framework in Frameworks */,
+				8BFC814911FF9B13002CB4DC /* libcrypto.dylib in Frameworks */,
+				8BFC81A311FF9C2F002CB4DC /* CPlusTest.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -203,6 +233,9 @@
 		08FB7794FE84155DC02AAC07 /* MinidumpWriter */ = {
 			isa = PBXGroup;
 			children = (
+				8BFC812011FF99D5002CB4DC /* Breakpad.xcconfig */,
+				8BFC812111FF99D5002CB4DC /* BreakpadDebug.xcconfig */,
+				8BFC812211FF99D5002CB4DC /* BreakpadRelease.xcconfig */,
 				F9721FA80E8B0E4800D7E813 /* md5.c */,
 				F9721F760E8B0DC700D7E813 /* bytereader.cc */,
 				F9721F770E8B0DC700D7E813 /* dwarf2reader.cc */,
@@ -261,9 +294,12 @@
 		9B37CEEA0AF98EB600FA4BD4 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				8BFC813E11FF9A58002CB4DC /* libcrypto.dylib */,
+				8BFC815411FF9B7F002CB4DC /* Carbon.framework */,
 				F9721FA10E8B0E2300D7E813 /* SenTestingKit.framework */,
 				F9721F6B0E8B0D7000D7E813 /* Cocoa.framework */,
 				9B37CEEB0AF98ECD00FA4BD4 /* CoreFoundation.framework */,
+				8BFC819211FF9C23002CB4DC /* CPlusTest.framework */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -414,7 +450,7 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "minidump_test" */;
-			compatibilityVersion = "Xcode 2.4";
+			compatibilityVersion = "Xcode 3.2";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* MinidumpWriter */;
 			projectDirPath = "";
@@ -513,6 +549,7 @@
 				D2F6510E0BEF94EB00920385 /* macho_walker.cc in Sources */,
 				D2F651110BEF951700920385 /* string_conversion.cc in Sources */,
 				D2F651150BEF953000920385 /* convert_UTF.c in Sources */,
+				8BFC81B011FF9C8D002CB4DC /* breakpad_nlist_64.cc in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -524,6 +561,7 @@
 				9B7CA8550B1298A100CD3A1D /* minidump_file_writer.cc in Sources */,
 				9BC1D2940B336F2300F2A2B4 /* convert_UTF.c in Sources */,
 				9BC1D2950B336F2500F2A2B4 /* string_conversion.cc in Sources */,
+				8BFC81AE11FF9C8C002CB4DC /* breakpad_nlist_64.cc in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -543,6 +581,7 @@
 				D2F6511E0BEF973600920385 /* macho_id.cc in Sources */,
 				D2F6511F0BEF973900920385 /* macho_utilities.cc in Sources */,
 				D2F651210BEF975400920385 /* macho_walker.cc in Sources */,
+				8BFC81AF11FF9C8C002CB4DC /* breakpad_nlist_64.cc in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -580,6 +619,7 @@
 			files = (
 				F9AE5B390DBFDBDB00505983 /* dynamic_images.cc in Sources */,
 				F9AE5B3A0DBFDBDB00505983 /* DynamicImagesTests.cc in Sources */,
+				8BFC81AD11FF9C8A002CB4DC /* breakpad_nlist_64.cc in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -589,154 +629,78 @@
 		1DEB923208733DC60010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				GCC_CW_ASM_SYNTAX = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_ENABLE_PASCAL_STRINGS = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_THREADSAFE_STATICS = NO;
-				INSTALL_PATH = "$(HOME)/bin";
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(DEVELOPER_FRAMEWORKS_DIR)\"",
+				);
 				PRODUCT_NAME = generator_test;
 				USER_HEADER_SEARCH_PATHS = "../../../** $(inherited)";
-				ZERO_LINK = NO;
 			};
 			name = Debug;
 		};
 		1DEB923308733DC60010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = (
-					ppc,
-					i386,
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(DEVELOPER_FRAMEWORKS_DIR)\"",
 				);
-				GCC_CW_ASM_SYNTAX = NO;
-				GCC_ENABLE_PASCAL_STRINGS = NO;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_THREADSAFE_STATICS = NO;
-				INSTALL_PATH = "$(HOME)/bin";
 				PRODUCT_NAME = generator_test;
 				USER_HEADER_SEARCH_PATHS = "../../../** $(inherited)";
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		1DEB923608733DC60010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 8BFC812111FF99D5002CB4DC /* BreakpadDebug.xcconfig */;
 			buildSettings = {
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				OTHER_LDFLAGS = "-lcrypto";
-				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
 			};
 			name = Debug;
 		};
 		1DEB923708733DC60010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 8BFC812211FF99D5002CB4DC /* BreakpadRelease.xcconfig */;
 			buildSettings = {
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				OTHER_LDFLAGS = "-lcrypto";
-				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
 			};
 			name = Release;
 		};
 		9B7CA8510B12984300CD3A1D /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				INSTALL_PATH = "$(HOME)/bin";
-				PREBINDING = NO;
 				PRODUCT_NAME = unit_test;
 				USER_HEADER_SEARCH_PATHS = "../../../** $(inherited)";
-				ZERO_LINK = NO;
 			};
 			name = Debug;
 		};
 		9B7CA8520B12984300CD3A1D /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				COPY_PHASE_STRIP = YES;
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_MODEL_TUNING = G5;
-				INSTALL_PATH = "$(HOME)/bin";
-				PREBINDING = NO;
 				PRODUCT_NAME = unit_test;
 				USER_HEADER_SEARCH_PATHS = "../../../** $(inherited)";
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		9BD82AA70B0026BF0055103E /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = "$(NATIVE_ARCH)";
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				INSTALL_PATH = "$(HOME)/bin";
-				OTHER_CFLAGS = "-Wall";
-				PREBINDING = NO;
 				PRODUCT_NAME = handler_test;
 				USER_HEADER_SEARCH_PATHS = "../../.. $(inherited)";
-				ZERO_LINK = NO;
 			};
 			name = Debug;
 		};
 		9BD82AA80B0026BF0055103E /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = "$(NATIVE_ARCH)";
-				COPY_PHASE_STRIP = YES;
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				INSTALL_PATH = "$(HOME)/bin";
-				OTHER_CFLAGS = "-Wall";
-				PREBINDING = NO;
 				PRODUCT_NAME = handler_test;
 				USER_HEADER_SEARCH_PATHS = "../../.. $(inherited)";
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		F93A88770E8B4C700026AF89 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
 				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
-				GCC_CHAR_IS_UNSIGNED_CHAR = YES;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
 				INFOPLIST_FILE = "obj-cTestCases-Info.plist";
-				INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
-				OTHER_LDFLAGS = (
-					"-lcrypto",
-					"-framework",
-					Cocoa,
-					"-framework",
-					SenTestingKit,
-				);
-				PREBINDING = NO;
 				PRODUCT_NAME = octestcases;
 				USER_HEADER_SEARCH_PATHS = "../../../..//**";
 				WRAPPER_EXTENSION = octest;
@@ -746,58 +710,20 @@
 		F93A88780E8B4C700026AF89 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
-				GCC_CHAR_IS_UNSIGNED_CHAR = YES;
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_MODEL_TUNING = G5;
 				INFOPLIST_FILE = "obj-cTestCases-Info.plist";
-				INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
-				OTHER_LDFLAGS = (
-					"-lcrypto",
-					"-framework",
-					Cocoa,
-					"-framework",
-					SenTestingKit,
-				);
-				PREBINDING = NO;
 				PRODUCT_NAME = octestcases;
 				USER_HEADER_SEARCH_PATHS = "../../../..//**";
 				WRAPPER_EXTENSION = octest;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		F9AE19C40DB04A9500C98454 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = (
-					"$(NATIVE_ARCH_64_BIT)",
-					ppc64,
-				);
-				COPY_PHASE_STRIP = NO;
 				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
 				INFOPLIST_FILE = "minidump_tests64-Info.plist";
-				INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
-				MACOSX_DEPLOYMENT_TARGET = 10.5;
-				OTHER_LDFLAGS = (
-					"-framework",
-					Carbon,
-					"-framework",
-					CPlusTest,
-				);
-				PREBINDING = NO;
 				PRODUCT_NAME = minidump_tests64;
-				SDKROOT = /Developer/SDKs/MacOSX10.5.sdk;
 				USER_HEADER_SEARCH_PATHS = "../../../**";
 				WRAPPER_EXTENSION = cptest;
 			};
@@ -806,57 +732,19 @@
 		F9AE19C50DB04A9500C98454 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = (
-					"$(NATIVE_ARCH_64_BIT)",
-					ppc64,
-				);
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
 				INFOPLIST_FILE = "minidump_tests64-Info.plist";
-				INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
-				MACOSX_DEPLOYMENT_TARGET = 10.5;
-				OTHER_LDFLAGS = (
-					"-framework",
-					Carbon,
-					"-framework",
-					CPlusTest,
-				);
-				PREBINDING = NO;
 				PRODUCT_NAME = minidump_tests64;
-				SDKROOT = /Developer/SDKs/MacOSX10.5.sdk;
 				USER_HEADER_SEARCH_PATHS = "../../../**";
 				WRAPPER_EXTENSION = cptest;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		F9AE5B350DBFDBA300505983 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = "$(NATIVE_ARCH)";
-				COPY_PHASE_STRIP = NO;
 				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
 				INFOPLIST_FILE = "minidump_tests32-Info.plist";
-				INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Carbon,
-					"-framework",
-					CPlusTest,
-					"-lcrypto",
-				);
-				PREBINDING = NO;
 				PRODUCT_NAME = minidump_tests32;
 				USER_HEADER_SEARCH_PATHS = "../../../**";
 				WRAPPER_EXTENSION = cptest;
@@ -866,28 +754,11 @@
 		F9AE5B370DBFDBA300505983 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = "$(NATIVE_ARCH)";
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
 				INFOPLIST_FILE = "minidump_tests32-Info.plist";
-				INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
-				OTHER_LDFLAGS = (
-					"-lcrypto",
-					"-framework",
-					Carbon,
-					"-framework",
-					CPlusTest,
-				);
-				PREBINDING = NO;
 				PRODUCT_NAME = minidump_tests32;
 				USER_HEADER_SEARCH_PATHS = "../../../**";
 				WRAPPER_EXTENSION = cptest;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
diff --git a/src/client/mac/handler/protected_memory_allocator.cc b/src/client/mac/handler/protected_memory_allocator.cc
index 1076854..6142ad1 100644
--- a/src/client/mac/handler/protected_memory_allocator.cc
+++ b/src/client/mac/handler/protected_memory_allocator.cc
@@ -59,7 +59,7 @@
 }
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-char *ProtectedMemoryAllocator::Allocate(size_t bytes) {
+char *ProtectedMemoryAllocator::Allocate(vm_size_t bytes) {
   if (valid_ && next_alloc_offset_ + bytes <= pool_size_) {
     char *p = (char*)base_address_ + next_alloc_offset_;
     next_alloc_offset_ += bytes;
diff --git a/src/client/mac/handler/protected_memory_allocator.h b/src/client/mac/handler/protected_memory_allocator.h
index ed4f51d..7e188db 100644
--- a/src/client/mac/handler/protected_memory_allocator.h
+++ b/src/client/mac/handler/protected_memory_allocator.h
@@ -53,7 +53,7 @@
   // Fails by returning NULL is no more space is available.
   // Please note that the pointers returned from this method should not
   // be freed in any way (for example by calling free() on them ).
-  char *         Allocate(size_t n);
+  char *         Allocate(vm_size_t n);
   
   // Returns the base address of the allocation pool.
   char *         GetBaseAddress() { return (char*)base_address_; }
@@ -78,7 +78,7 @@
  private:
   vm_size_t      pool_size_;
   vm_address_t   base_address_;
-  int            next_alloc_offset_;
+  vm_size_t      next_alloc_offset_;
   bool           valid_;
 };
 
diff --git a/src/client/mac/sender/Breakpad.nib/classes.nib b/src/client/mac/sender/Breakpad.nib/classes.nib
deleted file mode 100644
index c9d43a3..0000000
--- a/src/client/mac/sender/Breakpad.nib/classes.nib
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IBClasses</key>
-	<array>
-		<dict>
-			<key>CLASS</key>
-			<string>LengthLimitingTextField</string>
-			<key>LANGUAGE</key>
-			<string>ObjC</string>
-			<key>SUPERCLASS</key>
-			<string>NSTextField</string>
-		</dict>
-		<dict>
-			<key>ACTIONS</key>
-			<dict>
-				<key>cancel</key>
-				<string>id</string>
-				<key>sendReport</key>
-				<string>id</string>
-				<key>showPrivacyPolicy</key>
-				<string>id</string>
-			</dict>
-			<key>CLASS</key>
-			<string>Reporter</string>
-			<key>LANGUAGE</key>
-			<string>ObjC</string>
-			<key>OUTLETS</key>
-			<dict>
-				<key>alertWindow_</key>
-				<string>NSWindow</string>
-				<key>cancelButton_</key>
-				<string>NSButton</string>
-				<key>commentMessage_</key>
-				<string>NSTextField</string>
-				<key>commentsEntryField_</key>
-				<string>LengthLimitingTextField</string>
-				<key>countdownLabel_</key>
-				<string>NSTextField</string>
-				<key>dialogTitle_</key>
-				<string>NSTextField</string>
-				<key>emailEntryField_</key>
-				<string>LengthLimitingTextField</string>
-				<key>emailLabel_</key>
-				<string>NSTextField</string>
-				<key>emailMessage_</key>
-				<string>NSTextField</string>
-				<key>emailSectionBox_</key>
-				<string>NSBox</string>
-				<key>headerBox_</key>
-				<string>NSBox</string>
-				<key>preEmailBox_</key>
-				<string>NSBox</string>
-				<key>privacyLinkArrow_</key>
-				<string>NSView</string>
-				<key>privacyLinkLabel_</key>
-				<string>NSTextField</string>
-				<key>sendButton_</key>
-				<string>NSButton</string>
-			</dict>
-			<key>SUPERCLASS</key>
-			<string>NSObject</string>
-		</dict>
-	</array>
-	<key>IBVersion</key>
-	<string>1</string>
-</dict>
-</plist>
diff --git a/src/client/mac/sender/Breakpad.nib/info.nib b/src/client/mac/sender/Breakpad.nib/info.nib
deleted file mode 100644
index e39a8e5..0000000
--- a/src/client/mac/sender/Breakpad.nib/info.nib
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IBFramework Version</key>
-	<string>676</string>
-	<key>IBLastKnownRelativeProjectPath</key>
-	<string>../Breakpad.xcodeproj</string>
-	<key>IBOldestOS</key>
-	<integer>5</integer>
-	<key>IBOpenObjects</key>
-	<array>
-		<integer>132</integer>
-	</array>
-	<key>IBSystem Version</key>
-	<string>9J61</string>
-	<key>targetFramework</key>
-	<string>IBCocoaFramework</string>
-</dict>
-</plist>
diff --git a/src/client/mac/sender/Breakpad.nib/keyedobjects.nib b/src/client/mac/sender/Breakpad.nib/keyedobjects.nib
deleted file mode 100644
index e370206..0000000
--- a/src/client/mac/sender/Breakpad.nib/keyedobjects.nib
+++ /dev/null
Binary files differ
diff --git a/src/client/mac/sender/Breakpad.xib b/src/client/mac/sender/Breakpad.xib
new file mode 100644
index 0000000..7966f89
--- /dev/null
+++ b/src/client/mac/sender/Breakpad.xib
@@ -0,0 +1,1140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+	<data>
+		<int key="IBDocument.SystemTarget">1050</int>
+		<string key="IBDocument.SystemVersion">10F569</string>
+		<string key="IBDocument.InterfaceBuilderVersion">762</string>
+		<string key="IBDocument.AppKitVersion">1038.29</string>
+		<string key="IBDocument.HIToolboxVersion">461.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<object class="NSArray" key="dict.sortedKeys" id="0">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+			</object>
+			<object class="NSMutableArray" key="dict.values">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+			</object>
+		</object>
+		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+		</object>
+		<reference key="IBDocument.PluginDependencies" ref="0"/>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<reference key="dict.sortedKeys" ref="0"/>
+			<object class="NSMutableArray" key="dict.values">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+			</object>
+		</object>
+		<object class="NSMutableArray" key="IBDocument.RootObjects" id="504246249">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<object class="NSCustomObject" id="273934324">
+				<string key="NSClassName">Reporter</string>
+			</object>
+			<object class="NSCustomObject" id="388635980">
+				<string key="NSClassName">FirstResponder</string>
+			</object>
+			<object class="NSCustomObject" id="220995958">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSWindowTemplate" id="762998835">
+				<int key="NSWindowStyleMask">1</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{72, 251}, {490, 489}}</string>
+				<int key="NSWTFlags">536871936</int>
+				<string key="NSWindowTitle"/>
+				<string key="NSWindowClass">NSWindow</string>
+				<nil key="NSViewClass"/>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSWindowContentMinSize">{72, 5}</string>
+				<object class="NSView" key="NSWindowView" id="197525436">
+					<nil key="NSNextResponder"/>
+					<int key="NSvFlags">264</int>
+					<object class="NSMutableArray" key="NSSubviews">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSBox" id="469837363">
+							<reference key="NSNextResponder" ref="197525436"/>
+							<int key="NSvFlags">272</int>
+							<object class="NSMutableArray" key="NSSubviews">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSView" id="966817352">
+									<reference key="NSNextResponder" ref="469837363"/>
+									<int key="NSvFlags">256</int>
+									<object class="NSMutableArray" key="NSSubviews">
+										<bool key="EncodedWithXMLCoder">YES</bool>
+										<object class="NSTextField" id="997378142">
+											<reference key="NSNextResponder" ref="966817352"/>
+											<int key="NSvFlags">290</int>
+											<string key="NSFrame">{{17, 36}, {456, 70}}</string>
+											<reference key="NSSuperview" ref="966817352"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="509794736">
+												<int key="NSCellFlags">67239424</int>
+												<int key="NSCellFlags2">272760832</int>
+												<string key="NSContents">Providing your email address is optional and will allow us contact you in case we need more details. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed arcu urna, pulvinar sit amet, tincidunt ac, fermentum ut, ligula. Quisque mi. Duis lectus. Vestibulum velit. Morbi turpis. Nunc at diam consectetur turpis volutpat tristique. Donec quis diam. Suspendisse scelerisque.</string>
+												<object class="NSFont" key="NSSupport" id="26">
+													<string key="NSName">LucidaGrande</string>
+													<double key="NSSize">11</double>
+													<int key="NSfFlags">3100</int>
+												</object>
+												<reference key="NSControlView" ref="997378142"/>
+												<object class="NSColor" key="NSBackgroundColor" id="420457920">
+													<int key="NSColorSpace">6</int>
+													<string key="NSCatalogName">System</string>
+													<string key="NSColorName">controlColor</string>
+													<object class="NSColor" key="NSColor">
+														<int key="NSColorSpace">3</int>
+														<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+													</object>
+												</object>
+												<object class="NSColor" key="NSTextColor" id="800255527">
+													<int key="NSColorSpace">6</int>
+													<string key="NSCatalogName">System</string>
+													<string key="NSColorName">controlTextColor</string>
+													<object class="NSColor" key="NSColor" id="908763363">
+														<int key="NSColorSpace">3</int>
+														<bytes key="NSWhite">MAA</bytes>
+													</object>
+												</object>
+											</object>
+										</object>
+										<object class="NSTextField" id="975305147">
+											<reference key="NSNextResponder" ref="966817352"/>
+											<int key="NSvFlags">290</int>
+											<string key="NSFrame">{{87, 9}, {195, 19}}</string>
+											<reference key="NSSuperview" ref="966817352"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="592393645">
+												<int key="NSCellFlags">-1804468671</int>
+												<int key="NSCellFlags2">272761856</int>
+												<string key="NSContents"/>
+												<reference key="NSSupport" ref="26"/>
+												<string key="NSPlaceholderString">optional</string>
+												<reference key="NSControlView" ref="975305147"/>
+												<bool key="NSDrawsBackground">YES</bool>
+												<object class="NSColor" key="NSBackgroundColor" id="128478752">
+													<int key="NSColorSpace">6</int>
+													<string key="NSCatalogName">System</string>
+													<string key="NSColorName">textBackgroundColor</string>
+													<object class="NSColor" key="NSColor">
+														<int key="NSColorSpace">3</int>
+														<bytes key="NSWhite">MQA</bytes>
+													</object>
+												</object>
+												<object class="NSColor" key="NSTextColor" id="734930533">
+													<int key="NSColorSpace">6</int>
+													<string key="NSCatalogName">System</string>
+													<string key="NSColorName">textColor</string>
+													<reference key="NSColor" ref="908763363"/>
+												</object>
+											</object>
+										</object>
+										<object class="NSTextField" id="268211031">
+											<reference key="NSNextResponder" ref="966817352"/>
+											<int key="NSvFlags">292</int>
+											<string key="NSFrame">{{17, 11}, {65, 14}}</string>
+											<reference key="NSSuperview" ref="966817352"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="461570326">
+												<int key="NSCellFlags">68288064</int>
+												<int key="NSCellFlags2">71435264</int>
+												<string key="NSContents">EmailLabel:</string>
+												<reference key="NSSupport" ref="26"/>
+												<reference key="NSControlView" ref="268211031"/>
+												<reference key="NSBackgroundColor" ref="420457920"/>
+												<reference key="NSTextColor" ref="800255527"/>
+											</object>
+										</object>
+										<object class="NSButton" id="538303250">
+											<reference key="NSNextResponder" ref="966817352"/>
+											<int key="NSvFlags">289</int>
+											<string key="NSFrame">{{456, 10}, {16, 17}}</string>
+											<reference key="NSSuperview" ref="966817352"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSButtonCell" key="NSCell" id="778004767">
+												<int key="NSCellFlags">-2080244224</int>
+												<int key="NSCellFlags2">0</int>
+												<string key="NSContents">Privacy Policy</string>
+												<object class="NSFont" key="NSSupport" id="222882491">
+													<string key="NSName">LucidaGrande</string>
+													<double key="NSSize">13</double>
+													<int key="NSfFlags">1044</int>
+												</object>
+												<reference key="NSControlView" ref="538303250"/>
+												<int key="NSButtonFlags">-2040250113</int>
+												<int key="NSButtonFlags2">36</int>
+												<object class="NSCustomResource" key="NSNormalImage">
+													<string key="NSClassName">NSImage</string>
+													<string key="NSResourceName">goArrow</string>
+												</object>
+												<string key="NSAlternateContents"/>
+												<string key="NSKeyEquivalent"/>
+												<int key="NSPeriodicDelay">400</int>
+												<int key="NSPeriodicInterval">75</int>
+											</object>
+										</object>
+										<object class="NSTextField" id="655227981">
+											<reference key="NSNextResponder" ref="966817352"/>
+											<int key="NSvFlags">289</int>
+											<string key="NSFrame">{{355, 11}, {100, 14}}</string>
+											<reference key="NSSuperview" ref="966817352"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="1012850565">
+												<int key="NSCellFlags">68288064</int>
+												<int key="NSCellFlags2">4326400</int>
+												<string key="NSContents">PrivacyPolicyLabel</string>
+												<reference key="NSSupport" ref="26"/>
+												<reference key="NSControlView" ref="655227981"/>
+												<reference key="NSBackgroundColor" ref="420457920"/>
+												<reference key="NSTextColor" ref="800255527"/>
+											</object>
+										</object>
+									</object>
+									<string key="NSFrameSize">{490, 114}</string>
+									<reference key="NSSuperview" ref="469837363"/>
+								</object>
+							</object>
+							<string key="NSFrame">{{0, 51}, {490, 114}}</string>
+							<reference key="NSSuperview" ref="197525436"/>
+							<string key="NSOffsets">{0, 0}</string>
+							<object class="NSTextFieldCell" key="NSTitleCell">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<string key="NSContents">Title</string>
+								<object class="NSFont" key="NSSupport" id="668643277">
+									<string key="NSName">LucidaGrande</string>
+									<double key="NSSize">11</double>
+									<int key="NSfFlags">16</int>
+								</object>
+								<reference key="NSBackgroundColor" ref="128478752"/>
+								<object class="NSColor" key="NSTextColor">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+								</object>
+							</object>
+							<reference key="NSContentView" ref="966817352"/>
+							<int key="NSBorderType">0</int>
+							<int key="NSBoxType">3</int>
+							<int key="NSTitlePosition">0</int>
+							<bool key="NSTransparent">NO</bool>
+						</object>
+						<object class="NSButton" id="219938755">
+							<reference key="NSNextResponder" ref="197525436"/>
+							<int key="NSvFlags">289</int>
+							<string key="NSFrame">{{330, 12}, {146, 32}}</string>
+							<reference key="NSSuperview" ref="197525436"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="733475259">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">134217728</int>
+								<string key="NSContents">SendReportLabel</string>
+								<reference key="NSSupport" ref="222882491"/>
+								<reference key="NSControlView" ref="219938755"/>
+								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags2">129</int>
+								<reference key="NSAlternateImage" ref="222882491"/>
+								<string key="NSAlternateContents"/>
+								<string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSButton" id="409721323">
+							<reference key="NSNextResponder" ref="197525436"/>
+							<int key="NSvFlags">289</int>
+							<string key="NSFrame">{{214, 12}, {116, 32}}</string>
+							<reference key="NSSuperview" ref="197525436"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="586160416">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">134217728</int>
+								<string key="NSContents">CancelLabel</string>
+								<reference key="NSSupport" ref="222882491"/>
+								<reference key="NSControlView" ref="409721323"/>
+								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags2">129</int>
+								<reference key="NSAlternateImage" ref="222882491"/>
+								<string key="NSAlternateContents"/>
+								<string type="base64-UTF8" key="NSKeyEquivalent">Gw</string>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSBox" id="468151514">
+							<reference key="NSNextResponder" ref="197525436"/>
+							<int key="NSvFlags">256</int>
+							<object class="NSMutableArray" key="NSSubviews">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSView" id="1059038623">
+									<reference key="NSNextResponder" ref="468151514"/>
+									<int key="NSvFlags">256</int>
+									<object class="NSMutableArray" key="NSSubviews">
+										<bool key="EncodedWithXMLCoder">YES</bool>
+										<object class="NSTextField" id="375247105">
+											<reference key="NSNextResponder" ref="1059038623"/>
+											<int key="NSvFlags">266</int>
+											<string key="NSFrame">{{17, 83}, {456, 154}}</string>
+											<reference key="NSSuperview" ref="1059038623"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="188082030">
+												<int key="NSCellFlags">67239424</int>
+												<int key="NSCellFlags2">272760832</int>
+												<string type="base64-UTF8" key="NSContents">VGhlIHN5c3RlbSBhbmQgb3RoZXIgYXBwbGljYXRpb25zIGhhdmUgbm90IGJlZW4gYWZmZWN0ZWQuIEEg
+cmVwb3J0IGhhcyBiZWVuIGNyZWF0ZWQgdGhhdCB5b3UgY2FuIHNlbmQgdG8gPFJlYWxseSBMb25nIENv
+bXBhbnkgTmFtZT4gdG8gaGVscCBpZGVudGlmeSB0aGUgcHJvYmxlbS4gTG9yZW0gaXBzdW0gZG9sb3Ig
+c2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gU2VkIGFyY3UgdXJuYSwgcHVsdmlu
+YXIgc2l0IGFtZXQsIHRpbmNpZHVudCBhYywgZmVybWVudHVtIHV0LCBsaWd1bGEuIFF1aXNxdWUgbWku
+IER1aXMgbGVjdHVzLiBWZXN0aWJ1bHVtIHZlbGl0LiBNb3JiaSB0dXJwaXMuIE51bmMgYXQgZGlhbSBj
+b25zZWN0ZXR1ciB0dXJwaXMgdm9sdXRwYXQgdHJpc3RpcXVlLiBEb25lYyBxdWlzIGRpYW0uIFN1c3Bl
+bmRpc3NlIHNjZWxlcmlzcXVlLiBRdWlzcXVlIHB1bHZpbmFyIG1pIGlkIHB1cnVzLiBFdGlhbSB2aXRh
+ZSB0dXJwaXMgdml0YWUgbmVxdWUgcG9ydGEgY29uZ3VlLgoKUGxlYXNlIGhlbHAgdXMgZml4IHRoZSBw
+cm9ibGVtIGJ5IGRlc2NyaWJpbmcgd2hhdCBoYXBwZW5lZCBiZWZvcmUgdGhlIGNyYXNoLiBMb3JlbSBp
+cHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LiBTZWQgYXJjdSB1
+cm5hLCBwdWx2aW5hciBzaXQgYW1ldCwgdGluY2lkdW50IGFjLCBmZXJtZW50dW0gdXQsIGxpZ3VsYS4g
+UXVpc3F1ZSBtaS4gRHVpcyBsZWN0dXMuA</string>
+												<reference key="NSSupport" ref="26"/>
+												<reference key="NSControlView" ref="375247105"/>
+												<reference key="NSBackgroundColor" ref="420457920"/>
+												<reference key="NSTextColor" ref="800255527"/>
+											</object>
+										</object>
+										<object class="NSTextField" id="996404163">
+											<reference key="NSNextResponder" ref="1059038623"/>
+											<int key="NSvFlags">274</int>
+											<string key="NSFrame">{{20, 14}, {450, 61}}</string>
+											<reference key="NSSuperview" ref="1059038623"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="242564194">
+												<int key="NSCellFlags">341966337</int>
+												<int key="NSCellFlags2">272760832</int>
+												<string key="NSContents">Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 Line 2 Line 2 Line 2 Line 2 Line 2 Line 2 Line 2 Line 2 Line 2 Line 2 Line 2 Line 2 Line 3 Line 3 Line 3 Line 3 Line 3 Line 3 Line 3 Line 3 Line 3 Line 3 Line 3 Line 3 Line 4 Line 4 Line 4 Line 4 Line 4 Line 4 Line 4 Line 4 Line 4 Line 4 Line 4 Line 4 </string>
+												<reference key="NSSupport" ref="26"/>
+												<reference key="NSControlView" ref="996404163"/>
+												<bool key="NSDrawsBackground">YES</bool>
+												<reference key="NSBackgroundColor" ref="128478752"/>
+												<reference key="NSTextColor" ref="734930533"/>
+											</object>
+										</object>
+										<object class="NSBox" id="667608859">
+											<reference key="NSNextResponder" ref="1059038623"/>
+											<int key="NSvFlags">256</int>
+											<object class="NSMutableArray" key="NSSubviews">
+												<bool key="EncodedWithXMLCoder">YES</bool>
+												<object class="NSView" id="971021844">
+													<reference key="NSNextResponder" ref="667608859"/>
+													<int key="NSvFlags">256</int>
+													<object class="NSMutableArray" key="NSSubviews">
+														<bool key="EncodedWithXMLCoder">YES</bool>
+														<object class="NSTextField" id="1032334641">
+															<reference key="NSNextResponder" ref="971021844"/>
+															<int key="NSvFlags">266</int>
+															<string key="NSFrame">{{85, 10}, {381, 54}}</string>
+															<reference key="NSSuperview" ref="971021844"/>
+															<bool key="NSEnabled">YES</bool>
+															<object class="NSTextFieldCell" key="NSCell" id="316557784">
+																<int key="NSCellFlags">67239424</int>
+																<int key="NSCellFlags2">272629760</int>
+																<string key="NSContents">The application &lt;Really Long App Name Here&gt; has quit unexpectedly.</string>
+																<object class="NSFont" key="NSSupport">
+																	<string key="NSName">LucidaGrande-Bold</string>
+																	<double key="NSSize">14</double>
+																	<int key="NSfFlags">16</int>
+																</object>
+																<reference key="NSControlView" ref="1032334641"/>
+																<reference key="NSBackgroundColor" ref="420457920"/>
+																<reference key="NSTextColor" ref="800255527"/>
+															</object>
+														</object>
+														<object class="NSImageView" id="594334723">
+															<reference key="NSNextResponder" ref="971021844"/>
+															<int key="NSvFlags">268</int>
+															<object class="NSMutableSet" key="NSDragTypes">
+																<bool key="EncodedWithXMLCoder">YES</bool>
+																<object class="NSArray" key="set.sortedObjects">
+																	<bool key="EncodedWithXMLCoder">YES</bool>
+																	<string>Apple PDF pasteboard type</string>
+																	<string>Apple PICT pasteboard type</string>
+																	<string>Apple PNG pasteboard type</string>
+																	<string>NSFilenamesPboardType</string>
+																	<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
+																	<string>NeXT TIFF v4.0 pasteboard type</string>
+																</object>
+															</object>
+															<string key="NSFrame">{{16, 0}, {64, 64}}</string>
+															<reference key="NSSuperview" ref="971021844"/>
+															<bool key="NSEnabled">YES</bool>
+															<object class="NSImageCell" key="NSCell" id="465445685">
+																<int key="NSCellFlags">130560</int>
+																<int key="NSCellFlags2">33554432</int>
+																<object class="NSCustomResource" key="NSContents">
+																	<string key="NSClassName">NSImage</string>
+																	<string key="NSResourceName">NSApplicationIcon</string>
+																</object>
+																<int key="NSAlign">0</int>
+																<int key="NSScale">0</int>
+																<int key="NSStyle">0</int>
+																<bool key="NSAnimates">NO</bool>
+															</object>
+															<bool key="NSEditable">YES</bool>
+														</object>
+													</object>
+													<string key="NSFrameSize">{482, 70}</string>
+													<reference key="NSSuperview" ref="667608859"/>
+												</object>
+											</object>
+											<string key="NSFrame">{{4, 245}, {482, 70}}</string>
+											<reference key="NSSuperview" ref="1059038623"/>
+											<string key="NSOffsets">{0, 0}</string>
+											<object class="NSTextFieldCell" key="NSTitleCell">
+												<int key="NSCellFlags">67239424</int>
+												<int key="NSCellFlags2">0</int>
+												<string key="NSContents">Title</string>
+												<reference key="NSSupport" ref="668643277"/>
+												<reference key="NSBackgroundColor" ref="128478752"/>
+												<object class="NSColor" key="NSTextColor">
+													<int key="NSColorSpace">3</int>
+													<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+												</object>
+											</object>
+											<reference key="NSContentView" ref="971021844"/>
+											<int key="NSBorderType">0</int>
+											<int key="NSBoxType">3</int>
+											<int key="NSTitlePosition">0</int>
+											<bool key="NSTransparent">NO</bool>
+										</object>
+									</object>
+									<string key="NSFrameSize">{490, 325}</string>
+									<reference key="NSSuperview" ref="468151514"/>
+								</object>
+							</object>
+							<string key="NSFrame">{{0, 160}, {490, 325}}</string>
+							<reference key="NSSuperview" ref="197525436"/>
+							<string key="NSOffsets">{0, 0}</string>
+							<object class="NSTextFieldCell" key="NSTitleCell">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<string key="NSContents">Title</string>
+								<reference key="NSSupport" ref="668643277"/>
+								<reference key="NSBackgroundColor" ref="128478752"/>
+								<object class="NSColor" key="NSTextColor">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+								</object>
+							</object>
+							<reference key="NSContentView" ref="1059038623"/>
+							<int key="NSBorderType">0</int>
+							<int key="NSBoxType">3</int>
+							<int key="NSTitlePosition">0</int>
+							<bool key="NSTransparent">NO</bool>
+						</object>
+						<object class="NSTextField" id="149448677">
+							<reference key="NSNextResponder" ref="197525436"/>
+							<int key="NSvFlags">268</int>
+							<string key="NSFrame">{{17, 20}, {163, 14}}</string>
+							<reference key="NSSuperview" ref="197525436"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSTextFieldCell" key="NSCell" id="690832321">
+								<int key="NSCellFlags">68288064</int>
+								<int key="NSCellFlags2">272630784</int>
+								<string key="NSContents">xx seconds.</string>
+								<reference key="NSSupport" ref="668643277"/>
+								<reference key="NSControlView" ref="149448677"/>
+								<reference key="NSBackgroundColor" ref="420457920"/>
+								<reference key="NSTextColor" ref="800255527"/>
+							</object>
+						</object>
+					</object>
+					<string key="NSFrameSize">{490, 489}</string>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {2560, 1578}}</string>
+				<string key="NSMinSize">{72, 27}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+			<object class="NSUserDefaultsController" id="626548788">
+				<bool key="NSSharedInstance">YES</bool>
+			</object>
+		</object>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<object class="NSMutableArray" key="connectionRecords">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">sendReport:</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="219938755"/>
+					</object>
+					<int key="connectionID">45</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">cancel:</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="409721323"/>
+					</object>
+					<int key="connectionID">46</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">showPrivacyPolicy:</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="538303250"/>
+					</object>
+					<int key="connectionID">53</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: emailValue</string>
+						<reference key="source" ref="975305147"/>
+						<reference key="destination" ref="273934324"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="975305147"/>
+							<reference key="NSDestination" ref="273934324"/>
+							<string key="NSLabel">value: emailValue</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">emailValue</string>
+							<object class="NSDictionary" key="NSOptions">
+								<string key="NS.key.0">NSNullPlaceholder</string>
+								<string key="NS.object.0">optional</string>
+							</object>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">90</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">initialFirstResponder</string>
+						<reference key="source" ref="762998835"/>
+						<reference key="destination" ref="219938755"/>
+					</object>
+					<int key="connectionID">91</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: commentsValue</string>
+						<reference key="source" ref="996404163"/>
+						<reference key="destination" ref="273934324"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="996404163"/>
+							<reference key="NSDestination" ref="273934324"/>
+							<string key="NSLabel">value: commentsValue</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">commentsValue</string>
+							<object class="NSDictionary" key="NSOptions">
+								<string key="NS.key.0">NSNullPlaceholder</string>
+								<string key="NS.object.0">optional comments</string>
+							</object>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">124</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="975305147"/>
+						<reference key="destination" ref="219938755"/>
+					</object>
+					<int key="connectionID">125</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="996404163"/>
+						<reference key="destination" ref="975305147"/>
+					</object>
+					<int key="connectionID">126</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="219938755"/>
+						<reference key="destination" ref="996404163"/>
+					</object>
+					<int key="connectionID">127</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="996404163"/>
+						<reference key="destination" ref="273934324"/>
+					</object>
+					<int key="connectionID">128</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">alertWindow_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="762998835"/>
+					</object>
+					<int key="connectionID">142</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">preEmailBox_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="468151514"/>
+					</object>
+					<int key="connectionID">150</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">headerBox_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="667608859"/>
+					</object>
+					<int key="connectionID">151</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">emailSectionBox_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="469837363"/>
+					</object>
+					<int key="connectionID">152</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">privacyLinkLabel_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="655227981"/>
+					</object>
+					<int key="connectionID">153</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">commentMessage_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="375247105"/>
+					</object>
+					<int key="connectionID">154</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">dialogTitle_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="1032334641"/>
+					</object>
+					<int key="connectionID">155</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">emailLabel_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="268211031"/>
+					</object>
+					<int key="connectionID">156</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">cancelButton_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="409721323"/>
+					</object>
+					<int key="connectionID">158</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">sendButton_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="219938755"/>
+					</object>
+					<int key="connectionID">159</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">emailEntryField_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="975305147"/>
+					</object>
+					<int key="connectionID">161</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">privacyLinkArrow_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="538303250"/>
+					</object>
+					<int key="connectionID">162</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">emailMessage_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="997378142"/>
+					</object>
+					<int key="connectionID">163</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">commentsEntryField_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="996404163"/>
+					</object>
+					<int key="connectionID">176</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: countdownMessage</string>
+						<reference key="source" ref="149448677"/>
+						<reference key="destination" ref="273934324"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="149448677"/>
+							<reference key="NSDestination" ref="273934324"/>
+							<string key="NSLabel">value: countdownMessage</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">countdownMessage</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">194</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">countdownLabel_</string>
+						<reference key="source" ref="273934324"/>
+						<reference key="destination" ref="149448677"/>
+					</object>
+					<int key="connectionID">208</int>
+				</object>
+			</object>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<object class="NSArray" key="orderedObjects">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<reference key="object" ref="0"/>
+						<reference key="children" ref="504246249"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="273934324"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="388635980"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">First Responder</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-3</int>
+						<reference key="object" ref="220995958"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Application</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="762998835"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="197525436"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Window</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">2</int>
+						<reference key="object" ref="197525436"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="219938755"/>
+							<reference ref="409721323"/>
+							<reference ref="469837363"/>
+							<reference ref="468151514"/>
+							<reference ref="149448677"/>
+						</object>
+						<reference key="parent" ref="762998835"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">12</int>
+						<reference key="object" ref="219938755"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="733475259"/>
+						</object>
+						<reference key="parent" ref="197525436"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">14</int>
+						<reference key="object" ref="409721323"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="586160416"/>
+						</object>
+						<reference key="parent" ref="197525436"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">132</int>
+						<reference key="object" ref="469837363"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="997378142"/>
+							<reference ref="975305147"/>
+							<reference ref="268211031"/>
+							<reference ref="538303250"/>
+							<reference ref="655227981"/>
+						</object>
+						<reference key="parent" ref="197525436"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">145</int>
+						<reference key="object" ref="468151514"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="375247105"/>
+							<reference ref="996404163"/>
+							<reference ref="667608859"/>
+						</object>
+						<reference key="parent" ref="197525436"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">189</int>
+						<reference key="object" ref="149448677"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="690832321"/>
+						</object>
+						<reference key="parent" ref="197525436"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">191</int>
+						<reference key="object" ref="626548788"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Shared User Defaults Controller</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">210</int>
+						<reference key="object" ref="733475259"/>
+						<reference key="parent" ref="219938755"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">211</int>
+						<reference key="object" ref="586160416"/>
+						<reference key="parent" ref="409721323"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">221</int>
+						<reference key="object" ref="690832321"/>
+						<reference key="parent" ref="149448677"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">58</int>
+						<reference key="object" ref="997378142"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="509794736"/>
+						</object>
+						<reference key="parent" ref="469837363"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">215</int>
+						<reference key="object" ref="509794736"/>
+						<reference key="parent" ref="997378142"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">18</int>
+						<reference key="object" ref="975305147"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="592393645"/>
+						</object>
+						<reference key="parent" ref="469837363"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">212</int>
+						<reference key="object" ref="592393645"/>
+						<reference key="parent" ref="975305147"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">20</int>
+						<reference key="object" ref="268211031"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="461570326"/>
+						</object>
+						<reference key="parent" ref="469837363"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">213</int>
+						<reference key="object" ref="461570326"/>
+						<reference key="parent" ref="268211031"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">48</int>
+						<reference key="object" ref="538303250"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="778004767"/>
+						</object>
+						<reference key="parent" ref="469837363"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">214</int>
+						<reference key="object" ref="778004767"/>
+						<reference key="parent" ref="538303250"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">66</int>
+						<reference key="object" ref="655227981"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="1012850565"/>
+						</object>
+						<reference key="parent" ref="469837363"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">216</int>
+						<reference key="object" ref="1012850565"/>
+						<reference key="parent" ref="655227981"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">8</int>
+						<reference key="object" ref="375247105"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="188082030"/>
+						</object>
+						<reference key="parent" ref="468151514"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">217</int>
+						<reference key="object" ref="188082030"/>
+						<reference key="parent" ref="375247105"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">116</int>
+						<reference key="object" ref="996404163"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="242564194"/>
+						</object>
+						<reference key="parent" ref="468151514"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">218</int>
+						<reference key="object" ref="242564194"/>
+						<reference key="parent" ref="996404163"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">147</int>
+						<reference key="object" ref="667608859"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="1032334641"/>
+							<reference ref="594334723"/>
+						</object>
+						<reference key="parent" ref="468151514"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">3</int>
+						<reference key="object" ref="1032334641"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="316557784"/>
+						</object>
+						<reference key="parent" ref="667608859"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">219</int>
+						<reference key="object" ref="316557784"/>
+						<reference key="parent" ref="1032334641"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">6</int>
+						<reference key="object" ref="594334723"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="465445685"/>
+						</object>
+						<reference key="parent" ref="667608859"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">220</int>
+						<reference key="object" ref="465445685"/>
+						<reference key="parent" ref="594334723"/>
+					</object>
+				</object>
+			</object>
+			<object class="NSMutableDictionary" key="flattenedProperties">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="NSArray" key="dict.sortedKeys">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<string>-3.ImportedFromIB2</string>
+					<string>1.IBEditorWindowLastContentRect</string>
+					<string>1.IBWindowTemplateEditedContentRect</string>
+					<string>1.ImportedFromIB2</string>
+					<string>1.windowTemplate.hasMinSize</string>
+					<string>1.windowTemplate.minSize</string>
+					<string>116.CustomClassName</string>
+					<string>116.ImportedFromIB2</string>
+					<string>12.ImportedFromIB2</string>
+					<string>132.ImportedFromIB2</string>
+					<string>14.ImportedFromIB2</string>
+					<string>145.ImportedFromIB2</string>
+					<string>147.ImportedFromIB2</string>
+					<string>18.CustomClassName</string>
+					<string>18.ImportedFromIB2</string>
+					<string>189.ImportedFromIB2</string>
+					<string>191.ImportedFromIB2</string>
+					<string>2.ImportedFromIB2</string>
+					<string>20.ImportedFromIB2</string>
+					<string>3.ImportedFromIB2</string>
+					<string>48.ImportedFromIB2</string>
+					<string>58.ImportedFromIB2</string>
+					<string>6.ImportedFromIB2</string>
+					<string>66.ImportedFromIB2</string>
+					<string>8.ImportedFromIB2</string>
+				</object>
+				<object class="NSMutableArray" key="dict.values">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<boolean value="YES"/>
+					<string>{{0, 656}, {490, 489}}</string>
+					<string>{{0, 656}, {490, 489}}</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<string>{72, 5}</string>
+					<string>LengthLimitingTextField</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<string>LengthLimitingTextField</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+				</object>
+			</object>
+			<object class="NSMutableDictionary" key="unlocalizedProperties">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<reference key="dict.sortedKeys" ref="0"/>
+				<object class="NSMutableArray" key="dict.values">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+				</object>
+			</object>
+			<nil key="activeLocalization"/>
+			<object class="NSMutableDictionary" key="localizations">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<reference key="dict.sortedKeys" ref="0"/>
+				<object class="NSMutableArray" key="dict.values">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+				</object>
+			</object>
+			<nil key="sourceID"/>
+			<int key="maxID">221</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="IBPartialClassDescription">
+					<string key="className">LengthLimitingTextField</string>
+					<string key="superclassName">NSTextField</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">Reporter</string>
+					<string key="superclassName">NSObject</string>
+					<object class="NSMutableDictionary" key="actions">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>cancel:</string>
+							<string>sendReport:</string>
+							<string>showPrivacyPolicy:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="outlets">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>alertWindow_</string>
+							<string>cancelButton_</string>
+							<string>commentMessage_</string>
+							<string>commentsEntryField_</string>
+							<string>countdownLabel_</string>
+							<string>dialogTitle_</string>
+							<string>emailEntryField_</string>
+							<string>emailLabel_</string>
+							<string>emailMessage_</string>
+							<string>emailSectionBox_</string>
+							<string>headerBox_</string>
+							<string>preEmailBox_</string>
+							<string>privacyLinkArrow_</string>
+							<string>privacyLinkLabel_</string>
+							<string>sendButton_</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>NSWindow</string>
+							<string>NSButton</string>
+							<string>NSTextField</string>
+							<string>LengthLimitingTextField</string>
+							<string>NSTextField</string>
+							<string>NSTextField</string>
+							<string>LengthLimitingTextField</string>
+							<string>NSTextField</string>
+							<string>NSTextField</string>
+							<string>NSBox</string>
+							<string>NSBox</string>
+							<string>NSBox</string>
+							<string>NSView</string>
+							<string>NSTextField</string>
+							<string>NSButton</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+			</object>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3000" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<string key="IBDocument.LastKnownRelativeProjectPath">../Breakpad.xcodeproj</string>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<object class="NSArray" key="dict.sortedKeys">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<string>NSApplicationIcon</string>
+				<string>goArrow</string>
+			</object>
+			<object class="NSMutableArray" key="dict.values">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<string>{128, 128}</string>
+				<string>{128, 128}</string>
+			</object>
+		</object>
+	</data>
+</archive>
diff --git a/src/client/mac/sender/crash_report_sender.h b/src/client/mac/sender/crash_report_sender.h
index ca5b307..c0728ca 100644
--- a/src/client/mac/sender/crash_report_sender.h
+++ b/src/client/mac/sender/crash_report_sender.h
@@ -35,6 +35,7 @@
 #include <Foundation/Foundation.h>
 
 #include "client/mac/Framework/Breakpad.h"
+#import "GTMDefines.h"
 
 #define kClientIdPreferenceKey @"clientid"
 
@@ -53,10 +54,10 @@
 // work in the middle of a validation.
 @interface LengthLimitingTextField : NSTextField {
   @private
-   unsigned int maximumLength_;
+   NSUInteger maximumLength_;
 }
 
-- (void) setMaximumLength:(unsigned int)maxLength;
+- (void)setMaximumLength:(NSUInteger)maxLength;
 @end
 
 @interface Reporter : NSObject {
diff --git a/src/client/mac/sender/crash_report_sender.m b/src/client/mac/sender/crash_report_sender.m
index 6aa8887..cdee262 100644
--- a/src/client/mac/sender/crash_report_sender.m
+++ b/src/client/mac/sender/crash_report_sender.m
@@ -56,20 +56,20 @@
 
 @interface NSView (ResizabilityExtentions)
 // Shifts the view vertically by the given amount.
-- (void)breakpad_shiftVertically:(float)offset;
+- (void)breakpad_shiftVertically:(CGFloat)offset;
 
 // Shifts the view horizontally by the given amount.
-- (void)breakpad_shiftHorizontally:(float)offset;
+- (void)breakpad_shiftHorizontally:(CGFloat)offset;
 @end
 
 @implementation NSView (ResizabilityExtentions)
-- (void)breakpad_shiftVertically:(float)offset {
+- (void)breakpad_shiftVertically:(CGFloat)offset {
   NSPoint origin = [self frame].origin;
   origin.y += offset;
   [self setFrameOrigin:origin];
 }
 
-- (void)breakpad_shiftHorizontally:(float)offset {
+- (void)breakpad_shiftHorizontally:(CGFloat)offset {
   NSPoint origin = [self frame].origin;
   origin.x += offset;
   [self setFrameOrigin:origin];
@@ -79,11 +79,11 @@
 @interface NSWindow (ResizabilityExtentions)
 // Adjusts the window height by heightDelta relative to its current height,
 // keeping all the content at the same size.
-- (void)breakpad_adjustHeight:(float)heightDelta;
+- (void)breakpad_adjustHeight:(CGFloat)heightDelta;
 @end
 
 @implementation NSWindow (ResizabilityExtentions)
-- (void)breakpad_adjustHeight:(float)heightDelta {
+- (void)breakpad_adjustHeight:(CGFloat)heightDelta {
   [[self contentView] setAutoresizesSubviews:NO];
 
   NSRect windowFrame = [self frame];
@@ -101,16 +101,16 @@
 // Grows or shrinks the height of the field to the minimum required to show the
 // current text, preserving the existing width and origin.
 // Returns the change in height.
-- (float)breakpad_adjustHeightToFit;
+- (CGFloat)breakpad_adjustHeightToFit;
 
 // Grows or shrinks the width of the field to the minimum required to show the
 // current text, preserving the existing height and origin.
 // Returns the change in width.
-- (float)breakpad_adjustWidthToFit;
+- (CGFloat)breakpad_adjustWidthToFit;
 @end
 
 @implementation NSTextField (ResizabilityExtentions)
-- (float)breakpad_adjustHeightToFit {
+- (CGFloat)breakpad_adjustHeightToFit {
   NSRect oldFrame = [self frame];
   // Starting with the 10.5 SDK, height won't grow, so make it huge to start.
   NSRect presizeFrame = oldFrame;
@@ -125,7 +125,7 @@
   return newSize.height - NSHeight(oldFrame);
 }
 
-- (float)breakpad_adjustWidthToFit {
+- (CGFloat)breakpad_adjustWidthToFit {
   NSRect oldFrame = [self frame];
   [self sizeToFit];
   return NSWidth([self frame]) - NSWidth(oldFrame);
@@ -136,11 +136,11 @@
 // Resizes to fit the label using IB-style size-to-fit metrics and enforcing a
 // minimum width of 70, while preserving the right edge location.
 // Returns the change in width.
-- (float)breakpad_smartSizeToFit;
+- (CGFloat)breakpad_smartSizeToFit;
 @end
 
 @implementation NSButton (ResizabilityExtentions)
-- (float)breakpad_smartSizeToFit {
+- (CGFloat)breakpad_smartSizeToFit {
   NSRect oldFrame = [self frame];
   [self sizeToFit];
   NSRect newFrame = [self frame];
@@ -218,7 +218,8 @@
 // Run an alert window with the given timeout. Returns
 // NSRunStoppedResponse if the timeout is exceeded. A timeout of 0
 // queues the message immediately in the modal run loop.
-- (int)runModalWindow:(NSWindow*)window withTimeout:(NSTimeInterval)timeout;
+- (NSInteger)runModalWindow:(NSWindow*)window 
+                withTimeout:(NSTimeInterval)timeout;
 
 // Returns a unique client id (user-specific), creating a persistent
 // one in the user defaults, if necessary.
@@ -386,7 +387,7 @@
   }
 
   // Otherwise, if we have no client id, generate one!
-  srandom([[NSDate date] timeIntervalSince1970]);
+  srandom((int)[[NSDate date] timeIntervalSince1970]);
   long clientId1 = random();
   long clientId2 = random();
   long clientId3 = random();
@@ -403,8 +404,8 @@
   unsigned int logFileCounter = 0;
 
   NSString *logPath;
-  int logFileTailSize = [[parameters_ objectForKey:@BREAKPAD_LOGFILE_UPLOAD_SIZE]
-                          intValue];
+  size_t logFileTailSize =
+      [[parameters_ objectForKey:@BREAKPAD_LOGFILE_UPLOAD_SIZE] intValue];
 
   NSMutableArray *logFilenames; // An array of NSString, one per log file
   logFilenames = [[NSMutableArray alloc] init];
@@ -544,7 +545,7 @@
   // Get the timeout value for the notification.
   NSTimeInterval timeout = [self messageTimeout];
 
-  int buttonPressed = NSAlertAlternateReturn;
+  NSInteger buttonPressed = NSAlertAlternateReturn;
   // Determine whether we should create a text box for user feedback.
   if ([self shouldRequestComments]) {
     BOOL didLoadNib = [NSBundle loadNibNamed:@"Breakpad" owner:self];
@@ -592,7 +593,7 @@
   [commentMessage_ setStringValue:[NSString stringWithFormat:@"%@\n\n%@",
                                    [self explanatoryDialogText],
                                    NSLocalizedString(@"commentsMsg", @"")]];
-  float commentHeightDelta = [commentMessage_ breakpad_adjustHeightToFit];
+  CGFloat commentHeightDelta = [commentMessage_ breakpad_adjustHeightToFit];
   [headerBox_ breakpad_shiftVertically:commentHeightDelta];
   [alertWindow_ breakpad_adjustHeight:commentHeightDelta];
 
@@ -600,7 +601,7 @@
   // section depending on whether or not we are asking for email.
   if (includeEmail) {
     [emailMessage_ setStringValue:NSLocalizedString(@"emailMsg", @"")];
-    float emailHeightDelta = [emailMessage_ breakpad_adjustHeightToFit];
+    CGFloat emailHeightDelta = [emailMessage_ breakpad_adjustHeightToFit];
     [preEmailBox_ breakpad_shiftVertically:emailHeightDelta];
     [alertWindow_ breakpad_adjustHeight:emailHeightDelta];
   } else {
@@ -609,7 +610,7 @@
 
   // Localize the email label, and shift the associated text field.
   [emailLabel_ setStringValue:NSLocalizedString(@"emailLabel", @"")];
-  float emailLabelWidthDelta = [emailLabel_ breakpad_adjustWidthToFit];
+  CGFloat emailLabelWidthDelta = [emailLabel_ breakpad_adjustWidthToFit];
   [emailEntryField_ breakpad_shiftHorizontally:emailLabelWidthDelta];
 
   // Localize the placeholder text.
@@ -620,12 +621,12 @@
 
   // Localize the privacy policy label, and keep it right-aligned to the arrow.
   [privacyLinkLabel_ setStringValue:NSLocalizedString(@"privacyLabel", @"")];
-  float privacyLabelWidthDelta = [privacyLinkLabel_ breakpad_adjustWidthToFit];
+  CGFloat privacyLabelWidthDelta = [privacyLinkLabel_ breakpad_adjustWidthToFit];
   [privacyLinkLabel_ breakpad_shiftHorizontally:(-privacyLabelWidthDelta)];
 
   // Localize the buttons, and keep the cancel button at the right distance.
   [sendButton_ setTitle:NSLocalizedString(@"sendReportButton", @"")];
-  float sendButtonWidthDelta = [sendButton_ breakpad_smartSizeToFit];
+  CGFloat sendButtonWidthDelta = [sendButton_ breakpad_smartSizeToFit];
   [cancelButton_ breakpad_shiftHorizontally:(-sendButtonWidthDelta)];
   [cancelButton_ setTitle:NSLocalizedString(@"cancelButton", @"")];
   [cancelButton_ breakpad_smartSizeToFit];
@@ -633,12 +634,13 @@
 
 - (void)removeEmailPrompt {
   [emailSectionBox_ setHidden:YES];
-  float emailSectionHeight = NSHeight([emailSectionBox_ frame]);
+  CGFloat emailSectionHeight = NSHeight([emailSectionBox_ frame]);
   [preEmailBox_ breakpad_shiftVertically:(-emailSectionHeight)];
   [alertWindow_ breakpad_adjustHeight:(-emailSectionHeight)];
 }
 
-- (int)runModalWindow:(NSWindow*)window withTimeout:(NSTimeInterval)timeout {
+- (NSInteger)runModalWindow:(NSWindow*)window 
+                withTimeout:(NSTimeInterval)timeout {
   // Queue a |stopModal| message to be performed in |timeout| seconds.
   if (timeout > 0.001) {
     remainingDialogTime_ = timeout;
@@ -653,7 +655,7 @@
   // Run the window modally and wait for either a |stopModal| message or a
   // button click.
   [NSApp activateIgnoringOtherApps:YES];
-  int returnMethod = [NSApp runModalForWindow:window];
+  NSInteger returnMethod = [NSApp runModalForWindow:window];
 
   return returnMethod;
 }
@@ -717,7 +719,7 @@
   
   if (remainingDialogTime_ > 59) {
     // calculate minutes remaining for UI purposes
-    displayedTimeLeft = (remainingDialogTime_ / 60);
+    displayedTimeLeft = (int)(remainingDialogTime_ / 60);
     
     if (displayedTimeLeft == 1) {
       formatString = NSLocalizedString(@"countdownMsgMinuteSingular", @"");
@@ -725,8 +727,8 @@
       formatString = NSLocalizedString(@"countdownMsgMinutesPlural", @"");
     }
   } else {
-    displayedTimeLeft = remainingDialogTime_;
-    if (remainingDialogTime_ == 1) {
+    displayedTimeLeft = (int)remainingDialogTime_;
+    if (displayedTimeLeft == 1) {
       formatString = NSLocalizedString(@"countdownMsgSecondSingular", @"");
     } else {
       formatString = NSLocalizedString(@"countdownMsgSecondsPlural", @"");
@@ -797,7 +799,8 @@
   NSTimeInterval now = CFAbsoluteTimeGetCurrent();
   NSTimeInterval spanSeconds = (now - lastTime);
 
-  [programDict setObject:[NSNumber numberWithFloat:now] forKey:kLastSubmission];
+  [programDict setObject:[NSNumber numberWithDouble:now] 
+                  forKey:kLastSubmission];
   [ud setObject:programDict forKey:program];
   [ud synchronize];
 
@@ -1055,7 +1058,7 @@
 //=============================================================================
 @implementation LengthLimitingTextField
 
-- (void) setMaximumLength:(unsigned int)maxLength {
+- (void)setMaximumLength:(NSUInteger)maxLength {
   maximumLength_ = maxLength;
 }
 
@@ -1072,7 +1075,7 @@
   }
   // Figure out what the new string length would be, taking into
   // account user selections.
-  int newStringLength =
+  NSUInteger newStringLength =
     [[textView string] length] - affectedCharRange.length +
     [replacementString length];
   if (newStringLength > maximumLength_) {
@@ -1088,7 +1091,7 @@
   NSText* fieldEditor = [self currentEditor];
   if (fieldEditor != nil) {
     // Check for a single "Command" modifier
-    unsigned int modifiers = [event modifierFlags];
+    NSUInteger modifiers = [event modifierFlags];
     modifiers &= NSDeviceIndependentModifierFlagsMask;
     if (modifiers == NSCommandKeyMask) {
       // Now, check for Select All, Cut, Copy, or Paste key equivalents.
diff --git a/src/client/mac/sender/da.lproj/InfoPlist.strings b/src/client/mac/sender/da.lproj/InfoPlist.strings
new file mode 100644
index 0000000..4cfd32c
--- /dev/null
+++ b/src/client/mac/sender/da.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/client/mac/sender/da.lproj/Localizable.strings b/src/client/mac/sender/da.lproj/Localizable.strings
new file mode 100644
index 0000000..2b8bb96
--- /dev/null
+++ b/src/client/mac/sender/da.lproj/Localizable.strings
Binary files differ
diff --git a/src/client/mac/sender/de.lproj/InfoPlist.strings b/src/client/mac/sender/de.lproj/InfoPlist.strings
new file mode 100644
index 0000000..3180973
--- /dev/null
+++ b/src/client/mac/sender/de.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/client/mac/sender/de.lproj/Localizable.strings b/src/client/mac/sender/de.lproj/Localizable.strings
new file mode 100644
index 0000000..73da36f
--- /dev/null
+++ b/src/client/mac/sender/de.lproj/Localizable.strings
Binary files differ
diff --git a/src/client/mac/sender/es.lproj/InfoPlist.strings b/src/client/mac/sender/es.lproj/InfoPlist.strings
new file mode 100644
index 0000000..a82c013
--- /dev/null
+++ b/src/client/mac/sender/es.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/client/mac/sender/es.lproj/Localizable.strings b/src/client/mac/sender/es.lproj/Localizable.strings
new file mode 100644
index 0000000..c31d6f4
--- /dev/null
+++ b/src/client/mac/sender/es.lproj/Localizable.strings
Binary files differ
diff --git a/src/client/mac/sender/fr.lproj/InfoPlist.strings b/src/client/mac/sender/fr.lproj/InfoPlist.strings
new file mode 100644
index 0000000..4cfd32c
--- /dev/null
+++ b/src/client/mac/sender/fr.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/client/mac/sender/fr.lproj/Localizable.strings b/src/client/mac/sender/fr.lproj/Localizable.strings
new file mode 100644
index 0000000..c32f8ff
--- /dev/null
+++ b/src/client/mac/sender/fr.lproj/Localizable.strings
Binary files differ
diff --git a/src/client/mac/sender/it.lproj/InfoPlist.strings b/src/client/mac/sender/it.lproj/InfoPlist.strings
new file mode 100644
index 0000000..4cfd32c
--- /dev/null
+++ b/src/client/mac/sender/it.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/client/mac/sender/it.lproj/Localizable.strings b/src/client/mac/sender/it.lproj/Localizable.strings
new file mode 100644
index 0000000..a4b7fd3
--- /dev/null
+++ b/src/client/mac/sender/it.lproj/Localizable.strings
Binary files differ
diff --git a/src/client/mac/sender/ja.lproj/InfoPlist.strings b/src/client/mac/sender/ja.lproj/InfoPlist.strings
new file mode 100644
index 0000000..4cfd32c
--- /dev/null
+++ b/src/client/mac/sender/ja.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/client/mac/sender/ja.lproj/Localizable.strings b/src/client/mac/sender/ja.lproj/Localizable.strings
new file mode 100644
index 0000000..1f1a4fe
--- /dev/null
+++ b/src/client/mac/sender/ja.lproj/Localizable.strings
Binary files differ
diff --git a/src/client/mac/sender/nl.lproj/InfoPlist.strings b/src/client/mac/sender/nl.lproj/InfoPlist.strings
new file mode 100644
index 0000000..4cfd32c
--- /dev/null
+++ b/src/client/mac/sender/nl.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/client/mac/sender/nl.lproj/Localizable.strings b/src/client/mac/sender/nl.lproj/Localizable.strings
new file mode 100644
index 0000000..a4a54f7
--- /dev/null
+++ b/src/client/mac/sender/nl.lproj/Localizable.strings
Binary files differ
diff --git a/src/client/mac/sender/no.lproj/InfoPlist.strings b/src/client/mac/sender/no.lproj/InfoPlist.strings
new file mode 100644
index 0000000..4cfd32c
--- /dev/null
+++ b/src/client/mac/sender/no.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/client/mac/sender/no.lproj/Localizable.strings b/src/client/mac/sender/no.lproj/Localizable.strings
new file mode 100644
index 0000000..725ef5a
--- /dev/null
+++ b/src/client/mac/sender/no.lproj/Localizable.strings
Binary files differ
diff --git a/src/client/mac/sender/sl.lproj/InfoPlist.strings b/src/client/mac/sender/sl.lproj/InfoPlist.strings
new file mode 100644
index 0000000..585f622
--- /dev/null
+++ b/src/client/mac/sender/sl.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/client/mac/sender/sl.lproj/Localizable.strings b/src/client/mac/sender/sl.lproj/Localizable.strings
new file mode 100644
index 0000000..b7dfeec
--- /dev/null
+++ b/src/client/mac/sender/sl.lproj/Localizable.strings
Binary files differ
diff --git a/src/client/mac/sender/sv.lproj/InfoPlist.strings b/src/client/mac/sender/sv.lproj/InfoPlist.strings
new file mode 100644
index 0000000..4cfd32c
--- /dev/null
+++ b/src/client/mac/sender/sv.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/client/mac/sender/sv.lproj/Localizable.strings b/src/client/mac/sender/sv.lproj/Localizable.strings
new file mode 100644
index 0000000..f7d1251
--- /dev/null
+++ b/src/client/mac/sender/sv.lproj/Localizable.strings
Binary files differ
diff --git a/src/client/mac/sender/tr.lproj/InfoPlist.strings b/src/client/mac/sender/tr.lproj/InfoPlist.strings
new file mode 100644
index 0000000..088fb4f
--- /dev/null
+++ b/src/client/mac/sender/tr.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/client/mac/sender/tr.lproj/Localizable.strings b/src/client/mac/sender/tr.lproj/Localizable.strings
new file mode 100644
index 0000000..a82f990
--- /dev/null
+++ b/src/client/mac/sender/tr.lproj/Localizable.strings
Binary files differ
diff --git a/src/client/mac/testapp/Controller.m b/src/client/mac/testapp/Controller.m
index a324f14..87c4302 100644
--- a/src/client/mac/testapp/Controller.m
+++ b/src/client/mac/testapp/Controller.m
@@ -31,6 +31,7 @@
 
 #import "Controller.h"
 #import "TestClass.h"
+#import "GTMDefines.h"
 #include <unistd.h>
 #include <mach/mach.h>
 
@@ -51,7 +52,7 @@
 }
 
 - (IBAction)forkTestOptions:(id)sender {
-  int tag = [[sender selectedCell] tag];
+  NSInteger tag = [[sender selectedCell] tag];
   NSLog(@"sender tag: %d", tag);
   if (tag <= 2) {
     bpForkOption = tag;
@@ -75,7 +76,7 @@
 
   NSString *resourcePath = [[NSBundle bundleForClass:
                                         [self class]] resourcePath];
-  NSString *execProgname;
+  NSString *execProgname = nil;
   if (progCrashPoint == DURINGLAUNCH) {
     execProgname = [resourcePath stringByAppendingString:@"/crashduringload"];
   } else if (progCrashPoint == AFTERLAUNCH) {
@@ -129,11 +130,11 @@
 }
 
 - (IBAction)crash:(id)sender {
-  int tag = [sender tag];
+  NSInteger tag = [sender tag];
 
   if (tag == 1) {
     [NSObject cancelPreviousPerformRequestsWithTarget:self];
-    [self performSelector:@selector(causeCrash) withObject:nil afterDelay:10];
+    [self performSelector:@selector(causeCrash) withObject:nil afterDelay:10.0];
     [sender setState:NSOnState];
     return;
   }
diff --git a/src/client/mac/testapp/English.lproj/MainMenu.nib/classes.nib b/src/client/mac/testapp/English.lproj/MainMenu.nib/classes.nib
deleted file mode 100644
index ad86b71..0000000
--- a/src/client/mac/testapp/English.lproj/MainMenu.nib/classes.nib
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IBClasses</key>
-	<array>
-		<dict>
-			<key>ACTIONS</key>
-			<dict>
-				<key>crash</key>
-				<string>id</string>
-				<key>forkTestGo</key>
-				<string>id</string>
-				<key>forkTestOptions</key>
-				<string>id</string>
-				<key>generateReportWithoutCrash</key>
-				<string>id</string>
-				<key>showForkTestWindow</key>
-				<string>id</string>
-			</dict>
-			<key>CLASS</key>
-			<string>Controller</string>
-			<key>LANGUAGE</key>
-			<string>ObjC</string>
-			<key>OUTLETS</key>
-			<dict>
-				<key>forkTestOptions_</key>
-				<string>NSWindow</string>
-				<key>window_</key>
-				<string>NSWindow</string>
-			</dict>
-			<key>SUPERCLASS</key>
-			<string>NSObject</string>
-		</dict>
-		<dict>
-			<key>CLASS</key>
-			<string>FirstResponder</string>
-			<key>LANGUAGE</key>
-			<string>ObjC</string>
-			<key>SUPERCLASS</key>
-			<string>NSObject</string>
-		</dict>
-	</array>
-	<key>IBVersion</key>
-	<string>1</string>
-</dict>
-</plist>
diff --git a/src/client/mac/testapp/English.lproj/MainMenu.nib/info.nib b/src/client/mac/testapp/English.lproj/MainMenu.nib/info.nib
deleted file mode 100644
index 839043e..0000000
--- a/src/client/mac/testapp/English.lproj/MainMenu.nib/info.nib
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IBFramework Version</key>
-	<string>670</string>
-	<key>IBLastKnownRelativeProjectPath</key>
-	<string>../GoogleBreakpadTest.xcodeproj</string>
-	<key>IBOldestOS</key>
-	<integer>5</integer>
-	<key>IBOpenObjects</key>
-	<array>
-		<integer>221</integer>
-		<integer>29</integer>
-		<integer>2</integer>
-	</array>
-	<key>IBSystem Version</key>
-	<string>9F33</string>
-	<key>targetFramework</key>
-	<string>IBCocoaFramework</string>
-</dict>
-</plist>
diff --git a/src/client/mac/testapp/English.lproj/MainMenu.nib/keyedobjects.nib b/src/client/mac/testapp/English.lproj/MainMenu.nib/keyedobjects.nib
deleted file mode 100644
index 1c6baaf..0000000
--- a/src/client/mac/testapp/English.lproj/MainMenu.nib/keyedobjects.nib
+++ /dev/null
Binary files differ
diff --git a/src/client/mac/testapp/English.lproj/MainMenu.xib b/src/client/mac/testapp/English.lproj/MainMenu.xib
new file mode 100644
index 0000000..840c0db
--- /dev/null
+++ b/src/client/mac/testapp/English.lproj/MainMenu.xib
@@ -0,0 +1,3748 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+	<data>
+		<int key="IBDocument.SystemTarget">1050</int>
+		<string key="IBDocument.SystemVersion">10F569</string>
+		<string key="IBDocument.InterfaceBuilderVersion">788</string>
+		<string key="IBDocument.AppKitVersion">1038.29</string>
+		<string key="IBDocument.HIToolboxVersion">461.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">788</string>
+		</object>
+		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<integer value="220"/>
+		</object>
+		<object class="NSArray" key="IBDocument.PluginDependencies">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<object class="NSArray" key="dict.sortedKeys" id="0">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+			</object>
+			<object class="NSMutableArray" key="dict.values">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+			</object>
+		</object>
+		<object class="NSMutableArray" key="IBDocument.RootObjects" id="925601844">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<object class="NSCustomObject" id="870565383">
+				<object class="NSMutableString" key="NSClassName">
+					<characters key="NS.bytes">NSApplication</characters>
+				</object>
+			</object>
+			<object class="NSCustomObject" id="442653439">
+				<string key="NSClassName">FirstResponder</string>
+			</object>
+			<object class="NSCustomObject" id="751079937">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSWindowTemplate" id="341270541">
+				<int key="NSWindowStyleMask">15</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{945, 874}, {320, 188}}</string>
+				<int key="NSWTFlags">1886912512</int>
+				<string key="NSWindowTitle">Window</string>
+				<string key="NSWindowClass">NSWindow</string>
+				<object class="NSMutableString" key="NSViewClass">
+					<characters key="NS.bytes">View</characters>
+				</object>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSWindowContentMinSize">{213, 107}</string>
+				<object class="NSView" key="NSWindowView" id="814272478">
+					<reference key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<object class="NSMutableArray" key="NSSubviews">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSButton" id="726278107">
+							<reference key="NSNextResponder" ref="814272478"/>
+							<int key="NSvFlags">301</int>
+							<string key="NSFrame">{{14, 140}, {292, 32}}</string>
+							<reference key="NSSuperview" ref="814272478"/>
+							<reference key="NSWindow"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="539552922">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">134217728</int>
+								<string key="NSContents">Crash! (Airbag Installed)</string>
+								<object class="NSFont" key="NSSupport" id="933596199">
+									<string key="NSName">LucidaGrande</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">1044</int>
+								</object>
+								<reference key="NSControlView" ref="726278107"/>
+								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags2">1</int>
+								<reference key="NSAlternateImage" ref="933596199"/>
+								<string key="NSAlternateContents"/>
+								<object class="NSMutableString" key="NSKeyEquivalent">
+									<characters key="NS.bytes"/>
+								</object>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSButton" id="799567279">
+							<reference key="NSNextResponder" ref="814272478"/>
+							<int key="NSvFlags">301</int>
+							<string key="NSFrame">{{14, 76}, {292, 32}}</string>
+							<reference key="NSSuperview" ref="814272478"/>
+							<reference key="NSWindow"/>
+							<int key="NSTag">2</int>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="1010617379">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">134217728</int>
+								<string key="NSContents">Crash! (Airbag NOT Installed)</string>
+								<reference key="NSSupport" ref="933596199"/>
+								<reference key="NSControlView" ref="799567279"/>
+								<int key="NSTag">2</int>
+								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags2">1</int>
+								<reference key="NSAlternateImage" ref="933596199"/>
+								<string key="NSAlternateContents"/>
+								<object class="NSMutableString" key="NSKeyEquivalent">
+									<characters key="NS.bytes"/>
+								</object>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSButton" id="27781390">
+							<reference key="NSNextResponder" ref="814272478"/>
+							<int key="NSvFlags">301</int>
+							<string key="NSFrame">{{14, 108}, {292, 32}}</string>
+							<reference key="NSSuperview" ref="814272478"/>
+							<reference key="NSWindow"/>
+							<int key="NSTag">1</int>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="547901497">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">134217728</int>
+								<string key="NSContents">Crash! (Airbag Installed w/10sec delay)</string>
+								<reference key="NSSupport" ref="933596199"/>
+								<reference key="NSControlView" ref="27781390"/>
+								<int key="NSTag">1</int>
+								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags2">1</int>
+								<reference key="NSAlternateImage" ref="933596199"/>
+								<string key="NSAlternateContents"/>
+								<object class="NSMutableString" key="NSKeyEquivalent">
+									<characters key="NS.bytes"/>
+								</object>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSButton" id="856256540">
+							<reference key="NSNextResponder" ref="814272478"/>
+							<int key="NSvFlags">268</int>
+							<string key="NSFrame">{{14, 44}, {292, 32}}</string>
+							<reference key="NSSuperview" ref="814272478"/>
+							<reference key="NSWindow"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="353736234">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">134217728</int>
+								<string key="NSContents">Fork Test</string>
+								<reference key="NSSupport" ref="933596199"/>
+								<reference key="NSControlView" ref="856256540"/>
+								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags2">129</int>
+								<string key="NSAlternateContents"/>
+								<string key="NSKeyEquivalent"/>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSButton" id="460755987">
+							<reference key="NSNextResponder" ref="814272478"/>
+							<int key="NSvFlags">268</int>
+							<string key="NSFrame">{{14, 12}, {292, 32}}</string>
+							<reference key="NSSuperview" ref="814272478"/>
+							<reference key="NSWindow"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="775425649">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">134217728</int>
+								<string key="NSContents">Generate report without crash</string>
+								<reference key="NSSupport" ref="933596199"/>
+								<reference key="NSControlView" ref="460755987"/>
+								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags2">129</int>
+								<string key="NSAlternateContents"/>
+								<string key="NSKeyEquivalent"/>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+					</object>
+					<string key="NSFrameSize">{320, 188}</string>
+					<reference key="NSSuperview"/>
+					<reference key="NSWindow"/>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
+				<string key="NSMinSize">{213, 129}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+			<object class="NSMenu" id="695387251">
+				<string key="NSTitle">MainMenu</string>
+				<object class="NSMutableArray" key="NSMenuItems">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<object class="NSMenuItem" id="458207250">
+						<reference key="NSMenu" ref="695387251"/>
+						<string key="NSTitle">NewApplication</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<object class="NSCustomResource" key="NSOnImage" id="419346806">
+							<string key="NSClassName">NSImage</string>
+							<string key="NSResourceName">NSMenuCheckmark</string>
+						</object>
+						<object class="NSCustomResource" key="NSMixedImage" id="290286705">
+							<string key="NSClassName">NSImage</string>
+							<string key="NSResourceName">NSMenuMixedState</string>
+						</object>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="753534561">
+							<string key="NSTitle">NewApplication</string>
+							<object class="NSMutableArray" key="NSMenuItems">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSMenuItem" id="838552093">
+									<reference key="NSMenu" ref="753534561"/>
+									<string key="NSTitle">About NewApplication</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="758254482">
+									<reference key="NSMenu" ref="753534561"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="443649494">
+									<reference key="NSMenu" ref="753534561"/>
+									<string key="NSTitle">Preferences…</string>
+									<string key="NSKeyEquiv">,</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="217746140">
+									<reference key="NSMenu" ref="753534561"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="826764396">
+									<reference key="NSMenu" ref="753534561"/>
+									<string key="NSTitle">Services</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+									<string key="NSAction">submenuAction:</string>
+									<object class="NSMenu" key="NSSubmenu" id="276709607">
+										<object class="NSMutableString" key="NSTitle">
+											<characters key="NS.bytes">Services</characters>
+										</object>
+										<object class="NSMutableArray" key="NSMenuItems">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+										</object>
+										<string key="NSName">_NSServicesMenu</string>
+									</object>
+								</object>
+								<object class="NSMenuItem" id="881859155">
+									<reference key="NSMenu" ref="753534561"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="104472016">
+									<reference key="NSMenu" ref="753534561"/>
+									<string key="NSTitle">Hide NewApplication</string>
+									<string key="NSKeyEquiv">h</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="216168366">
+									<reference key="NSMenu" ref="753534561"/>
+									<string key="NSTitle">Hide Others</string>
+									<string key="NSKeyEquiv">h</string>
+									<int key="NSKeyEquivModMask">1572864</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="667790509">
+									<reference key="NSMenu" ref="753534561"/>
+									<string key="NSTitle">Show All</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="928933982">
+									<reference key="NSMenu" ref="753534561"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="887927135">
+									<reference key="NSMenu" ref="753534561"/>
+									<string key="NSTitle">Quit NewApplication</string>
+									<string key="NSKeyEquiv">q</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+							</object>
+							<string key="NSName">_NSAppleMenu</string>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="369472335">
+						<reference key="NSMenu" ref="695387251"/>
+						<string key="NSTitle">File</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="419346806"/>
+						<reference key="NSMixedImage" ref="290286705"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="902982238">
+							<object class="NSMutableString" key="NSTitle">
+								<characters key="NS.bytes">File</characters>
+							</object>
+							<object class="NSMutableArray" key="NSMenuItems">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSMenuItem" id="660391032">
+									<reference key="NSMenu" ref="902982238"/>
+									<string key="NSTitle">New</string>
+									<string key="NSKeyEquiv">n</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="367379562">
+									<reference key="NSMenu" ref="902982238"/>
+									<string key="NSTitle">Open...</string>
+									<string key="NSKeyEquiv">o</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="84883275">
+									<reference key="NSMenu" ref="902982238"/>
+									<string key="NSTitle">Open Recent</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+									<string key="NSAction">submenuAction:</string>
+									<object class="NSMenu" key="NSSubmenu" id="693280130">
+										<object class="NSMutableString" key="NSTitle">
+											<characters key="NS.bytes">Open Recent</characters>
+										</object>
+										<object class="NSMutableArray" key="NSMenuItems">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<object class="NSMenuItem" id="85018532">
+												<reference key="NSMenu" ref="693280130"/>
+												<string key="NSTitle">Clear Menu</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="419346806"/>
+												<reference key="NSMixedImage" ref="290286705"/>
+											</object>
+										</object>
+										<string key="NSName">_NSRecentDocumentsMenu</string>
+									</object>
+								</object>
+								<object class="NSMenuItem" id="154948703">
+									<reference key="NSMenu" ref="902982238"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="468594275">
+									<reference key="NSMenu" ref="902982238"/>
+									<string key="NSTitle">Close</string>
+									<string key="NSKeyEquiv">w</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="479945444">
+									<reference key="NSMenu" ref="902982238"/>
+									<string key="NSTitle">Save</string>
+									<string key="NSKeyEquiv">s</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="976375553">
+									<reference key="NSMenu" ref="902982238"/>
+									<string key="NSTitle">Save As…</string>
+									<string key="NSKeyEquiv">S</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="885975128">
+									<reference key="NSMenu" ref="902982238"/>
+									<string key="NSTitle">Revert</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="232609393">
+									<reference key="NSMenu" ref="902982238"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="409810395">
+									<reference key="NSMenu" ref="902982238"/>
+									<string key="NSTitle">Page Setup…</string>
+									<string key="NSKeyEquiv">P</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="302505815">
+									<reference key="NSMenu" ref="902982238"/>
+									<string key="NSTitle">Print…</string>
+									<string key="NSKeyEquiv">p</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+							</object>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="542216986">
+						<reference key="NSMenu" ref="695387251"/>
+						<string key="NSTitle">Edit</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="419346806"/>
+						<reference key="NSMixedImage" ref="290286705"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="1053284541">
+							<object class="NSMutableString" key="NSTitle">
+								<characters key="NS.bytes">Edit</characters>
+							</object>
+							<object class="NSMutableArray" key="NSMenuItems">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSMenuItem" id="284548410">
+									<reference key="NSMenu" ref="1053284541"/>
+									<string key="NSTitle">Undo</string>
+									<string key="NSKeyEquiv">z</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="1001272176">
+									<reference key="NSMenu" ref="1053284541"/>
+									<string key="NSTitle">Redo</string>
+									<string key="NSKeyEquiv">Z</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="209744238">
+									<reference key="NSMenu" ref="1053284541"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="909447496">
+									<reference key="NSMenu" ref="1053284541"/>
+									<string key="NSTitle">Cut</string>
+									<string key="NSKeyEquiv">x</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="994487277">
+									<reference key="NSMenu" ref="1053284541"/>
+									<string key="NSTitle">Copy</string>
+									<string key="NSKeyEquiv">c</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="84012734">
+									<reference key="NSMenu" ref="1053284541"/>
+									<string key="NSTitle">Paste</string>
+									<string key="NSKeyEquiv">v</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="182251545">
+									<reference key="NSMenu" ref="1053284541"/>
+									<string key="NSTitle">Paste and Match Style</string>
+									<string key="NSKeyEquiv">V</string>
+									<int key="NSKeyEquivModMask">1572864</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="512189403">
+									<reference key="NSMenu" ref="1053284541"/>
+									<string key="NSTitle">Delete</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="917620781">
+									<reference key="NSMenu" ref="1053284541"/>
+									<string key="NSTitle">Select All</string>
+									<string key="NSKeyEquiv">a</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="431895313">
+									<reference key="NSMenu" ref="1053284541"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="153501847">
+									<reference key="NSMenu" ref="1053284541"/>
+									<string key="NSTitle">Find</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+									<string key="NSAction">submenuAction:</string>
+									<object class="NSMenu" key="NSSubmenu" id="333484665">
+										<object class="NSMutableString" key="NSTitle">
+											<characters key="NS.bytes">Find</characters>
+										</object>
+										<object class="NSMutableArray" key="NSMenuItems">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<object class="NSMenuItem" id="203238834">
+												<reference key="NSMenu" ref="333484665"/>
+												<string key="NSTitle">Find…</string>
+												<string key="NSKeyEquiv">f</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="419346806"/>
+												<reference key="NSMixedImage" ref="290286705"/>
+												<int key="NSTag">1</int>
+											</object>
+											<object class="NSMenuItem" id="861312964">
+												<reference key="NSMenu" ref="333484665"/>
+												<string key="NSTitle">Find Next</string>
+												<string key="NSKeyEquiv">g</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="419346806"/>
+												<reference key="NSMixedImage" ref="290286705"/>
+												<int key="NSTag">2</int>
+											</object>
+											<object class="NSMenuItem" id="743767160">
+												<reference key="NSMenu" ref="333484665"/>
+												<string key="NSTitle">Find Previous</string>
+												<string key="NSKeyEquiv">G</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="419346806"/>
+												<reference key="NSMixedImage" ref="290286705"/>
+												<int key="NSTag">3</int>
+											</object>
+											<object class="NSMenuItem" id="180446588">
+												<reference key="NSMenu" ref="333484665"/>
+												<string key="NSTitle">Use Selection for Find</string>
+												<string key="NSKeyEquiv">e</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="419346806"/>
+												<reference key="NSMixedImage" ref="290286705"/>
+												<int key="NSTag">7</int>
+											</object>
+											<object class="NSMenuItem" id="731027425">
+												<reference key="NSMenu" ref="333484665"/>
+												<string key="NSTitle">Jump to Selection</string>
+												<string key="NSKeyEquiv">j</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="419346806"/>
+												<reference key="NSMixedImage" ref="290286705"/>
+											</object>
+										</object>
+									</object>
+								</object>
+								<object class="NSMenuItem" id="61602259">
+									<reference key="NSMenu" ref="1053284541"/>
+									<string key="NSTitle">Spelling</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+									<string key="NSAction">submenuAction:</string>
+									<object class="NSMenu" key="NSSubmenu" id="8174285">
+										<string key="NSTitle">Spelling</string>
+										<object class="NSMutableArray" key="NSMenuItems">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<object class="NSMenuItem" id="438210660">
+												<reference key="NSMenu" ref="8174285"/>
+												<string key="NSTitle">Spelling…</string>
+												<string key="NSKeyEquiv">:</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="419346806"/>
+												<reference key="NSMixedImage" ref="290286705"/>
+											</object>
+											<object class="NSMenuItem" id="102172584">
+												<reference key="NSMenu" ref="8174285"/>
+												<string key="NSTitle">Check Spelling</string>
+												<string key="NSKeyEquiv">;</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="419346806"/>
+												<reference key="NSMixedImage" ref="290286705"/>
+											</object>
+											<object class="NSMenuItem" id="540509341">
+												<reference key="NSMenu" ref="8174285"/>
+												<string key="NSTitle">Check Spelling as You Type</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="419346806"/>
+												<reference key="NSMixedImage" ref="290286705"/>
+											</object>
+										</object>
+									</object>
+								</object>
+							</object>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="764068863">
+						<reference key="NSMenu" ref="695387251"/>
+						<string key="NSTitle">Window</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="419346806"/>
+						<reference key="NSMixedImage" ref="290286705"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="200536676">
+							<object class="NSMutableString" key="NSTitle">
+								<characters key="NS.bytes">Window</characters>
+							</object>
+							<object class="NSMutableArray" key="NSMenuItems">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSMenuItem" id="683986939">
+									<reference key="NSMenu" ref="200536676"/>
+									<string key="NSTitle">Minimize</string>
+									<string key="NSKeyEquiv">m</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="548098734">
+									<reference key="NSMenu" ref="200536676"/>
+									<string key="NSTitle">Zoom</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="297002686">
+									<reference key="NSMenu" ref="200536676"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+								<object class="NSMenuItem" id="164762492">
+									<reference key="NSMenu" ref="200536676"/>
+									<string key="NSTitle">Bring All to Front</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+							</object>
+							<string key="NSName">_NSWindowsMenu</string>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="599772536">
+						<reference key="NSMenu" ref="695387251"/>
+						<string key="NSTitle">Help</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="419346806"/>
+						<reference key="NSMixedImage" ref="290286705"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="1066958924">
+							<string key="NSTitle">Help</string>
+							<object class="NSMutableArray" key="NSMenuItems">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSMenuItem" id="192540884">
+									<reference key="NSMenu" ref="1066958924"/>
+									<string key="NSTitle">NewApplication Help</string>
+									<string key="NSKeyEquiv">?</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="419346806"/>
+									<reference key="NSMixedImage" ref="290286705"/>
+								</object>
+							</object>
+						</object>
+					</object>
+				</object>
+				<string key="NSName">_NSMainMenu</string>
+			</object>
+			<object class="NSCustomObject" id="623097029">
+				<string key="NSClassName">Controller</string>
+			</object>
+			<object class="NSWindowTemplate" id="347013037">
+				<int key="NSWindowStyleMask">15</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{858, 755}, {787, 260}}</string>
+				<int key="NSWTFlags">603979776</int>
+				<string key="NSWindowTitle">Window</string>
+				<string key="NSWindowClass">NSWindow</string>
+				<nil key="NSViewClass"/>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<object class="NSView" key="NSWindowView" id="594333702">
+					<reference key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<object class="NSMutableArray" key="NSSubviews">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSMatrix" id="891367997">
+							<reference key="NSNextResponder" ref="594333702"/>
+							<int key="NSvFlags">268</int>
+							<string key="NSFrame">{{20, 7}, {645, 79}}</string>
+							<reference key="NSSuperview" ref="594333702"/>
+							<bool key="NSEnabled">YES</bool>
+							<int key="NSNumRows">3</int>
+							<int key="NSNumCols">1</int>
+							<object class="NSMutableArray" key="NSCells">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSButtonCell" id="410017819">
+									<int key="NSCellFlags">-2080244224</int>
+									<int key="NSCellFlags2">0</int>
+									<string key="NSContents">program crashes during launch because of missing dylib</string>
+									<reference key="NSSupport" ref="933596199"/>
+									<reference key="NSControlView" ref="891367997"/>
+									<int key="NSTag">5</int>
+									<int key="NSButtonFlags">1211912703</int>
+									<int key="NSButtonFlags2">0</int>
+									<object class="NSButtonImageSource" key="NSAlternateImage" id="619763889">
+										<string key="NSImageName">NSRadioButton</string>
+									</object>
+									<string key="NSAlternateContents"/>
+									<string key="NSKeyEquivalent"/>
+									<int key="NSPeriodicDelay">200</int>
+									<int key="NSPeriodicInterval">25</int>
+								</object>
+								<object class="NSButtonCell" id="904578786">
+									<int key="NSCellFlags">67239424</int>
+									<int key="NSCellFlags2">0</int>
+									<string key="NSContents">program crashes after launch</string>
+									<reference key="NSSupport" ref="933596199"/>
+									<reference key="NSControlView" ref="891367997"/>
+									<int key="NSTag">6</int>
+									<int key="NSButtonFlags">1211912703</int>
+									<int key="NSButtonFlags2">0</int>
+									<object class="NSImage" key="NSNormalImage">
+										<int key="NSImageFlags">549453824</int>
+										<string key="NSSize">{18, 18}</string>
+										<object class="NSMutableArray" key="NSReps">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<object class="NSArray">
+												<bool key="EncodedWithXMLCoder">YES</bool>
+												<integer value="0"/>
+												<object class="NSBitmapImageRep">
+													<object class="NSData" key="NSTIFFRepresentation">
+														<bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw
+IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/
+29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5
+dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA
+AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG
+AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/
+0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/
+7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/
+5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/
+3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD
+AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns
+AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/
+6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/
+/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/
+///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl
+YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA
+AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD
+AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu
+AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB
+AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES
+AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS
+AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw
+cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA
+AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA
+BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA
+AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA
+AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1
+cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD
+AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH
+SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF
+hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8
+vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt
+7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq
+Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo
+aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e
+n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX
+2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW
+FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O
+Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6
+ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt
+rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA
+AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA
+AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl
+A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq
+DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU
+HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8
+MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v
+UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/
+eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj
+rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn
+5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh
+AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK
+CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY
+GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95
+MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S
+UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2
+d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV
+pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK
+0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf//
+AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw
+BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA
+FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H
+LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh
+Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ
+h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp
+svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb
+1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX
+8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE
+AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg
+QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes>
+													</object>
+												</object>
+											</object>
+										</object>
+										<object class="NSColor" key="NSColor" id="30384615">
+											<int key="NSColorSpace">3</int>
+											<bytes key="NSWhite">MCAwAA</bytes>
+										</object>
+									</object>
+									<reference key="NSAlternateImage" ref="619763889"/>
+									<int key="NSPeriodicDelay">400</int>
+									<int key="NSPeriodicInterval">75</int>
+								</object>
+								<object class="NSButtonCell" id="971445237">
+									<int key="NSCellFlags">67239424</int>
+									<int key="NSCellFlags2">0</int>
+									<string key="NSContents">program crashes in between fork() and exec() (3rd option in first group will happen before crash)</string>
+									<reference key="NSSupport" ref="933596199"/>
+									<reference key="NSControlView" ref="891367997"/>
+									<int key="NSTag">7</int>
+									<int key="NSButtonFlags">1211912703</int>
+									<int key="NSButtonFlags2">0</int>
+									<object class="NSImage" key="NSNormalImage">
+										<int key="NSImageFlags">549453824</int>
+										<string key="NSSize">{18, 18}</string>
+										<object class="NSMutableArray" key="NSReps">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<object class="NSArray">
+												<bool key="EncodedWithXMLCoder">YES</bool>
+												<integer value="0"/>
+												<object class="NSBitmapImageRep">
+													<object class="NSData" key="NSTIFFRepresentation">
+														<bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw
+IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/
+29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5
+dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA
+AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG
+AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/
+0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/
+7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/
+5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/
+3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD
+AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns
+AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/
+6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/
+/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/
+///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl
+YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA
+AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD
+AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu
+AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB
+AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES
+AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS
+AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAv0AAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAL9GFw
+cGwCAAAAbW50clJHQiBYWVogB9gAAgAMAAoAFgAIYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAPbWAAEAAAAA0y1hcHBs625VECyhxeSV9P9A73pKGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAANclhZWgAAASAAAAAUZ1hZWgAAATQAAAAUYlhZWgAAAUgAAAAUd3RwdAAAAVwAAAAUY2hhZAAA
+AXAAAAAsclRSQwAAAZwAAAAOZ1RSQwAAAawAAAAOYlRSQwAAAbwAAAAOdmNndAAAAcwAAAYSbmRpbgAA
+B+AAAAMOZGVzYwAACvAAAACZY3BydAAAC4wAAABAbW1vZAAAC8wAAAAoWFlaIAAAAAAAAJumAABMVQAA
+ArBYWVogAAAAAAAANWMAAJ/rAAAZsVhZWiAAAAAAAAAlzQAAE9UAALbFWFlaIAAAAAAAAPPYAAEAAAAB
+FghzZjMyAAAAAAABC7cAAAWW///zVwAABykAAP3X///7t////aYAAAPaAADA9mN1cnYAAAAAAAAAAQHN
+AABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAADAQAAAgAAAioENAYA
+B9AJlAtRDQwOshBOEekTgxUVFqMYMRm9GzwcvR4+H7chLiKnJBoliCb3KGIpyCswLJMt9C9WMLIyDjNn
+NL02FTdoOLs6ETtdPKw9+D9DQJBB1kMeRGZFq0bySDRJeEq6S/tNPk59T75Q+lI2U25Uo1XZVwlYOlln
+WpZbwFzsXhdfQWBrYZRiv2PoZRNmPWdqaJhpyGr5bC1tZW6hb+BxLXJ+c9d1OHafeA55gnr5fHR98H9t
+gOuCY4PYhUqGsIgSiWyKuIwBjTqObY+VkLORyJLUk9eU05XFlrWXlZh2mUuaG5rsm6ucbJ0qndqei588
+n9+ghKEqoceiYqL/o5qkLqTDpVml66Z7pwunnKgpqLWpQqnQqlqq5Ktvq/qsg60MrZauIa6qrzOvvbBH
+sNGxXLHnsnKy/7OMtBm0p7U3tci2Wbbrt4C4FrituUa54rqAux27wbxlvQq9rr5Tvvi/ncBAwOXBisIu
+wtPDeMQdxMLFaMYPxrXHXMgEyKzJVcn/yqnLVcwBzK7NXc4Mzr3PcNAk0NnRkdJK0wTTw9SC1UTWCtbR
+153Ybdk+2hfa8dvM3KfdhN5g3zzgGuD34dbiteOV5HblWeY85yHoCOjw6drqxuu27Kbtm+6R74zwivGM
+8pPzn/Sw9cj25/gP+T76e/u//Rr+hP//AAABpANzBRoGsggnCZsLFQx+Dd4PRRCiEf8TYxS0FgoXXRiu
+GgQbTRyZHekfMCB8IcIjCSRSJZUm3SgdKWAqpCvjLSYuZC+lMOIyIDNgNJs12TcTOFA5izrEO/49NT5w
+P6dA30IWQ01Eg0W4Ru9IIElVSoZLt0zmThVPRFBwUZ5SylP5VSRWUVd+WKtZ2lsIXDhdaV6bX89hBWI8
+Y3dktGX0ZzhohGnVayxsiW3sb1Vww3I0c6p1I3aeeBl5k3sMfIR99X9kgM6CLYOJhNyGJodriKGJ1Ir5
+jBuNL45Aj0WQSJE8kjKTGJP+lNyVspaKl1OYHZjlmaSaZJshm9ecj51EnfSepJ9Vn/+gqqFWofyio6NL
+o/CklKU4pdymfacfp8KoYqkDqaWqRarlq4asJ6zHrWiuCq6rr02v77CSsTax27KAsyezzrR3tSG1zLZ5
+tye32LiKuT659rqwu2q8J7zkvaK+YL8ev93AnMFcwhzC3MOdxF7FIMXixqXHaMgryPDJtcp6y0DMB8zO
+zZbOX88oz/PQvtGJ0lbTI9Px1MDVkNZi1zTYB9jb2bDah9te3DjdEt3t3sjfpOB/4VviN+MT4/DkzeWq
+5ojnZuhG6SXqBuro68rsre2S7nfvXvBH8TDyHPMI8/j06fXc9tL3yvjF+cL6w/vG/ND92v7s//8AAAMJ
+BboIZwrCDSsPghG8E/IWHxg5GkgcVB5VIEQiMyQTJeknuimHK00tCy7AMHEyHDO/NV829ziKOhs7pj0s
+PrBALEGmQx9EkkYCR3JI3EpCS6pND05vT89RLVKKU+dVP1aYV+9ZRVqdW/NdSV6hX+thM2JzY61k42YS
+Z0FoZ2mOaq5rz2zsbglvI3A9cVRybHOEdJx1tHbOd+d5A3ofez98Yn2Lfrl/8IEqgmyDsoT8hkuHnYjw
+ikSLmYzsjj+PjJDWkh2TW5SXlceW85gWmTOaSJtVnFqdWp5Pn0SgKaEQoeuiwqOYpGClKaXtpqmnZqgf
+qNKph6o5quWrk6xArOatja41rtevebAcsLyxWbH3spWzL7PJtGO0/LWTtiq2wrdWt+q4f7kUuaW6OLrL
+u1277Lx9vQ69nr4tvry/TL/bwGjA98GGwhPCocMvw77ESsTYxWXF9MZ/xwzHmcgkyKXJJ8mpyizKpMsc
+y5XMDsyFzPjNa83fzlPOxc81z6fQGNCK0PvRbNHe0lDSw9M206vUINSV1QvVhtYA1nzW+Nd61//YhNkK
+2ZnaL9rG213cCty63WveI97d35fgUuEO4crih+NE5ALkw+WD5kXnCufP6JbpYOor6vrry+yd7XbuUe8w
+8BXw+/Ht8uDz4PTl9fj3E/hE+X363vxa/gH//wAAbmRpbgAAAAAAAAMGAACogAAAUwAAADRAAACqQAAA
+JpcAABLbAABQQAAAVEAAAj99AAI1egACxUsAAwB4AAIAAAADAAsAGQAsAEUAYwCHALEA4QEWAVEBkgHZ
+AiYCeQLSAzEDlwQDBHYE7wVvBfUGgwcXB7IIUwj8CawKYgsgC+QMrw2BDloPORAfEQ0SBRMGFBEVJBZA
+F2MYjhm/GvYcMh1xHrMf9SE1ImwjnSTJJfAnFig7KWMqjivBLP4uSC+jMRMymzRBNgo3+joWPGY+8EG8
+RNhIQEvvT95UCFhkXOxhlWZYaylv/XTKeYN+GoKOhxGLqJBOlP6Ztp5voyan1Kx0sQG1c7nGvfHB9cX7
+ygbOFNIi1izaMN4p4hTl7emv7Vbw3vRC93z6iP1g//8AAAAEAA8AIgA9AF8AiQC7APQBNAF8AcwCIgKB
+AuYDUwPHBEIExAVOBd4GdgcUB7oIZgkaCdQKlQteDC0NAw3gDsQPrxCiEZwSnxOpFLsV0xbyGBcZQRpw
+G6Mc2R4RH0oggyG3IuckEyU8JmQniyiyKd0rDCxBLYAuyTAhMYkzBjSbNkw4HToSPDA+fED8Q7FGmUmx
+TPdQaFQAV7tbll+KY5RnrmvTb/p0H3g6fEOAMoQXiASL+I/yk/KX+JwBoA2kHKgrrDuwS7RYuGK8aMBo
+xGvId8yI0J/UuNjS3OvhAOUQ6RftE/EC9OH4rfxi//8AAAABAAYADQAXACUANQBIAF8AeQCWALcA3AEE
+ATABYQGVAc4CDAJOApUC4QMyA4gD5QRGBK4FHAWPBgkGigcQB54IMQjMCW0KFArDC3cMMgzzDbsOiA9a
+EDIRFhIIEwgUFRUvFlYXhxjDGgkbVhyqHgMfYCC8IhIjYSSrJfMnOSiBKc0rHyx7LeQvXTDrMpE0VTY7
+OEg6gjzuP5NCckWCSMJMMk/QU5xXk1u1X/9kcGkGbb5ylneLfJqByoeDjcyUf5t4oo2plLBetru8eMFr
+xirK7c+v1GnZFd2r4iXme+ql7pryUvXD+OT7qv4M//8AAGRlc2MAAAAAAAAAFUhQIExQMzA2NSBDYWxp
+YnJhdGVkAAAAAAAAAAAVAEgAUAAgAEwAUAAzADAANgA1ACAAQwBhAGwAaQBiAHIAYQB0AGUAZAAAAAAV
+SFAgTFAzMDY1IENhbGlicmF0ZWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIEluYy4sIDIwMDgAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAABtbW9kAAAAAAAAIvAAACaQAAAAAMJtVwAAAAAAAAAAAAAAAAAAAAAAA</bytes>
+													</object>
+												</object>
+											</object>
+										</object>
+										<reference key="NSColor" ref="30384615"/>
+									</object>
+									<reference key="NSAlternateImage" ref="619763889"/>
+									<string key="NSAlternateContents"/>
+									<int key="NSPeriodicDelay">200</int>
+									<int key="NSPeriodicInterval">25</int>
+								</object>
+							</object>
+							<string key="NSCellSize">{645, 25}</string>
+							<string key="NSIntercellSpacing">{4, 2}</string>
+							<int key="NSMatrixFlags">1151868928</int>
+							<string key="NSCellClass">NSActionCell</string>
+							<object class="NSButtonCell" key="NSProtoCell" id="1072218638">
+								<int key="NSCellFlags">-2080244224</int>
+								<int key="NSCellFlags2">0</int>
+								<string key="NSContents">program crashes after launch</string>
+								<reference key="NSSupport" ref="933596199"/>
+								<int key="NSTag">5</int>
+								<int key="NSButtonFlags">1211912703</int>
+								<int key="NSButtonFlags2">0</int>
+								<reference key="NSAlternateImage" ref="619763889"/>
+								<string key="NSAlternateContents"/>
+								<string key="NSKeyEquivalent"/>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+							<reference key="NSSelectedCell" ref="410017819"/>
+							<object class="NSColor" key="NSBackgroundColor" id="349124561">
+								<int key="NSColorSpace">6</int>
+								<string key="NSCatalogName">System</string>
+								<string key="NSColorName">controlColor</string>
+								<object class="NSColor" key="NSColor">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+								</object>
+							</object>
+							<object class="NSColor" key="NSCellBackgroundColor" id="195671423">
+								<int key="NSColorSpace">3</int>
+								<bytes key="NSWhite">MQA</bytes>
+							</object>
+							<reference key="NSFont" ref="933596199"/>
+						</object>
+						<object class="NSMatrix" id="7590393">
+							<reference key="NSNextResponder" ref="594333702"/>
+							<int key="NSvFlags">268</int>
+							<string key="NSFrame">{{20, 170}, {565, 70}}</string>
+							<reference key="NSSuperview" ref="594333702"/>
+							<bool key="NSEnabled">YES</bool>
+							<int key="NSNumRows">3</int>
+							<int key="NSNumCols">1</int>
+							<object class="NSMutableArray" key="NSCells">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSButtonCell" id="808388382">
+									<int key="NSCellFlags">-2080244224</int>
+									<int key="NSCellFlags2">0</int>
+									<string key="NSContents">Leave breakpad alone before fork</string>
+									<reference key="NSSupport" ref="933596199"/>
+									<reference key="NSControlView" ref="7590393"/>
+									<int key="NSButtonFlags">1211912703</int>
+									<int key="NSButtonFlags2">0</int>
+									<reference key="NSAlternateImage" ref="619763889"/>
+									<string key="NSAlternateContents"/>
+									<string key="NSKeyEquivalent"/>
+									<int key="NSPeriodicDelay">200</int>
+									<int key="NSPeriodicInterval">25</int>
+								</object>
+								<object class="NSButtonCell" id="378736460">
+									<int key="NSCellFlags">67239424</int>
+									<int key="NSCellFlags2">0</int>
+									<string key="NSContents">Uninitialize Breakpad before fork</string>
+									<reference key="NSSupport" ref="933596199"/>
+									<reference key="NSControlView" ref="7590393"/>
+									<int key="NSTag">1</int>
+									<int key="NSButtonFlags">1211912703</int>
+									<int key="NSButtonFlags2">0</int>
+									<object class="NSImage" key="NSNormalImage">
+										<int key="NSImageFlags">549453824</int>
+										<string key="NSSize">{18, 18}</string>
+										<object class="NSMutableArray" key="NSReps">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<object class="NSArray">
+												<bool key="EncodedWithXMLCoder">YES</bool>
+												<integer value="0"/>
+												<object class="NSBitmapImageRep">
+													<object class="NSData" key="NSTIFFRepresentation">
+														<bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw
+IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/
+29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5
+dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA
+AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG
+AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/
+0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/
+7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/
+5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/
+3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD
+AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns
+AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/
+6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/
+/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/
+///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl
+YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA
+AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD
+AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu
+AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB
+AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES
+AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS
+AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw
+cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA
+AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA
+BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA
+AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA
+AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1
+cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD
+AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH
+SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF
+hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8
+vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt
+7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq
+Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo
+aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e
+n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX
+2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW
+FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O
+Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6
+ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt
+rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA
+AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA
+AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl
+A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq
+DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU
+HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8
+MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v
+UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/
+eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj
+rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn
+5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh
+AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK
+CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY
+GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95
+MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S
+UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2
+d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV
+pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK
+0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf//
+AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw
+BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA
+FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H
+LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh
+Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ
+h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp
+svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb
+1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX
+8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE
+AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg
+QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes>
+													</object>
+												</object>
+											</object>
+										</object>
+										<reference key="NSColor" ref="30384615"/>
+									</object>
+									<reference key="NSAlternateImage" ref="619763889"/>
+									<int key="NSPeriodicDelay">400</int>
+									<int key="NSPeriodicInterval">75</int>
+								</object>
+								<object class="NSButtonCell" id="251439646">
+									<int key="NSCellFlags">67239424</int>
+									<int key="NSCellFlags2">0</int>
+									<string key="NSContents">Call task_set_exception_port with null exception port in child process before exec</string>
+									<reference key="NSSupport" ref="933596199"/>
+									<reference key="NSControlView" ref="7590393"/>
+									<int key="NSTag">2</int>
+									<int key="NSButtonFlags">1211912703</int>
+									<int key="NSButtonFlags2">0</int>
+									<object class="NSImage" key="NSNormalImage">
+										<int key="NSImageFlags">549453824</int>
+										<string key="NSSize">{18, 18}</string>
+										<object class="NSMutableArray" key="NSReps">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<object class="NSArray">
+												<bool key="EncodedWithXMLCoder">YES</bool>
+												<integer value="0"/>
+												<object class="NSBitmapImageRep">
+													<object class="NSData" key="NSTIFFRepresentation">
+														<bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw
+IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/
+29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5
+dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA
+AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG
+AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/
+0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/
+7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/
+5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/
+3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD
+AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns
+AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/
+6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/
+/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/
+///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl
+YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA
+AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD
+AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu
+AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB
+AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES
+AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS
+AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAv0AAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAL9GFw
+cGwCAAAAbW50clJHQiBYWVogB9gAAgAMAAoAFgAIYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAPbWAAEAAAAA0y1hcHBs625VECyhxeSV9P9A73pKGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAANclhZWgAAASAAAAAUZ1hZWgAAATQAAAAUYlhZWgAAAUgAAAAUd3RwdAAAAVwAAAAUY2hhZAAA
+AXAAAAAsclRSQwAAAZwAAAAOZ1RSQwAAAawAAAAOYlRSQwAAAbwAAAAOdmNndAAAAcwAAAYSbmRpbgAA
+B+AAAAMOZGVzYwAACvAAAACZY3BydAAAC4wAAABAbW1vZAAAC8wAAAAoWFlaIAAAAAAAAJumAABMVQAA
+ArBYWVogAAAAAAAANWMAAJ/rAAAZsVhZWiAAAAAAAAAlzQAAE9UAALbFWFlaIAAAAAAAAPPYAAEAAAAB
+FghzZjMyAAAAAAABC7cAAAWW///zVwAABykAAP3X///7t////aYAAAPaAADA9mN1cnYAAAAAAAAAAQHN
+AABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAADAQAAAgAAAioENAYA
+B9AJlAtRDQwOshBOEekTgxUVFqMYMRm9GzwcvR4+H7chLiKnJBoliCb3KGIpyCswLJMt9C9WMLIyDjNn
+NL02FTdoOLs6ETtdPKw9+D9DQJBB1kMeRGZFq0bySDRJeEq6S/tNPk59T75Q+lI2U25Uo1XZVwlYOlln
+WpZbwFzsXhdfQWBrYZRiv2PoZRNmPWdqaJhpyGr5bC1tZW6hb+BxLXJ+c9d1OHafeA55gnr5fHR98H9t
+gOuCY4PYhUqGsIgSiWyKuIwBjTqObY+VkLORyJLUk9eU05XFlrWXlZh2mUuaG5rsm6ucbJ0qndqei588
+n9+ghKEqoceiYqL/o5qkLqTDpVml66Z7pwunnKgpqLWpQqnQqlqq5Ktvq/qsg60MrZauIa6qrzOvvbBH
+sNGxXLHnsnKy/7OMtBm0p7U3tci2Wbbrt4C4FrituUa54rqAux27wbxlvQq9rr5Tvvi/ncBAwOXBisIu
+wtPDeMQdxMLFaMYPxrXHXMgEyKzJVcn/yqnLVcwBzK7NXc4Mzr3PcNAk0NnRkdJK0wTTw9SC1UTWCtbR
+153Ybdk+2hfa8dvM3KfdhN5g3zzgGuD34dbiteOV5HblWeY85yHoCOjw6drqxuu27Kbtm+6R74zwivGM
+8pPzn/Sw9cj25/gP+T76e/u//Rr+hP//AAABpANzBRoGsggnCZsLFQx+Dd4PRRCiEf8TYxS0FgoXXRiu
+GgQbTRyZHekfMCB8IcIjCSRSJZUm3SgdKWAqpCvjLSYuZC+lMOIyIDNgNJs12TcTOFA5izrEO/49NT5w
+P6dA30IWQ01Eg0W4Ru9IIElVSoZLt0zmThVPRFBwUZ5SylP5VSRWUVd+WKtZ2lsIXDhdaV6bX89hBWI8
+Y3dktGX0ZzhohGnVayxsiW3sb1Vww3I0c6p1I3aeeBl5k3sMfIR99X9kgM6CLYOJhNyGJodriKGJ1Ir5
+jBuNL45Aj0WQSJE8kjKTGJP+lNyVspaKl1OYHZjlmaSaZJshm9ecj51EnfSepJ9Vn/+gqqFWofyio6NL
+o/CklKU4pdymfacfp8KoYqkDqaWqRarlq4asJ6zHrWiuCq6rr02v77CSsTax27KAsyezzrR3tSG1zLZ5
+tye32LiKuT659rqwu2q8J7zkvaK+YL8ev93AnMFcwhzC3MOdxF7FIMXixqXHaMgryPDJtcp6y0DMB8zO
+zZbOX88oz/PQvtGJ0lbTI9Px1MDVkNZi1zTYB9jb2bDah9te3DjdEt3t3sjfpOB/4VviN+MT4/DkzeWq
+5ojnZuhG6SXqBuro68rsre2S7nfvXvBH8TDyHPMI8/j06fXc9tL3yvjF+cL6w/vG/ND92v7s//8AAAMJ
+BboIZwrCDSsPghG8E/IWHxg5GkgcVB5VIEQiMyQTJeknuimHK00tCy7AMHEyHDO/NV829ziKOhs7pj0s
+PrBALEGmQx9EkkYCR3JI3EpCS6pND05vT89RLVKKU+dVP1aYV+9ZRVqdW/NdSV6hX+thM2JzY61k42YS
+Z0FoZ2mOaq5rz2zsbglvI3A9cVRybHOEdJx1tHbOd+d5A3ofez98Yn2Lfrl/8IEqgmyDsoT8hkuHnYjw
+ikSLmYzsjj+PjJDWkh2TW5SXlceW85gWmTOaSJtVnFqdWp5Pn0SgKaEQoeuiwqOYpGClKaXtpqmnZqgf
+qNKph6o5quWrk6xArOatja41rtevebAcsLyxWbH3spWzL7PJtGO0/LWTtiq2wrdWt+q4f7kUuaW6OLrL
+u1277Lx9vQ69nr4tvry/TL/bwGjA98GGwhPCocMvw77ESsTYxWXF9MZ/xwzHmcgkyKXJJ8mpyizKpMsc
+y5XMDsyFzPjNa83fzlPOxc81z6fQGNCK0PvRbNHe0lDSw9M206vUINSV1QvVhtYA1nzW+Nd61//YhNkK
+2ZnaL9rG213cCty63WveI97d35fgUuEO4crih+NE5ALkw+WD5kXnCufP6JbpYOor6vrry+yd7XbuUe8w
+8BXw+/Ht8uDz4PTl9fj3E/hE+X363vxa/gH//wAAbmRpbgAAAAAAAAMGAACogAAAUwAAADRAAACqQAAA
+JpcAABLbAABQQAAAVEAAAj99AAI1egACxUsAAwB4AAIAAAADAAsAGQAsAEUAYwCHALEA4QEWAVEBkgHZ
+AiYCeQLSAzEDlwQDBHYE7wVvBfUGgwcXB7IIUwj8CawKYgsgC+QMrw2BDloPORAfEQ0SBRMGFBEVJBZA
+F2MYjhm/GvYcMh1xHrMf9SE1ImwjnSTJJfAnFig7KWMqjivBLP4uSC+jMRMymzRBNgo3+joWPGY+8EG8
+RNhIQEvvT95UCFhkXOxhlWZYaylv/XTKeYN+GoKOhxGLqJBOlP6Ztp5voyan1Kx0sQG1c7nGvfHB9cX7
+ygbOFNIi1izaMN4p4hTl7emv7Vbw3vRC93z6iP1g//8AAAAEAA8AIgA9AF8AiQC7APQBNAF8AcwCIgKB
+AuYDUwPHBEIExAVOBd4GdgcUB7oIZgkaCdQKlQteDC0NAw3gDsQPrxCiEZwSnxOpFLsV0xbyGBcZQRpw
+G6Mc2R4RH0oggyG3IuckEyU8JmQniyiyKd0rDCxBLYAuyTAhMYkzBjSbNkw4HToSPDA+fED8Q7FGmUmx
+TPdQaFQAV7tbll+KY5RnrmvTb/p0H3g6fEOAMoQXiASL+I/yk/KX+JwBoA2kHKgrrDuwS7RYuGK8aMBo
+xGvId8yI0J/UuNjS3OvhAOUQ6RftE/EC9OH4rfxi//8AAAABAAYADQAXACUANQBIAF8AeQCWALcA3AEE
+ATABYQGVAc4CDAJOApUC4QMyA4gD5QRGBK4FHAWPBgkGigcQB54IMQjMCW0KFArDC3cMMgzzDbsOiA9a
+EDIRFhIIEwgUFRUvFlYXhxjDGgkbVhyqHgMfYCC8IhIjYSSrJfMnOSiBKc0rHyx7LeQvXTDrMpE0VTY7
+OEg6gjzuP5NCckWCSMJMMk/QU5xXk1u1X/9kcGkGbb5ylneLfJqByoeDjcyUf5t4oo2plLBetru8eMFr
+xirK7c+v1GnZFd2r4iXme+ql7pryUvXD+OT7qv4M//8AAGRlc2MAAAAAAAAAFUhQIExQMzA2NSBDYWxp
+YnJhdGVkAAAAAAAAAAAVAEgAUAAgAEwAUAAzADAANgA1ACAAQwBhAGwAaQBiAHIAYQB0AGUAZAAAAAAV
+SFAgTFAzMDY1IENhbGlicmF0ZWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIEluYy4sIDIwMDgAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAABtbW9kAAAAAAAAIvAAACaQAAAAAMJtVwAAAAAAAAAAAAAAAAAAAAAAA</bytes>
+													</object>
+												</object>
+											</object>
+										</object>
+										<reference key="NSColor" ref="30384615"/>
+									</object>
+									<reference key="NSAlternateImage" ref="619763889"/>
+									<int key="NSPeriodicDelay">400</int>
+									<int key="NSPeriodicInterval">75</int>
+								</object>
+							</object>
+							<string key="NSCellSize">{565, 22}</string>
+							<string key="NSIntercellSpacing">{4, 2}</string>
+							<int key="NSMatrixFlags">1151868928</int>
+							<string key="NSCellClass">NSActionCell</string>
+							<object class="NSButtonCell" key="NSProtoCell" id="773902463">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<string key="NSContents">Radio</string>
+								<reference key="NSSupport" ref="933596199"/>
+								<int key="NSButtonFlags">1211912703</int>
+								<int key="NSButtonFlags2">0</int>
+								<object class="NSImage" key="NSNormalImage">
+									<int key="NSImageFlags">549453824</int>
+									<string key="NSSize">{18, 18}</string>
+									<object class="NSMutableArray" key="NSReps">
+										<bool key="EncodedWithXMLCoder">YES</bool>
+										<object class="NSArray">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<integer value="0"/>
+											<object class="NSBitmapImageRep">
+												<object class="NSData" key="NSTIFFRepresentation">
+													<bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw
+IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/
+29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5
+dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA
+AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG
+AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/
+0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/
+7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/
+5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/
+3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD
+AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns
+AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/
+6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/
+/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/
+///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl
+YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA
+AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD
+AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu
+AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB
+AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES
+AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS
+AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
+												</object>
+											</object>
+										</object>
+									</object>
+									<reference key="NSColor" ref="30384615"/>
+								</object>
+								<reference key="NSAlternateImage" ref="619763889"/>
+								<int key="NSPeriodicDelay">400</int>
+								<int key="NSPeriodicInterval">75</int>
+							</object>
+							<reference key="NSSelectedCell" ref="808388382"/>
+							<reference key="NSBackgroundColor" ref="349124561"/>
+							<reference key="NSCellBackgroundColor" ref="195671423"/>
+							<reference key="NSFont" ref="933596199"/>
+						</object>
+						<object class="NSMatrix" id="1050951576">
+							<reference key="NSNextResponder" ref="594333702"/>
+							<int key="NSvFlags">268</int>
+							<string key="NSFrame">{{20, 104}, {565, 38}}</string>
+							<reference key="NSSuperview" ref="594333702"/>
+							<bool key="NSEnabled">YES</bool>
+							<int key="NSNumRows">2</int>
+							<int key="NSNumCols">1</int>
+							<object class="NSMutableArray" key="NSCells">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSButtonCell" id="943458284">
+									<int key="NSCellFlags">-2080244224</int>
+									<int key="NSCellFlags2">0</int>
+									<string key="NSContents">fork()</string>
+									<reference key="NSSupport" ref="933596199"/>
+									<reference key="NSControlView" ref="1050951576"/>
+									<int key="NSTag">3</int>
+									<int key="NSButtonFlags">1211912703</int>
+									<int key="NSButtonFlags2">0</int>
+									<reference key="NSAlternateImage" ref="619763889"/>
+									<string key="NSAlternateContents"/>
+									<string key="NSKeyEquivalent"/>
+									<int key="NSPeriodicDelay">200</int>
+									<int key="NSPeriodicInterval">25</int>
+								</object>
+								<object class="NSButtonCell" id="69061500">
+									<int key="NSCellFlags">67239424</int>
+									<int key="NSCellFlags2">0</int>
+									<string key="NSContents">vfork()</string>
+									<reference key="NSSupport" ref="933596199"/>
+									<reference key="NSControlView" ref="1050951576"/>
+									<int key="NSTag">4</int>
+									<int key="NSButtonFlags">1211912703</int>
+									<int key="NSButtonFlags2">0</int>
+									<object class="NSImage" key="NSNormalImage">
+										<int key="NSImageFlags">549453824</int>
+										<string key="NSSize">{18, 18}</string>
+										<object class="NSMutableArray" key="NSReps">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<object class="NSArray">
+												<bool key="EncodedWithXMLCoder">YES</bool>
+												<integer value="0"/>
+												<object class="NSBitmapImageRep">
+													<object class="NSData" key="NSTIFFRepresentation">
+														<bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw
+IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/
+29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5
+dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA
+AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG
+AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/
+0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/
+7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/
+5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/
+3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD
+AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns
+AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/
+6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/
+/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/
+///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl
+YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA
+AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD
+AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu
+AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB
+AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES
+AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS
+AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw
+cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA
+AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA
+BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA
+AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA
+AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1
+cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD
+AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH
+SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF
+hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8
+vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt
+7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq
+Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo
+aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e
+n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX
+2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW
+FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O
+Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6
+ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt
+rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA
+AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA
+AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl
+A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq
+DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU
+HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8
+MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v
+UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/
+eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj
+rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn
+5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh
+AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK
+CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY
+GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95
+MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S
+UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2
+d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV
+pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK
+0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf//
+AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw
+BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA
+FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H
+LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh
+Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ
+h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp
+svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb
+1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX
+8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE
+AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg
+QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes>
+													</object>
+												</object>
+											</object>
+										</object>
+										<reference key="NSColor" ref="30384615"/>
+									</object>
+									<reference key="NSAlternateImage" ref="619763889"/>
+									<int key="NSPeriodicDelay">400</int>
+									<int key="NSPeriodicInterval">75</int>
+								</object>
+							</object>
+							<string key="NSCellSize">{565, 18}</string>
+							<string key="NSIntercellSpacing">{4, 2}</string>
+							<int key="NSMatrixFlags">1151868928</int>
+							<string key="NSCellClass">NSActionCell</string>
+							<object class="NSButtonCell" key="NSProtoCell" id="709643899">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<string key="NSContents">Radio</string>
+								<reference key="NSSupport" ref="933596199"/>
+								<int key="NSButtonFlags">1211912703</int>
+								<int key="NSButtonFlags2">0</int>
+								<object class="NSImage" key="NSNormalImage">
+									<int key="NSImageFlags">549453824</int>
+									<string key="NSSize">{18, 18}</string>
+									<object class="NSMutableArray" key="NSReps">
+										<bool key="EncodedWithXMLCoder">YES</bool>
+										<object class="NSArray">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<integer value="0"/>
+											<object class="NSBitmapImageRep">
+												<object class="NSData" key="NSTIFFRepresentation">
+													<bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw
+IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/
+29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5
+dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA
+AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG
+AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/
+0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/
+7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/
+5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/
+3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD
+AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns
+AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/
+6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/
+/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/
+///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl
+YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA
+AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD
+AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu
+AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB
+AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES
+AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS
+AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
+												</object>
+											</object>
+										</object>
+									</object>
+									<reference key="NSColor" ref="30384615"/>
+								</object>
+								<reference key="NSAlternateImage" ref="619763889"/>
+								<int key="NSPeriodicDelay">400</int>
+								<int key="NSPeriodicInterval">75</int>
+							</object>
+							<reference key="NSSelectedCell" ref="943458284"/>
+							<reference key="NSBackgroundColor" ref="349124561"/>
+							<reference key="NSCellBackgroundColor" ref="195671423"/>
+							<reference key="NSFont" ref="933596199"/>
+						</object>
+						<object class="NSButton" id="512228208">
+							<reference key="NSNextResponder" ref="594333702"/>
+							<int key="NSvFlags">268</int>
+							<string key="NSFrame">{{591, 59}, {178, 161}}</string>
+							<reference key="NSSuperview" ref="594333702"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="69630975">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">134217728</int>
+								<string key="NSContents">Go!</string>
+								<object class="NSFont" key="NSSupport">
+									<string key="NSName">LucidaGrande</string>
+									<double key="NSSize">10</double>
+									<int key="NSfFlags">16</int>
+								</object>
+								<reference key="NSControlView" ref="512228208"/>
+								<int key="NSButtonFlags">-2033434369</int>
+								<int key="NSButtonFlags2">130</int>
+								<string key="NSAlternateContents"/>
+								<string key="NSKeyEquivalent"/>
+								<int key="NSPeriodicDelay">400</int>
+								<int key="NSPeriodicInterval">75</int>
+							</object>
+						</object>
+					</object>
+					<string key="NSFrameSize">{787, 260}</string>
+					<reference key="NSSuperview"/>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+		</object>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<object class="NSMutableArray" key="connectionRecords">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">performMiniaturize:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="683986939"/>
+					</object>
+					<int key="connectionID">37</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">arrangeInFront:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="164762492"/>
+					</object>
+					<int key="connectionID">39</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">print:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="302505815"/>
+					</object>
+					<int key="connectionID">86</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">runPageLayout:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="409810395"/>
+					</object>
+					<int key="connectionID">87</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">showHelp:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="192540884"/>
+					</object>
+					<int key="connectionID">122</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">clearRecentDocuments:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="85018532"/>
+					</object>
+					<int key="connectionID">127</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">terminate:</string>
+						<reference key="source" ref="870565383"/>
+						<reference key="destination" ref="887927135"/>
+					</object>
+					<int key="connectionID">139</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">orderFrontStandardAboutPanel:</string>
+						<reference key="source" ref="870565383"/>
+						<reference key="destination" ref="838552093"/>
+					</object>
+					<int key="connectionID">142</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">hideOtherApplications:</string>
+						<reference key="source" ref="870565383"/>
+						<reference key="destination" ref="216168366"/>
+					</object>
+					<int key="connectionID">146</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">hide:</string>
+						<reference key="source" ref="870565383"/>
+						<reference key="destination" ref="104472016"/>
+					</object>
+					<int key="connectionID">152</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">unhideAllApplications:</string>
+						<reference key="source" ref="870565383"/>
+						<reference key="destination" ref="667790509"/>
+					</object>
+					<int key="connectionID">153</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">cut:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="909447496"/>
+					</object>
+					<int key="connectionID">175</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">paste:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="84012734"/>
+					</object>
+					<int key="connectionID">176</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">redo:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="1001272176"/>
+					</object>
+					<int key="connectionID">178</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">selectAll:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="917620781"/>
+					</object>
+					<int key="connectionID">179</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">undo:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="284548410"/>
+					</object>
+					<int key="connectionID">180</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">copy:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="994487277"/>
+					</object>
+					<int key="connectionID">181</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">showGuessPanel:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="438210660"/>
+					</object>
+					<int key="connectionID">188</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">checkSpelling:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="102172584"/>
+					</object>
+					<int key="connectionID">190</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">toggleContinuousSpellChecking:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="540509341"/>
+					</object>
+					<int key="connectionID">192</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">performClose:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="468594275"/>
+					</object>
+					<int key="connectionID">193</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">delete:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="512189403"/>
+					</object>
+					<int key="connectionID">195</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">performZoom:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="548098734"/>
+					</object>
+					<int key="connectionID">198</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">performFindPanelAction:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="203238834"/>
+					</object>
+					<int key="connectionID">199</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">performFindPanelAction:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="861312964"/>
+					</object>
+					<int key="connectionID">200</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">performFindPanelAction:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="743767160"/>
+					</object>
+					<int key="connectionID">201</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">performFindPanelAction:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="180446588"/>
+					</object>
+					<int key="connectionID">202</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">centerSelectionInVisibleArea:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="731027425"/>
+					</object>
+					<int key="connectionID">203</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">pasteAsPlainText:</string>
+						<reference key="source" ref="442653439"/>
+						<reference key="destination" ref="182251545"/>
+					</object>
+					<int key="connectionID">205</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">crash:</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="726278107"/>
+					</object>
+					<int key="connectionID">208</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">window_</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="341270541"/>
+					</object>
+					<int key="connectionID">209</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">crash:</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="799567279"/>
+					</object>
+					<int key="connectionID">211</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">crash:</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="27781390"/>
+					</object>
+					<int key="connectionID">213</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">forkTestOptions_</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="347013037"/>
+					</object>
+					<int key="connectionID">241</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">forkTestOptions:</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="943458284"/>
+					</object>
+					<int key="connectionID">242</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">forkTestOptions:</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="7590393"/>
+					</object>
+					<int key="connectionID">243</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">forkTestOptions:</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="410017819"/>
+					</object>
+					<int key="connectionID">244</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">forkTestGo:</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="512228208"/>
+					</object>
+					<int key="connectionID">250</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">forkTestOptions:</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="1050951576"/>
+					</object>
+					<int key="connectionID">261</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">forkTestOptions:</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="891367997"/>
+					</object>
+					<int key="connectionID">262</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">showForkTestWindow:</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="856256540"/>
+					</object>
+					<int key="connectionID">283</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">generateReportWithoutCrash:</string>
+						<reference key="source" ref="623097029"/>
+						<reference key="destination" ref="460755987"/>
+					</object>
+					<int key="connectionID">327</int>
+				</object>
+			</object>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<object class="NSArray" key="orderedObjects">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<reference key="object" ref="0"/>
+						<reference key="children" ref="925601844"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="870565383"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="442653439"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">First Responder</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-3</int>
+						<reference key="object" ref="751079937"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Application</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">21</int>
+						<reference key="object" ref="341270541"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="814272478"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Window</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">2</int>
+						<reference key="object" ref="814272478"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="726278107"/>
+							<reference ref="799567279"/>
+							<reference ref="27781390"/>
+							<reference ref="856256540"/>
+							<reference ref="460755987"/>
+						</object>
+						<reference key="parent" ref="341270541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">206</int>
+						<reference key="object" ref="726278107"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="539552922"/>
+						</object>
+						<reference key="parent" ref="814272478"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">210</int>
+						<reference key="object" ref="799567279"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="1010617379"/>
+						</object>
+						<reference key="parent" ref="814272478"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">212</int>
+						<reference key="object" ref="27781390"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="547901497"/>
+						</object>
+						<reference key="parent" ref="814272478"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">218</int>
+						<reference key="object" ref="856256540"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="353736234"/>
+						</object>
+						<reference key="parent" ref="814272478"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">325</int>
+						<reference key="object" ref="460755987"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="775425649"/>
+						</object>
+						<reference key="parent" ref="814272478"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">29</int>
+						<reference key="object" ref="695387251"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="764068863"/>
+							<reference ref="458207250"/>
+							<reference ref="369472335"/>
+							<reference ref="599772536"/>
+							<reference ref="542216986"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">MainMenu</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">19</int>
+						<reference key="object" ref="764068863"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="200536676"/>
+						</object>
+						<reference key="parent" ref="695387251"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">24</int>
+						<reference key="object" ref="200536676"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="164762492"/>
+							<reference ref="683986939"/>
+							<reference ref="297002686"/>
+							<reference ref="548098734"/>
+						</object>
+						<reference key="parent" ref="764068863"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="164762492"/>
+						<reference key="parent" ref="200536676"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">23</int>
+						<reference key="object" ref="683986939"/>
+						<reference key="parent" ref="200536676"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">92</int>
+						<reference key="object" ref="297002686"/>
+						<reference key="parent" ref="200536676"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">197</int>
+						<reference key="object" ref="548098734"/>
+						<reference key="parent" ref="200536676"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">56</int>
+						<reference key="object" ref="458207250"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="753534561"/>
+						</object>
+						<reference key="parent" ref="695387251"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">57</int>
+						<reference key="object" ref="753534561"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="838552093"/>
+							<reference ref="443649494"/>
+							<reference ref="826764396"/>
+							<reference ref="104472016"/>
+							<reference ref="887927135"/>
+							<reference ref="217746140"/>
+							<reference ref="881859155"/>
+							<reference ref="216168366"/>
+							<reference ref="928933982"/>
+							<reference ref="667790509"/>
+							<reference ref="758254482"/>
+						</object>
+						<reference key="parent" ref="458207250"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">58</int>
+						<reference key="object" ref="838552093"/>
+						<reference key="parent" ref="753534561"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">129</int>
+						<reference key="object" ref="443649494"/>
+						<reference key="parent" ref="753534561"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">131</int>
+						<reference key="object" ref="826764396"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="276709607"/>
+						</object>
+						<reference key="parent" ref="753534561"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">130</int>
+						<reference key="object" ref="276709607"/>
+						<reference key="parent" ref="826764396"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">134</int>
+						<reference key="object" ref="104472016"/>
+						<reference key="parent" ref="753534561"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">136</int>
+						<reference key="object" ref="887927135"/>
+						<reference key="parent" ref="753534561"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">143</int>
+						<reference key="object" ref="217746140"/>
+						<reference key="parent" ref="753534561"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">144</int>
+						<reference key="object" ref="881859155"/>
+						<reference key="parent" ref="753534561"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">145</int>
+						<reference key="object" ref="216168366"/>
+						<reference key="parent" ref="753534561"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">149</int>
+						<reference key="object" ref="928933982"/>
+						<reference key="parent" ref="753534561"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">150</int>
+						<reference key="object" ref="667790509"/>
+						<reference key="parent" ref="753534561"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">196</int>
+						<reference key="object" ref="758254482"/>
+						<reference key="parent" ref="753534561"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">83</int>
+						<reference key="object" ref="369472335"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="902982238"/>
+						</object>
+						<reference key="parent" ref="695387251"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">81</int>
+						<reference key="object" ref="902982238"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="367379562"/>
+							<reference ref="468594275"/>
+							<reference ref="232609393"/>
+							<reference ref="479945444"/>
+							<reference ref="409810395"/>
+							<reference ref="302505815"/>
+							<reference ref="154948703"/>
+							<reference ref="976375553"/>
+							<reference ref="660391032"/>
+							<reference ref="885975128"/>
+							<reference ref="84883275"/>
+						</object>
+						<reference key="parent" ref="369472335"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">72</int>
+						<reference key="object" ref="367379562"/>
+						<reference key="parent" ref="902982238"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">73</int>
+						<reference key="object" ref="468594275"/>
+						<reference key="parent" ref="902982238"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">74</int>
+						<reference key="object" ref="232609393"/>
+						<reference key="parent" ref="902982238"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">75</int>
+						<reference key="object" ref="479945444"/>
+						<reference key="parent" ref="902982238"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">77</int>
+						<reference key="object" ref="409810395"/>
+						<reference key="parent" ref="902982238"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">78</int>
+						<reference key="object" ref="302505815"/>
+						<reference key="parent" ref="902982238"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">79</int>
+						<reference key="object" ref="154948703"/>
+						<reference key="parent" ref="902982238"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">80</int>
+						<reference key="object" ref="976375553"/>
+						<reference key="parent" ref="902982238"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">82</int>
+						<reference key="object" ref="660391032"/>
+						<reference key="parent" ref="902982238"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">112</int>
+						<reference key="object" ref="885975128"/>
+						<reference key="parent" ref="902982238"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">124</int>
+						<reference key="object" ref="84883275"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="693280130"/>
+						</object>
+						<reference key="parent" ref="902982238"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">125</int>
+						<reference key="object" ref="693280130"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="85018532"/>
+						</object>
+						<reference key="parent" ref="84883275"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">126</int>
+						<reference key="object" ref="85018532"/>
+						<reference key="parent" ref="693280130"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">103</int>
+						<reference key="object" ref="599772536"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="1066958924"/>
+						</object>
+						<reference key="parent" ref="695387251"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">106</int>
+						<reference key="object" ref="1066958924"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="192540884"/>
+						</object>
+						<reference key="parent" ref="599772536"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">111</int>
+						<reference key="object" ref="192540884"/>
+						<reference key="parent" ref="1066958924"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">163</int>
+						<reference key="object" ref="542216986"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="1053284541"/>
+						</object>
+						<reference key="parent" ref="695387251"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">169</int>
+						<reference key="object" ref="1053284541"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="209744238"/>
+							<reference ref="994487277"/>
+							<reference ref="284548410"/>
+							<reference ref="909447496"/>
+							<reference ref="512189403"/>
+							<reference ref="153501847"/>
+							<reference ref="84012734"/>
+							<reference ref="917620781"/>
+							<reference ref="1001272176"/>
+							<reference ref="431895313"/>
+							<reference ref="61602259"/>
+							<reference ref="182251545"/>
+						</object>
+						<reference key="parent" ref="542216986"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">156</int>
+						<reference key="object" ref="209744238"/>
+						<reference key="parent" ref="1053284541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">157</int>
+						<reference key="object" ref="994487277"/>
+						<reference key="parent" ref="1053284541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">158</int>
+						<reference key="object" ref="284548410"/>
+						<reference key="parent" ref="1053284541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">160</int>
+						<reference key="object" ref="909447496"/>
+						<reference key="parent" ref="1053284541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">164</int>
+						<reference key="object" ref="512189403"/>
+						<reference key="parent" ref="1053284541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">168</int>
+						<reference key="object" ref="153501847"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="333484665"/>
+						</object>
+						<reference key="parent" ref="1053284541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">159</int>
+						<reference key="object" ref="333484665"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="203238834"/>
+							<reference ref="731027425"/>
+							<reference ref="180446588"/>
+							<reference ref="743767160"/>
+							<reference ref="861312964"/>
+						</object>
+						<reference key="parent" ref="153501847"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">154</int>
+						<reference key="object" ref="203238834"/>
+						<reference key="parent" ref="333484665"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">155</int>
+						<reference key="object" ref="731027425"/>
+						<reference key="parent" ref="333484665"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">161</int>
+						<reference key="object" ref="180446588"/>
+						<reference key="parent" ref="333484665"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">162</int>
+						<reference key="object" ref="743767160"/>
+						<reference key="parent" ref="333484665"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">167</int>
+						<reference key="object" ref="861312964"/>
+						<reference key="parent" ref="333484665"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">171</int>
+						<reference key="object" ref="84012734"/>
+						<reference key="parent" ref="1053284541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">172</int>
+						<reference key="object" ref="917620781"/>
+						<reference key="parent" ref="1053284541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">173</int>
+						<reference key="object" ref="1001272176"/>
+						<reference key="parent" ref="1053284541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">174</int>
+						<reference key="object" ref="431895313"/>
+						<reference key="parent" ref="1053284541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">184</int>
+						<reference key="object" ref="61602259"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="8174285"/>
+						</object>
+						<reference key="parent" ref="1053284541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">185</int>
+						<reference key="object" ref="8174285"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="438210660"/>
+							<reference ref="102172584"/>
+							<reference ref="540509341"/>
+						</object>
+						<reference key="parent" ref="61602259"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">187</int>
+						<reference key="object" ref="438210660"/>
+						<reference key="parent" ref="8174285"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">189</int>
+						<reference key="object" ref="102172584"/>
+						<reference key="parent" ref="8174285"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">191</int>
+						<reference key="object" ref="540509341"/>
+						<reference key="parent" ref="8174285"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">204</int>
+						<reference key="object" ref="182251545"/>
+						<reference key="parent" ref="1053284541"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">207</int>
+						<reference key="object" ref="623097029"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Controller</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">220</int>
+						<reference key="object" ref="347013037"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="594333702"/>
+						</object>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Window (Window)</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">221</int>
+						<reference key="object" ref="594333702"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="891367997"/>
+							<reference ref="7590393"/>
+							<reference ref="1050951576"/>
+							<reference ref="512228208"/>
+						</object>
+						<reference key="parent" ref="347013037"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">226</int>
+						<reference key="object" ref="891367997"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="410017819"/>
+							<reference ref="904578786"/>
+							<reference ref="971445237"/>
+							<reference ref="1072218638"/>
+						</object>
+						<reference key="parent" ref="594333702"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">227</int>
+						<reference key="object" ref="410017819"/>
+						<reference key="parent" ref="891367997"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">228</int>
+						<reference key="object" ref="904578786"/>
+						<reference key="parent" ref="891367997"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">272</int>
+						<reference key="object" ref="971445237"/>
+						<reference key="parent" ref="891367997"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">232</int>
+						<reference key="object" ref="7590393"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="808388382"/>
+							<reference ref="378736460"/>
+							<reference ref="251439646"/>
+							<reference ref="773902463"/>
+						</object>
+						<reference key="parent" ref="594333702"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">233</int>
+						<reference key="object" ref="808388382"/>
+						<reference key="parent" ref="7590393"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">234</int>
+						<reference key="object" ref="378736460"/>
+						<reference key="parent" ref="7590393"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">236</int>
+						<reference key="object" ref="251439646"/>
+						<reference key="parent" ref="7590393"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">237</int>
+						<reference key="object" ref="1050951576"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="943458284"/>
+							<reference ref="69061500"/>
+							<reference ref="709643899"/>
+						</object>
+						<reference key="parent" ref="594333702"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">238</int>
+						<reference key="object" ref="943458284"/>
+						<reference key="parent" ref="1050951576"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">239</int>
+						<reference key="object" ref="69061500"/>
+						<reference key="parent" ref="1050951576"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">248</int>
+						<reference key="object" ref="512228208"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="69630975"/>
+						</object>
+						<reference key="parent" ref="594333702"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">329</int>
+						<reference key="object" ref="539552922"/>
+						<reference key="parent" ref="726278107"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">330</int>
+						<reference key="object" ref="1010617379"/>
+						<reference key="parent" ref="799567279"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">331</int>
+						<reference key="object" ref="547901497"/>
+						<reference key="parent" ref="27781390"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">332</int>
+						<reference key="object" ref="353736234"/>
+						<reference key="parent" ref="856256540"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">333</int>
+						<reference key="object" ref="775425649"/>
+						<reference key="parent" ref="460755987"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">334</int>
+						<reference key="object" ref="69630975"/>
+						<reference key="parent" ref="512228208"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">335</int>
+						<reference key="object" ref="1072218638"/>
+						<reference key="parent" ref="891367997"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">336</int>
+						<reference key="object" ref="773902463"/>
+						<reference key="parent" ref="7590393"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">337</int>
+						<reference key="object" ref="709643899"/>
+						<reference key="parent" ref="1050951576"/>
+					</object>
+				</object>
+			</object>
+			<object class="NSMutableDictionary" key="flattenedProperties">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="NSArray" key="dict.sortedKeys">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<string>-3.IBPluginDependency</string>
+					<string>-3.ImportedFromIB2</string>
+					<string>103.IBPluginDependency</string>
+					<string>103.ImportedFromIB2</string>
+					<string>106.IBPluginDependency</string>
+					<string>106.ImportedFromIB2</string>
+					<string>111.IBPluginDependency</string>
+					<string>111.ImportedFromIB2</string>
+					<string>112.IBPluginDependency</string>
+					<string>112.ImportedFromIB2</string>
+					<string>124.IBPluginDependency</string>
+					<string>124.ImportedFromIB2</string>
+					<string>125.IBPluginDependency</string>
+					<string>125.ImportedFromIB2</string>
+					<string>126.IBPluginDependency</string>
+					<string>126.ImportedFromIB2</string>
+					<string>129.IBPluginDependency</string>
+					<string>129.ImportedFromIB2</string>
+					<string>130.IBPluginDependency</string>
+					<string>130.ImportedFromIB2</string>
+					<string>131.IBPluginDependency</string>
+					<string>131.ImportedFromIB2</string>
+					<string>134.IBPluginDependency</string>
+					<string>134.ImportedFromIB2</string>
+					<string>136.IBPluginDependency</string>
+					<string>136.ImportedFromIB2</string>
+					<string>143.IBPluginDependency</string>
+					<string>143.ImportedFromIB2</string>
+					<string>144.IBPluginDependency</string>
+					<string>144.ImportedFromIB2</string>
+					<string>145.IBPluginDependency</string>
+					<string>145.ImportedFromIB2</string>
+					<string>149.IBPluginDependency</string>
+					<string>149.ImportedFromIB2</string>
+					<string>150.IBPluginDependency</string>
+					<string>150.ImportedFromIB2</string>
+					<string>154.IBPluginDependency</string>
+					<string>154.ImportedFromIB2</string>
+					<string>155.IBPluginDependency</string>
+					<string>155.ImportedFromIB2</string>
+					<string>156.IBPluginDependency</string>
+					<string>156.ImportedFromIB2</string>
+					<string>157.IBPluginDependency</string>
+					<string>157.ImportedFromIB2</string>
+					<string>158.IBPluginDependency</string>
+					<string>158.ImportedFromIB2</string>
+					<string>159.IBPluginDependency</string>
+					<string>159.ImportedFromIB2</string>
+					<string>160.IBPluginDependency</string>
+					<string>160.ImportedFromIB2</string>
+					<string>161.IBPluginDependency</string>
+					<string>161.ImportedFromIB2</string>
+					<string>162.IBPluginDependency</string>
+					<string>162.ImportedFromIB2</string>
+					<string>163.IBPluginDependency</string>
+					<string>163.ImportedFromIB2</string>
+					<string>164.IBPluginDependency</string>
+					<string>164.ImportedFromIB2</string>
+					<string>167.IBPluginDependency</string>
+					<string>167.ImportedFromIB2</string>
+					<string>168.IBPluginDependency</string>
+					<string>168.ImportedFromIB2</string>
+					<string>169.IBPluginDependency</string>
+					<string>169.ImportedFromIB2</string>
+					<string>171.IBPluginDependency</string>
+					<string>171.ImportedFromIB2</string>
+					<string>172.IBPluginDependency</string>
+					<string>172.ImportedFromIB2</string>
+					<string>173.IBPluginDependency</string>
+					<string>173.ImportedFromIB2</string>
+					<string>174.IBPluginDependency</string>
+					<string>174.ImportedFromIB2</string>
+					<string>184.IBPluginDependency</string>
+					<string>184.ImportedFromIB2</string>
+					<string>185.IBPluginDependency</string>
+					<string>185.ImportedFromIB2</string>
+					<string>187.IBPluginDependency</string>
+					<string>187.ImportedFromIB2</string>
+					<string>189.IBPluginDependency</string>
+					<string>189.ImportedFromIB2</string>
+					<string>19.IBPluginDependency</string>
+					<string>19.ImportedFromIB2</string>
+					<string>191.IBPluginDependency</string>
+					<string>191.ImportedFromIB2</string>
+					<string>196.IBPluginDependency</string>
+					<string>196.ImportedFromIB2</string>
+					<string>197.IBPluginDependency</string>
+					<string>197.ImportedFromIB2</string>
+					<string>2.IBPluginDependency</string>
+					<string>2.ImportedFromIB2</string>
+					<string>204.IBPluginDependency</string>
+					<string>204.ImportedFromIB2</string>
+					<string>206.IBPluginDependency</string>
+					<string>206.ImportedFromIB2</string>
+					<string>207.ImportedFromIB2</string>
+					<string>21.IBEditorWindowLastContentRect</string>
+					<string>21.IBPluginDependency</string>
+					<string>21.IBWindowTemplateEditedContentRect</string>
+					<string>21.ImportedFromIB2</string>
+					<string>21.windowTemplate.hasMinSize</string>
+					<string>21.windowTemplate.minSize</string>
+					<string>210.IBPluginDependency</string>
+					<string>210.ImportedFromIB2</string>
+					<string>212.IBPluginDependency</string>
+					<string>212.ImportedFromIB2</string>
+					<string>218.IBPluginDependency</string>
+					<string>218.ImportedFromIB2</string>
+					<string>220.IBEditorWindowLastContentRect</string>
+					<string>220.IBPluginDependency</string>
+					<string>220.IBWindowTemplateEditedContentRect</string>
+					<string>220.ImportedFromIB2</string>
+					<string>221.IBPluginDependency</string>
+					<string>221.ImportedFromIB2</string>
+					<string>226.IBPluginDependency</string>
+					<string>226.ImportedFromIB2</string>
+					<string>227.IBPluginDependency</string>
+					<string>227.ImportedFromIB2</string>
+					<string>228.IBPluginDependency</string>
+					<string>228.ImportedFromIB2</string>
+					<string>23.IBPluginDependency</string>
+					<string>23.ImportedFromIB2</string>
+					<string>232.IBPluginDependency</string>
+					<string>232.ImportedFromIB2</string>
+					<string>233.IBPluginDependency</string>
+					<string>233.ImportedFromIB2</string>
+					<string>234.IBPluginDependency</string>
+					<string>234.ImportedFromIB2</string>
+					<string>236.IBPluginDependency</string>
+					<string>236.ImportedFromIB2</string>
+					<string>237.IBPluginDependency</string>
+					<string>237.ImportedFromIB2</string>
+					<string>238.IBPluginDependency</string>
+					<string>238.ImportedFromIB2</string>
+					<string>239.IBPluginDependency</string>
+					<string>239.ImportedFromIB2</string>
+					<string>24.IBPluginDependency</string>
+					<string>24.ImportedFromIB2</string>
+					<string>248.IBPluginDependency</string>
+					<string>248.ImportedFromIB2</string>
+					<string>272.IBPluginDependency</string>
+					<string>272.ImportedFromIB2</string>
+					<string>29.IBEditorWindowLastContentRect</string>
+					<string>29.IBPluginDependency</string>
+					<string>29.ImportedFromIB2</string>
+					<string>325.IBPluginDependency</string>
+					<string>325.ImportedFromIB2</string>
+					<string>329.IBPluginDependency</string>
+					<string>330.IBPluginDependency</string>
+					<string>331.IBPluginDependency</string>
+					<string>332.IBPluginDependency</string>
+					<string>333.IBPluginDependency</string>
+					<string>334.IBPluginDependency</string>
+					<string>335.IBPluginDependency</string>
+					<string>336.IBPluginDependency</string>
+					<string>337.IBPluginDependency</string>
+					<string>5.IBPluginDependency</string>
+					<string>5.ImportedFromIB2</string>
+					<string>56.IBPluginDependency</string>
+					<string>56.ImportedFromIB2</string>
+					<string>57.IBPluginDependency</string>
+					<string>57.ImportedFromIB2</string>
+					<string>58.IBPluginDependency</string>
+					<string>58.ImportedFromIB2</string>
+					<string>72.IBPluginDependency</string>
+					<string>72.ImportedFromIB2</string>
+					<string>73.IBPluginDependency</string>
+					<string>73.ImportedFromIB2</string>
+					<string>74.IBPluginDependency</string>
+					<string>74.ImportedFromIB2</string>
+					<string>75.IBPluginDependency</string>
+					<string>75.ImportedFromIB2</string>
+					<string>77.IBPluginDependency</string>
+					<string>77.ImportedFromIB2</string>
+					<string>78.IBPluginDependency</string>
+					<string>78.ImportedFromIB2</string>
+					<string>79.IBPluginDependency</string>
+					<string>79.ImportedFromIB2</string>
+					<string>80.IBPluginDependency</string>
+					<string>80.ImportedFromIB2</string>
+					<string>81.IBPluginDependency</string>
+					<string>81.ImportedFromIB2</string>
+					<string>82.IBPluginDependency</string>
+					<string>82.ImportedFromIB2</string>
+					<string>83.IBPluginDependency</string>
+					<string>83.ImportedFromIB2</string>
+					<string>92.IBPluginDependency</string>
+					<string>92.ImportedFromIB2</string>
+				</object>
+				<object class="NSMutableArray" key="dict.values">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<string>{{510, 1250}, {320, 188}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{510, 1250}, {320, 188}}</string>
+					<boolean value="YES"/>
+					<boolean value="YES"/>
+					<string>{213, 107}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{-55, 1287}, {787, 260}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{-55, 1287}, {787, 260}}</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>{{0, 1114}, {362, 20}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<boolean value="YES"/>
+				</object>
+			</object>
+			<object class="NSMutableDictionary" key="unlocalizedProperties">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<reference key="dict.sortedKeys" ref="0"/>
+				<object class="NSMutableArray" key="dict.values">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+				</object>
+			</object>
+			<nil key="activeLocalization"/>
+			<object class="NSMutableDictionary" key="localizations">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<reference key="dict.sortedKeys" ref="0"/>
+				<object class="NSMutableArray" key="dict.values">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+				</object>
+			</object>
+			<nil key="sourceID"/>
+			<int key="maxID">337</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="IBPartialClassDescription">
+					<string key="className">Controller</string>
+					<string key="superclassName">NSObject</string>
+					<object class="NSMutableDictionary" key="actions">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>crash:</string>
+							<string>forkTestGo:</string>
+							<string>forkTestOptions:</string>
+							<string>generateReportWithoutCrash:</string>
+							<string>showForkTestWindow:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>crash:</string>
+							<string>forkTestGo:</string>
+							<string>forkTestOptions:</string>
+							<string>generateReportWithoutCrash:</string>
+							<string>showForkTestWindow:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBActionInfo">
+								<string key="name">crash:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">forkTestGo:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">forkTestOptions:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">generateReportWithoutCrash:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">showForkTestWindow:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="outlets">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>forkTestOptions_</string>
+							<string>window_</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>NSWindow</string>
+							<string>NSWindow</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>forkTestOptions_</string>
+							<string>window_</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBToOneOutletInfo">
+								<string key="name">forkTestOptions_</string>
+								<string key="candidateClassName">NSWindow</string>
+							</object>
+							<object class="IBToOneOutletInfo">
+								<string key="name">window_</string>
+								<string key="candidateClassName">NSWindow</string>
+							</object>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">testapp/Controller.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">Controller</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">FirstResponder</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+			</object>
+			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSActionCell</string>
+					<string key="superclassName">NSCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="785325875">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="806686590">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="301712406">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSBrowser</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSBrowser.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSButton</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSButton.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSButtonCell</string>
+					<string key="superclassName">NSActionCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSCell</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSControl</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="787388657">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSDocument</string>
+					<string key="superclassName">NSObject</string>
+					<object class="NSMutableDictionary" key="actions">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>printDocument:</string>
+							<string>revertDocumentToSaved:</string>
+							<string>runPageLayout:</string>
+							<string>saveDocument:</string>
+							<string>saveDocumentAs:</string>
+							<string>saveDocumentTo:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>printDocument:</string>
+							<string>revertDocumentToSaved:</string>
+							<string>runPageLayout:</string>
+							<string>saveDocument:</string>
+							<string>saveDocumentAs:</string>
+							<string>saveDocumentTo:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBActionInfo">
+								<string key="name">printDocument:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">revertDocumentToSaved:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">runPageLayout:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">saveDocument:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">saveDocumentAs:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">saveDocumentTo:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDocument.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSDocument</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDocumentScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSDocumentController</string>
+					<string key="superclassName">NSObject</string>
+					<object class="NSMutableDictionary" key="actions">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>clearRecentDocuments:</string>
+							<string>newDocument:</string>
+							<string>openDocument:</string>
+							<string>saveAllDocuments:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>clearRecentDocuments:</string>
+							<string>newDocument:</string>
+							<string>openDocument:</string>
+							<string>saveAllDocuments:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBActionInfo">
+								<string key="name">clearRecentDocuments:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">newDocument:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">openDocument:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">saveAllDocuments:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDocumentController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSFormatter</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMatrix</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMenu</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="136824428">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMenuItem</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="171959132">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMovieView</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMovieView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="785325875"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="806686590"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="301712406"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="787388657"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="136824428"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="521965700">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="104369095">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTableView</string>
+					<string key="superclassName">NSControl</string>
+					<reference key="sourceIdentifier" ref="521965700"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSText</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSText.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<reference key="sourceIdentifier" ref="171959132"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<string key="superclassName">NSResponder</string>
+					<reference key="sourceIdentifier" ref="104369095"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
+					</object>
+				</object>
+			</object>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3000" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<string key="IBDocument.LastKnownRelativeProjectPath">../../Breakpad.xcodeproj</string>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<object class="NSArray" key="dict.sortedKeys">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<string>NSMenuCheckmark</string>
+				<string>NSMenuMixedState</string>
+			</object>
+			<object class="NSMutableArray" key="dict.values">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<string>{9, 8}</string>
+				<string>{7, 2}</string>
+			</object>
+		</object>
+	</data>
+</archive>
diff --git a/src/client/mac/testapp/TestClass.mm b/src/client/mac/testapp/TestClass.mm
index cade633..6e6a883 100644
--- a/src/client/mac/testapp/TestClass.mm
+++ b/src/client/mac/testapp/TestClass.mm
@@ -78,7 +78,7 @@
 float InternalTestClass::kStaticFloatValue = 42;
 
 static float PlainOldFunction() {
-  return 3.14145;
+  return 3.14145f;
 }
 
 @implementation TestClass
diff --git a/src/client/mac/tests/SimpleStringDictionaryTest.h b/src/client/mac/tests/SimpleStringDictionaryTest.h
index 1f48517..53f6ae4 100644
--- a/src/client/mac/tests/SimpleStringDictionaryTest.h
+++ b/src/client/mac/tests/SimpleStringDictionaryTest.h
@@ -27,7 +27,7 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#import <GTMSenTestCase.h>
+#import "GTMSenTestCase.h"
 #import "SimpleStringDictionary.h"
 
 @interface SimpleStringDictionaryTest : GTMTestCase {
diff --git a/src/client/mac/tests/auto_tempdir.h b/src/client/mac/tests/auto_tempdir.h
new file mode 100644
index 0000000..b6473a5
--- /dev/null
+++ b/src/client/mac/tests/auto_tempdir.h
@@ -0,0 +1,72 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Utility class for creating a temporary directory for unit tests
+// that is deleted in the destructor.
+#ifndef GOOGLE_BREAKPAD_CLIENT_MAC_TESTS_AUTO_TEMPDIR
+#define GOOGLE_BREAKPAD_CLIENT_MAC_TESTS_AUTO_TEMPDIR
+
+#include <dirent.h>
+#include <sys/types.h>
+
+#include <string>
+
+namespace google_breakpad {
+
+class AutoTempDir {
+ public:
+  AutoTempDir() {
+    char tempDir[16] = "/tmp/XXXXXXXXXX";
+    mkdtemp(tempDir);
+    path = tempDir;
+  }
+
+  ~AutoTempDir() {
+    // First remove any files in the dir
+    DIR* dir = opendir(path.c_str());
+    if (!dir)
+      return;
+
+    dirent* entry;
+    while ((entry = readdir(dir)) != NULL) {
+      if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
+	continue;
+      std::string entryPath = path + "/" + entry->d_name;
+      unlink(entryPath.c_str());
+    }
+    closedir(dir);
+    rmdir(path.c_str());
+  }
+
+  std::string path;
+};
+
+}  // namespace google_breakpad
+
+#endif  // GOOGLE_BREAKPAD_CLIENT_MAC_TESTS_AUTO_TEMPDIR
diff --git a/src/client/mac/tests/crash_generation_server_test.cc b/src/client/mac/tests/crash_generation_server_test.cc
new file mode 100644
index 0000000..1ea5bf1
--- /dev/null
+++ b/src/client/mac/tests/crash_generation_server_test.cc
@@ -0,0 +1,223 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// crash_generation_server_test.cc
+// Unit tests for CrashGenerationServer
+
+#include <dirent.h>
+#include <glob.h>
+#include <stdint.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <string>
+
+#include "breakpad_googletest_includes.h"
+#include "client/mac/crash_generation/client_info.h"
+#include "client/mac/crash_generation/crash_generation_client.h"
+#include "client/mac/crash_generation/crash_generation_server.h"
+#include "client/mac/handler/exception_handler.h"
+#include "client/mac/tests/auto_tempdir.h"
+
+namespace {
+using std::string;
+using google_breakpad::AutoTempDir;
+using google_breakpad::ClientInfo;
+using google_breakpad::CrashGenerationClient;
+using google_breakpad::CrashGenerationServer;
+using google_breakpad::ExceptionHandler;
+using testing::Test;
+
+class CrashGenerationServerTest : public Test {
+public:
+  // The port name to receive messages on
+  char mach_port_name[128];
+  // Filename of the last dump that was generated
+  string last_dump_name;
+  // PID of the child process
+  pid_t child_pid;
+  // A temp dir
+  AutoTempDir temp_dir;
+  // Counter just to ensure that we don't hit the same port again
+  static int i;
+
+  void SetUp() {
+    sprintf(mach_port_name,
+	    "com.google.breakpad.ServerTest.%d.%d", getpid(),
+	    CrashGenerationServerTest::i++);
+    child_pid = (pid_t)-1;
+  }
+};
+int CrashGenerationServerTest::i = 0;
+
+// Test that starting and stopping a server works
+TEST_F(CrashGenerationServerTest, testStartStopServer) {
+  CrashGenerationServer server(mach_port_name,
+			       NULL,  // dump callback
+			       NULL,  // dump context
+			       NULL,  // exit callback
+			       NULL,  // exit context
+			       false, // generate dumps
+			       ""); // dump path
+  ASSERT_TRUE(server.Start());
+  ASSERT_TRUE(server.Stop());
+}
+
+// Test that requesting a dump via CrashGenerationClient works
+// Test without actually dumping
+TEST_F(CrashGenerationServerTest, testRequestDumpNoDump) {
+  CrashGenerationServer server(mach_port_name,
+			       NULL,  // dump callback
+			       NULL,  // dump context
+			       NULL,  // exit callback
+			       NULL,  // exit context
+			       false, // don't generate dumps
+			       temp_dir.path); // dump path
+  ASSERT_TRUE(server.Start());
+
+  pid_t pid = fork();
+  ASSERT_NE(-1, pid);
+  if (pid == 0) {
+    CrashGenerationClient client(mach_port_name);
+    bool result = client.RequestDump();
+    exit(result ? 0 : 1);
+  }
+
+  int ret;
+  ASSERT_EQ(pid, waitpid(pid, &ret, 0));
+  EXPECT_TRUE(WIFEXITED(ret));
+  EXPECT_EQ(0, WEXITSTATUS(ret));
+  EXPECT_TRUE(server.Stop());
+  // check that no minidump was written
+  string pattern = temp_dir.path + "/*";
+  glob_t dirContents;
+  ret = glob(pattern.c_str(), GLOB_NOSORT, NULL, &dirContents);
+  EXPECT_EQ(GLOB_NOMATCH, ret);
+  if (ret != GLOB_NOMATCH)
+    globfree(&dirContents);
+}
+
+void dumpCallback(void *context, const ClientInfo &client_info,
+		  const std::string &file_path) {
+  if (context) {
+    CrashGenerationServerTest* self =
+        reinterpret_cast<CrashGenerationServerTest*>(context);
+    if (!file_path.empty())
+      self->last_dump_name = file_path;
+    self->child_pid = client_info.pid();
+  }
+}
+
+void *RequestDump(void *context) {
+  CrashGenerationClient client((const char*)context);
+  bool result = client.RequestDump();
+  return (void*)(result ? 0 : 1);
+}
+
+// Test that actually writing a minidump works
+TEST_F(CrashGenerationServerTest, testRequestDump) {
+  CrashGenerationServer server(mach_port_name,
+			       dumpCallback,  // dump callback
+			       this,  // dump context
+			       NULL,  // exit callback
+			       NULL,  // exit context
+			       true, //  generate dumps
+			       temp_dir.path); // dump path
+  ASSERT_TRUE(server.Start());
+
+  pid_t pid = fork();
+  ASSERT_NE(-1, pid);
+  if (pid == 0) {
+    // Have to spawn off a separate thread to request the dump,
+    // because MinidumpGenerator assumes the handler thread is not
+    // the only thread
+    pthread_t thread;
+    if (pthread_create(&thread, NULL, RequestDump, (void*)mach_port_name) != 0)
+      exit(1);
+    void* result;
+    pthread_join(thread, &result);
+    exit(reinterpret_cast<intptr_t>(result));
+  }
+
+  int ret;
+  ASSERT_EQ(pid, waitpid(pid, &ret, 0));
+  EXPECT_TRUE(WIFEXITED(ret));
+  EXPECT_EQ(0, WEXITSTATUS(ret));
+  EXPECT_TRUE(server.Stop());
+  // check that minidump was written
+  ASSERT_FALSE(last_dump_name.empty());
+  struct stat st;
+  EXPECT_EQ(0, stat(last_dump_name.c_str(), &st));
+  EXPECT_LT(0, st.st_size);
+  // check client's PID
+  ASSERT_EQ(pid, child_pid);
+}
+
+static void Crasher() {
+  int *a = (int*)0x42;
+
+  fprintf(stdout, "Going to crash...\n");
+  fprintf(stdout, "A = %d", *a);
+}
+
+// Test that crashing a child process with an OOP ExceptionHandler installed
+// results in a minidump being written by the CrashGenerationServer in
+// the parent.
+TEST_F(CrashGenerationServerTest, testChildProcessCrash) {
+  CrashGenerationServer server(mach_port_name,
+			       dumpCallback,  // dump callback
+			       this,  // dump context
+			       NULL,  // exit callback
+			       NULL,  // exit context
+			       true, //  generate dumps
+			       temp_dir.path); // dump path
+  ASSERT_TRUE(server.Start());
+
+  pid_t pid = fork();
+  ASSERT_NE(-1, pid);
+  if (pid == 0) {
+    // Instantiate an OOP exception handler.
+    ExceptionHandler eh("", NULL, NULL, NULL, true, mach_port_name);
+    Crasher();
+    // not reached
+    exit(0);
+  }
+
+  int ret;
+  ASSERT_EQ(pid, waitpid(pid, &ret, 0));
+  EXPECT_FALSE(WIFEXITED(ret));
+  EXPECT_TRUE(server.Stop());
+  // check that minidump was written
+  ASSERT_FALSE(last_dump_name.empty());
+  struct stat st;
+  EXPECT_EQ(0, stat(last_dump_name.c_str(), &st));
+  EXPECT_LT(0, st.st_size);  
+}
+
+}  // namespace
diff --git a/src/client/mac/tests/exception_handler_test.cc b/src/client/mac/tests/exception_handler_test.cc
new file mode 100644
index 0000000..4bdd185
--- /dev/null
+++ b/src/client/mac/tests/exception_handler_test.cc
@@ -0,0 +1,597 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// exception_handler_test.cc: Unit tests for google_breakpad::ExceptionHandler
+
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "breakpad_googletest_includes.h"
+#include "client/mac/handler/exception_handler.h"
+#include "client/mac/tests/auto_tempdir.h"
+#include "common/mac/MachIPC.h"
+#include "google_breakpad/processor/minidump.h"
+
+namespace google_breakpad {
+// This acts as the log sink for INFO logging from the processor
+// logging code. The logging output confuses XCode and makes it think
+// there are unit test failures. testlogging.h handles the overriding.
+std::ostringstream info_log;
+}
+
+namespace {
+using std::string;
+using google_breakpad::AutoTempDir;
+using google_breakpad::ExceptionHandler;
+using google_breakpad::MachPortSender;
+using google_breakpad::MachReceiveMessage;
+using google_breakpad::MachSendMessage;
+using google_breakpad::Minidump;
+using google_breakpad::MinidumpContext;
+using google_breakpad::MinidumpException;
+using google_breakpad::MinidumpMemoryList;
+using google_breakpad::MinidumpMemoryRegion;
+using google_breakpad::ReceivePort;
+using testing::Test;
+
+class ExceptionHandlerTest : public Test {
+ public:
+  AutoTempDir tempDir;
+  string lastDumpName;
+};
+
+static void Crasher() {
+  int *a = (int*)0x42;
+
+  fprintf(stdout, "Going to crash...\n");
+  fprintf(stdout, "A = %d", *a);
+}
+
+static void SoonToCrash() {
+  Crasher();
+}
+
+static bool MDCallback(const char *dump_dir, const char *file_name,
+                       void *context, bool success) {
+  string path(dump_dir);
+  path.append("/");
+  path.append(file_name);
+  path.append(".dmp");
+
+  int fd = *reinterpret_cast<int*>(context);
+  (void)write(fd, path.c_str(), path.length() + 1);
+  close(fd);
+  exit(0);
+  // not reached
+  return true;
+}
+
+TEST_F(ExceptionHandlerTest, InProcess) {
+  // Give the child process a pipe to report back on.
+  int fds[2];
+  ASSERT_EQ(0, pipe(fds));
+  // Fork off a child process so it can crash.
+  pid_t pid = fork();
+  if (pid == 0) {
+    // In the child process.
+    close(fds[0]);
+    ExceptionHandler eh(tempDir.path, NULL, MDCallback, &fds[1], true, NULL);
+    // crash
+    SoonToCrash();
+    // not reached
+    exit(1);
+  }
+  // In the parent process.
+  ASSERT_NE(-1, pid);
+  // Wait for the background process to return the minidump file.
+  close(fds[1]);
+  char minidump_file[PATH_MAX];
+  ssize_t nbytes = read(fds[0], minidump_file, sizeof(minidump_file));
+  ASSERT_NE(0, nbytes);
+  // Ensure that minidump file exists and is > 0 bytes.
+  struct stat st;
+  ASSERT_EQ(0, stat(minidump_file, &st));
+  ASSERT_LT(0, st.st_size);
+
+  // Child process should have exited with a zero status.
+  int ret;
+  ASSERT_EQ(pid, waitpid(pid, &ret, 0));
+  EXPECT_NE(0, WIFEXITED(ret));
+  EXPECT_EQ(0, WEXITSTATUS(ret));
+}
+
+static bool ChildMDCallback(const char *dump_dir, const char *file_name,
+			    void *context, bool success) {
+  ExceptionHandlerTest *self = reinterpret_cast<ExceptionHandlerTest*>(context);
+  if (dump_dir && file_name) {
+    self->lastDumpName = dump_dir;
+    self->lastDumpName += "/";
+    self->lastDumpName += file_name;
+    self->lastDumpName += ".dmp";
+  }
+  return true;
+}
+
+TEST_F(ExceptionHandlerTest, DumpChildProcess) {
+  const int kTimeoutMs = 2000;
+  // Create a mach port to receive the child task on.
+  char machPortName[128];
+  sprintf(machPortName, "ExceptionHandlerTest.%d", getpid());
+  ReceivePort parent_recv_port(machPortName);
+
+  // Give the child process a pipe to block on.
+  int fds[2];
+  ASSERT_EQ(0, pipe(fds));
+
+  // Fork off a child process to dump.
+  pid_t pid = fork();
+  if (pid == 0) {
+    // In the child process
+    close(fds[0]);
+
+    // Send parent process the task and thread ports.
+    MachSendMessage child_message(0);
+    child_message.AddDescriptor(mach_task_self());
+    child_message.AddDescriptor(mach_thread_self());
+
+    MachPortSender child_sender(machPortName);
+    if (child_sender.SendMessage(child_message, kTimeoutMs) != KERN_SUCCESS)
+      exit(1);
+
+    // Wait for the parent process.
+    uint8_t data;
+    read(fds[1], &data, 1);
+    exit(0);
+  }
+  // In the parent process.
+  ASSERT_NE(-1, pid);
+  close(fds[1]);
+
+  // Read the child's task and thread ports.
+  MachReceiveMessage child_message;
+  ASSERT_EQ(KERN_SUCCESS,
+	    parent_recv_port.WaitForMessage(&child_message, kTimeoutMs));
+  mach_port_t child_task = child_message.GetTranslatedPort(0);
+  mach_port_t child_thread = child_message.GetTranslatedPort(1);
+  ASSERT_NE((mach_port_t)MACH_PORT_NULL, child_task);
+  ASSERT_NE((mach_port_t)MACH_PORT_NULL, child_thread);
+
+  // Write a minidump of the child process.
+  bool result = ExceptionHandler::WriteMinidumpForChild(child_task,
+							child_thread,
+							tempDir.path,
+							ChildMDCallback,
+							this);
+  ASSERT_EQ(true, result);
+
+  // Ensure that minidump file exists and is > 0 bytes.
+  ASSERT_FALSE(lastDumpName.empty());
+  struct stat st;
+  ASSERT_EQ(0, stat(lastDumpName.c_str(), &st));
+  ASSERT_LT(0, st.st_size);
+
+  // Unblock child process
+  uint8_t data = 1;
+  (void)write(fds[0], &data, 1);
+
+  // Child process should have exited with a zero status.
+  int ret;
+  ASSERT_EQ(pid, waitpid(pid, &ret, 0));
+  EXPECT_NE(0, WIFEXITED(ret));
+  EXPECT_EQ(0, WEXITSTATUS(ret));
+}
+
+// Test that memory around the instruction pointer is written
+// to the dump as a MinidumpMemoryRegion.
+TEST_F(ExceptionHandlerTest, InstructionPointerMemory) {
+  // Give the child process a pipe to report back on.
+  int fds[2];
+  ASSERT_EQ(0, pipe(fds));
+
+  // These are defined here so the parent can use them to check the
+  // data from the minidump afterwards.
+  const u_int32_t kMemorySize = 256;  // bytes
+  const int kOffset = kMemorySize / 2;
+  // This crashes with SIGILL on x86/x86-64/arm.
+  const unsigned char instructions[] = { 0xff, 0xff, 0xff, 0xff };
+
+  pid_t pid = fork();
+  if (pid == 0) {
+    close(fds[0]);
+    ExceptionHandler eh(tempDir.path, NULL, MDCallback, &fds[1], true, NULL);
+    // Get some executable memory.
+    char* memory =
+      reinterpret_cast<char*>(mmap(NULL,
+                                   kMemorySize,
+                                   PROT_READ | PROT_WRITE | PROT_EXEC,
+                                   MAP_PRIVATE | MAP_ANON,
+                                   -1,
+                                   0));
+    if (!memory)
+      exit(0);
+
+    // Write some instructions that will crash. Put them in the middle
+    // of the block of memory, because the minidump should contain 128
+    // bytes on either side of the instruction pointer.
+    memcpy(memory + kOffset, instructions, sizeof(instructions));
+    
+    // Now execute the instructions, which should crash.
+    typedef void (*void_function)(void);
+    void_function memory_function =
+      reinterpret_cast<void_function>(memory + kOffset);
+    memory_function();
+    // not reached
+    exit(1);
+  }
+  // In the parent process.
+  ASSERT_NE(-1, pid);
+  close(fds[1]);
+
+  // Wait for the background process to return the minidump file.
+  close(fds[1]);
+  char minidump_file[PATH_MAX];
+  ssize_t nbytes = read(fds[0], minidump_file, sizeof(minidump_file));
+  ASSERT_NE(0, nbytes);
+  // Ensure that minidump file exists and is > 0 bytes.
+  struct stat st;
+  ASSERT_EQ(0, stat(minidump_file, &st));
+  ASSERT_LT(0, st.st_size);
+
+  // Child process should have exited with a zero status.
+  int ret;
+  ASSERT_EQ(pid, waitpid(pid, &ret, 0));
+  EXPECT_NE(0, WIFEXITED(ret));
+  EXPECT_EQ(0, WEXITSTATUS(ret));
+
+  // Read the minidump. Locate the exception record and the
+  // memory list, and then ensure that there is a memory region
+  // in the memory list that covers the instruction pointer from
+  // the exception record.
+  Minidump minidump(minidump_file);
+  ASSERT_TRUE(minidump.Read());
+
+  MinidumpException* exception = minidump.GetException();
+  MinidumpMemoryList* memory_list = minidump.GetMemoryList();
+  ASSERT_TRUE(exception);
+  ASSERT_TRUE(memory_list);
+  ASSERT_NE((unsigned int)0, memory_list->region_count());
+
+  MinidumpContext* context = exception->GetContext();
+  ASSERT_TRUE(context);
+
+  u_int64_t instruction_pointer;
+  switch (context->GetContextCPU()) {
+  case MD_CONTEXT_X86:
+    instruction_pointer = context->GetContextX86()->eip;
+    break;
+  case MD_CONTEXT_AMD64:
+    instruction_pointer = context->GetContextAMD64()->rip;
+    break;
+  case MD_CONTEXT_ARM:
+    instruction_pointer = context->GetContextARM()->iregs[15];
+    break;
+  default:
+    FAIL() << "Unknown context CPU: " << context->GetContextCPU();
+    break;
+  }
+
+  MinidumpMemoryRegion* region =
+    memory_list->GetMemoryRegionForAddress(instruction_pointer);
+  EXPECT_TRUE(region);
+
+  EXPECT_EQ(kMemorySize, region->GetSize());
+  const u_int8_t* bytes = region->GetMemory();
+  ASSERT_TRUE(bytes);
+
+  u_int8_t prefix_bytes[kOffset];
+  u_int8_t suffix_bytes[kMemorySize - kOffset - sizeof(instructions)];
+  memset(prefix_bytes, 0, sizeof(prefix_bytes));
+  memset(suffix_bytes, 0, sizeof(suffix_bytes));
+  EXPECT_TRUE(memcmp(bytes, prefix_bytes, sizeof(prefix_bytes)) == 0);
+  EXPECT_TRUE(memcmp(bytes + kOffset, instructions, sizeof(instructions)) == 0);
+  EXPECT_TRUE(memcmp(bytes + kOffset + sizeof(instructions),
+                     suffix_bytes, sizeof(suffix_bytes)) == 0);
+}
+
+// Test that the memory region around the instruction pointer is
+// bounded correctly on the low end.
+TEST_F(ExceptionHandlerTest, InstructionPointerMemoryMinBound) {
+  // Give the child process a pipe to report back on.
+  int fds[2];
+  ASSERT_EQ(0, pipe(fds));
+
+  // These are defined here so the parent can use them to check the
+  // data from the minidump afterwards.
+  const u_int32_t kMemorySize = 256;  // bytes
+  const int kOffset = 0;
+  // This crashes with SIGILL on x86/x86-64/arm.
+  const unsigned char instructions[] = { 0xff, 0xff, 0xff, 0xff };
+
+  pid_t pid = fork();
+  if (pid == 0) {
+    close(fds[0]);
+    ExceptionHandler eh(tempDir.path, NULL, MDCallback, &fds[1], true, NULL);
+    // Get some executable memory.
+    char* memory =
+      reinterpret_cast<char*>(mmap(NULL,
+                                   kMemorySize,
+                                   PROT_READ | PROT_WRITE | PROT_EXEC,
+                                   MAP_PRIVATE | MAP_ANON,
+                                   -1,
+                                   0));
+    if (!memory)
+      exit(0);
+
+    // Write some instructions that will crash. Put them at the start
+    // of the block of memory, to ensure that the memory bounding
+    // works properly.
+    memcpy(memory + kOffset, instructions, sizeof(instructions));
+    
+    // Now execute the instructions, which should crash.
+    typedef void (*void_function)(void);
+    void_function memory_function =
+      reinterpret_cast<void_function>(memory + kOffset);
+    memory_function();
+    // not reached
+    exit(1);
+  }
+  // In the parent process.
+  ASSERT_NE(-1, pid);
+  close(fds[1]);
+
+  // Wait for the background process to return the minidump file.
+  close(fds[1]);
+  char minidump_file[PATH_MAX];
+  ssize_t nbytes = read(fds[0], minidump_file, sizeof(minidump_file));
+  ASSERT_NE(0, nbytes);
+  // Ensure that minidump file exists and is > 0 bytes.
+  struct stat st;
+  ASSERT_EQ(0, stat(minidump_file, &st));
+  ASSERT_LT(0, st.st_size);
+
+  // Child process should have exited with a zero status.
+  int ret;
+  ASSERT_EQ(pid, waitpid(pid, &ret, 0));
+  EXPECT_NE(0, WIFEXITED(ret));
+  EXPECT_EQ(0, WEXITSTATUS(ret));
+
+  // Read the minidump. Locate the exception record and the
+  // memory list, and then ensure that there is a memory region
+  // in the memory list that covers the instruction pointer from
+  // the exception record.
+  Minidump minidump(minidump_file);
+  ASSERT_TRUE(minidump.Read());
+
+  MinidumpException* exception = minidump.GetException();
+  MinidumpMemoryList* memory_list = minidump.GetMemoryList();
+  ASSERT_TRUE(exception);
+  ASSERT_TRUE(memory_list);
+  ASSERT_NE((unsigned int)0, memory_list->region_count());
+
+  MinidumpContext* context = exception->GetContext();
+  ASSERT_TRUE(context);
+
+  u_int64_t instruction_pointer;
+  switch (context->GetContextCPU()) {
+  case MD_CONTEXT_X86:
+    instruction_pointer = context->GetContextX86()->eip;
+    break;
+  case MD_CONTEXT_AMD64:
+    instruction_pointer = context->GetContextAMD64()->rip;
+    break;
+  case MD_CONTEXT_ARM:
+    instruction_pointer = context->GetContextARM()->iregs[15];
+    break;
+  default:
+    FAIL() << "Unknown context CPU: " << context->GetContextCPU();
+    break;
+  }
+
+  MinidumpMemoryRegion* region =
+    memory_list->GetMemoryRegionForAddress(instruction_pointer);
+  EXPECT_TRUE(region);
+
+  EXPECT_EQ(kMemorySize / 2, region->GetSize());
+  const u_int8_t* bytes = region->GetMemory();
+  ASSERT_TRUE(bytes);
+
+  u_int8_t suffix_bytes[kMemorySize / 2 - sizeof(instructions)];
+  memset(suffix_bytes, 0, sizeof(suffix_bytes));
+  EXPECT_TRUE(memcmp(bytes + kOffset, instructions, sizeof(instructions)) == 0);
+  EXPECT_TRUE(memcmp(bytes + kOffset + sizeof(instructions),
+                     suffix_bytes, sizeof(suffix_bytes)) == 0);
+}
+
+// Test that the memory region around the instruction pointer is
+// bounded correctly on the high end.
+TEST_F(ExceptionHandlerTest, InstructionPointerMemoryMaxBound) {
+  // Give the child process a pipe to report back on.
+  int fds[2];
+  ASSERT_EQ(0, pipe(fds));
+
+  // These are defined here so the parent can use them to check the
+  // data from the minidump afterwards.
+  // Use 4k here because the OS will hand out a single page even
+  // if a smaller size is requested, and this test wants to
+  // test the upper bound of the memory range.
+  const u_int32_t kMemorySize = 4096;  // bytes
+  // This crashes with SIGILL on x86/x86-64/arm.
+  const unsigned char instructions[] = { 0xff, 0xff, 0xff, 0xff };
+  const int kOffset = kMemorySize - sizeof(instructions);
+
+  pid_t pid = fork();
+  if (pid == 0) {
+    close(fds[0]);
+    ExceptionHandler eh(tempDir.path, NULL, MDCallback, &fds[1], true, NULL);
+    // Get some executable memory.
+    char* memory =
+      reinterpret_cast<char*>(mmap(NULL,
+                                   kMemorySize,
+                                   PROT_READ | PROT_WRITE | PROT_EXEC,
+                                   MAP_PRIVATE | MAP_ANON,
+                                   -1,
+                                   0));
+    if (!memory)
+      exit(0);
+
+    // Write some instructions that will crash. Put them at the start
+    // of the block of memory, to ensure that the memory bounding
+    // works properly.
+    memcpy(memory + kOffset, instructions, sizeof(instructions));
+    
+    // Now execute the instructions, which should crash.
+    typedef void (*void_function)(void);
+    void_function memory_function =
+      reinterpret_cast<void_function>(memory + kOffset);
+    memory_function();
+    // not reached
+    exit(1);
+  }
+  // In the parent process.
+  ASSERT_NE(-1, pid);
+  close(fds[1]);
+
+  // Wait for the background process to return the minidump file.
+  close(fds[1]);
+  char minidump_file[PATH_MAX];
+  ssize_t nbytes = read(fds[0], minidump_file, sizeof(minidump_file));
+  ASSERT_NE(0, nbytes);
+  // Ensure that minidump file exists and is > 0 bytes.
+  struct stat st;
+  ASSERT_EQ(0, stat(minidump_file, &st));
+  ASSERT_LT(0, st.st_size);
+
+  // Child process should have exited with a zero status.
+  int ret;
+  ASSERT_EQ(pid, waitpid(pid, &ret, 0));
+  EXPECT_NE(0, WIFEXITED(ret));
+  EXPECT_EQ(0, WEXITSTATUS(ret));
+
+  // Read the minidump. Locate the exception record and the
+  // memory list, and then ensure that there is a memory region
+  // in the memory list that covers the instruction pointer from
+  // the exception record.
+  Minidump minidump(minidump_file);
+  ASSERT_TRUE(minidump.Read());
+
+  MinidumpException* exception = minidump.GetException();
+  MinidumpMemoryList* memory_list = minidump.GetMemoryList();
+  ASSERT_TRUE(exception);
+  ASSERT_TRUE(memory_list);
+  ASSERT_NE((unsigned int)0, memory_list->region_count());
+
+  MinidumpContext* context = exception->GetContext();
+  ASSERT_TRUE(context);
+
+  u_int64_t instruction_pointer;
+  switch (context->GetContextCPU()) {
+  case MD_CONTEXT_X86:
+    instruction_pointer = context->GetContextX86()->eip;
+    break;
+  case MD_CONTEXT_AMD64:
+    instruction_pointer = context->GetContextAMD64()->rip;
+    break;
+  case MD_CONTEXT_ARM:
+    instruction_pointer = context->GetContextARM()->iregs[15];
+    break;
+  default:
+    FAIL() << "Unknown context CPU: " << context->GetContextCPU();
+    break;
+  }
+
+  MinidumpMemoryRegion* region =
+    memory_list->GetMemoryRegionForAddress(instruction_pointer);
+  EXPECT_TRUE(region);
+
+  const size_t kPrefixSize = 128;  // bytes
+  EXPECT_EQ(kPrefixSize + sizeof(instructions), region->GetSize());
+  const u_int8_t* bytes = region->GetMemory();
+  ASSERT_TRUE(bytes);
+
+  u_int8_t prefix_bytes[kPrefixSize];
+  memset(prefix_bytes, 0, sizeof(prefix_bytes));
+  EXPECT_TRUE(memcmp(bytes, prefix_bytes, sizeof(prefix_bytes)) == 0);
+  EXPECT_TRUE(memcmp(bytes + kPrefixSize,
+                     instructions, sizeof(instructions)) == 0);
+}
+
+// Ensure that an extra memory block doesn't get added when the
+// instruction pointer is not in mapped memory.
+TEST_F(ExceptionHandlerTest, InstructionPointerMemoryNullPointer) {
+  // Give the child process a pipe to report back on.
+  int fds[2];
+  ASSERT_EQ(0, pipe(fds));
+
+  pid_t pid = fork();
+  if (pid == 0) {
+    close(fds[0]);
+    ExceptionHandler eh(tempDir.path, NULL, MDCallback, &fds[1], true, NULL);
+    // Try calling a NULL pointer.
+    typedef void (*void_function)(void);
+    void_function memory_function =
+      reinterpret_cast<void_function>(NULL);
+    memory_function();
+    // not reached
+    exit(1);
+  }
+  // In the parent process.
+  ASSERT_NE(-1, pid);
+  close(fds[1]);
+
+  // Wait for the background process to return the minidump file.
+  close(fds[1]);
+  char minidump_file[PATH_MAX];
+  ssize_t nbytes = read(fds[0], minidump_file, sizeof(minidump_file));
+  ASSERT_NE(0, nbytes);
+  // Ensure that minidump file exists and is > 0 bytes.
+  struct stat st;
+  ASSERT_EQ(0, stat(minidump_file, &st));
+  ASSERT_LT(0, st.st_size);
+
+  // Child process should have exited with a zero status.
+  int ret;
+  ASSERT_EQ(pid, waitpid(pid, &ret, 0));
+  EXPECT_NE(0, WIFEXITED(ret));
+  EXPECT_EQ(0, WEXITSTATUS(ret));
+
+  // Read the minidump. Locate the exception record and the
+  // memory list, and then ensure that there is only one memory region
+  // in the memory list (the thread memory from the single thread).
+  Minidump minidump(minidump_file);
+  ASSERT_TRUE(minidump.Read());
+
+  MinidumpException* exception = minidump.GetException();
+  MinidumpMemoryList* memory_list = minidump.GetMemoryList();
+  ASSERT_TRUE(exception);
+  ASSERT_TRUE(memory_list);
+  ASSERT_EQ((unsigned int)1, memory_list->region_count());
+}
+
+}
diff --git a/src/client/mac/tests/testlogging.h b/src/client/mac/tests/testlogging.h
new file mode 100644
index 0000000..c6b6be6
--- /dev/null
+++ b/src/client/mac/tests/testlogging.h
@@ -0,0 +1,9 @@
+// This file exists to override the processor logging for unit tests,
+// since it confuses XCode into thinking unit tests have failed.
+#include <sstream>
+
+namespace google_breakpad {
+extern std::ostringstream info_log;
+}
+
+#define BPLOG_INFO_STREAM google_breakpad::info_log
diff --git a/src/client/minidump_file_writer-inl.h b/src/client/minidump_file_writer-inl.h
index 7c556a2..0e12e00 100644
--- a/src/client/minidump_file_writer-inl.h
+++ b/src/client/minidump_file_writer-inl.h
@@ -61,27 +61,30 @@
 }
 
 template<typename MDType>
-inline bool TypedMDRVA<MDType>::AllocateObjectAndArray(unsigned int count,
-                                                       size_t size) {
-  assert(count && size);
+inline bool TypedMDRVA<MDType>::AllocateObjectAndArray(size_t count,
+                                                       size_t length) {
+  assert(count && length);
   allocation_state_ = SINGLE_OBJECT_WITH_ARRAY;
-  return UntypedMDRVA::Allocate(minidump_size<MDType>::size() + count * size);
+  return UntypedMDRVA::Allocate(minidump_size<MDType>::size() + count * length);
 }
 
 template<typename MDType>
 inline bool TypedMDRVA<MDType>::CopyIndex(unsigned int index, MDType *item) {
   assert(allocation_state_ == ARRAY);
-  return writer_->Copy(position_ + index * minidump_size<MDType>::size(), item,
-                       minidump_size<MDType>::size());
+  return writer_->Copy(
+      static_cast<MDRVA>(position_ + index * minidump_size<MDType>::size()), 
+      item, minidump_size<MDType>::size());
 }
 
 template<typename MDType>
 inline bool TypedMDRVA<MDType>::CopyIndexAfterObject(unsigned int index,
                                                      const void *src, 
-                                                     size_t size) {
+                                                     size_t length) {
   assert(allocation_state_ == SINGLE_OBJECT_WITH_ARRAY);
-  return writer_->Copy(position_ + minidump_size<MDType>::size() + index * size,
-                       src, size);
+  return writer_->Copy(
+      static_cast<MDRVA>(position_ + minidump_size<MDType>::size() 
+                         + index * length),
+      src, length);
 }
 
 template<typename MDType>
diff --git a/src/client/minidump_file_writer.cc b/src/client/minidump_file_writer.cc
index 1be3f50..db30466 100644
--- a/src/client/minidump_file_writer.cc
+++ b/src/client/minidump_file_writer.cc
@@ -37,10 +37,12 @@
 #include <string.h>
 #include <unistd.h>
 
-#include "common/linux/linux_syscall_support.h"
-#include "common/linux/linux_libc_support.h"
 #include "client/minidump_file_writer-inl.h"
+#include "common/linux/linux_libc_support.h"
 #include "common/string_conversion.h"
+#if __linux__
+#include "third_party/lss/linux_syscall_support.h"
+#endif
 
 namespace google_breakpad {
 
@@ -92,22 +94,22 @@
   } else {
     u_int16_t out[2];
     int out_idx = 0;
-    
+
     // Copy the string character by character
     while (length && result) {
       UTF32ToUTF16Char(*str, out);
       if (!out[0])
         return false;
-      
+
       // Process one character at a time
       --length;
       ++str;
-      
+
       // Append the one or two UTF-16 characters.  The first one will be non-
       // zero, but the second one may be zero, depending on the conversion from
       // UTF-32.
       int out_count = out[1] ? 2 : 1;
-      int out_size = sizeof(u_int16_t) * out_count;
+      size_t out_size = sizeof(u_int16_t) * out_count;
       result = mdstring->CopyIndexAfterObject(out_idx, out, out_size);
       out_idx += out_count;
     }
@@ -127,14 +129,14 @@
     int conversion_count = UTF8ToUTF16Char(str, length, out);
     if (!conversion_count)
       return false;
-    
+
     // Move the pointer along based on the nubmer of converted characters
     length -= conversion_count;
     str += conversion_count;
-    
+
     // Append the one or two UTF-16 characters
     int out_count = out[1] ? 2 : 1;
-    int out_size = sizeof(u_int16_t) * out_count;
+    size_t out_size = sizeof(u_int16_t) * out_count;
     result = mdstring->CopyIndexAfterObject(out_idx, out, out_size);
     out_idx += out_count;
   }
@@ -161,7 +163,8 @@
     return false;
 
   // Set length excluding the NULL and copy the string
-  mdstring.get()->length = mdstring_length * sizeof(u_int16_t);
+  mdstring.get()->length =
+      static_cast<u_int32_t>(mdstring_length * sizeof(u_int16_t));
   bool result = CopyStringToMDString(str, mdstring_length, &mdstring);
 
   // NULL terminate
@@ -235,7 +238,7 @@
   assert(file_ != -1);
 
   // Ensure that the data will fit in the allocated space
-  if (size + position > size_)
+  if (static_cast<size_t>(size + position) > size_)
     return false;
 
   // Seek and write the data
@@ -260,11 +263,11 @@
   return position_ != MinidumpFileWriter::kInvalidMDRVA;
 }
 
-bool UntypedMDRVA::Copy(MDRVA position, const void *src, size_t size) {
+bool UntypedMDRVA::Copy(MDRVA pos, const void *src, size_t size) {
   assert(src);
   assert(size);
-  assert(position + size <= position_ + size_);
-  return writer_->Copy(position, src, size);
+  assert(pos + size <= position_ + size_);
+  return writer_->Copy(pos, src, size);
 }
 
 }  // namespace google_breakpad
diff --git a/src/client/minidump_file_writer.h b/src/client/minidump_file_writer.h
index f569a55..cded358 100644
--- a/src/client/minidump_file_writer.h
+++ b/src/client/minidump_file_writer.h
@@ -151,7 +151,7 @@
 
   // Return size and position
   inline MDLocationDescriptor location() const {
-    MDLocationDescriptor location = { size_, position_ };
+    MDLocationDescriptor location = { static_cast<int>(size_), position_ };
     return location;
   }
 
@@ -218,7 +218,7 @@
   // Allocate an array of |count| elements of |size| after object of MDType
   // Must not call more than once.
   // Return true on success, or false on failure
-  bool AllocateObjectAndArray(unsigned int count, size_t size);
+  bool AllocateObjectAndArray(size_t count, size_t size);
 
   // Copy |item| to |index|
   // Must have been allocated using AllocateArray().
diff --git a/src/client/minidump_file_writer_unittest.cc b/src/client/minidump_file_writer_unittest.cc
index a83307d..08522fb 100644
--- a/src/client/minidump_file_writer_unittest.cc
+++ b/src/client/minidump_file_writer_unittest.cc
@@ -144,22 +144,23 @@
     0x0000000a, 0x000a1c09, 0x0000000b, 0x00000000,
 #endif
   };
-  unsigned int expected_byte_count = sizeof(expected);
+  size_t expected_byte_count = sizeof(expected);
   int fd = open(path, O_RDONLY, 0600);
   void *buffer = malloc(expected_byte_count);
   ASSERT_NE(fd, -1);
   ASSERT_TRUE(buffer);
-  ASSERT_EQ(read(fd, buffer, expected_byte_count), expected_byte_count);
+  ASSERT_EQ(read(fd, buffer, expected_byte_count), 
+            static_cast<ssize_t>(expected_byte_count));
 
   char *b1, *b2;
-  b1 = (char*)buffer;
-  b2 = (char*)expected;
+  b1 = reinterpret_cast<char*>(buffer);
+  b2 = reinterpret_cast<char*>(expected);
   while (*b1 == *b2) {
     b1++;
     b2++;
   }
 
-  printf("%d\n",b1 - (char*)buffer);
+  printf("%p\n", reinterpret_cast<void*>(b1 - (char*)buffer));
 
   ASSERT_EQ(memcmp(buffer, expected, expected_byte_count), 0);
   return true;
diff --git a/src/client/windows/breakpad_client.gyp b/src/client/windows/breakpad_client.gyp
index 4ae8fe5..ddcb7ce 100755
--- a/src/client/windows/breakpad_client.gyp
+++ b/src/client/windows/breakpad_client.gyp
@@ -40,7 +40,8 @@
         './handler/exception_handler.gyp:*',
         './sender/crash_report_sender.gyp:*',
         './unittests/client_tests.gyp:*',
-        './unittests/gtest.gyp:*',
+        './unittests/testing.gyp:*',
+        './tests/crash_generation_app/crash_generation_app.gyp:*',
       ]
     },
     {
diff --git a/src/client/windows/crash_generation/client_info.cc b/src/client/windows/crash_generation/client_info.cc
index 4752c4a..94f9c3c 100644
--- a/src/client/windows/crash_generation/client_info.cc
+++ b/src/client/windows/crash_generation/client_info.cc
@@ -101,26 +101,16 @@
   }
 }
 
-bool ClientInfo::UnregisterWaits() {
-  bool success = true;
-
+void ClientInfo::UnregisterWaits() {
   if (dump_request_wait_handle_) {
-    if (!UnregisterWait(dump_request_wait_handle_)) {
-      success = false;
-    } else {
-      dump_request_wait_handle_ = NULL;
-    }
+    UnregisterWait(dump_request_wait_handle_);
+    dump_request_wait_handle_ = NULL;
   }
 
   if (process_exit_wait_handle_) {
-    if (!UnregisterWait(process_exit_wait_handle_)) {
-      success = false;
-    } else {
-      process_exit_wait_handle_ = NULL;
-    }
+    UnregisterWait(process_exit_wait_handle_);
+    process_exit_wait_handle_ = NULL;
   }
-
-  return success;
 }
 
 bool ClientInfo::GetClientExceptionInfo(EXCEPTION_POINTERS** ex_info) const {
diff --git a/src/client/windows/crash_generation/client_info.h b/src/client/windows/crash_generation/client_info.h
index 774816f..47a5d21 100644
--- a/src/client/windows/crash_generation/client_info.h
+++ b/src/client/windows/crash_generation/client_info.h
@@ -83,7 +83,7 @@
   }
 
   // Unregister all waits for the client.
-  bool UnregisterWaits();
+  void UnregisterWaits();
 
   bool Initialize();
   bool GetClientExceptionInfo(EXCEPTION_POINTERS** ex_info) const;
diff --git a/src/client/windows/crash_generation/crash_generation_server.cc b/src/client/windows/crash_generation/crash_generation_server.cc
index dafa5c2..61af1b2 100644
--- a/src/client/windows/crash_generation/crash_generation_server.cc
+++ b/src/client/windows/crash_generation/crash_generation_server.cc
@@ -34,6 +34,8 @@
 #include "client/windows/common/auto_critical_section.h"
 #include "processor/scoped_ptr.h"
 
+#include "client/windows/crash_generation/client_info.h"
+
 namespace google_breakpad {
 
 // Output buffer size.
@@ -113,7 +115,7 @@
       exit_context_(exit_context),
       generate_dumps_(generate_dumps),
       dump_generator_(NULL),
-      server_state_(IPC_SERVER_STATE_INITIAL),
+      server_state_(IPC_SERVER_STATE_UNINITIALIZED),
       shutting_down_(false),
       overlapped_(),
       client_info_(NULL),
@@ -197,10 +199,18 @@
     CloseHandle(server_alive_handle_);
   }
 
+  if (overlapped_.hEvent) {
+    CloseHandle(overlapped_.hEvent);
+  }
+
   DeleteCriticalSection(&clients_sync_);
 }
 
 bool CrashGenerationServer::Start() {
+  if (server_state_ != IPC_SERVER_STATE_UNINITIALIZED) {
+    return false;
+  }
+
   server_state_ = IPC_SERVER_STATE_INITIAL;
 
   server_alive_handle_ = CreateMutex(NULL, TRUE, NULL);
@@ -239,9 +249,12 @@
     return false;
   }
 
-  // Signal the event to start a separate thread to handle
-  // client connections.
-  return SetEvent(overlapped_.hEvent) != FALSE;
+  // Kick-start the state machine. This will initiate an asynchronous wait
+  // for client connections.
+  HandleInitialState();
+
+  // If we are in error state, it's because we failed to start listening.
+  return server_state_ != IPC_SERVER_STATE_ERROR;
 }
 
 // If the server thread serving clients ever gets into the
@@ -283,33 +296,29 @@
   assert(server_state_ == IPC_SERVER_STATE_INITIAL);
 
   if (!ResetEvent(overlapped_.hEvent)) {
-    server_state_ = IPC_SERVER_STATE_ERROR;
+    EnterErrorState();
     return;
   }
 
   bool success = ConnectNamedPipe(pipe_, &overlapped_) != FALSE;
+  DWORD error_code = success ? ERROR_SUCCESS : GetLastError();
 
   // From MSDN, it is not clear that when ConnectNamedPipe is used
   // in an overlapped mode, will it ever return non-zero value, and
   // if so, in what cases.
   assert(!success);
 
-  DWORD error_code = GetLastError();
   switch (error_code) {
     case ERROR_IO_PENDING:
-      server_state_ = IPC_SERVER_STATE_CONNECTING;
+      EnterStateWhenSignaled(IPC_SERVER_STATE_CONNECTING);
       break;
 
     case ERROR_PIPE_CONNECTED:
-      if (SetEvent(overlapped_.hEvent)) {
-        server_state_ = IPC_SERVER_STATE_CONNECTED;
-      } else {
-        server_state_ = IPC_SERVER_STATE_ERROR;
-      }
+      EnterStateImmediately(IPC_SERVER_STATE_CONNECTED);
       break;
 
     default:
-      server_state_ = IPC_SERVER_STATE_ERROR;
+      EnterErrorState();
       break;
   }
 }
@@ -328,14 +337,14 @@
                                      &overlapped_,
                                      &bytes_count,
                                      FALSE) != FALSE;
+  DWORD error_code = success ? ERROR_SUCCESS : GetLastError();
 
   if (success) {
-    server_state_ = IPC_SERVER_STATE_CONNECTED;
-    return;
-  }
-
-  if (GetLastError() != ERROR_IO_INCOMPLETE) {
-    server_state_ = IPC_SERVER_STATE_DISCONNECTING;
+    EnterStateImmediately(IPC_SERVER_STATE_CONNECTED);
+  } else if (error_code != ERROR_IO_INCOMPLETE) {
+    EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
+  } else {
+    // remain in CONNECTING state
   }
 }
 
@@ -353,16 +362,17 @@
                           sizeof(msg_),
                           &bytes_count,
                           &overlapped_) != FALSE;
+  DWORD error_code = success ? ERROR_SUCCESS : GetLastError();
 
   // Note that the asynchronous read issued above can finish before the
   // code below executes. But, it is okay to change state after issuing
   // the asynchronous read. This is because even if the asynchronous read
   // is done, the callback for it would not be executed until the current
   // thread finishes its execution.
-  if (success || GetLastError() == ERROR_IO_PENDING) {
-    server_state_ = IPC_SERVER_STATE_READING;
+  if (success || error_code == ERROR_IO_PENDING) {
+    EnterStateWhenSignaled(IPC_SERVER_STATE_READING);
   } else {
-    server_state_ = IPC_SERVER_STATE_DISCONNECTING;
+    EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
   }
 }
 
@@ -378,21 +388,18 @@
                                      &overlapped_,
                                      &bytes_count,
                                      FALSE) != FALSE;
+  DWORD error_code = success ? ERROR_SUCCESS : GetLastError();
 
   if (success && bytes_count == sizeof(ProtocolMessage)) {
-    server_state_ = IPC_SERVER_STATE_READ_DONE;
-    return;
+    EnterStateImmediately(IPC_SERVER_STATE_READ_DONE);
+  } else {
+    // We should never get an I/O incomplete since we should not execute this
+    // unless the Read has finished and the overlapped event is signaled. If
+    // we do get INCOMPLETE, we have a bug in our code.
+    assert(error_code != ERROR_IO_INCOMPLETE);
+
+    EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
   }
-
-  DWORD error_code;
-  error_code = GetLastError();
-
-  // We should never get an I/O incomplete since we should not execute this
-  // unless the Read has finished and the overlapped event is signaled. If
-  // we do get INCOMPLETE, we have a bug in our code.
-  assert(error_code != ERROR_IO_INCOMPLETE);
-
-  server_state_ = IPC_SERVER_STATE_DISCONNECTING;
 }
 
 // When the server thread serving the client is in the READ_DONE state,
@@ -405,7 +412,7 @@
   assert(server_state_ == IPC_SERVER_STATE_READ_DONE);
 
   if (!IsClientRequestValid(msg_)) {
-    server_state_ = IPC_SERVER_STATE_DISCONNECTING;
+    EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
     return;
   }
 
@@ -419,22 +426,26 @@
                      msg_.custom_client_info));
 
   if (!client_info->Initialize()) {
-    server_state_ = IPC_SERVER_STATE_DISCONNECTING;
+    EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
     return;
   }
 
+  // Issues an asynchronous WriteFile call if successful.
+  // Iff successful, assigns ownership of the client_info pointer to the server
+  // instance, in which case we must be sure not to free it in this function.
   if (!RespondToClient(client_info.get())) {
-    server_state_ = IPC_SERVER_STATE_DISCONNECTING;
+    EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
     return;
   }
 
+  client_info_ = client_info.release();
+
   // Note that the asynchronous write issued by RespondToClient function
   // can finish before  the code below executes. But it is okay to change
   // state after issuing the asynchronous write. This is because even if
   // the asynchronous write is done, the callback for it would not be
   // executed until the current thread finishes its execution.
-  server_state_ = IPC_SERVER_STATE_WRITING;
-  client_info_ = client_info.release();
+  EnterStateWhenSignaled(IPC_SERVER_STATE_WRITING);
 }
 
 // When the server thread serving the clients is in the WRITING state,
@@ -449,21 +460,19 @@
                                      &overlapped_,
                                      &bytes_count,
                                      FALSE) != FALSE;
+  DWORD error_code = success ? ERROR_SUCCESS : GetLastError();
 
   if (success) {
-    server_state_ = IPC_SERVER_STATE_WRITE_DONE;
+    EnterStateImmediately(IPC_SERVER_STATE_WRITE_DONE);
     return;
   }
 
-  DWORD error_code;
-  error_code = GetLastError();
-
   // We should never get an I/O incomplete since we should not execute this
   // unless the Write has finished and the overlapped event is signaled. If
   // we do get INCOMPLETE, we have a bug in our code.
   assert(error_code != ERROR_IO_INCOMPLETE);
 
-  server_state_ = IPC_SERVER_STATE_DISCONNECTING;
+  EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
 }
 
 // When the server thread serving the clients is in the WRITE_DONE state,
@@ -473,23 +482,20 @@
 void CrashGenerationServer::HandleWriteDoneState() {
   assert(server_state_ == IPC_SERVER_STATE_WRITE_DONE);
 
-  server_state_ = IPC_SERVER_STATE_READING_ACK;
-
   DWORD bytes_count = 0;
   bool success = ReadFile(pipe_,
-                          &msg_,
-                          sizeof(msg_),
-                          &bytes_count,
-                          &overlapped_) != FALSE;
+                           &msg_,
+                           sizeof(msg_),
+                           &bytes_count,
+                           &overlapped_) != FALSE;
+  DWORD error_code = success ? ERROR_SUCCESS : GetLastError();
 
   if (success) {
-    return;
-  }
-
-  DWORD error_code = GetLastError();
-
-  if (error_code != ERROR_IO_PENDING) {
-    server_state_ = IPC_SERVER_STATE_DISCONNECTING;
+    EnterStateImmediately(IPC_SERVER_STATE_READING_ACK);
+  } else if (error_code == ERROR_IO_PENDING) {
+    EnterStateWhenSignaled(IPC_SERVER_STATE_READING_ACK);
+  } else {
+    EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
   }
 }
 
@@ -503,6 +509,7 @@
                                      &overlapped_,
                                      &bytes_count,
                                      FALSE) != FALSE;
+  DWORD error_code = success ? ERROR_SUCCESS : GetLastError();
 
   if (success) {
     // The connection handshake with the client is now complete; perform
@@ -511,15 +518,13 @@
       connect_callback_(connect_context_, client_info_);
     }
   } else {
-    DWORD error_code = GetLastError();
-
     // We should never get an I/O incomplete since we should not execute this
     // unless the Read has finished and the overlapped event is signaled. If
     // we do get INCOMPLETE, we have a bug in our code.
     assert(error_code != ERROR_IO_INCOMPLETE);
   }
 
-  server_state_ = IPC_SERVER_STATE_DISCONNECTING;
+  EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
 }
 
 // When the server thread serving the client is in the DISCONNECTING state,
@@ -539,12 +544,12 @@
   overlapped_.Pointer = NULL;
 
   if (!ResetEvent(overlapped_.hEvent)) {
-    server_state_ = IPC_SERVER_STATE_ERROR;
+    EnterErrorState();
     return;
   }
 
   if (!DisconnectNamedPipe(pipe_)) {
-    server_state_ = IPC_SERVER_STATE_ERROR;
+    EnterErrorState();
     return;
   }
 
@@ -554,7 +559,21 @@
     return;
   }
 
-  server_state_ = IPC_SERVER_STATE_INITIAL;
+  EnterStateImmediately(IPC_SERVER_STATE_INITIAL);
+}
+
+void CrashGenerationServer::EnterErrorState() {
+  SetEvent(overlapped_.hEvent);
+  server_state_ = IPC_SERVER_STATE_ERROR;
+}
+
+void CrashGenerationServer::EnterStateWhenSignaled(IPCServerState state) {
+  server_state_ = state;
+}
+
+void CrashGenerationServer::EnterStateImmediately(IPCServerState state) {
+  server_state_ = state;
+
   if (!SetEvent(overlapped_.hEvent)) {
     server_state_ = IPC_SERVER_STATE_ERROR;
   }
@@ -626,18 +645,25 @@
     return false;
   }
 
+  DWORD bytes_count = 0;
+  bool success = WriteFile(pipe_,
+                            &reply,
+                            sizeof(reply),
+                            &bytes_count,
+                            &overlapped_) != FALSE;
+  DWORD error_code = success ? ERROR_SUCCESS : GetLastError();
+
+  if (!success && error_code != ERROR_IO_PENDING) {
+    return false;
+  }
+
+  // Takes over ownership of client_info. We MUST return true if AddClient
+  // succeeds.
   if (!AddClient(client_info)) {
     return false;
   }
 
-  DWORD bytes_count = 0;
-  bool success = WriteFile(pipe_,
-                           &reply,
-                           sizeof(reply),
-                           &bytes_count,
-                           &overlapped_) != FALSE;
-
-  return success || GetLastError() == ERROR_IO_PENDING;
+  return true;
 }
 
 // The server thread servicing the clients runs this method. The method
@@ -739,7 +765,7 @@
 
 // static
 void CALLBACK CrashGenerationServer::OnPipeConnected(void* context, BOOLEAN) {
-  assert (context);
+  assert(context);
 
   CrashGenerationServer* obj =
       reinterpret_cast<CrashGenerationServer*>(context);
diff --git a/src/client/windows/crash_generation/crash_generation_server.h b/src/client/windows/crash_generation/crash_generation_server.h
index cacb639..31a353b 100644
--- a/src/client/windows/crash_generation/crash_generation_server.h
+++ b/src/client/windows/crash_generation/crash_generation_server.h
@@ -33,11 +33,11 @@
 #include <list>
 #include <string>
 #include "client/windows/common/ipc_protocol.h"
-#include "client/windows/crash_generation/client_info.h"
 #include "client/windows/crash_generation/minidump_generator.h"
 #include "processor/scoped_ptr.h"
 
 namespace google_breakpad {
+class ClientInfo;
 
 // Abstraction for server side implementation of out-of-process crash
 // generation protocol for Windows platform only. It generates Windows
@@ -91,7 +91,8 @@
 
   ~CrashGenerationServer();
 
-  // Performs initialization steps needed to start listening to clients.
+  // Performs initialization steps needed to start listening to clients. Upon
+  // successful return clients may connect to this server's pipe.
   //
   // Returns true if initialization is successful; false otherwise.
   bool Start();
@@ -100,6 +101,9 @@
   // Various states the client can be in during the handshake with
   // the server.
   enum IPCServerState {
+    // Server starts in this state.
+    IPC_SERVER_STATE_UNINITIALIZED,
+
     // Server is in error state and it cannot serve any clients.
     IPC_SERVER_STATE_ERROR,
 
@@ -192,6 +196,21 @@
   // Generates dump for the given client.
   bool GenerateDump(const ClientInfo& client, std::wstring* dump_path);
 
+  // Puts the server in a permanent error state and sets a signal such that
+  // the state will be immediately entered after the current state transition
+  // is complete.
+  void EnterErrorState();
+
+  // Puts the server in the specified state and sets a signal such that the
+  // state is immediately entered after the current state transition is
+  // complete.
+  void EnterStateImmediately(IPCServerState state);
+
+  // Puts the server in the specified state. No signal will be set, so the state
+  // transition will only occur when signaled manually or by completion of an
+  // asynchronous IO operation.
+  void EnterStateWhenSignaled(IPCServerState state);
+
   // Sync object for thread-safe access to the shared list of clients.
   CRITICAL_SECTION clients_sync_;
 
diff --git a/src/client/windows/handler/exception_handler.cc b/src/client/windows/handler/exception_handler.cc
index d27ddcc..7af20ce 100644
--- a/src/client/windows/handler/exception_handler.cc
+++ b/src/client/windows/handler/exception_handler.cc
@@ -37,6 +37,8 @@
 #include "client/windows/handler/exception_handler.h"
 #include "common/windows/guid_string.h"
 
+typedef VOID (WINAPI *RtlCaptureContextPtr) (PCONTEXT pContextRecord);
+
 namespace google_breakpad {
 
 static const int kWaitForHandlerThreadMs = 60000;
@@ -344,7 +346,7 @@
   AutoExceptionHandler() {
     // Increment handler_stack_index_ so that if another Breakpad handler is
     // registered using this same HandleException function, and it needs to be
-    // called while this handler is running (either becaause this handler
+    // called while this handler is running (either because this handler
     // declines to handle the exception, or an exception occurs during
     // handling), HandleException will find the appropriate ExceptionHandler
     // object in handler_stack_ to deliver the exception to.
@@ -362,7 +364,6 @@
     handler_ = ExceptionHandler::handler_stack_->at(
         ExceptionHandler::handler_stack_->size() -
         ++ExceptionHandler::handler_stack_index_);
-    LeaveCriticalSection(&ExceptionHandler::handler_stack_critical_section_);
 
     // In case another exception occurs while this handler is doing its thing,
     // it should be delivered to the previous filter.
@@ -381,7 +382,6 @@
 #endif  // _MSC_VER >= 1400
     _set_purecall_handler(ExceptionHandler::HandlePureVirtualCall);
 
-    EnterCriticalSection(&ExceptionHandler::handler_stack_critical_section_);
     --ExceptionHandler::handler_stack_index_;
     LeaveCriticalSection(&ExceptionHandler::handler_stack_critical_section_);
   }
@@ -488,18 +488,28 @@
   EXCEPTION_RECORD exception_record = {};
   CONTEXT exception_context = {};
   EXCEPTION_POINTERS exception_ptrs = { &exception_record, &exception_context };
-  RtlCaptureContext(&exception_context);
-  exception_record.ExceptionCode = STATUS_NONCONTINUABLE_EXCEPTION;
 
-  // We store pointers to the the expression and function strings,
-  // and the line as exception parameters to make them easy to
-  // access by the developer on the far side.
-  exception_record.NumberParameters = 3;
-  exception_record.ExceptionInformation[0] =
-      reinterpret_cast<ULONG_PTR>(&assertion.expression);
-  exception_record.ExceptionInformation[1] =
-      reinterpret_cast<ULONG_PTR>(&assertion.file);
-  exception_record.ExceptionInformation[2] = assertion.line;
+  EXCEPTION_POINTERS* exinfo = NULL;
+
+  RtlCaptureContextPtr fnRtlCaptureContext = (RtlCaptureContextPtr)
+    GetProcAddress(GetModuleHandleW(L"kernel32"), "RtlCaptureContext");
+  if (fnRtlCaptureContext) {
+    fnRtlCaptureContext(&exception_context);
+
+    exception_record.ExceptionCode = STATUS_NONCONTINUABLE_EXCEPTION;
+
+    // We store pointers to the the expression and function strings,
+    // and the line as exception parameters to make them easy to
+    // access by the developer on the far side.
+    exception_record.NumberParameters = 3;
+    exception_record.ExceptionInformation[0] =
+        reinterpret_cast<ULONG_PTR>(&assertion.expression);
+    exception_record.ExceptionInformation[1] =
+        reinterpret_cast<ULONG_PTR>(&assertion.file);
+    exception_record.ExceptionInformation[2] = assertion.line;
+
+    exinfo = &exception_ptrs;
+  }
 
   bool success = false;
   // In case of out-of-process dump generation, directly call
@@ -507,10 +517,10 @@
   if (current_handler->IsOutOfProcess()) {
     success = current_handler->WriteMinidumpWithException(
         GetCurrentThreadId(),
-        &exception_ptrs,
+        exinfo,
         &assertion);
   } else {
-    success = current_handler->WriteMinidumpOnHandlerThread(&exception_ptrs,
+    success = current_handler->WriteMinidumpOnHandlerThread(exinfo,
                                                             &assertion);
   }
 
@@ -566,18 +576,28 @@
   EXCEPTION_RECORD exception_record = {};
   CONTEXT exception_context = {};
   EXCEPTION_POINTERS exception_ptrs = { &exception_record, &exception_context };
-  RtlCaptureContext(&exception_context);
-  exception_record.ExceptionCode = STATUS_NONCONTINUABLE_EXCEPTION;
 
-  // We store pointers to the the expression and function strings,
-  // and the line as exception parameters to make them easy to
-  // access by the developer on the far side.
-  exception_record.NumberParameters = 3;
-  exception_record.ExceptionInformation[0] =
-      reinterpret_cast<ULONG_PTR>(&assertion.expression);
-  exception_record.ExceptionInformation[1] =
-      reinterpret_cast<ULONG_PTR>(&assertion.file);
-  exception_record.ExceptionInformation[2] = assertion.line;
+  EXCEPTION_POINTERS* exinfo = NULL;
+
+  RtlCaptureContextPtr fnRtlCaptureContext = (RtlCaptureContextPtr)
+    GetProcAddress(GetModuleHandleW(L"kernel32"), "RtlCaptureContext");
+  if (fnRtlCaptureContext) {
+    fnRtlCaptureContext(&exception_context);
+
+    exception_record.ExceptionCode = STATUS_NONCONTINUABLE_EXCEPTION;
+
+    // We store pointers to the the expression and function strings,
+    // and the line as exception parameters to make them easy to
+    // access by the developer on the far side.
+    exception_record.NumberParameters = 3;
+    exception_record.ExceptionInformation[0] =
+        reinterpret_cast<ULONG_PTR>(&assertion.expression);
+    exception_record.ExceptionInformation[1] =
+        reinterpret_cast<ULONG_PTR>(&assertion.file);
+    exception_record.ExceptionInformation[2] = assertion.line;
+
+    exinfo = &exception_ptrs;
+  }
 
   bool success = false;
   // In case of out-of-process dump generation, directly call
@@ -586,10 +606,10 @@
   if (current_handler->IsOutOfProcess()) {
     success = current_handler->WriteMinidumpWithException(
         GetCurrentThreadId(),
-        &exception_ptrs,
+        exinfo,
         &assertion);
   } else {
-    success = current_handler->WriteMinidumpOnHandlerThread(&exception_ptrs,
+    success = current_handler->WriteMinidumpOnHandlerThread(exinfo,
                                                             &assertion);
   }
 
diff --git a/src/client/windows/sender/crash_report_sender.cc b/src/client/windows/sender/crash_report_sender.cc
index 3d16ef2..ecf626d 100644
--- a/src/client/windows/sender/crash_report_sender.cc
+++ b/src/client/windows/sender/crash_report_sender.cc
@@ -75,8 +75,7 @@
   if (result) {
     ReportSent(today);
     return RESULT_SUCCEEDED;
-  } else if (http_response == 400) {  // TODO: update if/when the server
-                                      //       switches to a different code
+  } else if (http_response >= 400 && http_response < 500) {
     return RESULT_REJECTED;
   } else {
     return RESULT_FAILED;
diff --git a/src/client/windows/tests/crash_generation_app/abstract_class.cc b/src/client/windows/tests/crash_generation_app/abstract_class.cc
index f71addf..32f78f2 100644
--- a/src/client/windows/tests/crash_generation_app/abstract_class.cc
+++ b/src/client/windows/tests/crash_generation_app/abstract_class.cc
@@ -27,7 +27,7 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include "precompile.h"
+#include "client/windows/tests/crash_generation_app/abstract_class.h"
 
 namespace google_breakpad {
 
diff --git a/src/client/windows/tests/crash_generation_app/crash_generation_app.cc b/src/client/windows/tests/crash_generation_app/crash_generation_app.cc
index 5dfe405..1b4bd3c 100644
--- a/src/client/windows/tests/crash_generation_app/crash_generation_app.cc
+++ b/src/client/windows/tests/crash_generation_app/crash_generation_app.cc
@@ -30,7 +30,17 @@
 // crash_generation_app.cpp : Defines the entry point for the application.
 //
 
-#include "precompile.h"
+#include "client/windows/tests/crash_generation_app/crash_generation_app.h"
+
+#include <windows.h>
+#include <tchar.h>
+
+#include "client/windows/crash_generation/client_info.h"
+#include "client/windows/crash_generation/crash_generation_server.h"
+#include "client/windows/handler/exception_handler.h"
+#include "client/windows/common/ipc_protocol.h"
+
+#include "client/windows/tests/crash_generation_app/abstract_class.h"
 
 namespace google_breakpad {
 
@@ -227,7 +237,7 @@
   }
 
   wstring str_line;
-  for (int i = 0; i < custom_info.count; ++i) {
+  for (size_t i = 0; i < custom_info.count; ++i) {
     if (i > 0) {
       str_line += L", ";
     }
@@ -508,4 +518,3 @@
 
   return (int)msg.wParam;
 }
-
diff --git a/src/client/windows/unittests/gtest.gyp b/src/client/windows/tests/crash_generation_app/crash_generation_app.gyp
old mode 100755
new mode 100644
similarity index 66%
copy from src/client/windows/unittests/gtest.gyp
copy to src/client/windows/tests/crash_generation_app/crash_generation_app.gyp
index 68dedcb..aabf9c0
--- a/src/client/windows/unittests/gtest.gyp
+++ b/src/client/windows/tests/crash_generation_app/crash_generation_app.gyp
@@ -29,29 +29,33 @@
 

 {

   'includes': [

-    '../build/common.gypi',

+    '../../build/common.gypi',

   ],

-  'target_defaults': {

-  },

   'targets': [

     {

-      'target_name': 'gtest',

-      'type': '<(library)',

-      'include_dirs': [

-        '<(DEPTH)/testing/include',

-        '<(DEPTH)/testing/gtest',

-        '<(DEPTH)/testing/gtest/include',

-      ],

+      'target_name': 'crash_generation_app',

+      'type': 'executable',

       'sources': [

-        '<(DEPTH)/testing/gtest/src/gtest-all.cc',

-        '<(DEPTH)/testing/gtest/src/gtest_main.cc',

+        'abstract_class.cc',

+        'abstract_class.h',

+        'crash_generation_app.cc',

+        'crash_generation_app.h',

+        'crash_generation_app.ico',

+        'crash_generation_app.rc',

+        'resource.h',

+        'small.ico',

       ],

-      'direct_dependent_settings': {

-        'include_dirs': [

-          '<(DEPTH)/testing/include',

-          '<(DEPTH)/testing/gtest/include',

-        ]

+      'dependencies': [

+        '../../breakpad_client.gyp:common',

+        '../../crash_generation/crash_generation.gyp:crash_generation_server',

+        '../../crash_generation/crash_generation.gyp:crash_generation_client',

+        '../../handler/exception_handler.gyp:exception_handler',

+      ],

+      'msvs_settings': {

+        'VCLinkerTool': {

+          'SubSystem': '2',  # Windows Subsystem as opposed to a console app

+        },

       },

-    },

-  ],

+    }

+  ]

 }

diff --git a/src/client/windows/tests/crash_generation_app/crash_generation_app.sln b/src/client/windows/tests/crash_generation_app/crash_generation_app.sln
deleted file mode 100644
index a8bba39..0000000
--- a/src/client/windows/tests/crash_generation_app/crash_generation_app.sln
+++ /dev/null
@@ -1,26 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "crash_generation_app", "crash_generation_app.vcproj", "{A15674ED-713D-4B37-B1D2-0C29C7E533C8}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		DebugStaticCRT|Win32 = DebugStaticCRT|Win32
-		Release|Win32 = Release|Win32
-		ReleaseStaticCRT|Win32 = ReleaseStaticCRT|Win32
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{A15674ED-713D-4B37-B1D2-0C29C7E533C8}.Debug|Win32.ActiveCfg = Debug|Win32
-		{A15674ED-713D-4B37-B1D2-0C29C7E533C8}.Debug|Win32.Build.0 = Debug|Win32
-		{A15674ED-713D-4B37-B1D2-0C29C7E533C8}.DebugStaticCRT|Win32.ActiveCfg = DebugStaticCRT|Win32
-		{A15674ED-713D-4B37-B1D2-0C29C7E533C8}.DebugStaticCRT|Win32.Build.0 = DebugStaticCRT|Win32
-		{A15674ED-713D-4B37-B1D2-0C29C7E533C8}.Release|Win32.ActiveCfg = Release|Win32
-		{A15674ED-713D-4B37-B1D2-0C29C7E533C8}.Release|Win32.Build.0 = Release|Win32
-		{A15674ED-713D-4B37-B1D2-0C29C7E533C8}.ReleaseStaticCRT|Win32.ActiveCfg = ReleaseStaticCRT|Win32
-		{A15674ED-713D-4B37-B1D2-0C29C7E533C8}.ReleaseStaticCRT|Win32.Build.0 = ReleaseStaticCRT|Win32
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
diff --git a/src/client/windows/tests/crash_generation_app/crash_generation_app.vcproj b/src/client/windows/tests/crash_generation_app/crash_generation_app.vcproj
deleted file mode 100644
index a7b2b69..0000000
--- a/src/client/windows/tests/crash_generation_app/crash_generation_app.vcproj
+++ /dev/null
@@ -1,431 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="8.00"
-	Name="crash_generation_app"
-	ProjectGUID="{A15674ED-713D-4B37-B1D2-0C29C7E533C8}"
-	RootNamespace="CrashGenerationServerApp"
-	Keyword="Win32Proj"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="..\..\..\..\"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="true"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="2"
-				PrecompiledHeaderThrough="PreCompile.h"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="true"
-				DebugInformationFormat="4"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="exception_handler.lib"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="..\..\$(ConfigurationName)"
-				GenerateDebugInformation="true"
-				SubSystem="2"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="..\..\..\..\"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="2"
-				PrecompiledHeaderThrough="precompile.h"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="true"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="exception_handler.lib"
-				LinkIncremental="1"
-				AdditionalLibraryDirectories="..\..\$(ConfigurationName)"
-				GenerateDebugInformation="true"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="DebugStaticCRT|Win32"
-			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="..\..\..\..\"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="true"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="1"
-				UsePrecompiledHeader="2"
-				PrecompiledHeaderThrough="PreCompile.h"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="true"
-				DebugInformationFormat="4"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="exception_handler.lib"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="..\..\$(ConfigurationName)"
-				GenerateDebugInformation="true"
-				SubSystem="2"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="ReleaseStaticCRT|Win32"
-			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="..\..\..\..\"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				RuntimeLibrary="0"
-				UsePrecompiledHeader="2"
-				PrecompiledHeaderThrough="precompile.h"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="true"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="exception_handler.lib"
-				LinkIncremental="1"
-				AdditionalLibraryDirectories="..\..\$(ConfigurationName)"
-				GenerateDebugInformation="true"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
-			>
-			<File
-				RelativePath=".\abstract_class.cc"
-				>
-			</File>
-			<File
-				RelativePath=".\crash_generation_app.cc"
-				>
-			</File>
-			<File
-				RelativePath=".\precompile.cc"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						UsePrecompiledHeader="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						UsePrecompiledHeader="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="DebugStaticCRT|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						UsePrecompiledHeader="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="ReleaseStaticCRT|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						UsePrecompiledHeader="1"
-					/>
-				</FileConfiguration>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc;xsd"
-			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
-			>
-			<File
-				RelativePath=".\abstract_class.h"
-				>
-			</File>
-			<File
-				RelativePath=".\crash_generation_app.h"
-				>
-			</File>
-			<File
-				RelativePath=".\precompile.h"
-				>
-			</File>
-			<File
-				RelativePath=".\Resource.h"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
-			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
-			>
-			<File
-				RelativePath=".\crash_generation_app.ico"
-				>
-			</File>
-			<File
-				RelativePath=".\crash_generation_app.rc"
-				>
-			</File>
-			<File
-				RelativePath=".\small.ico"
-				>
-			</File>
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/src/client/windows/tests/crash_generation_app/precompile.h b/src/client/windows/tests/crash_generation_app/precompile.h
deleted file mode 100644
index 1ade445..0000000
--- a/src/client/windows/tests/crash_generation_app/precompile.h
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) 2008, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// PreCompile.h : include file for standard system include files,
-// or project specific include files that are used frequently, but
-// are changed infrequently
-//
-
-#ifndef CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_PRECOMPILE_H__
-#define CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_PRECOMPILE_H__
-
-// Modify the following defines if you have to target a platform prior to
-// the ones specified below. Refer to MSDN for the latest info on
-// corresponding values for different platforms.
-
-// Allow use of features specific to Windows XP or later.
-#ifndef WINVER
-// Change this to the appropriate value to target other versions of Windows.
-#define WINVER 0x0501
-#endif
-
-// Allow use of features specific to Windows XP or later.
-#ifndef _WIN32_WINNT
-// Change this to the appropriate value to target other versions of Windows.
-#define _WIN32_WINNT 0x0501
-#endif
-
-// Allow use of features specific to Windows 98 or later.
-#ifndef _WIN32_WINDOWS
-// Change this to the appropriate value to target Windows Me or later.
-#define _WIN32_WINDOWS 0x0410
-#endif
-
-// Allow use of features specific to IE 6.0 or later.
-#ifndef _WIN32_IE
-// Change this to the appropriate value to target other versions of IE.
-#define _WIN32_IE 0x0600
-#endif
-
-// Exclude rarely-used stuff from Windows headers
-#define WIN32_LEAN_AND_MEAN
-
-#include <windows.h>
-#include <DbgHelp.h>
-#include <malloc.h>
-#include <memory.h>
-#include <stdlib.h>
-#include <string.h>
-#include <tchar.h>
-
-#include <cassert>
-#include <list>
-
-#include "client/windows/common/ipc_protocol.h"
-#include "client/windows/crash_generation/client_info.h"
-#include "client/windows/crash_generation/crash_generation_client.h"
-#include "client/windows/crash_generation/crash_generation_server.h"
-#include "client/windows/crash_generation/minidump_generator.h"
-#include "client/windows/handler/exception_handler.h"
-#include "client/windows/tests/crash_generation_app/abstract_class.h"
-#include "client/windows/tests/crash_generation_app/crash_generation_app.h"
-#include "google_breakpad/common/minidump_format.h"
-
-#endif  // CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_PRECOMPILE_H__
diff --git a/src/client/windows/unittests/client_tests.gyp b/src/client/windows/unittests/client_tests.gyp
index 027ed62..5c5ef47 100755
--- a/src/client/windows/unittests/client_tests.gyp
+++ b/src/client/windows/unittests/client_tests.gyp
@@ -1,54 +1,56 @@
-# Copyright (c) 2010, Google Inc.

-# All rights reserved.

-#

-# Redistribution and use in source and binary forms, with or without

-# modification, are permitted provided that the following conditions are

-# met:

-#

-#     * Redistributions of source code must retain the above copyright

-# notice, this list of conditions and the following disclaimer.

-#     * Redistributions in binary form must reproduce the above

-# copyright notice, this list of conditions and the following disclaimer

-# in the documentation and/or other materials provided with the

-# distribution.

-#     * Neither the name of Google Inc. nor the names of its

-# contributors may be used to endorse or promote products derived from

-# this software without specific prior written permission.

-#

-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-

-{

-  'includes': [

-    '../build/common.gypi',

-  ],

-  'targets': [

-    {

-      'target_name': 'client_tests',

-      'type': 'executable',

-      'sources': [

-        'exception_handler_test.cc',

-        'exception_handler_death_test.cc',

-        'minidump_test.cc',

-        'dump_analysis.cc',

-        'dump_analysis.h',

-      ],

-      'dependencies': [

-        'gtest.gyp:gtest',

-        '../breakpad_client.gyp:common',

-        '../crash_generation/crash_generation.gyp:crash_generation_server',

-        '../crash_generation/crash_generation.gyp:crash_generation_client',

-        '../handler/exception_handler.gyp:exception_handler',

-      ]

-    },

-  ],

-}

+# Copyright (c) 2010, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+{
+  'includes': [
+    '../build/common.gypi',
+  ],
+  'targets': [
+    {
+      'target_name': 'client_tests',
+      'type': 'executable',
+      'sources': [
+        'exception_handler_test.cc',
+        'exception_handler_death_test.cc',
+        'minidump_test.cc',
+        'dump_analysis.cc',
+        'dump_analysis.h',
+        'crash_generation_server_test.cc'
+      ],
+      'dependencies': [
+        'testing.gyp:gtest',
+        'testing.gyp:gmock',
+        '../breakpad_client.gyp:common',
+        '../crash_generation/crash_generation.gyp:crash_generation_server',
+        '../crash_generation/crash_generation.gyp:crash_generation_client',
+        '../handler/exception_handler.gyp:exception_handler',
+      ]
+    },
+  ],
+}
diff --git a/src/client/windows/unittests/crash_generation_server_test.cc b/src/client/windows/unittests/crash_generation_server_test.cc
new file mode 100644
index 0000000..75d0be9
--- /dev/null
+++ b/src/client/windows/unittests/crash_generation_server_test.cc
@@ -0,0 +1,298 @@
+// Copyright 2010, Google Inc.

+// All rights reserved.

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+

+#include "testing/gtest/include/gtest/gtest.h"

+#include "testing/include/gmock/gmock.h"

+

+#include "client/windows/crash_generation/crash_generation_server.h"

+#include "client/windows/common/ipc_protocol.h"

+

+using testing::_;

+

+namespace {

+

+const wchar_t kPipeName[] =

+  L"\\\\.\\pipe\\CrashGenerationServerTest\\TestCaseServer";

+

+const DWORD kPipeDesiredAccess = FILE_READ_DATA |

+                                 FILE_WRITE_DATA |

+                                 FILE_WRITE_ATTRIBUTES;

+

+const DWORD kPipeFlagsAndAttributes = SECURITY_IDENTIFICATION |

+                                      SECURITY_SQOS_PRESENT;

+

+const DWORD kPipeMode = PIPE_READMODE_MESSAGE;

+

+int kCustomInfoCount = 2;

+

+google_breakpad::CustomInfoEntry kCustomInfoEntries[] = {

+    google_breakpad::CustomInfoEntry(L"prod", L"CrashGenerationServerTest"),

+    google_breakpad::CustomInfoEntry(L"ver", L"1.0"),

+};

+

+class CrashGenerationServerTest : public ::testing::Test {

+ public:

+  CrashGenerationServerTest()

+      : crash_generation_server_(kPipeName,

+                                 NULL,

+                                 CallOnClientConnected, &mock_callbacks_,

+                                 CallOnClientDumpRequested, &mock_callbacks_,

+                                 CallOnClientExited, &mock_callbacks_,

+                                 false,

+                                 NULL),

+        thread_id_(0),

+        exception_pointers_(NULL) {

+    memset(&assert_info_, 0, sizeof(assert_info_));

+  }

+

+ protected:

+  class MockCrashGenerationServerCallbacks {

+   public:

+    MOCK_METHOD1(OnClientConnected,

+                 void(const google_breakpad::ClientInfo* client_info));

+    MOCK_METHOD2(OnClientDumpRequested,

+                 void(const google_breakpad::ClientInfo* client_info,

+                      const std::wstring* file_path));

+    MOCK_METHOD1(OnClientExited,

+                 void(const google_breakpad::ClientInfo* client_info));

+  };

+

+  enum ClientFault {

+    NO_FAULT,

+    CLOSE_AFTER_CONNECT,

+    SEND_INVALID_REGISTRATION,

+    TRUNCATE_REGISTRATION,

+    CLOSE_AFTER_REGISTRATION,

+    RESPONSE_BUFFER_TOO_SMALL,

+    CLOSE_AFTER_RESPONSE,

+    SEND_INVALID_ACK

+  };

+

+  void SetUp() {

+    ASSERT_TRUE(crash_generation_server_.Start());

+  }

+

+  void FaultyClient(ClientFault fault_type) {

+    HANDLE pipe = CreateFile(kPipeName,

+                             kPipeDesiredAccess,

+                             0,

+                             NULL,

+                             OPEN_EXISTING,

+                             kPipeFlagsAndAttributes,

+                             NULL);

+

+    if (pipe == INVALID_HANDLE_VALUE) {

+      ASSERT_EQ(ERROR_PIPE_BUSY, GetLastError());

+

+      // Cannot continue retrying if wait on pipe fails.

+      ASSERT_TRUE(WaitNamedPipe(kPipeName, 500));

+

+      pipe = CreateFile(kPipeName,

+                        kPipeDesiredAccess,

+                        0,

+                        NULL,

+                        OPEN_EXISTING,

+                        kPipeFlagsAndAttributes,

+                        NULL);

+    }

+

+    ASSERT_NE(pipe, INVALID_HANDLE_VALUE);

+

+    DWORD mode = kPipeMode;

+    ASSERT_TRUE(SetNamedPipeHandleState(pipe, &mode, NULL, NULL));

+

+    DoFaultyClient(fault_type, pipe);

+

+    CloseHandle(pipe);

+  }

+

+  void DoTestFault(ClientFault fault) {

+    EXPECT_CALL(mock_callbacks_, OnClientConnected(_)).Times(0);

+    ASSERT_NO_FATAL_FAILURE(FaultyClient(fault));

+    ASSERT_NO_FATAL_FAILURE(FaultyClient(fault));

+    ASSERT_NO_FATAL_FAILURE(FaultyClient(fault));

+

+    EXPECT_CALL(mock_callbacks_, OnClientConnected(_));

+

+    ASSERT_NO_FATAL_FAILURE(FaultyClient(NO_FAULT));

+

+    // Slight hack. The OnClientConnected is only invoked after the ack is

+    // received by the server. At that point, the FaultyClient call has already

+    // returned. The best way to wait until the server is done handling that is

+    // to send one more ping, whose processing will be blocked by delivery of

+    // the OnClientConnected message.

+    ASSERT_NO_FATAL_FAILURE(FaultyClient(CLOSE_AFTER_CONNECT));

+  }

+

+  MockCrashGenerationServerCallbacks mock_callbacks_;

+

+ private:

+  // Depends on the caller to successfully open the pipe before invocation and

+  // to close it immediately afterwards.

+  void DoFaultyClient(ClientFault fault_type, HANDLE pipe) {

+    if (fault_type == CLOSE_AFTER_CONNECT) {

+      return;

+    }

+

+    google_breakpad::CustomClientInfo custom_info = {kCustomInfoEntries,

+                                                     kCustomInfoCount};

+

+    google_breakpad::ProtocolMessage msg(

+      fault_type == SEND_INVALID_REGISTRATION ?

+        google_breakpad::MESSAGE_TAG_NONE :

+        google_breakpad::MESSAGE_TAG_REGISTRATION_REQUEST,

+      GetCurrentProcessId(),

+      MiniDumpNormal,

+      &thread_id_,

+      &exception_pointers_,

+      &assert_info_,

+      custom_info,

+      NULL,

+      NULL,

+      NULL);

+

+    DWORD bytes_count = 0;

+

+    ASSERT_TRUE(WriteFile(pipe,

+                          &msg,

+                          fault_type == TRUNCATE_REGISTRATION ?

+                            sizeof(msg) / 2 : sizeof(msg),

+                          &bytes_count,

+                          NULL));

+

+    if (fault_type == CLOSE_AFTER_REGISTRATION) {

+      return;

+    }

+

+    google_breakpad::ProtocolMessage reply;

+

+    if (!ReadFile(pipe,

+                  &reply,

+                  fault_type == RESPONSE_BUFFER_TOO_SMALL ?

+                    sizeof(google_breakpad::ProtocolMessage) / 2 :

+                    sizeof(google_breakpad::ProtocolMessage),

+                  &bytes_count,

+                  NULL)) {

+      switch (fault_type) {

+        case TRUNCATE_REGISTRATION:

+        case RESPONSE_BUFFER_TOO_SMALL:

+        case SEND_INVALID_REGISTRATION:

+          return;

+

+        default:

+          FAIL() << "Unexpectedly failed to register.";

+      }

+    }

+

+    if (fault_type == CLOSE_AFTER_RESPONSE) {

+      return;

+    }

+

+    google_breakpad::ProtocolMessage ack_msg;

+    ack_msg.tag = google_breakpad::MESSAGE_TAG_REGISTRATION_ACK;

+

+    ASSERT_TRUE(WriteFile(pipe,

+                          &ack_msg,

+                          SEND_INVALID_ACK ?

+                            sizeof(ack_msg) : sizeof(ack_msg) / 2,

+                          &bytes_count,

+                          NULL));

+

+    return;

+  }

+

+  static void CallOnClientConnected(

+    void* context, const google_breakpad::ClientInfo* client_info) {

+    static_cast<MockCrashGenerationServerCallbacks*>(context)->

+      OnClientConnected(client_info);

+  }

+

+  static void CallOnClientDumpRequested(

+    void* context,

+    const google_breakpad::ClientInfo* client_info,

+    const std::wstring* file_path) {

+    static_cast<MockCrashGenerationServerCallbacks*>(context)->

+      OnClientDumpRequested(client_info, file_path);

+  }

+

+  static void CallOnClientExited(

+    void* context, const google_breakpad::ClientInfo* client_info) {

+    static_cast<MockCrashGenerationServerCallbacks*>(context)->

+      OnClientExited(client_info);

+  }

+

+  DWORD thread_id_;

+  EXCEPTION_POINTERS* exception_pointers_;

+  MDRawAssertionInfo assert_info_;

+

+  google_breakpad::CrashGenerationServer crash_generation_server_;

+};

+

+TEST_F(CrashGenerationServerTest, PingServerTest) {

+  DoTestFault(CLOSE_AFTER_CONNECT);

+}

+

+TEST_F(CrashGenerationServerTest, InvalidRegistration) {

+  DoTestFault(SEND_INVALID_REGISTRATION);

+}

+

+TEST_F(CrashGenerationServerTest, TruncateRegistration) {

+  DoTestFault(TRUNCATE_REGISTRATION);

+}

+

+TEST_F(CrashGenerationServerTest, CloseAfterRegistration) {

+  DoTestFault(CLOSE_AFTER_REGISTRATION);

+}

+

+TEST_F(CrashGenerationServerTest, ResponseBufferTooSmall) {

+  DoTestFault(RESPONSE_BUFFER_TOO_SMALL);

+}

+

+TEST_F(CrashGenerationServerTest, CloseAfterResponse) {

+  DoTestFault(CLOSE_AFTER_RESPONSE);

+}

+

+// It turns out that, as long as you send one byte, the ACK is accepted and

+// registration succeeds.

+TEST_F(CrashGenerationServerTest, SendInvalidAck) {

+  EXPECT_CALL(mock_callbacks_, OnClientConnected(_));

+  ASSERT_NO_FATAL_FAILURE(FaultyClient(SEND_INVALID_ACK));

+

+  // See DoTestFault for an explanation of this line

+  ASSERT_NO_FATAL_FAILURE(FaultyClient(CLOSE_AFTER_CONNECT));

+

+  EXPECT_CALL(mock_callbacks_, OnClientConnected(_));

+  ASSERT_NO_FATAL_FAILURE(FaultyClient(NO_FAULT));

+

+  // See DoTestFault for an explanation of this line

+  ASSERT_NO_FATAL_FAILURE(FaultyClient(CLOSE_AFTER_CONNECT));

+}

+

+}  // anonymous namespace

diff --git a/src/client/windows/unittests/gtest.gyp b/src/client/windows/unittests/testing.gyp
old mode 100755
new mode 100644
similarity index 79%
rename from src/client/windows/unittests/gtest.gyp
rename to src/client/windows/unittests/testing.gyp
index 68dedcb..8585428
--- a/src/client/windows/unittests/gtest.gyp
+++ b/src/client/windows/unittests/testing.gyp
@@ -1,57 +1,77 @@
-# Copyright (c) 2010, Google Inc.

-# All rights reserved.

-#

-# Redistribution and use in source and binary forms, with or without

-# modification, are permitted provided that the following conditions are

-# met:

-#

-#     * Redistributions of source code must retain the above copyright

-# notice, this list of conditions and the following disclaimer.

-#     * Redistributions in binary form must reproduce the above

-# copyright notice, this list of conditions and the following disclaimer

-# in the documentation and/or other materials provided with the

-# distribution.

-#     * Neither the name of Google Inc. nor the names of its

-# contributors may be used to endorse or promote products derived from

-# this software without specific prior written permission.

-#

-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-

-{

-  'includes': [

-    '../build/common.gypi',

-  ],

-  'target_defaults': {

-  },

-  'targets': [

-    {

-      'target_name': 'gtest',

-      'type': '<(library)',

-      'include_dirs': [

-        '<(DEPTH)/testing/include',

-        '<(DEPTH)/testing/gtest',

-        '<(DEPTH)/testing/gtest/include',

-      ],

-      'sources': [

-        '<(DEPTH)/testing/gtest/src/gtest-all.cc',

-        '<(DEPTH)/testing/gtest/src/gtest_main.cc',

-      ],

-      'direct_dependent_settings': {

-        'include_dirs': [

-          '<(DEPTH)/testing/include',

-          '<(DEPTH)/testing/gtest/include',

-        ]

-      },

-    },

-  ],

-}

+# Copyright (c) 2010, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+{
+  'includes': [
+    '../build/common.gypi',
+  ],
+  'target_defaults': {
+  },
+  'targets': [
+    {
+      'target_name': 'gtest',
+      'type': '<(library)',
+      'include_dirs': [
+        '<(DEPTH)/testing/include',
+        '<(DEPTH)/testing/gtest',
+        '<(DEPTH)/testing/gtest/include',
+      ],
+      'sources': [
+        '<(DEPTH)/testing/gtest/src/gtest-all.cc',
+      ],
+      'direct_dependent_settings': {
+        'include_dirs': [
+          '<(DEPTH)/testing/include',
+          '<(DEPTH)/testing/gtest/include',
+        ]
+      },
+    },
+    {
+      'target_name': 'gmock',
+      'type': '<(library)',
+      'include_dirs': [
+        '<(DEPTH)/testing/include',
+        '<(DEPTH)/testing/',
+        '<(DEPTH)/testing/gtest',
+        '<(DEPTH)/testing/gtest/include',
+      ],
+      'sources': [
+        '<(DEPTH)/testing/src/gmock-all.cc',
+        '<(DEPTH)/testing/src/gmock_main.cc',
+      ],
+      'direct_dependent_settings': {
+        'include_dirs': [
+          '<(DEPTH)/testing/include',
+          '<(DEPTH)/testing/gtest/include',
+        ]
+      },
+    },
+
+  ],
+}
diff --git a/src/common/dwarf/bytereader-inl.h b/src/common/dwarf/bytereader-inl.h
index 57fce44..3c16708 100644
--- a/src/common/dwarf/bytereader-inl.h
+++ b/src/common/dwarf/bytereader-inl.h
@@ -29,10 +29,10 @@
 #ifndef UTIL_DEBUGINFO_BYTEREADER_INL_H__
 #define UTIL_DEBUGINFO_BYTEREADER_INL_H__
 
-#include <cassert>
-
 #include "common/dwarf/bytereader.h"
 
+#include <assert.h>
+
 namespace dwarf2reader {
 
 inline uint8 ByteReader::ReadOneByte(const char* buffer) const {
diff --git a/src/common/dwarf/bytereader.cc b/src/common/dwarf/bytereader.cc
index a9b0020..6802026 100644
--- a/src/common/dwarf/bytereader.cc
+++ b/src/common/dwarf/bytereader.cc
@@ -123,11 +123,11 @@
 
     // First, find the offset to START from the closest prior aligned
     // address.
-    size_t skew = section_base_ & (AddressSize() - 1);
+    uint64 skew = section_base_ & (AddressSize() - 1);
     // Now find the offset from that aligned address to buffer.
-    size_t offset = skew + (buffer - buffer_base_);
+    uint64 offset = skew + (buffer - buffer_base_);
     // Round up to the next boundary.
-    size_t aligned = (offset + AddressSize() - 1) & -AddressSize();
+    uint64 aligned = (offset + AddressSize() - 1) & -AddressSize();
     // Convert back to a pointer.
     const char *aligned_buffer = buffer_base_ + (aligned - skew);
     // Finally, store the length and actually fetch the pointer.
@@ -156,7 +156,7 @@
     case DW_EH_PE_uleb128:
       offset = ReadUnsignedLEB128(buffer, len);
       break;
-      
+
     case DW_EH_PE_udata2:
       offset = ReadTwoBytes(buffer);
       *len = 2;
diff --git a/src/common/dwarf/bytereader.h b/src/common/dwarf/bytereader.h
index aaa97c4..e389427 100644
--- a/src/common/dwarf/bytereader.h
+++ b/src/common/dwarf/bytereader.h
@@ -85,7 +85,7 @@
   //
   // - If N is between 0 and 0x7f, then its unsigned LEB128
   //   representation is a single byte whose value is N.
-  // 
+  //
   // - Otherwise, its unsigned LEB128 representation is (N & 0x7f) |
   //   0x80, followed by the unsigned LEB128 representation of N /
   //   128, rounded towards negative infinity.
@@ -104,7 +104,7 @@
   // - If N is between -0x40 and 0x3f, then its signed LEB128
   //   representation is a single byte whose value is N in two's
   //   complement.
-  // 
+  //
   // - Otherwise, its signed LEB128 representation is (N & 0x7f) |
   //   0x80, followed by the signed LEB128 representation of N / 128,
   //   rounded towards negative infinity.
diff --git a/src/common/dwarf/bytereader_unittest.cc b/src/common/dwarf/bytereader_unittest.cc
index 729c54a..d839dbe 100644
--- a/src/common/dwarf/bytereader_unittest.cc
+++ b/src/common/dwarf/bytereader_unittest.cc
@@ -43,10 +43,10 @@
 using dwarf2reader::ENDIANNESS_BIG;
 using dwarf2reader::ENDIANNESS_LITTLE;
 using google_breakpad::CFISection;
-using google_breakpad::TestAssembler::Label;
-using google_breakpad::TestAssembler::kBigEndian;
-using google_breakpad::TestAssembler::kLittleEndian;
-using google_breakpad::TestAssembler::Section;
+using google_breakpad::test_assembler::Label;
+using google_breakpad::test_assembler::kBigEndian;
+using google_breakpad::test_assembler::kLittleEndian;
+using google_breakpad::test_assembler::Section;
 using std::string;
 using testing::Test;
 
diff --git a/src/common/dwarf/cfi_assembler.cc b/src/common/dwarf/cfi_assembler.cc
index 110aa2e..a6a5aca 100644
--- a/src/common/dwarf/cfi_assembler.cc
+++ b/src/common/dwarf/cfi_assembler.cc
@@ -32,11 +32,11 @@
 // cfi_assembler.cc: Implementation of google_breakpad::CFISection class.
 // See cfi_assembler.h for details.
 
-#include <cassert>
-#include <stdlib.h>
-
 #include "common/dwarf/cfi_assembler.h"
 
+#include <assert.h>
+#include <stdlib.h>
+
 namespace google_breakpad {
 
 using dwarf2reader::DwarfPointerEncoding;
@@ -52,18 +52,14 @@
   in_fde_ = false;
 
   if (dwarf64) {
-    D32(0xffffffff);
+    D32(kDwarf64InitialLengthMarker);
     D64(entry_length_->length);
     entry_length_->start = Here();
-    // Write the CIE distinguished value. In .debug_frame sections, it's
-    // ~0; in .eh_frame sections, it's zero.
-    D64(eh_frame_ ? 0 : ~(u_int64_t)0);
+    D64(eh_frame_ ? kEHFrame64CIEIdentifier : kDwarf64CIEIdentifier);
   } else {
     D32(entry_length_->length);
     entry_length_->start = Here();
-    // Write the CIE distinguished value. In .debug_frame sections, it's
-    // ~0; in .eh_frame sections, it's zero.
-    D32(eh_frame_ ? 0 : ~(u_int32_t)0);
+    D32(eh_frame_ ? kEHFrame32CIEIdentifier : kDwarf32CIEIdentifier);
   }
   D8(version);
   AppendCString(augmentation);
@@ -193,4 +189,10 @@
   return *this;
 };
 
+const u_int32_t CFISection::kDwarf64InitialLengthMarker;
+const u_int32_t CFISection::kDwarf32CIEIdentifier;
+const u_int64_t CFISection::kDwarf64CIEIdentifier;
+const u_int32_t CFISection::kEHFrame32CIEIdentifier;
+const u_int64_t CFISection::kEHFrame64CIEIdentifier;
+
 } // namespace google_breakpad
diff --git a/src/common/dwarf/cfi_assembler.h b/src/common/dwarf/cfi_assembler.h
index 7ec1a10..3f30503 100644
--- a/src/common/dwarf/cfi_assembler.h
+++ b/src/common/dwarf/cfi_assembler.h
@@ -31,7 +31,7 @@
 
 // Original author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com>
 
-// cfi-assembler.h: Define CFISection, a class for creating properly
+// cfi_assembler.h: Define CFISection, a class for creating properly
 // (and improperly) formatted DWARF CFI data for unit tests.
 
 #ifndef PROCESSOR_CFI_ASSEMBLER_H_
@@ -46,9 +46,9 @@
 namespace google_breakpad {
 
 using dwarf2reader::DwarfPointerEncoding;
-using google_breakpad::TestAssembler::Endianness;
-using google_breakpad::TestAssembler::Label;
-using google_breakpad::TestAssembler::Section;
+using google_breakpad::test_assembler::Endianness;
+using google_breakpad::test_assembler::Label;
+using google_breakpad::test_assembler::Section;
 using std::string;
 
 class CFISection: public Section {
@@ -219,6 +219,19 @@
     Label start;
   };
 
+  // Constants used in CFI/.eh_frame data:
+
+  // If the first four bytes of an "initial length" are this constant, then
+  // the data uses the 64-bit DWARF format, and the length itself is the
+  // subsequent eight bytes.
+  static const u_int32_t kDwarf64InitialLengthMarker = 0xffffffffU;
+
+  // The CIE identifier for 32- and 64-bit DWARF CFI and .eh_frame data.
+  static const u_int32_t kDwarf32CIEIdentifier = ~(u_int32_t)0;
+  static const u_int64_t kDwarf64CIEIdentifier = ~(u_int64_t)0;
+  static const u_int32_t kEHFrame32CIEIdentifier = 0;
+  static const u_int64_t kEHFrame64CIEIdentifier = 0;
+
   // The size of a machine address for the data in this section.
   size_t address_size_;
 
diff --git a/src/common/dwarf/dwarf2diehandler.cc b/src/common/dwarf/dwarf2diehandler.cc
index 099f519..5d01929 100644
--- a/src/common/dwarf/dwarf2diehandler.cc
+++ b/src/common/dwarf/dwarf2diehandler.cc
@@ -31,10 +31,10 @@
 // dwarf2diehandler.cc: Implement the dwarf2reader::DieDispatcher class.
 // See dwarf2diehandler.h for details.
 
-#include <cassert>
-
 #include "common/dwarf/dwarf2diehandler.h"
 
+#include <assert.h>
+
 namespace dwarf2reader {
 
 DIEDispatcher::~DIEDispatcher() {
diff --git a/src/common/dwarf/dwarf2enums.h b/src/common/dwarf/dwarf2enums.h
index 066189e..832a17c 100644
--- a/src/common/dwarf/dwarf2enums.h
+++ b/src/common/dwarf/dwarf2enums.h
@@ -529,7 +529,7 @@
   DW_INL_not_inlined                 =0x0,
   DW_INL_inlined                     =0x1,
   DW_INL_declared_not_inlined        =0x2,
-  DW_INL_declared_inlined            =0x3,
+  DW_INL_declared_inlined            =0x3
 };
 
 // Call Frame Info instructions.
diff --git a/src/common/dwarf/dwarf2reader.cc b/src/common/dwarf/dwarf2reader.cc
index b2b9d0d..63d1ffb 100644
--- a/src/common/dwarf/dwarf2reader.cc
+++ b/src/common/dwarf/dwarf2reader.cc
@@ -31,16 +31,18 @@
 // Implementation of dwarf2reader::LineInfo, dwarf2reader::CompilationUnit,
 // and dwarf2reader::CallFrameInfo. See dwarf2reader.h for details.
 
-#include <cassert>
-#include <cstdio>
-#include <cstring>
+#include "common/dwarf/dwarf2reader.h"
+
+#include <assert.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+
 #include <map>
-#include <memory>
 #include <stack>
 #include <utility>
 
 #include "common/dwarf/bytereader-inl.h"
-#include "common/dwarf/dwarf2reader.h"
 #include "common/dwarf/bytereader.h"
 #include "common/dwarf/line_state_machine.h"
 
@@ -88,7 +90,7 @@
   while (1) {
     CompilationUnit::Abbrev abbrev;
     size_t len;
-    const uint32 number = reader_->ReadUnsignedLEB128(abbrevptr, &len);
+    const uint64 number = reader_->ReadUnsignedLEB128(abbrevptr, &len);
 
     if (number == 0)
       break;
@@ -96,7 +98,7 @@
     abbrevptr += len;
 
     assert(abbrevptr < abbrev_start + abbrev_length);
-    const uint32 tag = reader_->ReadUnsignedLEB128(abbrevptr, &len);
+    const uint64 tag = reader_->ReadUnsignedLEB128(abbrevptr, &len);
     abbrevptr += len;
     abbrev.tag = static_cast<enum DwarfTag>(tag);
 
@@ -107,11 +109,11 @@
     assert(abbrevptr < abbrev_start + abbrev_length);
 
     while (1) {
-      const uint32 nametemp = reader_->ReadUnsignedLEB128(abbrevptr, &len);
+      const uint64 nametemp = reader_->ReadUnsignedLEB128(abbrevptr, &len);
       abbrevptr += len;
 
       assert(abbrevptr < abbrev_start + abbrev_length);
-      const uint32 formtemp = reader_->ReadUnsignedLEB128(abbrevptr, &len);
+      const uint64 formtemp = reader_->ReadUnsignedLEB128(abbrevptr, &len);
       abbrevptr += len;
       if (nametemp == 0 && formtemp == 0)
         break;
@@ -491,11 +493,8 @@
   else
     lengthstart += 4;
 
-  // we need semantics of boost scoped_ptr here - no intention of trasnferring
-  // ownership of the stack.  use const, but then we limit ourselves to not
-  // ever being able to call .reset() on the smart pointer.
-  std::auto_ptr<stack<uint64> > const die_stack(new stack<uint64>);
-
+  stack<uint64> die_stack;
+  
   while (dieptr < (lengthstart + header_.length)) {
     // We give the user the absolute offset from the beginning of
     // debug_info, since they need it to deal with ref_addr forms.
@@ -505,15 +504,19 @@
 
     dieptr += len;
 
-    // Abbrev == 0 represents the end of a list of children.
+    // Abbrev == 0 represents the end of a list of children, or padding
+    // at the end of the compilation unit.
     if (abbrev_num == 0) {
-      const uint64 offset = die_stack->top();
-      die_stack->pop();
+      if (die_stack.size() == 0)
+        // If it is padding, then we are done with the compilation unit's DIEs.
+        return;
+      const uint64 offset = die_stack.top();
+      die_stack.pop();
       handler_->EndDIE(offset);
       continue;
     }
 
-    const Abbrev& abbrev = abbrevs_->at(abbrev_num);
+    const Abbrev& abbrev = abbrevs_->at(static_cast<size_t>(abbrev_num));
     const enum DwarfTag tag = abbrev.tag;
     if (!handler_->StartDIE(absolute_offset, tag, abbrev.attributes)) {
       dieptr = SkipDIE(dieptr, abbrev);
@@ -522,7 +525,7 @@
     }
 
     if (abbrev.has_children) {
-      die_stack->push(absolute_offset);
+      die_stack.push(absolute_offset);
     } else {
       handler_->EndDIE(absolute_offset);
     }
@@ -616,8 +619,8 @@
 
       uint64 filelength = reader_->ReadUnsignedLEB128(lineptr, &len);
       lineptr += len;
-      handler_->DefineFile(filename, fileindex, dirindex, mod_time,
-                           filelength);
+      handler_->DefineFile(filename, fileindex, static_cast<uint32>(dirindex), 
+                           mod_time, filelength);
       fileindex++;
     }
   }
@@ -647,7 +650,7 @@
     opcode -= header.opcode_base;
     const int64 advance_address = (opcode / header.line_range)
                                   * header.min_insn_length;
-    const int64 advance_line = (opcode % header.line_range)
+    const int32 advance_line = (opcode % header.line_range)
                                + header.line_base;
 
     // Check if the lsm passes "pc". If so, mark it as passed.
@@ -687,7 +690,7 @@
     case DW_LNS_advance_line: {
       const int64 advance_line = reader->ReadSignedLEB128(start, &templen);
       oplen += templen;
-      lsm->line_num += advance_line;
+      lsm->line_num += static_cast<int32>(advance_line);
 
       // With gcc 4.2.1, we can get the line_no here for the first time
       // since DW_LNS_advance_line is called after DW_LNE_set_address is
@@ -701,13 +704,13 @@
     case DW_LNS_set_file: {
       const uint64 fileno = reader->ReadUnsignedLEB128(start, &templen);
       oplen += templen;
-      lsm->file_num = fileno;
+      lsm->file_num = static_cast<uint32>(fileno);
     }
       break;
     case DW_LNS_set_column: {
       const uint64 colno = reader->ReadUnsignedLEB128(start, &templen);
       oplen += templen;
-      lsm->column_num = colno;
+      lsm->column_num = static_cast<uint32>(colno);
     }
       break;
     case DW_LNS_negate_stmt: {
@@ -746,7 +749,7 @@
     }
       break;
     case DW_LNS_extended_op: {
-      const size_t extended_op_len = reader->ReadUnsignedLEB128(start,
+      const uint64 extended_op_len = reader->ReadUnsignedLEB128(start,
                                                                 &templen);
       start += templen;
       oplen += templen + extended_op_len;
@@ -788,8 +791,8 @@
           oplen += templen;
 
           if (handler) {
-            handler->DefineFile(filename, -1, dirindex, mod_time,
-                                filelength);
+            handler->DefineFile(filename, -1, static_cast<uint32>(dirindex), 
+                                mod_time, filelength);
           }
         }
           break;
@@ -801,7 +804,6 @@
       // Ignore unknown opcode  silently
       if (header.std_opcode_lengths) {
         for (int i = 0; i < (*header.std_opcode_lengths)[opcode]; i++) {
-          size_t templen;
           reader->ReadUnsignedLEB128(start, &templen);
           start += templen;
           oplen += templen;
@@ -969,7 +971,7 @@
   // computes the address at which a register is saved, not a value.
  private:
   int base_register_;
-  int offset_;
+  long offset_;
 };
 
 // Rule: the value the register had in the caller is the value of
@@ -996,7 +998,7 @@
   void SetOffset(long long offset) { offset_ = offset; }
  private:
   int base_register_;
-  int offset_;
+  long offset_;
 };
 
 // Rule: the register has been saved in another register REGISTER_NUMBER_.
@@ -1938,7 +1940,7 @@
   // If we have a 'z' augmentation string, find the augmentation data and
   // use the augmentation string to parse it.
   if (cie->has_z_augmentation) {
-    size_t data_size = reader_->ReadUnsignedLEB128(cursor, &len);
+    uint64_t data_size = reader_->ReadUnsignedLEB128(cursor, &len);
     if (size_t(cie->end - cursor) < len + data_size)
       return ReportIncomplete(cie);
     cursor += len;
@@ -2058,7 +2060,7 @@
   // If the CIE has a 'z' augmentation string, then augmentation data
   // appears here.
   if (fde->cie->has_z_augmentation) {
-    size_t data_size = reader_->ReadUnsignedLEB128(cursor, &size);
+    uint64_t data_size = reader_->ReadUnsignedLEB128(cursor, &size);
     if (size_t(fde->end - cursor) < size + data_size)
       return ReportIncomplete(fde);
     cursor += size;
diff --git a/src/common/dwarf/dwarf2reader.h b/src/common/dwarf/dwarf2reader.h
index a7a13af..5a25523 100644
--- a/src/common/dwarf/dwarf2reader.h
+++ b/src/common/dwarf/dwarf2reader.h
@@ -242,7 +242,7 @@
   // The abbreviation tells how to read a DWARF2/3 DIE, and consist of a
   // tag and a list of attributes, as well as the data form of each attribute.
   struct Abbrev {
-    uint32 number;
+    uint64 number;
     enum DwarfTag tag;
     bool has_children;
     AttributeList attributes;
diff --git a/src/common/dwarf/dwarf2reader_cfi_unittest.cc b/src/common/dwarf/dwarf2reader_cfi_unittest.cc
index 7b346fe..1a2431c 100644
--- a/src/common/dwarf/dwarf2reader_cfi_unittest.cc
+++ b/src/common/dwarf/dwarf2reader_cfi_unittest.cc
@@ -31,7 +31,8 @@
 
 // dwarf2reader_cfi_unittest.cc: Unit tests for dwarf2reader::CallFrameInfo
 
-#include <cstdlib>
+#include <stdlib.h>
+
 #include <vector>
 
 // The '.eh_frame' format, used by the Linux C++ ABI for exception
@@ -45,9 +46,9 @@
 // interpretation against the test's intentions. Each ELF file is named
 // "cfitest-TEST", where TEST identifies the particular test.
 #ifdef WRITE_ELF
-#include <cstdio>
-#include <cerrno>
-#include <cstring>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
 extern "C" {
 // To compile with WRITE_ELF, you should add the 'include' directory
 // of the binutils, gcc, or gdb source tree to your #include path;
@@ -63,10 +64,10 @@
 #include "google_breakpad/common/breakpad_types.h"
 
 using google_breakpad::CFISection;
-using google_breakpad::TestAssembler::Label;
-using google_breakpad::TestAssembler::kBigEndian;
-using google_breakpad::TestAssembler::kLittleEndian;
-using google_breakpad::TestAssembler::Section;
+using google_breakpad::test_assembler::Label;
+using google_breakpad::test_assembler::kBigEndian;
+using google_breakpad::test_assembler::kLittleEndian;
+using google_breakpad::test_assembler::Section;
 
 using dwarf2reader::DwarfPointerEncoding;
 using dwarf2reader::ENDIANNESS_BIG;
@@ -2315,7 +2316,7 @@
 #ifdef WRITE_ELF
 // See comments at the top of the file mentioning WRITE_ELF for details.
 
-using google_breakpad::TestAssembler::Section;
+using google_breakpad::test_assembler::Section;
 
 struct ELFSectionHeader {
   ELFSectionHeader(unsigned int set_type)
diff --git a/src/common/dwarf/line_state_machine.h b/src/common/dwarf/line_state_machine.h
index 6f9fb72..0ff72ab 100644
--- a/src/common/dwarf/line_state_machine.h
+++ b/src/common/dwarf/line_state_machine.h
@@ -48,7 +48,7 @@
 
   uint32 file_num;
   uint64 address;
-  uint64 line_num;
+  uint32 line_num;
   uint32 column_num;
   bool is_stmt;  // stmt means statement.
   bool basic_block;
diff --git a/src/common/dwarf_cfi_to_module.cc b/src/common/dwarf_cfi_to_module.cc
index 611cecd..ed0b406 100644
--- a/src/common/dwarf_cfi_to_module.cc
+++ b/src/common/dwarf_cfi_to_module.cc
@@ -117,7 +117,7 @@
   // address on entry to the function. So establish an initial .ra
   // rule citing the return address register.
   if (return_address_ < register_names_.size())
-    entry_->initial_rules[".ra"] = register_names_[return_address_];
+    entry_->initial_rules[ra_name_] = register_names_[return_address_];
 
   return true;
 }
@@ -126,11 +126,11 @@
   assert(entry_);
   if (i < 0) {
     assert(i == kCFARegister);
-    return ".cfa";
+    return cfa_name_;
   }
   unsigned reg = i;
   if (reg == return_address_)
-    return ".ra";
+    return ra_name_;
 
   if (0 <= reg && reg < register_names_.size())
     return register_names_[reg];
@@ -144,12 +144,21 @@
 void DwarfCFIToModule::Record(Module::Address address, int reg,
                               const string &rule) {
   assert(entry_);
+
+  // Place the name in our global set of strings, and then use the string
+  // from the set. Even though the assignment looks like a copy, all the
+  // major std::string implementations use reference counting internally,
+  // so the effect is to have all our data structures share copies of rules
+  // whenever possible. Since register names are drawn from a
+  // vector<string>, register names are already shared.
+  string shared_rule = *common_strings_.insert(rule).first;
+
   // Is this one of this entry's initial rules?
   if (address == entry_->address)
-    entry_->initial_rules[RegisterName(reg)] = rule;
+    entry_->initial_rules[RegisterName(reg)] = shared_rule;
   // File it under the appropriate address.
   else
-    entry_->rule_changes[address][RegisterName(reg)] = rule;
+    entry_->rule_changes[address][RegisterName(reg)] = shared_rule;
 }
 
 bool DwarfCFIToModule::UndefinedRule(uint64 address, int reg) {
diff --git a/src/common/dwarf_cfi_to_module.h b/src/common/dwarf_cfi_to_module.h
index 4f4ce0a..d29a796 100644
--- a/src/common/dwarf_cfi_to_module.h
+++ b/src/common/dwarf_cfi_to_module.h
@@ -39,7 +39,10 @@
 #ifndef COMMON_LINUX_DWARF_CFI_TO_MODULE_H
 #define COMMON_LINUX_DWARF_CFI_TO_MODULE_H
 
-#include <cassert>
+#include <assert.h>
+#include <stdio.h>
+
+#include <set>
 #include <string>
 #include <vector>
 
@@ -50,6 +53,7 @@
 
 using dwarf2reader::CallFrameInfo;
 using google_breakpad::Module;
+using std::set;
 using std::string;
 using std::vector;
 
@@ -123,7 +127,8 @@
   DwarfCFIToModule(Module *module, const vector<string> &register_names,
                    Reporter *reporter)
       : module_(module), register_names_(register_names), reporter_(reporter),
-        entry_(NULL), return_address_(-1) { }
+        entry_(NULL), return_address_(-1), cfa_name_(".cfa"), ra_name_(".ra") {
+  }
   virtual ~DwarfCFIToModule() { delete entry_; }
 
   virtual bool Entry(size_t offset, uint64 address, uint64 length,
@@ -167,6 +172,23 @@
 
   // The return address column for that entry.
   unsigned return_address_;
+
+  // The names of the return address and canonical frame address. Putting
+  // these here instead of using string literals allows us to share their
+  // texts in reference-counted std::string implementations (all the
+  // popular ones). Many, many rules cite these strings.
+  string cfa_name_, ra_name_;
+
+  // A set of strings used by this CFI. Before storing a string in one of
+  // our data structures, insert it into this set, and then use the string
+  // from the set.
+  // 
+  // Because std::string uses reference counting internally, simply using
+  // strings from this set, even if passed by value, assigned, or held
+  // directly in structures and containers (map<string, ...>, for example),
+  // causes those strings to share a single instance of each distinct piece
+  // of text.
+  set<string> common_strings_;
 };
 
 } // namespace google_breakpad
diff --git a/src/common/dwarf_cu_to_module.cc b/src/common/dwarf_cu_to_module.cc
index 3ac833f..425fd33 100644
--- a/src/common/dwarf_cu_to_module.cc
+++ b/src/common/dwarf_cu_to_module.cc
@@ -31,15 +31,27 @@
 
 // Implement the DwarfCUToModule class; see dwarf_cu_to_module.h.
 
-#include <algorithm>
-#include <cassert>
+// For <inttypes.h> PRI* macros, before anything else might #include it.
+#ifndef __STDC_FORMAT_MACROS
+#define __STDC_FORMAT_MACROS
+#endif  /* __STDC_FORMAT_MACROS */
 
 #include "common/dwarf_cu_to_module.h"
+
+#include <assert.h>
+#include <inttypes.h>
+
+#include <algorithm>
+#include <set>
+#include <utility>
+
 #include "common/dwarf_line_to_module.h"
 
 namespace google_breakpad {
 
 using std::map;
+using std::pair;
+using std::set;
 using std::vector;
 
 // Data provided by a DWARF specification DIE.
@@ -81,6 +93,17 @@
 // Data global to the DWARF-bearing file that is private to the
 // DWARF-to-Module process.
 struct DwarfCUToModule::FilePrivate {
+  // A set of strings used in this CU. Before storing a string in one of
+  // our data structures, insert it into this set, and then use the string
+  // from the set.
+  // 
+  // Because std::string uses reference counting internally, simply using
+  // strings from this set, even if passed by value, assigned, or held
+  // directly in structures and containers (map<string, ...>, for example),
+  // causes those strings to share a single instance of each distinct piece
+  // of text.
+  set<string> common_strings;
+
   // A map from offsets of DIEs within the .debug_info section to
   // Specifications describing those DIEs. Specification references can
   // cross compilation unit boundaries.
@@ -254,7 +277,17 @@
     enum DwarfForm form,
     const string &data) {
   switch (attr) {
-    case dwarf2reader::DW_AT_name: name_attribute_ = data; break;
+    case dwarf2reader::DW_AT_name: {
+      // Place the name in our global set of strings, and then use the
+      // string from the set. Even though the assignment looks like a copy,
+      // all the major std::string implementations use reference counting
+      // internally, so the effect is to have all our data structures share
+      // copies of strings whenever possible.
+      pair<set<string>::iterator, bool> result =
+          cu_context_->file_context->file_private->common_strings.insert(data);
+      name_attribute_ = *result.first; 
+      break;
+    }
     default: break;
   }
 }
@@ -441,7 +474,7 @@
     default:
       return NULL;
   }
-};
+}
 
 void DwarfCUToModule::WarningReporter::CUHeading() {
   if (printed_cu_header_)
@@ -505,7 +538,7 @@
   if (!uncovered_warnings_enabled_)
     return;
   UncoveredHeading();
-  fprintf(stderr, "    line%s: %s:%d at 0x%llx\n",
+  fprintf(stderr, "    line%s: %s:%d at 0x%" PRIx64 "\n",
           (line.size == 0 ? " (zero-length)" : ""),
           line.file->name.c_str(), line.number, line.address);
 }
@@ -619,6 +652,10 @@
       = cu_context_->file_context->section_map;
   dwarf2reader::SectionMap::const_iterator map_entry
       = section_map.find(".debug_line");
+  // Mac OS X puts DWARF data in sections whose names begin with "__"
+  // instead of ".".
+  if (map_entry == section_map.end())
+    map_entry = section_map.find("__debug_line");
   if (map_entry == section_map.end()) {
     cu_context_->reporter->MissingSection(".debug_line");
     return;
@@ -819,12 +856,12 @@
     // about what result we produce in that case, just as long as we don't
     // hang or crash.
     while (func_it != functions->end()
-           && current >= (*func_it)->address
+           && next_transition >= (*func_it)->address
            && !within(**func_it, next_transition))
       func_it++;
     func = (func_it != functions->end()) ? *func_it : NULL;
     while (line_it != lines_.end()
-           && current >= line_it->address
+           && next_transition >= line_it->address
            && !within(*line_it, next_transition))
       line_it++;
     line = (line_it != lines_.end()) ? &*line_it : NULL;
diff --git a/src/common/dwarf_cu_to_module.h b/src/common/dwarf_cu_to_module.h
index 6f0baea..2b59350 100644
--- a/src/common/dwarf_cu_to_module.h
+++ b/src/common/dwarf_cu_to_module.h
@@ -41,8 +41,6 @@
 
 #include <string>
 
-#include <elf.h>
-#include <link.h>
 #include "common/language.h"
 #include "common/module.h"
 #include "common/dwarf/bytereader.h"
diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc
index e81a8d0..887880d 100644
--- a/src/common/linux/dump_symbols.cc
+++ b/src/common/linux/dump_symbols.cc
@@ -32,26 +32,30 @@
 // dump_symbols.cc: implement google_breakpad::WriteSymbolFile:
 // Find all the debugging info in a file and dump it as a Breakpad symbol file.
 
+#include "common/linux/dump_symbols.h"
+
+#include <assert.h>
 #include <elf.h>
+#include <errno.h>
 #include <fcntl.h>
 #include <link.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #include <sys/mman.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
-#include <cassert>
-#include <cerrno>
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
+#include <set>
 #include <string>
+#include <utility>
+#include <vector>
 
 #include "common/dwarf/bytereader-inl.h"
 #include "common/dwarf/dwarf2diehandler.h"
 #include "common/dwarf_cfi_to_module.h"
 #include "common/dwarf_cu_to_module.h"
 #include "common/dwarf_line_to_module.h"
-#include "common/linux/dump_symbols.h"
 #include "common/linux/file_id.h"
 #include "common/module.h"
 #include "common/stabs_reader.h"
@@ -66,6 +70,64 @@
 using google_breakpad::Module;
 using google_breakpad::StabsToModule;
 
+//
+// FDWrapper
+//
+// Wrapper class to make sure opened file is closed.
+//
+class FDWrapper {
+ public:
+  explicit FDWrapper(int fd) :
+    fd_(fd) {}
+  ~FDWrapper() {
+    if (fd_ != -1)
+      close(fd_);
+  }
+  int get() {
+    return fd_;
+  }
+  int release() {
+    int fd = fd_;
+    fd_ = -1;
+    return fd;
+  }
+ private:
+  int fd_;
+};
+
+//
+// MmapWrapper
+//
+// Wrapper class to make sure mapped regions are unmapped.
+//
+class MmapWrapper {
+ public:
+  MmapWrapper() : is_set_(false) {}
+  ~MmapWrapper() {
+    assert(is_set_);
+    if (base_ != NULL) {
+      assert(size_ > 0);
+      munmap(base_, size_);
+    }
+  }
+  void set(void *mapped_address, size_t mapped_size) {
+    is_set_ = true;
+    base_ = mapped_address;
+    size_ = mapped_size;
+  }
+  void release() {
+    assert(is_set_);
+    base_ = NULL;
+    size_ = 0;
+  }
+
+ private:
+  bool is_set_;
+  void *base_;
+  size_t size_;
+};
+
+
 // Fix offset into virtual address by adding the mapped base into offsets.
 // Make life easier when want to find something by offset.
 static void FixAddress(void *obj_base) {
@@ -78,7 +140,7 @@
     sections[i].sh_offset += base;
 }
 
-// Find the prefered loading address of the binary.
+// Find the preferred loading address of the binary.
 static ElfW(Addr) GetLoadingAddress(const ElfW(Phdr) *program_headers,
                                     int nheader) {
   for (int i = 0; i < nheader; ++i) {
@@ -110,15 +172,22 @@
 
   // Find the end of the section name section, to make sure that
   // comparisons don't run off the end of the section.
-  const char *names_end = 
+  const char *names_end =
     reinterpret_cast<char*>(section_names->sh_offset + section_names->sh_size);
 
   for (int i = 0; i < nsection; ++i) {
     const char *section_name =
       reinterpret_cast<char*>(section_names->sh_offset + sections[i].sh_name);
     if (names_end - section_name >= name_len + 1 &&
-        strcmp(name, section_name) == 0)
+        strcmp(name, section_name) == 0) {
+      if (sections[i].sh_type == SHT_NOBITS) {
+        fprintf(stderr,
+                "Section %s found, but ignored because type=SHT_NOBITS.\n",
+                name);
+        return NULL;
+      }
       return sections + i;
+    }
   }
   return NULL;
 }
@@ -126,18 +195,8 @@
 static bool LoadStabs(const ElfW(Ehdr) *elf_header,
                       const ElfW(Shdr) *stab_section,
                       const ElfW(Shdr) *stabstr_section,
+                      const bool big_endian,
                       Module *module) {
-  // Figure out what endianness this file is.
-  bool big_endian;
-  if (elf_header->e_ident[EI_DATA] == ELFDATA2LSB)
-    big_endian = false;
-  else if (elf_header->e_ident[EI_DATA] == ELFDATA2MSB)
-    big_endian = true;
-  else {
-    fprintf(stderr, "bad data encoding in ELF header: %d\n",
-            elf_header->e_ident[EI_DATA]);
-    return false;
-  }
   // A callback object to handle data from the STABS reader.
   StabsToModule handler(module);
   // Find the addresses of the STABS data, and create a STABS reader object.
@@ -162,7 +221,7 @@
 class DumperLineToModule: public DwarfCUToModule::LineToModuleFunctor {
  public:
   // Create a line-to-module converter using BYTE_READER.
-  DumperLineToModule(dwarf2reader::ByteReader *byte_reader)
+  explicit DumperLineToModule(dwarf2reader::ByteReader *byte_reader)
       : byte_reader_(byte_reader) { }
   void operator()(const char *program, uint64 length,
                   Module *module, vector<Module::Line> *lines) {
@@ -176,18 +235,10 @@
 
 static bool LoadDwarf(const string &dwarf_filename,
                       const ElfW(Ehdr) *elf_header,
+                      const bool big_endian,
                       Module *module) {
-  // Figure out what endianness this file is.
-  dwarf2reader::Endianness endianness;
-  if (elf_header->e_ident[EI_DATA] == ELFDATA2LSB)
-    endianness = dwarf2reader::ENDIANNESS_LITTLE;
-  else if (elf_header->e_ident[EI_DATA] == ELFDATA2MSB)
-    endianness = dwarf2reader::ENDIANNESS_BIG;
-  else {
-    fprintf(stderr, "%s: bad data encoding in ELF header: %d\n",
-            dwarf_filename.c_str(), elf_header->e_ident[EI_DATA]);
-    return false;
-  }
+  const dwarf2reader::Endianness endianness = big_endian ?
+      dwarf2reader::ENDIANNESS_BIG : dwarf2reader::ENDIANNESS_LITTLE;
   dwarf2reader::ByteReader byte_reader(endianness);
 
   // Construct a context for this file.
@@ -239,8 +290,7 @@
 // success, or false if we don't recognize HEADER's machine
 // architecture.
 static bool DwarfCFIRegisterNames(const ElfW(Ehdr) *elf_header,
-                                  vector<string> *register_names)
-{
+                                  vector<string> *register_names) {
   switch (elf_header->e_machine) {
     case EM_386:
       *register_names = DwarfCFIToModule::RegisterNames::I386();
@@ -260,9 +310,10 @@
                          const ElfW(Ehdr) *elf_header,
                          const char *section_name,
                          const ElfW(Shdr) *section,
-                         bool eh_frame,
+                         const bool eh_frame,
                          const ElfW(Shdr) *got_section,
                          const ElfW(Shdr) *text_section,
+                         const bool big_endian,
                          Module *module) {
   // Find the appropriate set of register names for this file's
   // architecture.
@@ -274,17 +325,8 @@
     return false;
   }
 
-  // Figure out what endianness this file is.
-  dwarf2reader::Endianness endianness;
-  if (elf_header->e_ident[EI_DATA] == ELFDATA2LSB)
-    endianness = dwarf2reader::ENDIANNESS_LITTLE;
-  else if (elf_header->e_ident[EI_DATA] == ELFDATA2MSB)
-    endianness = dwarf2reader::ENDIANNESS_BIG;
-  else {
-    fprintf(stderr, "%s: bad data encoding in ELF header: %d\n",
-            dwarf_filename.c_str(), elf_header->e_ident[EI_DATA]);
-    return false;
-  }
+  const dwarf2reader::Endianness endianness = big_endian ?
+      dwarf2reader::ENDIANNESS_BIG : dwarf2reader::ENDIANNESS_LITTLE;
 
   // Find the call frame information and its size.
   const char *cfi = reinterpret_cast<const char *>(section->sh_offset);
@@ -313,7 +355,7 @@
     byte_reader.SetDataBase(got_section->sh_addr);
   if (text_section)
     byte_reader.SetTextBase(text_section->sh_addr);
-    
+
   dwarf2reader::CallFrameInfo::Reporter dwarf_reporter(dwarf_filename,
                                                        section_name);
   dwarf2reader::CallFrameInfo parser(cfi, cfi_size,
@@ -323,146 +365,264 @@
   return true;
 }
 
-static bool LoadSymbols(const std::string &debug_file,
-                        ElfW(Ehdr) *debug_header,
-                        const std::string &text_file,
-                        ElfW(Ehdr) *text_header,
-                        Module *module) {
-  // Translate all offsets in section headers into address.
-  FixAddress(text_header);
-  FixAddress(debug_header);
-  ElfW(Addr) loading_addr = GetLoadingAddress(
-      reinterpret_cast<ElfW(Phdr) *>(text_header->e_phoff),
-      text_header->e_phnum);
-  module->SetLoadAddress(loading_addr);
-
-  const ElfW(Shdr) *debug_sections =
-      reinterpret_cast<ElfW(Shdr) *>(debug_header->e_shoff);
-  const ElfW(Shdr) *debug_section_names = debug_sections +
-      debug_header->e_shstrndx;
-  bool found_debug_info_section = false;
-
-  // Look for STABS debugging information, and load it if present.
-  const ElfW(Shdr) *stab_section
-      = FindSectionByName(".stab", debug_sections, debug_section_names,
-                          debug_header->e_shnum);
-  if (stab_section) {
-    const ElfW(Shdr) *stabstr_section = stab_section->sh_link + debug_sections;
-    if (stabstr_section) {
-      found_debug_info_section = true;
-      if (!LoadStabs(debug_header, stab_section, stabstr_section, module))
-        fprintf(stderr, "%s: \".stab\" section found, but failed to load STABS"
-                " debugging information\n", debug_file.c_str());
-    }
+bool LoadELF(const std::string &obj_file, MmapWrapper* map_wrapper,
+             ElfW(Ehdr) **elf_header) {
+  int obj_fd = open(obj_file.c_str(), O_RDONLY);
+  if (obj_fd < 0) {
+    fprintf(stderr, "Failed to open ELF file '%s': %s\n",
+            obj_file.c_str(), strerror(errno));
+    return false;
   }
-
-  // Look for DWARF debugging information, and load it if present.
-  const ElfW(Shdr) *dwarf_section
-      = FindSectionByName(".debug_info", debug_sections, debug_section_names,
-                          debug_header->e_shnum);
-  if (dwarf_section) {
-    found_debug_info_section = true;
-    if (!LoadDwarf(debug_file, debug_header, module))
-      fprintf(stderr, "%s: \".debug_info\" section found, but failed to load "
-              "DWARF debugging information\n", debug_file.c_str());
+  FDWrapper obj_fd_wrapper(obj_fd);
+  struct stat st;
+  if (fstat(obj_fd, &st) != 0 && st.st_size <= 0) {
+    fprintf(stderr, "Unable to fstat ELF file '%s': %s\n",
+            obj_file.c_str(), strerror(errno));
+    return false;
   }
-
-  // Dwarf Call Frame Information (CFI) is actually independent from
-  // the other DWARF debugging information, and can be used alone.
-  const ElfW(Shdr) *dwarf_cfi_section =
-      FindSectionByName(".debug_frame", debug_sections, debug_section_names,
-                          debug_header->e_shnum);
-  if (dwarf_cfi_section) {
-    // Ignore the return value of this function; even without call frame
-    // information, the other debugging information could be perfectly
-    // useful.
-    LoadDwarfCFI(debug_file, debug_header, ".debug_frame",
-                 dwarf_cfi_section, false, 0, 0, module);
+  void *obj_base = mmap(NULL, st.st_size,
+                        PROT_READ | PROT_WRITE, MAP_PRIVATE, obj_fd, 0);
+  if (obj_base == MAP_FAILED) {
+    fprintf(stderr, "Failed to mmap ELF file '%s': %s\n",
+            obj_file.c_str(), strerror(errno));
+    return false;
   }
-
-  // Linux C++ exception handling information can also provide
-  // unwinding data.
-  const ElfW(Shdr) *text_sections =
-      reinterpret_cast<ElfW(Shdr) *>(text_header->e_shoff);
-  const ElfW(Shdr) *text_section_names = text_sections +
-      text_header->e_shstrndx;
-  const ElfW(Shdr) *eh_frame_section =
-      FindSectionByName(".eh_frame", text_sections, text_section_names,
-                        text_header->e_shnum);
-  if (eh_frame_section) {
-    // Pointers in .eh_frame data may be relative to the base addresses of
-    // certain sections. Provide those sections if present.
-    const ElfW(Shdr) *got_section =
-      FindSectionByName(".got", text_sections,
-                        text_section_names, text_header->e_shnum);
-    const ElfW(Shdr) *text_section =
-      FindSectionByName(".text", text_sections, text_section_names,
-                        text_header->e_shnum);
-    // As above, ignore the return value of this function.
-    LoadDwarfCFI(text_file, text_header, ".eh_frame",
-                 eh_frame_section, true, got_section, text_section, module);
-  }
-
-  if (!found_debug_info_section) {
-    fprintf(stderr, "%s: file contains no debugging information"
-            " (no \".stab\" or \".debug_info\" sections)\n",
-            debug_file.c_str());
+  map_wrapper->set(obj_base, st.st_size);
+  *elf_header = reinterpret_cast<ElfW(Ehdr) *>(obj_base);
+  if (!IsValidElf(*elf_header)) {
+    fprintf(stderr, "Not a valid ELF file: %s\n", obj_file.c_str());
     return false;
   }
   return true;
 }
 
+// Get the endianness of ELF_HEADER. If it's invalid, return false.
+bool ElfEndianness(const ElfW(Ehdr) *elf_header, bool *big_endian) {
+  if (elf_header->e_ident[EI_DATA] == ELFDATA2LSB) {
+    *big_endian = false;
+    return true;
+  }
+  if (elf_header->e_ident[EI_DATA] == ELFDATA2MSB) {
+    *big_endian = true;
+    return true;
+  }
+
+  fprintf(stderr, "bad data encoding in ELF header: %d\n",
+          elf_header->e_ident[EI_DATA]);
+  return false;
+}
+
+// Read the .gnu_debuglink and get the debug file name. If anything goes
+// wrong, return an empty string.
+static std::string ReadDebugLink(const ElfW(Shdr) *debuglink_section,
+                                 const std::string &obj_file,
+                                 const std::string &debug_dir) {
+  char *debuglink = reinterpret_cast<char *>(debuglink_section->sh_offset);
+  size_t debuglink_len = strlen(debuglink) + 5;  // '\0' + CRC32.
+  debuglink_len = 4 * ((debuglink_len + 3) / 4);  // Round to nearest 4 bytes.
+
+  // Sanity check.
+  if (debuglink_len != debuglink_section->sh_size) {
+    fprintf(stderr, "Mismatched .gnu_debuglink string / section size: "
+            "%zx %zx\n", debuglink_len, debuglink_section->sh_size);
+    return "";
+  }
+
+  std::string debuglink_path = debug_dir + "/" + debuglink;
+  int debuglink_fd = open(debuglink_path.c_str(), O_RDONLY);
+  if (debuglink_fd < 0) {
+    fprintf(stderr, "Failed to open debug ELF file '%s' for '%s': %s\n",
+            debuglink_path.c_str(), obj_file.c_str(), strerror(errno));
+    return "";
+  }
+  FDWrapper debuglink_fd_wrapper(debuglink_fd);
+  // TODO(thestig) check the CRC-32 at the end of the .gnu_debuglink
+  // section.
+
+  return debuglink_path;
+}
+
 //
-// FDWrapper
+// LoadSymbolsInfo
 //
-// Wrapper class to make sure opened file is closed.
+// Holds the state between the two calls to LoadSymbols() in case we have to
+// follow the .gnu_debuglink section and load debug information from a
+// different file.
 //
-class FDWrapper {
+class LoadSymbolsInfo {
  public:
-  explicit FDWrapper(int fd) :
-    fd_(fd) {
+  explicit LoadSymbolsInfo(const std::string &dbg_dir) :
+    debug_dir_(dbg_dir),
+    has_loading_addr_(false) {}
+
+  // Keeps track of which sections have been loaded so we don't accidentally
+  // load it twice from two different files.
+  void LoadedSection(const std::string &section) {
+    if (loaded_sections_.count(section) == 0) {
+      loaded_sections_.insert(section);
+    } else {
+      fprintf(stderr, "Section %s has already been loaded.\n",
+              section.c_str());
     }
-  ~FDWrapper() {
-    if (fd_ != -1)
-      close(fd_);
   }
-  int get() {
-    return fd_;
+
+  // We expect the ELF file and linked debug file to have the same preferred
+  // loading address.
+  void set_loading_addr(ElfW(Addr) addr, const std::string &filename) {
+    if (!has_loading_addr_) {
+      loading_addr_ = addr;
+      loaded_file_ = filename;
+      return;
+    }
+
+    if (addr != loading_addr_) {
+      fprintf(stderr,
+              "ELF file '%s' and debug ELF file '%s' "
+              "have different load addresses.\n",
+              loaded_file_.c_str(), filename.c_str());
+      assert(false);
+    }
   }
-  int release() {
-    int fd = fd_;
-    fd_ = -1;
-    return fd;
+
+  // Setters and getters
+  const std::string &debug_dir() const {
+    return debug_dir_;
   }
+
+  std::string debuglink_file() const {
+    return debuglink_file_;
+  }
+  void set_debuglink_file(std::string file) {
+    debuglink_file_ = file;
+  }
+
  private:
-  int fd_;
+  const std::string &debug_dir_;  // Directory with the debug ELF file.
+
+  std::string debuglink_file_;  // Full path to the debug ELF file.
+
+  bool has_loading_addr_;  // Indicate if LOADING_ADDR_ is valid.
+
+  ElfW(Addr) loading_addr_;  // Saves the preferred loading address from the
+                             // first call to LoadSymbols().
+
+  std::string loaded_file_;  // Name of the file loaded from the first call to
+                             // LoadSymbols().
+
+  std::set<std::string> loaded_sections_;  // Tracks the Loaded ELF sections
+                                           // between calls to LoadSymbols().
 };
 
-//
-// MmapWrapper
-//
-// Wrapper class to make sure mapped regions are unmapped.
-//
-class MmapWrapper {
-  public:
-   MmapWrapper(void *mapped_address, size_t mapped_size) :
-     base_(mapped_address), size_(mapped_size) {
-   }
-   ~MmapWrapper() {
-     if (base_ != NULL) {
-       assert(size_ > 0);
-       munmap(base_, size_);
-     }
-   }
-   void release() {
-     base_ = NULL;
-     size_ = 0;
-   }
+static bool LoadSymbols(const std::string &obj_file,
+                        const bool big_endian,
+                        ElfW(Ehdr) *elf_header,
+                        const bool read_gnu_debug_link,
+                        LoadSymbolsInfo *info,
+                        Module *module) {
+  // Translate all offsets in section headers into address.
+  FixAddress(elf_header);
+  ElfW(Addr) loading_addr = GetLoadingAddress(
+      reinterpret_cast<ElfW(Phdr) *>(elf_header->e_phoff),
+      elf_header->e_phnum);
+  module->SetLoadAddress(loading_addr);
+  info->set_loading_addr(loading_addr, obj_file);
 
-  private:
-   void *base_;
-   size_t size_;
-};
+  const ElfW(Shdr) *sections =
+      reinterpret_cast<ElfW(Shdr) *>(elf_header->e_shoff);
+  const ElfW(Shdr) *section_names = sections + elf_header->e_shstrndx;
+  bool found_debug_info_section = false;
+
+  // Look for STABS debugging information, and load it if present.
+  const ElfW(Shdr) *stab_section
+      = FindSectionByName(".stab", sections, section_names,
+                          elf_header->e_shnum);
+  if (stab_section) {
+    const ElfW(Shdr) *stabstr_section = stab_section->sh_link + sections;
+    if (stabstr_section) {
+      found_debug_info_section = true;
+      info->LoadedSection(".stab");
+      if (!LoadStabs(elf_header, stab_section, stabstr_section, big_endian,
+                     module)) {
+        fprintf(stderr, "%s: \".stab\" section found, but failed to load STABS"
+                " debugging information\n", obj_file.c_str());
+      }
+    }
+  }
+
+  // Look for DWARF debugging information, and load it if present.
+  const ElfW(Shdr) *dwarf_section
+      = FindSectionByName(".debug_info", sections, section_names,
+                          elf_header->e_shnum);
+  if (dwarf_section) {
+    found_debug_info_section = true;
+    info->LoadedSection(".debug_info");
+    if (!LoadDwarf(obj_file, elf_header, big_endian, module))
+      fprintf(stderr, "%s: \".debug_info\" section found, but failed to load "
+              "DWARF debugging information\n", obj_file.c_str());
+  }
+
+  // Dwarf Call Frame Information (CFI) is actually independent from
+  // the other DWARF debugging information, and can be used alone.
+  const ElfW(Shdr) *dwarf_cfi_section =
+      FindSectionByName(".debug_frame", sections, section_names,
+                          elf_header->e_shnum);
+  if (dwarf_cfi_section) {
+    // Ignore the return value of this function; even without call frame
+    // information, the other debugging information could be perfectly
+    // useful.
+    info->LoadedSection(".debug_frame");
+    LoadDwarfCFI(obj_file, elf_header, ".debug_frame",
+                 dwarf_cfi_section, false, 0, 0, big_endian, module);
+  }
+
+  // Linux C++ exception handling information can also provide
+  // unwinding data.
+  const ElfW(Shdr) *eh_frame_section =
+      FindSectionByName(".eh_frame", sections, section_names,
+                        elf_header->e_shnum);
+  if (eh_frame_section) {
+    // Pointers in .eh_frame data may be relative to the base addresses of
+    // certain sections. Provide those sections if present.
+    const ElfW(Shdr) *got_section =
+      FindSectionByName(".got", sections, section_names, elf_header->e_shnum);
+    const ElfW(Shdr) *text_section =
+      FindSectionByName(".text", sections, section_names,
+                        elf_header->e_shnum);
+    info->LoadedSection(".eh_frame");
+    // As above, ignore the return value of this function.
+    LoadDwarfCFI(obj_file, elf_header, ".eh_frame", eh_frame_section, true,
+                 got_section, text_section, big_endian, module);
+  }
+
+  if (!found_debug_info_section) {
+    fprintf(stderr, "%s: file contains no debugging information"
+            " (no \".stab\" or \".debug_info\" sections)\n",
+            obj_file.c_str());
+
+    // Failed, but maybe we can find a .gnu_debuglink section?
+    if (read_gnu_debug_link) {
+      const ElfW(Shdr) *gnu_debuglink_section
+          = FindSectionByName(".gnu_debuglink", sections, section_names,
+                              elf_header->e_shnum);
+      if (gnu_debuglink_section) {
+        if (!info->debug_dir().empty()) {
+          std::string debuglink_file =
+              ReadDebugLink(gnu_debuglink_section, obj_file, info->debug_dir());
+          info->set_debuglink_file(debuglink_file);
+        } else {
+          fprintf(stderr, ".gnu_debuglink section found in '%s', "
+                  "but no debug path specified.\n", obj_file.c_str());
+        }
+      } else {
+        fprintf(stderr, "%s does not contain a .gnu_debuglink section.\n",
+                obj_file.c_str());
+      }
+    }
+    return false;
+  }
+
+  return true;
+}
 
 // Return the breakpad symbol file identifier for the architecture of
 // ELF_HEADER.
@@ -512,87 +672,83 @@
   return base;
 }
 
-bool MapElf(const std::string &obj_file,
-            void **base,
-            off_t *size) {
-  int obj_fd = open(obj_file.c_str(), O_RDONLY);
-  if (obj_fd < 0) {
-    fprintf(stderr, "Failed to open ELF file '%s': %s\n",
-            obj_file.c_str(), strerror(errno));
-    return false;
-  }
-  FDWrapper obj_fd_wrapper(obj_fd);
-  struct stat st;
-  if (fstat(obj_fd, &st) != 0 && st.st_size <= 0) {
-    fprintf(stderr, "Unable to fstat ELF file '%s': %s\n",
-            obj_file.c_str(), strerror(errno));
-    return false;
-  }
-  void *obj_base = mmap(NULL, st.st_size,
-                        PROT_READ | PROT_WRITE, MAP_PRIVATE, obj_fd, 0);
-  if (obj_base == MAP_FAILED) {
-    fprintf(stderr, "Failed to mmap ELF file '%s': %s\n",
-            obj_file.c_str(), strerror(errno));
-    return false;
-  }
-  MmapWrapper map_wrapper(obj_base, st.st_size);
-  ElfW(Ehdr) *elf_header = reinterpret_cast<ElfW(Ehdr) *>(obj_base);
-  if (!IsValidElf(elf_header)) {
-    fprintf(stderr, "Not a valid ELF file: %s\n", obj_file.c_str());
-    return false;
-  }
-  map_wrapper.release();
-  *base = obj_base;
-  *size = st.st_size;
-  return true;
-}
-
 }  // namespace
 
 namespace google_breakpad {
 
-bool WriteSymbolFile(const std::string &debug_file,
-                     const std::string &text_file,
-                     FILE *sym_file) {
-  void *text_base;
-  off_t text_size;
-  if (!MapElf(text_file, &text_base, &text_size)) {
+bool WriteSymbolFile(const std::string &obj_file,
+                     const std::string &debug_dir, FILE *sym_file) {
+  MmapWrapper map_wrapper;
+  ElfW(Ehdr) *elf_header = NULL;
+  if (!LoadELF(obj_file, &map_wrapper, &elf_header))
     return false;
-  }
-  MmapWrapper map_wrapper(text_base, text_size);
-  ElfW(Ehdr) *text_header = reinterpret_cast<ElfW(Ehdr) *>(text_base);
 
   unsigned char identifier[16];
-  google_breakpad::FileID file_id(text_file.c_str());
-  if (!file_id.ElfFileIdentifier(identifier)) {
+  google_breakpad::FileID file_id(obj_file.c_str());
+  if (!file_id.ElfFileIdentifierFromMappedFile(elf_header, identifier)) {
     fprintf(stderr, "%s: unable to generate file identifier\n",
-            text_file.c_str());
+            obj_file.c_str());
     return false;
   }
 
-  const char *architecture = ElfArchitecture(text_header);
+  const char *architecture = ElfArchitecture(elf_header);
   if (!architecture) {
     fprintf(stderr, "%s: unrecognized ELF machine architecture: %d\n",
-            text_file.c_str(), text_header->e_machine);
+            obj_file.c_str(), elf_header->e_machine);
     return false;
   }
 
-  std::string name = BaseFileName(text_file);
+  // Figure out what endianness this file is.
+  bool big_endian;
+  if (!ElfEndianness(elf_header, &big_endian))
+    return false;
+
+  std::string name = BaseFileName(obj_file);
   std::string os = "Linux";
   std::string id = FormatIdentifier(identifier);
 
+  LoadSymbolsInfo info(debug_dir);
   Module module(name, os, architecture, id);
+  if (!LoadSymbols(obj_file, big_endian, elf_header, true, &info, &module)) {
+    const std::string debuglink_file = info.debuglink_file();
+    if (debuglink_file.empty())
+      return false;
 
-  off_t debug_size;
-  void *debug_base;
-  if (!MapElf(debug_file, &debug_base, &debug_size)) {
-    return false;
+    // Load debuglink ELF file.
+    fprintf(stderr, "Found debugging info in %s\n", debuglink_file.c_str());
+    MmapWrapper debug_map_wrapper;
+    ElfW(Ehdr) *debug_elf_header = NULL;
+    if (!LoadELF(debuglink_file, &debug_map_wrapper, &debug_elf_header))
+      return false;
+    // Sanity checks to make sure everything matches up.
+    const char *debug_architecture = ElfArchitecture(debug_elf_header);
+    if (!debug_architecture) {
+      fprintf(stderr, "%s: unrecognized ELF machine architecture: %d\n",
+              debuglink_file.c_str(), debug_elf_header->e_machine);
+      return false;
+    }
+    if (strcmp(architecture, debug_architecture)) {
+      fprintf(stderr, "%s with ELF machine architecture %s does not match "
+              "%s with ELF architecture %s\n",
+              debuglink_file.c_str(), debug_architecture,
+              obj_file.c_str(), architecture);
+      return false;
+    }
+
+    bool debug_big_endian;
+    if (!ElfEndianness(debug_elf_header, &debug_big_endian))
+      return false;
+    if (debug_big_endian != big_endian) {
+      fprintf(stderr, "%s and %s does not match in endianness\n",
+              obj_file.c_str(), debuglink_file.c_str());
+      return false;
+    }
+
+    if (!LoadSymbols(debuglink_file, debug_big_endian, debug_elf_header,
+                     false, &info, &module)) {
+      return false;
+    }
   }
-  MmapWrapper debug_map_wrapper(debug_base, debug_size);
-  ElfW(Ehdr) *debug_header = reinterpret_cast<ElfW(Ehdr) *>(debug_base);
-
-  if (!LoadSymbols(debug_file, debug_header, text_file, text_header, &module))
-    return false;
   if (!module.Write(sym_file))
     return false;
 
diff --git a/src/common/linux/dump_symbols.h b/src/common/linux/dump_symbols.h
index 351ada0..e1a930a 100644
--- a/src/common/linux/dump_symbols.h
+++ b/src/common/linux/dump_symbols.h
@@ -35,20 +35,19 @@
 #ifndef COMMON_LINUX_DUMP_SYMBOLS_H__
 #define COMMON_LINUX_DUMP_SYMBOLS_H__
 
+#include <stdio.h>
+
 #include <string>
-#include <cstdio>
 
 namespace google_breakpad {
 
-// Find all the debugging information in DEBUG_FILE, an ELF file
-// and consult TEXT_FILE, an ELF executable or shared library with target
-// resident code/data, and write it to SYM_FILE in the Breakpad symbol
-// file format.  DEBUG_FILE and TEXT_FILE should be set to the same
-// path if a single file has both debug information and target resident
-// code/data.
-bool WriteSymbolFile(const std::string &debug_file,
-                     const std::string &text_file,
-                     FILE *sym_file);
+// Find all the debugging information in OBJ_FILE, an ELF executable
+// or shared library, and write it to SYM_FILE in the Breakpad symbol
+// file format.
+// If OBJ_FILE has been stripped but contains a .gnu_debuglink section,
+// then look for the debug file in DEBUG_DIR.
+bool WriteSymbolFile(const std::string &obj_file,
+                     const std::string &debug_dir, FILE *sym_file);
 
 }  // namespace google_breakpad
 
diff --git a/src/common/linux/file_id.cc b/src/common/linux/file_id.cc
index 8fae273..2227c83 100644
--- a/src/common/linux/file_id.cc
+++ b/src/common/linux/file_id.cc
@@ -33,20 +33,26 @@
 //
 
 #include "common/linux/file_id.h"
-#include "common/linux/linux_libc_support.h"
-#include "common/linux/linux_syscall_support.h"
 
 #include <arpa/inet.h>
+#include <assert.h>
 #include <elf.h>
 #include <fcntl.h>
+#if defined(__ANDROID__)
+#include "client/linux/android_link.h"
+#else
 #include <link.h>
+#endif
+#include <stdio.h>
 #include <string.h>
 #include <sys/mman.h>
+#include <sys/stat.h>
 #include <unistd.h>
 
 #include <algorithm>
-#include <cassert>
-#include <cstdio>
+
+#include "common/linux/linux_libc_support.h"
+#include "third_party/lss/linux_syscall_support.h"
 
 namespace google_breakpad {
 
@@ -54,37 +60,44 @@
   strncpy(path_, path, sizeof(path_));
 }
 
-// These two functions are also used inside the crashed process, so be safe
+struct ElfClass32 {
+  typedef Elf32_Ehdr Ehdr;
+  typedef Elf32_Shdr Shdr;
+  static const int kClass = ELFCLASS32;
+};
+
+struct ElfClass64 {
+  typedef Elf64_Ehdr Ehdr;
+  typedef Elf64_Shdr Shdr;
+  static const int kClass = ELFCLASS64;
+};
+
+// These three functions are also used inside the crashed process, so be safe
 // and use the syscall/libc wrappers instead of direct syscalls or libc.
-  static bool FindElfTextSection(const void *elf_mapped_base,
-                                 const void **text_start,
-                                 int *text_size) {
-  assert(elf_mapped_base);
+template<typename ElfClass>
+static void FindElfClassTextSection(const char *elf_base,
+                                    const void **text_start,
+                                    int *text_size) {
+  typedef typename ElfClass::Ehdr Ehdr;
+  typedef typename ElfClass::Shdr Shdr;
+
+  assert(elf_base);
   assert(text_start);
   assert(text_size);
 
-  const char* elf_base =
-    static_cast<const char*>(elf_mapped_base);
-  const ElfW(Ehdr)* elf_header =
-    reinterpret_cast<const ElfW(Ehdr)*>(elf_base);
-  if (my_strncmp(elf_base, ELFMAG, SELFMAG) != 0)
-    return false;
-#if __ELF_NATIVE_CLASS == 32
-#define ELFCLASS ELFCLASS32
-#else
-#define ELFCLASS ELFCLASS64
-#endif
-  //TODO: support dumping 32-bit binaries from a 64-bit dump_syms?
-  if (elf_header->e_ident[EI_CLASS] != ELFCLASS)
-    return false;
-  *text_start = NULL;
-  *text_size = 0;
-  const ElfW(Shdr)* sections =
-    reinterpret_cast<const ElfW(Shdr)*>(elf_base + elf_header->e_shoff);
+  assert(my_strncmp(elf_base, ELFMAG, SELFMAG) == 0);
+
   const char* text_section_name = ".text";
   int name_len = my_strlen(text_section_name);
-  const ElfW(Shdr)* string_section = sections + elf_header->e_shstrndx;
-  const ElfW(Shdr)* text_section = NULL;
+
+  const Ehdr* elf_header = reinterpret_cast<const Ehdr*>(elf_base);
+  assert(elf_header->e_ident[EI_CLASS] == ElfClass::kClass);
+
+  const Shdr* sections =
+      reinterpret_cast<const Shdr*>(elf_base + elf_header->e_shoff);
+  const Shdr* string_section = sections + elf_header->e_shstrndx;
+
+  const Shdr* text_section = NULL;
   for (int i = 0; i < elf_header->e_shnum; ++i) {
     if (sections[i].sh_type == SHT_PROGBITS) {
       const char* section_name = (char*)(elf_base +
@@ -100,6 +113,30 @@
     *text_start = elf_base + text_section->sh_offset;
     *text_size = text_section->sh_size;
   }
+}
+
+static bool FindElfTextSection(const void *elf_mapped_base,
+                               const void **text_start,
+                               int *text_size) {
+  assert(elf_mapped_base);
+  assert(text_start);
+  assert(text_size);
+
+  const char* elf_base =
+    static_cast<const char*>(elf_mapped_base);
+  const ElfW(Ehdr)* elf_header =
+    reinterpret_cast<const ElfW(Ehdr)*>(elf_base);
+  if (my_strncmp(elf_base, ELFMAG, SELFMAG) != 0)
+    return false;
+
+  if (elf_header->e_ident[EI_CLASS] == ELFCLASS32) {
+    FindElfClassTextSection<ElfClass32>(elf_base, text_start, text_size);
+  } else if (elf_header->e_ident[EI_CLASS] == ELFCLASS64) {
+    FindElfClassTextSection<ElfClass64>(elf_base, text_start, text_size);
+  } else {
+    return false;
+  }
+
   return true;
 }
 
diff --git a/src/common/linux/file_id_unittest.cc b/src/common/linux/file_id_unittest.cc
index e15d39f..f5298b1 100644
--- a/src/common/linux/file_id_unittest.cc
+++ b/src/common/linux/file_id_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2009, Google Inc.
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -29,6 +29,7 @@
 
 // Unit tests for FileID
 
+#include <elf.h>
 #include <stdlib.h>
 
 #include "common/linux/file_id.h"
@@ -36,7 +37,6 @@
 
 using namespace google_breakpad;
 
-
 namespace {
 typedef testing::Test FileIDTest;
 }
@@ -74,3 +74,70 @@
   EXPECT_STREQ(identifier_string1, identifier_string2);
   unlink(templ);
 }
+
+struct ElfClass32 {
+  typedef Elf32_Ehdr Ehdr;
+  typedef Elf32_Shdr Shdr;
+  static const int kClass = ELFCLASS32;
+};
+
+struct ElfClass64 {
+  typedef Elf64_Ehdr Ehdr;
+  typedef Elf64_Shdr Shdr;
+  static const int kClass = ELFCLASS64;
+};
+
+template<typename ElfClass>
+struct ElfishElf {
+  static const size_t kTextSectionSize = 128;
+  typedef typename ElfClass::Ehdr Ehdr;
+  typedef typename ElfClass::Shdr Shdr;
+
+  Ehdr elf_header;
+  Shdr text_header;
+  Shdr string_header;
+  char text_section[kTextSectionSize];
+  char string_section[8];
+
+  static void Populate(ElfishElf* elf) {
+    memset(elf, 0, sizeof(ElfishElf));
+    memcpy(elf, ELFMAG, SELFMAG);
+    elf->elf_header.e_ident[EI_CLASS] = ElfClass::kClass;
+    elf->elf_header.e_shoff = offsetof(ElfishElf, text_header);
+    elf->elf_header.e_shnum = 2;
+    elf->elf_header.e_shstrndx = 1;
+    elf->text_header.sh_name = 0;
+    elf->text_header.sh_type = SHT_PROGBITS;
+    elf->text_header.sh_offset = offsetof(ElfishElf, text_section);
+    elf->text_header.sh_size = kTextSectionSize;
+    for (size_t i = 0; i < kTextSectionSize; ++i) {
+      elf->text_section[i] = i * 3;
+    }
+    elf->string_header.sh_offset = offsetof(ElfishElf, string_section);
+    strcpy(elf->string_section, ".text");
+  }
+};
+
+TEST(FileIDTest, ElfClass) {
+  uint8_t identifier[sizeof(MDGUID)];
+  const char expected_identifier_string[] =
+      "80808080-8080-0000-0000-008080808080";
+  char identifier_string[sizeof(expected_identifier_string)];
+
+  ElfishElf<ElfClass32> elf32;
+  ElfishElf<ElfClass32>::Populate(&elf32);
+  EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(&elf32, identifier));
+  FileID::ConvertIdentifierToString(identifier, identifier_string,
+                                    sizeof(identifier_string));
+  EXPECT_STREQ(expected_identifier_string, identifier_string);
+
+  memset(identifier, 0, sizeof(identifier));
+  memset(identifier_string, 0, sizeof(identifier_string));
+
+  ElfishElf<ElfClass64> elf64;
+  ElfishElf<ElfClass64>::Populate(&elf64);
+  EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(&elf64, identifier));
+  FileID::ConvertIdentifierToString(identifier, identifier_string,
+                                    sizeof(identifier_string));
+  EXPECT_STREQ(expected_identifier_string, identifier_string);
+}
diff --git a/src/common/linux/google_crashdump_uploader.cc b/src/common/linux/google_crashdump_uploader.cc
index f47a8e5..b739a6f 100644
--- a/src/common/linux/google_crashdump_uploader.cc
+++ b/src/common/linux/google_crashdump_uploader.cc
@@ -30,12 +30,15 @@
 
 #include "common/linux/google_crashdump_uploader.h"
 #include "common/linux/libcurl_wrapper.h"
-#include "third_party/linux/include/glog/logging.h"
 
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
+#include <iostream>
+
+using std::string;
+
 namespace google_breakpad {
 
 GoogleCrashdumpUploader::GoogleCrashdumpUploader(const std::string& product,
@@ -115,21 +118,21 @@
   proxy_host_ = proxy_host;
   proxy_userpassword_ = proxy_userpassword;
   minidump_pathname_ = minidump_pathname;
-  LOG(INFO) << "Uploader initializing";
-  LOG(INFO) << "\tProduct: " << product_;
-  LOG(INFO) << "\tVersion: " << version_;
-  LOG(INFO) << "\tGUID: " << guid_;
+  std::cout << "Uploader initializing";
+  std::cout << "\tProduct: " << product_;
+  std::cout << "\tVersion: " << version_;
+  std::cout << "\tGUID: " << guid_;
   if (!ptime_.empty()) {
-    LOG(INFO) << "\tProcess uptime: " << ptime_;
+    std::cout << "\tProcess uptime: " << ptime_;
   }
   if (!ctime_.empty()) {
-    LOG(INFO) << "\tCumulative Process uptime: " << ctime_;
+    std::cout << "\tCumulative Process uptime: " << ctime_;
   }
   if (!email_.empty()) {
-    LOG(INFO) << "\tEmail: " << email_;
+    std::cout << "\tEmail: " << email_;
   }
   if (!comments_.empty()) {
-    LOG(INFO) << "\tComments: " << comments_;
+    std::cout << "\tComments: " << comments_;
   }
 }
 
@@ -152,7 +155,7 @@
   }
 
   if (!error_text.empty()) {
-    LOG(ERROR) << error_text;
+    std::cout << error_text;
     return false;
   }
   return true;
@@ -162,7 +165,7 @@
 bool GoogleCrashdumpUploader::Upload() {
   bool ok = http_layer_->Init();
   if (!ok) {
-    LOG(WARNING) << "http layer init failed";
+    std::cout << "http layer init failed";
     return ok;
   }
 
@@ -173,7 +176,7 @@
   struct stat st;
   int err = stat(minidump_pathname_.c_str(), &st);
   if (err) {
-    LOG(WARNING) << minidump_pathname_ << " could not be found: " << errno;
+    std::cout << minidump_pathname_ << " could not be found";
     return false;
   }
 
@@ -188,7 +191,7 @@
                             "upload_file_minidump")) {
     return false;
   }
-  LOG(INFO) << "Sending request to " << crash_server_;
+  std::cout << "Sending request to " << crash_server_;
   return http_layer_->SendRequest(crash_server_,
                                   parameters_,
                                   NULL);
diff --git a/src/common/linux/guid_creator.cc b/src/common/linux/guid_creator.cc
index 7611cc3..678f590 100644
--- a/src/common/linux/guid_creator.cc
+++ b/src/common/linux/guid_creator.cc
@@ -27,14 +27,14 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include <cassert>
-#include <cstdio>
-#include <cstdlib>
-#include <ctime>
-#include <unistd.h>
-
 #include "common/linux/guid_creator.h"
 
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
 //
 // GUIDGenerator
 //
diff --git a/src/common/linux/http_upload.cc b/src/common/linux/http_upload.cc
index 47281d4..d552d00 100644
--- a/src/common/linux/http_upload.cc
+++ b/src/common/linux/http_upload.cc
@@ -27,14 +27,14 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include <cassert>
+#include "common/linux/http_upload.h"
+
+#include <assert.h>
 #include <dlfcn.h>
 #include <curl/curl.h>
 #include <curl/easy.h>
 #include <curl/types.h>
 
-#include "common/linux/http_upload.h"
-
 namespace {
 
 // Callback to get the response data from server.
@@ -62,6 +62,7 @@
                              const string &file_part_name,
                              const string &proxy,
                              const string &proxy_user_pwd,
+                             const string &ca_certificate_file,
                              string *response_body,
                              string *error_description) {
   if (!CheckParameters(parameters))
@@ -107,6 +108,9 @@
   if (!proxy_user_pwd.empty())
     (*curl_easy_setopt)(curl, CURLOPT_PROXYUSERPWD, proxy_user_pwd.c_str());
 
+  if (!ca_certificate_file.empty())
+    (*curl_easy_setopt)(curl, CURLOPT_CAINFO, ca_certificate_file.c_str());
+
   struct curl_httppost *formpost = NULL;
   struct curl_httppost *lastptr = NULL;
   // Add form data.
diff --git a/src/common/linux/http_upload.h b/src/common/linux/http_upload.h
index fa6ad12..e98b25d 100644
--- a/src/common/linux/http_upload.h
+++ b/src/common/linux/http_upload.h
@@ -61,6 +61,7 @@
                           const string &file_part_name,
                           const string &proxy,
                           const string &proxy_user_pwd,
+                          const string &ca_certificate_file,
                           string *response_body,
                           string *error_description);
 
diff --git a/src/common/linux/libcurl_wrapper.cc b/src/common/linux/libcurl_wrapper.cc
index 78b9616..8b61aa0 100644
--- a/src/common/linux/libcurl_wrapper.cc
+++ b/src/common/linux/libcurl_wrapper.cc
@@ -27,15 +27,14 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include <curl/curl.h>
-#include <curl/easy.h>
-#include <curl/types.h>
 #include <dlfcn.h>
 
+#include <iostream>
 #include <string>
 
 #include "common/linux/libcurl_wrapper.h"
-#include "third_party/linux/include/glog/logging.h"
+
+using std::string;
 
 namespace google_breakpad {
 LibcurlWrapper::LibcurlWrapper()
@@ -51,10 +50,10 @@
     curl_lib_ = dlopen("libcurl.so.3", RTLD_NOW);
   }
   if (!curl_lib_) {
-    LOG(WARNING) << "Could not find libcurl via dlopen";
+    std::cout << "Could not find libcurl via dlopen";
     return;
   }
-  LOG(INFO) << "LibcurlWrapper init succeeded";
+  std::cout << "LibcurlWrapper init succeeded";
   init_ok_ = true;
   return;
 }
@@ -68,16 +67,16 @@
   if (!proxy_host.empty()) {
     (*easy_setopt_)(curl_, CURLOPT_PROXY, proxy_host.c_str());
   } else {
-    LOG(WARNING) << "SetProxy called with empty proxy host.";
+    std::cout << "SetProxy called with empty proxy host.";
     return false;
   }
   if (!proxy_userpwd.empty()) {
     (*easy_setopt_)(curl_, CURLOPT_PROXYUSERPWD, proxy_userpwd.c_str());
   } else {
-    LOG(WARNING) << "SetProxy called with empty proxy username/password.";
+    std::cout << "SetProxy called with empty proxy username/password.";
     return false;
   }
-  LOG(INFO) << "Set proxy host to " << proxy_host;
+  std::cout << "Set proxy host to " << proxy_host;
   return true;
 }
 
@@ -86,7 +85,7 @@
   if (!init_ok_) {
     return false;
   }
-  LOG(INFO) << "Adding " << upload_file_path << " to form upload.";
+  std::cout << "Adding " << upload_file_path << " to form upload.";
   // Add form file.
   (*formadd_)(&formpost_, &lastptr_,
               CURLFORM_COPYNAME, basename.c_str(),
@@ -151,12 +150,12 @@
 
 bool LibcurlWrapper::Init() {
   if (!init_ok_) {
-    LOG(WARNING) << "Init_OK was not true in LibcurlWrapper::Init(), check earlier log messages";
+    std::cout << "Init_OK was not true in LibcurlWrapper::Init(), check earlier log messages";
     return false;
   }
 
   if (!SetFunctionPointers()) {
-    LOG(WARNING) << "Could not find function pointers";
+    std::cout << "Could not find function pointers";
     init_ok_ = false;
     return false;
   }
@@ -167,7 +166,7 @@
 
   if (!curl_) {
     dlclose(curl_lib_);
-    LOG(WARNING) << "Curl initialization failed";
+    std::cout << "Curl initialization failed";
     return false;
   }
 
@@ -182,7 +181,7 @@
 #define SET_AND_CHECK_FUNCTION_POINTER(var, function_name, type) \
   var = reinterpret_cast<type>(dlsym(curl_lib_, function_name)); \
   if (!var) { \
-    LOG(WARNING) << "Could not find libcurl function " << function_name; \
+    std::cout << "Could not find libcurl function " << function_name; \
     init_ok_ = false; \
     return false; \
   }
diff --git a/src/common/linux/libcurl_wrapper.h b/src/common/linux/libcurl_wrapper.h
index 08aa958..3e53e61 100644
--- a/src/common/linux/libcurl_wrapper.h
+++ b/src/common/linux/libcurl_wrapper.h
@@ -32,7 +32,8 @@
 
 #include <string>
 #include <map>
-#include <curl/curl.h>
+
+#include "third_party/curl/curl.h"
 
 namespace google_breakpad {
 class LibcurlWrapper {
diff --git a/src/common/linux/linux_syscall_support.h b/src/common/linux/linux_syscall_support.h
deleted file mode 100644
index 0b6e318..0000000
--- a/src/common/linux/linux_syscall_support.h
+++ /dev/null
@@ -1,2949 +0,0 @@
-/* Copyright (c) 2005-2008, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ---
- * Author: Markus Gutschke
- */
-
-/* This file includes Linux-specific support functions common to the
- * coredumper and the thread lister; primarily, this is a collection
- * of direct system calls, and a couple of symbols missing from
- * standard header files.
- * There are a few options that the including file can set to control
- * the behavior of this file:
- *
- * SYS_CPLUSPLUS:
- *   The entire header file will normally be wrapped in 'extern "C" { }",
- *   making it suitable for compilation as both C and C++ source. If you
- *   do not want to do this, you can set the SYS_CPLUSPLUS macro to inhibit
- *   the wrapping. N.B. doing so will suppress inclusion of all prerequisite
- *   system header files, too. It is the caller's responsibility to provide
- *   the necessary definitions.
- *
- * SYS_ERRNO:
- *   All system calls will update "errno" unless overriden by setting the
- *   SYS_ERRNO macro prior to including this file. SYS_ERRNO should be
- *   an l-value.
- *
- * SYS_INLINE:
- *   New symbols will be defined "static inline", unless overridden by
- *   the SYS_INLINE macro.
- *
- * SYS_LINUX_SYSCALL_SUPPORT_H
- *   This macro is used to avoid multiple inclusions of this header file.
- *   If you need to include this file more than once, make sure to
- *   unset SYS_LINUX_SYSCALL_SUPPORT_H before each inclusion.
- *
- * SYS_PREFIX:
- *   New system calls will have a prefix of "sys_" unless overridden by
- *   the SYS_PREFIX macro. Valid values for this macro are [0..9] which
- *   results in prefixes "sys[0..9]_". It is also possible to set this
- *   macro to -1, which avoids all prefixes.
- *
- * This file defines a few internal symbols that all start with "LSS_".
- * Do not access these symbols from outside this file. They are not part
- * of the supported API.
- */
-#ifndef SYS_LINUX_SYSCALL_SUPPORT_H
-#define SYS_LINUX_SYSCALL_SUPPORT_H
-
-/* We currently only support x86-32, x86-64, ARM, MIPS, and PPC on Linux.
- * Porting to other related platforms should not be difficult.
- */
-#if (defined(__i386__) || defined(__x86_64__) || defined(__ARM_ARCH_3__) ||   \
-     defined(__mips__) || defined(__PPC__) || defined(__ARM_EABI__)) \
-  && defined(__linux)
-
-#ifndef SYS_CPLUSPLUS
-#ifdef __cplusplus
-/* Some system header files in older versions of gcc neglect to properly
- * handle being included from C++. As it appears to be harmless to have
- * multiple nested 'extern "C"' blocks, just add another one here.
- */
-extern "C" {
-#endif
-
-#include <errno.h>
-#include <signal.h>
-#include <stdarg.h>
-#include <string.h>
-#include <sys/ptrace.h>
-#include <sys/resource.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <syscall.h>
-#include <unistd.h>
-#include <linux/unistd.h>
-#include <endian.h>
-
-#ifdef __mips__
-/* Include definitions of the ABI currently in use.                          */
-#include <sgidefs.h>
-#endif
-#endif
-
-/* As glibc often provides subtly incompatible data structures (and implicit
- * wrapper functions that convert them), we provide our own kernel data
- * structures for use by the system calls.
- * These structures have been developed by using Linux 2.6.23 headers for
- * reference. Note though, we do not care about exact API compatibility
- * with the kernel, and in fact the kernel often does not have a single
- * API that works across architectures. Instead, we try to mimic the glibc
- * API where reasonable, and only guarantee ABI compatibility with the
- * kernel headers.
- * Most notably, here are a few changes that were made to the structures
- * defined by kernel headers:
- *
- * - we only define structures, but not symbolic names for kernel data
- *   types. For the latter, we directly use the native C datatype
- *   (i.e. "unsigned" instead of "mode_t").
- * - in a few cases, it is possible to define identical structures for
- *   both 32bit (e.g. i386) and 64bit (e.g. x86-64) platforms by
- *   standardizing on the 64bit version of the data types. In particular,
- *   this means that we use "unsigned" where the 32bit headers say
- *   "unsigned long".
- * - overall, we try to minimize the number of cases where we need to
- *   conditionally define different structures.
- * - the "struct kernel_sigaction" class of structures have been
- *   modified to more closely mimic glibc's API by introducing an
- *   anonymous union for the function pointer.
- * - a small number of field names had to have an underscore appended to
- *   them, because glibc defines a global macro by the same name.
- */
-
-/* include/linux/dirent.h                                                    */
-struct kernel_dirent64 {
-  unsigned long long d_ino;
-  long long          d_off;
-  unsigned short     d_reclen;
-  unsigned char      d_type;
-  char               d_name[256];
-};
-
-/* include/linux/dirent.h                                                    */
-struct kernel_dirent {
-  long               d_ino;
-  long               d_off;
-  unsigned short     d_reclen;
-  char               d_name[256];
-};
-
-/* include/linux/uio.h                                                       */
-struct kernel_iovec {
-  void               *iov_base;
-  unsigned long      iov_len;
-};
-
-/* include/linux/socket.h                                                    */
-struct kernel_msghdr {
-  void               *msg_name;
-  int                msg_namelen;
-  struct kernel_iovec*msg_iov;
-  unsigned long      msg_iovlen;
-  void               *msg_control;
-  unsigned long      msg_controllen;
-  unsigned           msg_flags;
-};
-
-/* include/asm-generic/poll.h                                                */
-struct kernel_pollfd {
-  int                fd;
-  short              events;
-  short              revents;
-};
-
-/* include/linux/resource.h                                                  */
-struct kernel_rlimit {
-  unsigned long      rlim_cur;
-  unsigned long      rlim_max;
-};
-
-/* include/linux/time.h                                                      */
-struct kernel_timespec {
-  long               tv_sec;
-  long               tv_nsec;
-};
-
-/* include/linux/time.h                                                      */
-struct kernel_timeval {
-  long               tv_sec;
-  long               tv_usec;
-};
-
-/* include/linux/resource.h                                                  */
-struct kernel_rusage {
-  struct kernel_timeval ru_utime;
-  struct kernel_timeval ru_stime;
-  long               ru_maxrss;
-  long               ru_ixrss;
-  long               ru_idrss;
-  long               ru_isrss;
-  long               ru_minflt;
-  long               ru_majflt;
-  long               ru_nswap;
-  long               ru_inblock;
-  long               ru_oublock;
-  long               ru_msgsnd;
-  long               ru_msgrcv;
-  long               ru_nsignals;
-  long               ru_nvcsw;
-  long               ru_nivcsw;
-};
-
-struct siginfo;
-#if defined(__i386__) || defined(__ARM_EABI__) || defined(__ARM_ARCH_3__) \
-  || defined(__PPC__)
-
-/* include/asm-{arm,i386,mips,ppc}/signal.h                                  */
-struct kernel_old_sigaction {
-  union {
-    void             (*sa_handler_)(int);
-    void             (*sa_sigaction_)(int, struct siginfo *, void *);
-  };
-  unsigned long      sa_mask;
-  unsigned long      sa_flags;
-  void               (*sa_restorer)(void);
-} __attribute__((packed,aligned(4)));
-#elif (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32)
-  #define kernel_old_sigaction kernel_sigaction
-#endif
-
-/* Some kernel functions (e.g. sigaction() in 2.6.23) require that the
- * exactly match the size of the signal set, even though the API was
- * intended to be extensible. We define our own KERNEL_NSIG to deal with
- * this.
- * Please note that glibc provides signals [1.._NSIG-1], whereas the
- * kernel (and this header) provides the range [1..KERNEL_NSIG]. The
- * actual number of signals is obviously the same, but the constants
- * differ by one.
- */
-#ifdef __mips__
-#define KERNEL_NSIG 128
-#else
-#define KERNEL_NSIG  64
-#endif
-
-/* include/asm-{arm,i386,mips,x86_64}/signal.h                               */
-struct kernel_sigset_t {
-  unsigned long sig[(KERNEL_NSIG + 8*sizeof(unsigned long) - 1)/
-                    (8*sizeof(unsigned long))];
-};
-
-/* include/asm-{arm,i386,mips,x86_64,ppc}/signal.h                           */
-struct kernel_sigaction {
-#ifdef __mips__
-  unsigned long      sa_flags;
-  union {
-    void             (*sa_handler_)(int);
-    void             (*sa_sigaction_)(int, struct siginfo *, void *);
-  };
-  struct kernel_sigset_t sa_mask;
-#else
-  union {
-    void             (*sa_handler_)(int);
-    void             (*sa_sigaction_)(int, struct siginfo *, void *);
-  };
-  unsigned long      sa_flags;
-  void               (*sa_restorer)(void);
-  struct kernel_sigset_t sa_mask;
-#endif
-};
-
-/* include/linux/socket.h                                                    */
-struct kernel_sockaddr {
-  unsigned short     sa_family;
-  char               sa_data[14];
-};
-
-/* include/asm-{arm,i386,mips,ppc}/stat.h                                    */
-#ifdef __mips__
-#if _MIPS_SIM == _MIPS_SIM_ABI64
-struct kernel_stat {
-#else
-struct kernel_stat64 {
-#endif
-  unsigned           st_dev;
-  unsigned           __pad0[3];
-  unsigned long long st_ino;
-  unsigned           st_mode;
-  unsigned           st_nlink;
-  unsigned           st_uid;
-  unsigned           st_gid;
-  unsigned           st_rdev;
-  unsigned           __pad1[3];
-  long long          st_size;
-  unsigned           st_atime_;
-  unsigned           st_atime_nsec_;
-  unsigned           st_mtime_;
-  unsigned           st_mtime_nsec_;
-  unsigned           st_ctime_;
-  unsigned           st_ctime_nsec_;
-  unsigned           st_blksize;
-  unsigned           __pad2;
-  unsigned long long st_blocks;
-};
-#elif defined __PPC__
-struct kernel_stat64 {
-  unsigned long long st_dev;
-  unsigned long long st_ino;
-  unsigned           st_mode;
-  unsigned           st_nlink;
-  unsigned           st_uid;
-  unsigned           st_gid;
-  unsigned long long st_rdev;
-  unsigned short int __pad2;
-  long long          st_size;
-  long               st_blksize;
-  long long          st_blocks;
-  long               st_atime_;
-  unsigned long      st_atime_nsec_;
-  long               st_mtime_;
-  unsigned long      st_mtime_nsec_;
-  long               st_ctime_;
-  unsigned long      st_ctime_nsec_;
-  unsigned long      __unused4;
-  unsigned long      __unused5;
-};
-#else
-struct kernel_stat64 {
-  unsigned long long st_dev;
-  unsigned char      __pad0[4];
-  unsigned           __st_ino;
-  unsigned           st_mode;
-  unsigned           st_nlink;
-  unsigned           st_uid;
-  unsigned           st_gid;
-  unsigned long long st_rdev;
-  unsigned char      __pad3[4];
-  long long          st_size;
-  unsigned           st_blksize;
-  unsigned long long st_blocks;
-  unsigned           st_atime_;
-  unsigned           st_atime_nsec_;
-  unsigned           st_mtime_;
-  unsigned           st_mtime_nsec_;
-  unsigned           st_ctime_;
-  unsigned           st_ctime_nsec_;
-  unsigned long long st_ino;
-};
-#endif
-
-/* include/asm-{arm,i386,mips,x86_64,ppc}/stat.h                             */
-#if defined(__i386__) || defined(__ARM_ARCH_3__) || defined(__ARM_EABI__)
-struct kernel_stat {
-  /* The kernel headers suggest that st_dev and st_rdev should be 32bit
-   * quantities encoding 12bit major and 20bit minor numbers in an interleaved
-   * format. In reality, we do not see useful data in the top bits. So,
-   * we'll leave the padding in here, until we find a better solution.
-   */
-  unsigned short     st_dev;
-  short              pad1;
-  unsigned           st_ino;
-  unsigned short     st_mode;
-  unsigned short     st_nlink;
-  unsigned short     st_uid;
-  unsigned short     st_gid;
-  unsigned short     st_rdev;
-  short              pad2;
-  unsigned           st_size;
-  unsigned           st_blksize;
-  unsigned           st_blocks;
-  unsigned           st_atime_;
-  unsigned           st_atime_nsec_;
-  unsigned           st_mtime_;
-  unsigned           st_mtime_nsec_;
-  unsigned           st_ctime_;
-  unsigned           st_ctime_nsec_;
-  unsigned           __unused4;
-  unsigned           __unused5;
-};
-#elif defined(__x86_64__)
-struct kernel_stat {
-  unsigned long      st_dev;
-  unsigned long      st_ino;
-  unsigned long      st_nlink;
-  unsigned           st_mode;
-  unsigned           st_uid;
-  unsigned           st_gid;
-  unsigned           __pad0;
-  unsigned long      st_rdev;
-  long               st_size;
-  long               st_blksize;
-  long               st_blocks;
-  unsigned long      st_atime_;
-  unsigned long      st_atime_nsec_;
-  unsigned long      st_mtime_;
-  unsigned long      st_mtime_nsec_;
-  unsigned long      st_ctime_;
-  unsigned long      st_ctime_nsec_;
-  long               __unused[3];
-};
-#elif defined(__PPC__)
-struct kernel_stat {
-  unsigned           st_dev;
-  unsigned long      st_ino;      // ino_t
-  unsigned long      st_mode;     // mode_t
-  unsigned short     st_nlink;    // nlink_t
-  unsigned           st_uid;      // uid_t
-  unsigned           st_gid;      // gid_t
-  unsigned           st_rdev;
-  long               st_size;     // off_t
-  unsigned long      st_blksize;
-  unsigned long      st_blocks;
-  unsigned long      st_atime_;
-  unsigned long      st_atime_nsec_;
-  unsigned long      st_mtime_;
-  unsigned long      st_mtime_nsec_;
-  unsigned long      st_ctime_;
-  unsigned long      st_ctime_nsec_;
-  unsigned long      __unused4;
-  unsigned long      __unused5;
-};
-#elif (defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI64)
-struct kernel_stat {
-  unsigned           st_dev;
-  int                st_pad1[3];
-  unsigned           st_ino;
-  unsigned           st_mode;
-  unsigned           st_nlink;
-  unsigned           st_uid;
-  unsigned           st_gid;
-  unsigned           st_rdev;
-  int                st_pad2[2];
-  long               st_size;
-  int                st_pad3;
-  long               st_atime_;
-  long               st_atime_nsec_;
-  long               st_mtime_;
-  long               st_mtime_nsec_;
-  long               st_ctime_;
-  long               st_ctime_nsec_;
-  int                st_blksize;
-  int                st_blocks;
-  int                st_pad4[14];
-};
-#endif
-
-/* include/asm-{arm,i386,mips,x86_64,ppc}/statfs.h                           */
-#ifdef __mips__
-#if _MIPS_SIM != _MIPS_SIM_ABI64
-struct kernel_statfs64 {
-  unsigned long      f_type;
-  unsigned long      f_bsize;
-  unsigned long      f_frsize;
-  unsigned long      __pad;
-  unsigned long long f_blocks;
-  unsigned long long f_bfree;
-  unsigned long long f_files;
-  unsigned long long f_ffree;
-  unsigned long long f_bavail;
-  struct { int val[2]; } f_fsid;
-  unsigned long      f_namelen;
-  unsigned long      f_spare[6];
-};
-#endif
-#elif !defined(__x86_64__)
-struct kernel_statfs64 {
-  unsigned long      f_type;
-  unsigned long      f_bsize;
-  unsigned long long f_blocks;
-  unsigned long long f_bfree;
-  unsigned long long f_bavail;
-  unsigned long long f_files;
-  unsigned long long f_ffree;
-  struct { int val[2]; } f_fsid;
-  unsigned long      f_namelen;
-  unsigned long      f_frsize;
-  unsigned long      f_spare[5];
-};
-#endif
-
-/* include/asm-{arm,i386,mips,x86_64,ppc,generic}/statfs.h                   */
-#ifdef __mips__
-struct kernel_statfs {
-  long               f_type;
-  long               f_bsize;
-  long               f_frsize;
-  long               f_blocks;
-  long               f_bfree;
-  long               f_files;
-  long               f_ffree;
-  long               f_bavail;
-  struct { int val[2]; } f_fsid;
-  long               f_namelen;
-  long               f_spare[6];
-};
-#else
-struct kernel_statfs {
-  /* x86_64 actually defines all these fields as signed, whereas all other  */
-  /* platforms define them as unsigned. Leaving them at unsigned should not */
-  /* cause any problems.                                                    */
-  unsigned long      f_type;
-  unsigned long      f_bsize;
-  unsigned long      f_blocks;
-  unsigned long      f_bfree;
-  unsigned long      f_bavail;
-  unsigned long      f_files;
-  unsigned long      f_ffree;
-  struct { int val[2]; } f_fsid;
-  unsigned long      f_namelen;
-  unsigned long      f_frsize;
-  unsigned long      f_spare[5];
-};
-#endif
-
-
-/* Definitions missing from the standard header files                        */
-#ifndef O_DIRECTORY
-#if defined(__ARM_ARCH_3__) || defined(__ARM_EABI__)
-#define O_DIRECTORY             0040000
-#else
-#define O_DIRECTORY             0200000
-#endif
-#endif
-#ifndef NT_PRXFPREG
-#define NT_PRXFPREG             0x46e62b7f
-#endif
-#ifndef PTRACE_GETFPXREGS
-#define PTRACE_GETFPXREGS       ((enum __ptrace_request)18)
-#endif
-#ifndef PR_GET_DUMPABLE
-#define PR_GET_DUMPABLE         3
-#endif
-#ifndef PR_SET_DUMPABLE
-#define PR_SET_DUMPABLE         4
-#endif
-#ifndef AT_FDCWD
-#define AT_FDCWD                (-100)
-#endif
-#ifndef AT_SYMLINK_NOFOLLOW
-#define AT_SYMLINK_NOFOLLOW     0x100
-#endif
-#ifndef AT_REMOVEDIR
-#define AT_REMOVEDIR            0x200
-#endif
-#ifndef MREMAP_FIXED
-#define MREMAP_FIXED            2
-#endif
-#ifndef SA_RESTORER
-#define SA_RESTORER             0x04000000
-#endif
-
-#if defined(__i386__)
-#ifndef __NR_setresuid
-#define __NR_setresuid          164
-#define __NR_setresgid          170
-#endif
-#ifndef __NR_rt_sigaction
-#define __NR_rt_sigaction       174
-#define __NR_rt_sigprocmask     175
-#define __NR_rt_sigpending      176
-#define __NR_rt_sigsuspend      179
-#endif
-#ifndef __NR_pread64
-#define __NR_pread64            180
-#endif
-#ifndef __NR_pwrite64
-#define __NR_pwrite64           181
-#endif
-#ifndef __NR_ugetrlimit
-#define __NR_ugetrlimit         191
-#endif
-#ifndef __NR_stat64
-#define __NR_stat64             195
-#endif
-#ifndef __NR_fstat64
-#define __NR_fstat64            197
-#endif
-#ifndef __NR_setresuid32
-#define __NR_setresuid32        208
-#define __NR_setresgid32        210
-#endif
-#ifndef __NR_setfsuid32
-#define __NR_setfsuid32         215
-#define __NR_setfsgid32         216
-#endif
-#ifndef __NR_getdents64
-#define __NR_getdents64         220
-#endif
-#ifndef __NR_gettid
-#define __NR_gettid             224
-#endif
-#ifndef __NR_readahead
-#define __NR_readahead          225
-#endif
-#ifndef __NR_setxattr
-#define __NR_setxattr           226
-#endif
-#ifndef __NR_lsetxattr
-#define __NR_lsetxattr          227
-#endif
-#ifndef __NR_getxattr
-#define __NR_getxattr           229
-#endif
-#ifndef __NR_lgetxattr
-#define __NR_lgetxattr          230
-#endif
-#ifndef __NR_futex
-#define __NR_futex              240
-#endif
-#ifndef __NR_sched_setaffinity
-#define __NR_sched_setaffinity  241
-#define __NR_sched_getaffinity  242
-#endif
-#ifndef __NR_set_tid_address
-#define __NR_set_tid_address    258
-#endif
-#ifndef __NR_statfs64
-#define __NR_statfs64           268
-#endif
-#ifndef __NR_fstatfs64
-#define __NR_fstatfs64          269
-#endif
-#ifndef __NR_fadvise64_64
-#define __NR_fadvise64_64       272
-#endif
-#ifndef __NR_openat
-#define __NR_openat             295
-#endif
-#ifndef __NR_fstatat64
-#define __NR_fstatat64          300
-#endif
-#ifndef __NR_unlinkat
-#define __NR_unlinkat           301
-#endif
-#ifndef __NR_move_pages
-#define __NR_move_pages         317
-#endif
-/* End of i386 definitions                                                   */
-#elif defined(__ARM_ARCH_3__) || defined(__ARM_EABI__)
-#ifndef __NR_setresuid
-#define __NR_setresuid          (__NR_SYSCALL_BASE + 164)
-#define __NR_setresgid          (__NR_SYSCALL_BASE + 170)
-#endif
-#ifndef __NR_rt_sigaction
-#define __NR_rt_sigaction       (__NR_SYSCALL_BASE + 174)
-#define __NR_rt_sigprocmask     (__NR_SYSCALL_BASE + 175)
-#define __NR_rt_sigpending      (__NR_SYSCALL_BASE + 176)
-#define __NR_rt_sigsuspend      (__NR_SYSCALL_BASE + 179)
-#endif
-#ifndef __NR_pread64
-#define __NR_pread64            (__NR_SYSCALL_BASE + 180)
-#endif
-#ifndef __NR_pwrite64
-#define __NR_pwrite64           (__NR_SYSCALL_BASE + 181)
-#endif
-#ifndef __NR_ugetrlimit
-#define __NR_ugetrlimit         (__NR_SYSCALL_BASE + 191)
-#endif
-#ifndef __NR_stat64
-#define __NR_stat64             (__NR_SYSCALL_BASE + 195)
-#endif
-#ifndef __NR_fstat64
-#define __NR_fstat64            (__NR_SYSCALL_BASE + 197)
-#endif
-#ifndef __NR_setresuid32
-#define __NR_setresuid32        (__NR_SYSCALL_BASE + 208)
-#define __NR_setresgid32        (__NR_SYSCALL_BASE + 210)
-#endif
-#ifndef __NR_setfsuid32
-#define __NR_setfsuid32         (__NR_SYSCALL_BASE + 215)
-#define __NR_setfsgid32         (__NR_SYSCALL_BASE + 216)
-#endif
-#ifndef __NR_getdents64
-#define __NR_getdents64         (__NR_SYSCALL_BASE + 217)
-#endif
-#ifndef __NR_gettid
-#define __NR_gettid             (__NR_SYSCALL_BASE + 224)
-#endif
-#ifndef __NR_readahead
-#define __NR_readahead          (__NR_SYSCALL_BASE + 225)
-#endif
-#ifndef __NR_setxattr
-#define __NR_setxattr           (__NR_SYSCALL_BASE + 226)
-#endif
-#ifndef __NR_lsetxattr
-#define __NR_lsetxattr          (__NR_SYSCALL_BASE + 227)
-#endif
-#ifndef __NR_getxattr
-#define __NR_getxattr           (__NR_SYSCALL_BASE + 229)
-#endif
-#ifndef __NR_lgetxattr
-#define __NR_lgetxattr          (__NR_SYSCALL_BASE + 230)
-#endif
-#ifndef __NR_futex
-#define __NR_futex              (__NR_SYSCALL_BASE + 240)
-#endif
-#ifndef __NR_sched_setaffinity
-#define __NR_sched_setaffinity  (__NR_SYSCALL_BASE + 241)
-#define __NR_sched_getaffinity  (__NR_SYSCALL_BASE + 242)
-#endif
-#ifndef __NR_set_tid_address
-#define __NR_set_tid_address    (__NR_SYSCALL_BASE + 256)
-#endif
-#ifndef __NR_statfs64
-#define __NR_statfs64           (__NR_SYSCALL_BASE + 266)
-#endif
-#ifndef __NR_fstatfs64
-#define __NR_fstatfs64          (__NR_SYSCALL_BASE + 267)
-#endif
-#ifndef __NR_move_pages
-#define __NR_move_pages         (__NR_SYSCALL_BASE + 344)
-#endif
-/* End of ARM 3/EABI definitions                                                */
-#elif defined(__x86_64__)
-#ifndef __NR_setresuid
-#define __NR_setresuid          117
-#define __NR_setresgid          119
-#endif
-#ifndef __NR_gettid
-#define __NR_gettid             186
-#endif
-#ifndef __NR_readahead
-#define __NR_readahead          187
-#endif
-#ifndef __NR_setxattr
-#define __NR_setxattr           188
-#endif
-#ifndef __NR_lsetxattr
-#define __NR_lsetxattr          189
-#endif
-#ifndef __NR_getxattr
-#define __NR_getxattr           191
-#endif
-#ifndef __NR_lgetxattr
-#define __NR_lgetxattr          192
-#endif
-#ifndef __NR_futex
-#define __NR_futex              202
-#endif
-#ifndef __NR_sched_setaffinity
-#define __NR_sched_setaffinity  203
-#define __NR_sched_getaffinity  204
-#endif
-#ifndef __NR_getdents64
-#define __NR_getdents64         217
-#endif
-#ifndef __NR_set_tid_address
-#define __NR_set_tid_address    218
-#endif
-#ifndef __NR_fadvise64
-#define __NR_fadvise64          221
-#endif
-#ifndef __NR_openat
-#define __NR_openat             257
-#endif
-#ifndef __NR_newfstatat
-#define __NR_newfstatat         262
-#endif
-#ifndef __NR_unlinkat
-#define __NR_unlinkat           263
-#endif
-#ifndef __NR_move_pages
-#define __NR_move_pages         279
-#endif
-/* End of x86-64 definitions                                                 */
-#elif defined(__mips__)
-#if _MIPS_SIM == _MIPS_SIM_ABI32
-#ifndef __NR_setresuid
-#define __NR_setresuid          (__NR_Linux + 185)
-#define __NR_setresgid          (__NR_Linux + 190)
-#endif
-#ifndef __NR_rt_sigaction
-#define __NR_rt_sigaction       (__NR_Linux + 194)
-#define __NR_rt_sigprocmask     (__NR_Linux + 195)
-#define __NR_rt_sigpending      (__NR_Linux + 196)
-#define __NR_rt_sigsuspend      (__NR_Linux + 199)
-#endif
-#ifndef __NR_pread64
-#define __NR_pread64            (__NR_Linux + 200)
-#endif
-#ifndef __NR_pwrite64
-#define __NR_pwrite64           (__NR_Linux + 201)
-#endif
-#ifndef __NR_stat64
-#define __NR_stat64             (__NR_Linux + 213)
-#endif
-#ifndef __NR_fstat64
-#define __NR_fstat64            (__NR_Linux + 215)
-#endif
-#ifndef __NR_getdents64
-#define __NR_getdents64         (__NR_Linux + 219)
-#endif
-#ifndef __NR_gettid
-#define __NR_gettid             (__NR_Linux + 222)
-#endif
-#ifndef __NR_readahead
-#define __NR_readahead          (__NR_Linux + 223)
-#endif
-#ifndef __NR_setxattr
-#define __NR_setxattr           (__NR_Linux + 224)
-#endif
-#ifndef __NR_lsetxattr
-#define __NR_lsetxattr          (__NR_Linux + 225)
-#endif
-#ifndef __NR_getxattr
-#define __NR_getxattr           (__NR_Linux + 227)
-#endif
-#ifndef __NR_lgetxattr
-#define __NR_lgetxattr          (__NR_Linux + 228)
-#endif
-#ifndef __NR_futex
-#define __NR_futex              (__NR_Linux + 238)
-#endif
-#ifndef __NR_sched_setaffinity
-#define __NR_sched_setaffinity  (__NR_Linux + 239)
-#define __NR_sched_getaffinity  (__NR_Linux + 240)
-#endif
-#ifndef __NR_set_tid_address
-#define __NR_set_tid_address    (__NR_Linux + 252)
-#endif
-#ifndef __NR_statfs64
-#define __NR_statfs64           (__NR_Linux + 255)
-#endif
-#ifndef __NR_fstatfs64
-#define __NR_fstatfs64          (__NR_Linux + 256)
-#endif
-#ifndef __NR_openat
-#define __NR_openat             (__NR_Linux + 288)
-#endif
-#ifndef __NR_fstatat
-#define __NR_fstatat            (__NR_Linux + 293)
-#endif
-#ifndef __NR_unlinkat
-#define __NR_unlinkat           (__NR_Linux + 294)
-#endif
-#ifndef __NR_move_pages
-#define __NR_move_pages         (__NR_Linux + 308)
-#endif
-/* End of MIPS (old 32bit API) definitions */
-#elif  _MIPS_SIM == _MIPS_SIM_ABI64
-#ifndef __NR_setresuid
-#define __NR_setresuid          (__NR_Linux + 115)
-#define __NR_setresgid          (__NR_Linux + 117)
-#endif
-#ifndef __NR_gettid
-#define __NR_gettid             (__NR_Linux + 178)
-#endif
-#ifndef __NR_readahead
-#define __NR_readahead          (__NR_Linux + 179)
-#endif
-#ifndef __NR_setxattr
-#define __NR_setxattr           (__NR_Linux + 180)
-#endif
-#ifndef __NR_lsetxattr
-#define __NR_lsetxattr          (__NR_Linux + 181)
-#endif
-#ifndef __NR_getxattr
-#define __NR_getxattr           (__NR_Linux + 183)
-#endif
-#ifndef __NR_lgetxattr
-#define __NR_lgetxattr          (__NR_Linux + 184)
-#endif
-#ifndef __NR_futex
-#define __NR_futex              (__NR_Linux + 194)
-#endif
-#ifndef __NR_sched_setaffinity
-#define __NR_sched_setaffinity  (__NR_Linux + 195)
-#define __NR_sched_getaffinity  (__NR_Linux + 196)
-#endif
-#ifndef __NR_set_tid_address
-#define __NR_set_tid_address    (__NR_Linux + 212)
-#endif
-#ifndef __NR_openat
-#define __NR_openat             (__NR_Linux + 247)
-#endif
-#ifndef __NR_fstatat
-#define __NR_fstatat            (__NR_Linux + 252)
-#endif
-#ifndef __NR_unlinkat
-#define __NR_unlinkat           (__NR_Linux + 253)
-#endif
-#ifndef __NR_move_pages
-#define __NR_move_pages         (__NR_Linux + 267)
-#endif
-/* End of MIPS (64bit API) definitions */
-#else
-#ifndef __NR_setresuid
-#define __NR_setresuid          (__NR_Linux + 115)
-#define __NR_setresgid          (__NR_Linux + 117)
-#endif
-#ifndef __NR_gettid
-#define __NR_gettid             (__NR_Linux + 178)
-#endif
-#ifndef __NR_readahead
-#define __NR_readahead          (__NR_Linux + 179)
-#endif
-#ifndef __NR_setxattr
-#define __NR_setxattr           (__NR_Linux + 180)
-#endif
-#ifndef __NR_lsetxattr
-#define __NR_lsetxattr          (__NR_Linux + 181)
-#endif
-#ifndef __NR_getxattr
-#define __NR_getxattr           (__NR_Linux + 183)
-#endif
-#ifndef __NR_lgetxattr
-#define __NR_lgetxattr          (__NR_Linux + 184)
-#endif
-#ifndef __NR_futex
-#define __NR_futex              (__NR_Linux + 194)
-#endif
-#ifndef __NR_sched_setaffinity
-#define __NR_sched_setaffinity  (__NR_Linux + 195)
-#define __NR_sched_getaffinity  (__NR_Linux + 196)
-#endif
-#ifndef __NR_set_tid_address
-#define __NR_set_tid_address    (__NR_Linux + 213)
-#endif
-#ifndef __NR_statfs64
-#define __NR_statfs64           (__NR_Linux + 217)
-#endif
-#ifndef __NR_fstatfs64
-#define __NR_fstatfs64          (__NR_Linux + 218)
-#endif
-#ifndef __NR_openat
-#define __NR_openat             (__NR_Linux + 251)
-#endif
-#ifndef __NR_fstatat
-#define __NR_fstatat            (__NR_Linux + 256)
-#endif
-#ifndef __NR_unlinkat
-#define __NR_unlinkat           (__NR_Linux + 257)
-#endif
-#ifndef __NR_move_pages
-#define __NR_move_pages         (__NR_Linux + 271)
-#endif
-/* End of MIPS (new 32bit API) definitions                                   */
-#endif
-/* End of MIPS definitions                                                   */
-#elif defined(__PPC__)
-#ifndef __NR_setfsuid
-#define __NR_setfsuid           138
-#define __NR_setfsgid           139
-#endif
-#ifndef __NR_setresuid
-#define __NR_setresuid          164
-#define __NR_setresgid          169
-#endif
-#ifndef __NR_rt_sigaction
-#define __NR_rt_sigaction       173
-#define __NR_rt_sigprocmask     174
-#define __NR_rt_sigpending      175
-#define __NR_rt_sigsuspend      178
-#endif
-#ifndef __NR_pread64
-#define __NR_pread64            179
-#endif
-#ifndef __NR_pwrite64
-#define __NR_pwrite64           180
-#endif
-#ifndef __NR_ugetrlimit
-#define __NR_ugetrlimit         190
-#endif
-#ifndef __NR_readahead
-#define __NR_readahead          191
-#endif
-#ifndef __NR_stat64
-#define __NR_stat64             195
-#endif
-#ifndef __NR_fstat64
-#define __NR_fstat64            197
-#endif
-#ifndef __NR_getdents64
-#define __NR_getdents64         202
-#endif
-#ifndef __NR_gettid
-#define __NR_gettid             207
-#endif
-#ifndef __NR_setxattr
-#define __NR_setxattr           209
-#endif
-#ifndef __NR_lsetxattr
-#define __NR_lsetxattr          210
-#endif
-#ifndef __NR_getxattr
-#define __NR_getxattr           212
-#endif
-#ifndef __NR_lgetxattr
-#define __NR_lgetxattr          213
-#endif
-#ifndef __NR_futex
-#define __NR_futex              221
-#endif
-#ifndef __NR_sched_setaffinity
-#define __NR_sched_setaffinity  222
-#define __NR_sched_getaffinity  223
-#endif
-#ifndef __NR_set_tid_address
-#define __NR_set_tid_address    232
-#endif
-#ifndef __NR_statfs64
-#define __NR_statfs64           252
-#endif
-#ifndef __NR_fstatfs64
-#define __NR_fstatfs64          253
-#endif
-#ifndef __NR_fadvise64_64
-#define __NR_fadvise64_64       254
-#endif
-#ifndef __NR_openat
-#define __NR_openat             286
-#endif
-#ifndef __NR_fstatat64
-#define __NR_fstatat64          291
-#endif
-#ifndef __NR_unlinkat
-#define __NR_unlinkat           292
-#endif
-#ifndef __NR_move_pages
-#define __NR_move_pages         301
-#endif
-/* End of powerpc defininitions                                              */
-#endif
-
-
-/* After forking, we must make sure to only call system calls.               */
-#if __BOUNDED_POINTERS__
-  #error "Need to port invocations of syscalls for bounded ptrs"
-#else
-  /* The core dumper and the thread lister get executed after threads
-   * have been suspended. As a consequence, we cannot call any functions
-   * that acquire locks. Unfortunately, libc wraps most system calls
-   * (e.g. in order to implement pthread_atfork, and to make calls
-   * cancellable), which means we cannot call these functions. Instead,
-   * we have to call syscall() directly.
-   */
-  #undef LSS_ERRNO
-  #ifdef SYS_ERRNO
-    /* Allow the including file to override the location of errno. This can
-     * be useful when using clone() with the CLONE_VM option.
-     */
-    #define LSS_ERRNO SYS_ERRNO
-  #else
-    #define LSS_ERRNO errno
-  #endif
-
-  #undef LSS_INLINE
-  #ifdef SYS_INLINE
-    #define LSS_INLINE SYS_INLINE
-  #else
-    #define LSS_INLINE static inline
-  #endif
-
-  /* Allow the including file to override the prefix used for all new
-   * system calls. By default, it will be set to "sys_".
-   */
-  #undef LSS_NAME
-  #ifndef SYS_PREFIX
-    #define LSS_NAME(name) sys_##name
-  #elif SYS_PREFIX < 0
-    #define LSS_NAME(name) name
-  #elif SYS_PREFIX == 0
-    #define LSS_NAME(name) sys0_##name
-  #elif SYS_PREFIX == 1
-    #define LSS_NAME(name) sys1_##name
-  #elif SYS_PREFIX == 2
-    #define LSS_NAME(name) sys2_##name
-  #elif SYS_PREFIX == 3
-    #define LSS_NAME(name) sys3_##name
-  #elif SYS_PREFIX == 4
-    #define LSS_NAME(name) sys4_##name
-  #elif SYS_PREFIX == 5
-    #define LSS_NAME(name) sys5_##name
-  #elif SYS_PREFIX == 6
-    #define LSS_NAME(name) sys6_##name
-  #elif SYS_PREFIX == 7
-    #define LSS_NAME(name) sys7_##name
-  #elif SYS_PREFIX == 8
-    #define LSS_NAME(name) sys8_##name
-  #elif SYS_PREFIX == 9
-    #define LSS_NAME(name) sys9_##name
-  #endif
-
-  #undef  LSS_RETURN
-  #if (defined(__i386__) || defined(__x86_64__) || defined(__ARM_ARCH_3__) \
-       || defined(__ARM_EABI__))
-  /* Failing system calls return a negative result in the range of
-   * -1..-4095. These are "errno" values with the sign inverted.
-   */
-  #define LSS_RETURN(type, res)                                               \
-    do {                                                                      \
-      if ((unsigned long)(res) >= (unsigned long)(-4095)) {                   \
-        LSS_ERRNO = -(res);                                                   \
-        res = -1;                                                             \
-      }                                                                       \
-      return (type) (res);                                                    \
-    } while (0)
-  #elif defined(__mips__)
-  /* On MIPS, failing system calls return -1, and set errno in a
-   * separate CPU register.
-   */
-  #define LSS_RETURN(type, res, err)                                          \
-    do {                                                                      \
-      if (err) {                                                              \
-        LSS_ERRNO = (res);                                                    \
-        res = -1;                                                             \
-      }                                                                       \
-      return (type) (res);                                                    \
-    } while (0)
-  #elif defined(__PPC__)
-  /* On PPC, failing system calls return -1, and set errno in a
-   * separate CPU register. See linux/unistd.h.
-   */
-  #define LSS_RETURN(type, res, err)                                          \
-   do {                                                                       \
-     if (err & 0x10000000 ) {                                                 \
-       LSS_ERRNO = (res);                                                     \
-       res = -1;                                                              \
-     }                                                                        \
-     return (type) (res);                                                     \
-   } while (0)
-  #endif
-  #if defined(__i386__)
-    /* In PIC mode (e.g. when building shared libraries), gcc for i386
-     * reserves ebx. Unfortunately, most distribution ship with implementations
-     * of _syscallX() which clobber ebx.
-     * Also, most definitions of _syscallX() neglect to mark "memory" as being
-     * clobbered. This causes problems with compilers, that do a better job
-     * at optimizing across __asm__ calls.
-     * So, we just have to redefine all of the _syscallX() macros.
-     */
-    #undef  LSS_BODY
-    #define LSS_BODY(type,args...)                                            \
-      long __res;                                                             \
-      __asm__ __volatile__("push %%ebx\n"                                     \
-                           "movl %2,%%ebx\n"                                  \
-                           "int $0x80\n"                                      \
-                           "pop %%ebx"                                        \
-                           args                                               \
-                           : "memory");                                       \
-      LSS_RETURN(type,__res)
-    #undef  _syscall0
-    #define _syscall0(type,name)                                              \
-      type LSS_NAME(name)(void) {                                             \
-        long __res;                                                           \
-        __asm__ volatile("int $0x80"                                          \
-                         : "=a" (__res)                                       \
-                         : "0" (__NR_##name)                                  \
-                         : "memory");                                         \
-        LSS_RETURN(type,__res);                                               \
-      }
-    #undef  _syscall1
-    #define _syscall1(type,name,type1,arg1)                                   \
-      type LSS_NAME(name)(type1 arg1) {                                       \
-        LSS_BODY(type,                                                        \
-             : "=a" (__res)                                                   \
-             : "0" (__NR_##name), "ri" ((long)(arg1)));                       \
-      }
-    #undef  _syscall2
-    #define _syscall2(type,name,type1,arg1,type2,arg2)                        \
-      type LSS_NAME(name)(type1 arg1,type2 arg2) {                            \
-        LSS_BODY(type,                                                        \
-             : "=a" (__res)                                                   \
-             : "0" (__NR_##name),"ri" ((long)(arg1)), "c" ((long)(arg2)));    \
-      }
-    #undef  _syscall3
-    #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)             \
-      type LSS_NAME(name)(type1 arg1,type2 arg2,type3 arg3) {                 \
-        LSS_BODY(type,                                                        \
-             : "=a" (__res)                                                   \
-             : "0" (__NR_##name), "ri" ((long)(arg1)), "c" ((long)(arg2)),    \
-               "d" ((long)(arg3)));                                           \
-      }
-    #undef  _syscall4
-    #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)  \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {   \
-        LSS_BODY(type,                                                        \
-             : "=a" (__res)                                                   \
-             : "0" (__NR_##name), "ri" ((long)(arg1)), "c" ((long)(arg2)),    \
-               "d" ((long)(arg3)),"S" ((long)(arg4)));                        \
-      }
-    #undef  _syscall5
-    #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,  \
-                      type5,arg5)                                             \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,     \
-                          type5 arg5) {                                       \
-        long __res;                                                           \
-        __asm__ __volatile__("push %%ebx\n"                                   \
-                             "movl %2,%%ebx\n"                                \
-                             "movl %1,%%eax\n"                                \
-                             "int  $0x80\n"                                   \
-                             "pop  %%ebx"                                     \
-                             : "=a" (__res)                                   \
-                             : "i" (__NR_##name), "ri" ((long)(arg1)),        \
-                               "c" ((long)(arg2)), "d" ((long)(arg3)),        \
-                               "S" ((long)(arg4)), "D" ((long)(arg5))         \
-                             : "memory");                                     \
-        LSS_RETURN(type,__res);                                               \
-      }
-    #undef  _syscall6
-    #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,  \
-                      type5,arg5,type6,arg6)                                  \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,     \
-                          type5 arg5, type6 arg6) {                           \
-        long __res;                                                           \
-        struct { long __a1; long __a6; } __s = { (long)arg1, (long) arg6 };   \
-        __asm__ __volatile__("push %%ebp\n"                                   \
-                             "push %%ebx\n"                                   \
-                             "movl 4(%2),%%ebp\n"                             \
-                             "movl 0(%2), %%ebx\n"                            \
-                             "movl %1,%%eax\n"                                \
-                             "int  $0x80\n"                                   \
-                             "pop  %%ebx\n"                                   \
-                             "pop  %%ebp"                                     \
-                             : "=a" (__res)                                   \
-                             : "i" (__NR_##name),  "0" ((long)(&__s)),        \
-                               "c" ((long)(arg2)), "d" ((long)(arg3)),        \
-                               "S" ((long)(arg4)), "D" ((long)(arg5))         \
-                             : "memory");                                     \
-        LSS_RETURN(type,__res);                                               \
-      }
-    LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack,
-                                   int flags, void *arg, int *parent_tidptr,
-                                   void *newtls, int *child_tidptr) {
-      long __res;
-      __asm__ __volatile__(/* if (fn == NULL)
-                            *   return -EINVAL;
-                            */
-                           "movl   %3,%%ecx\n"
-                           "jecxz  1f\n"
-
-                           /* if (child_stack == NULL)
-                            *   return -EINVAL;
-                            */
-                           "movl   %4,%%ecx\n"
-                           "jecxz  1f\n"
-
-                           /* Set up alignment of the child stack:
-                            * child_stack = (child_stack & ~0xF) - 20;
-                            */
-                           "andl   $-16,%%ecx\n"
-                           "subl   $20,%%ecx\n"
-
-                           /* Push "arg" and "fn" onto the stack that will be
-                            * used by the child.
-                            */
-                           "movl   %6,%%eax\n"
-                           "movl   %%eax,4(%%ecx)\n"
-                           "movl   %3,%%eax\n"
-                           "movl   %%eax,(%%ecx)\n"
-
-                           /* %eax = syscall(%eax = __NR_clone,
-                            *                %ebx = flags,
-                            *                %ecx = child_stack,
-                            *                %edx = parent_tidptr,
-                            *                %esi = newtls,
-                            *                %edi = child_tidptr)
-                            * Also, make sure that %ebx gets preserved as it is
-                            * used in PIC mode.
-                            */
-                           "movl   %8,%%esi\n"
-                           "movl   %7,%%edx\n"
-                           "movl   %5,%%eax\n"
-                           "movl   %9,%%edi\n"
-                           "pushl  %%ebx\n"
-                           "movl   %%eax,%%ebx\n"
-                           "movl   %2,%%eax\n"
-                           "int    $0x80\n"
-
-                           /* In the parent: restore %ebx
-                            * In the child:  move "fn" into %ebx
-                            */
-                           "popl   %%ebx\n"
-
-                           /* if (%eax != 0)
-                            *   return %eax;
-                            */
-                           "test   %%eax,%%eax\n"
-                           "jnz    1f\n"
-
-                           /* In the child, now. Terminate frame pointer chain.
-                            */
-                           "movl   $0,%%ebp\n"
-
-                           /* Call "fn". "arg" is already on the stack.
-                            */
-                           "call   *%%ebx\n"
-
-                           /* Call _exit(%ebx). Unfortunately older versions
-                            * of gcc restrict the number of arguments that can
-                            * be passed to asm(). So, we need to hard-code the
-                            * system call number.
-                            */
-                           "movl   %%eax,%%ebx\n"
-                           "movl   $1,%%eax\n"
-                           "int    $0x80\n"
-
-                           /* Return to parent.
-                            */
-                         "1:\n"
-                           : "=a" (__res)
-                           : "0"(-EINVAL), "i"(__NR_clone),
-                             "m"(fn), "m"(child_stack), "m"(flags), "m"(arg),
-                             "m"(parent_tidptr), "m"(newtls), "m"(child_tidptr)
-                           : "memory", "ecx", "edx", "esi", "edi");
-      LSS_RETURN(int, __res);
-    }
-
-    #define __NR__fadvise64_64 __NR_fadvise64_64
-    LSS_INLINE _syscall6(int, _fadvise64_64, int, fd,
-                         unsigned, offset_lo, unsigned, offset_hi,
-                         unsigned, len_lo, unsigned, len_hi,
-                         int, advice)
-
-    LSS_INLINE int LSS_NAME(fadvise64)(int fd, loff_t offset,
-                                       loff_t len, int advice) {
-      return LSS_NAME(_fadvise64_64)(fd,
-                                     (unsigned)offset, (unsigned)(offset >>32),
-                                     (unsigned)len, (unsigned)(len >> 32),
-                                     advice);
-    }
-
-    LSS_INLINE void (*LSS_NAME(restore_rt)(void))(void) {
-      /* On i386, the kernel does not know how to return from a signal
-       * handler. Instead, it relies on user space to provide a
-       * restorer function that calls the {rt_,}sigreturn() system call.
-       * Unfortunately, we cannot just reference the glibc version of this
-       * function, as glibc goes out of its way to make it inaccessible.
-       */
-      void (*res)(void);
-      __asm__ __volatile__("call   2f\n"
-                         "0:.align 16\n"
-                         "1:movl   %1,%%eax\n"
-                           "int    $0x80\n"
-                         "2:popl   %0\n"
-                           "addl   $(1b-0b),%0\n"
-                           : "=a" (res)
-                           : "i"  (__NR_rt_sigreturn));
-      return res;
-    }
-    LSS_INLINE void (*LSS_NAME(restore)(void))(void) {
-      /* On i386, the kernel does not know how to return from a signal
-       * handler. Instead, it relies on user space to provide a
-       * restorer function that calls the {rt_,}sigreturn() system call.
-       * Unfortunately, we cannot just reference the glibc version of this
-       * function, as glibc goes out of its way to make it inaccessible.
-       */
-      void (*res)(void);
-      __asm__ __volatile__("call   2f\n"
-                         "0:.align 16\n"
-                         "1:pop    %%eax\n"
-                           "movl   %1,%%eax\n"
-                           "int    $0x80\n"
-                         "2:popl   %0\n"
-                           "addl   $(1b-0b),%0\n"
-                           : "=a" (res)
-                           : "i"  (__NR_sigreturn));
-      return res;
-    }
-  #elif defined(__x86_64__)
-    /* There are no known problems with any of the _syscallX() macros
-     * currently shipping for x86_64, but we still need to be able to define
-     * our own version so that we can override the location of the errno
-     * location (e.g. when using the clone() system call with the CLONE_VM
-     * option).
-     */
-    #undef  LSS_BODY
-    #define LSS_BODY(type,name, ...)                                          \
-          long __res;                                                         \
-          __asm__ __volatile__("syscall" : "=a" (__res) : "0" (__NR_##name),  \
-            ##__VA_ARGS__ : "r11", "rcx", "memory");                          \
-          LSS_RETURN(type, __res)
-    #undef _syscall0
-    #define _syscall0(type,name)                                              \
-      type LSS_NAME(name)() {                                                 \
-        LSS_BODY(type, name);                                                 \
-      }
-    #undef _syscall1
-    #define _syscall1(type,name,type1,arg1)                                   \
-      type LSS_NAME(name)(type1 arg1) {                                       \
-        LSS_BODY(type, name, "D" ((long)(arg1)));                             \
-      }
-    #undef _syscall2
-    #define _syscall2(type,name,type1,arg1,type2,arg2)                        \
-      type LSS_NAME(name)(type1 arg1, type2 arg2) {                           \
-        LSS_BODY(type, name, "D" ((long)(arg1)), "S" ((long)(arg2)));         \
-      }
-    #undef _syscall3
-    #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)             \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) {               \
-        LSS_BODY(type, name, "D" ((long)(arg1)), "S" ((long)(arg2)),          \
-                             "d" ((long)(arg3)));                             \
-      }
-    #undef _syscall4
-    #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)  \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {   \
-          long __res;                                                         \
-          __asm__ __volatile__("movq %5,%%r10; syscall" :                     \
-            "=a" (__res) : "0" (__NR_##name),                                 \
-            "D" ((long)(arg1)), "S" ((long)(arg2)), "d" ((long)(arg3)),       \
-            "g" ((long)(arg4)) : "r10", "r11", "rcx", "memory");              \
-          LSS_RETURN(type, __res);                                            \
-      }
-    #undef _syscall5
-    #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,  \
-                      type5,arg5)                                             \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,     \
-                          type5 arg5) {                                       \
-          long __res;                                                         \
-          __asm__ __volatile__("movq %5,%%r10; movq %6,%%r8; syscall" :       \
-            "=a" (__res) : "0" (__NR_##name),                                 \
-            "D" ((long)(arg1)), "S" ((long)(arg2)), "d" ((long)(arg3)),       \
-            "g" ((long)(arg4)), "g" ((long)(arg5)) :                          \
-            "r8", "r10", "r11", "rcx", "memory");                             \
-          LSS_RETURN(type, __res);                                            \
-      }
-    #undef _syscall6
-    #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,  \
-                      type5,arg5,type6,arg6)                                  \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,     \
-                          type5 arg5, type6 arg6) {                           \
-          long __res;                                                         \
-          __asm__ __volatile__("movq %5,%%r10; movq %6,%%r8; movq %7,%%r9;"   \
-                               "syscall" :                                    \
-            "=a" (__res) : "0" (__NR_##name),                                 \
-            "D" ((long)(arg1)), "S" ((long)(arg2)), "d" ((long)(arg3)),       \
-            "g" ((long)(arg4)), "g" ((long)(arg5)), "g" ((long)(arg6)) :      \
-            "r8", "r9", "r10", "r11", "rcx", "memory");                       \
-          LSS_RETURN(type, __res);                                            \
-      }
-    LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack,
-                                   int flags, void *arg, int *parent_tidptr,
-                                   void *newtls, int *child_tidptr) {
-      long __res;
-      {
-        register void *__tls  __asm__("r8")  = newtls;
-        register int  *__ctid __asm__("r10") = child_tidptr;
-        __asm__ __volatile__(/* if (fn == NULL)
-                              *   return -EINVAL;
-                              */
-                             "testq  %4,%4\n"
-                             "jz     1f\n"
-
-                             /* if (child_stack == NULL)
-                              *   return -EINVAL;
-                              */
-                             "testq  %5,%5\n"
-                             "jz     1f\n"
-
-                             /* childstack -= 2*sizeof(void *);
-                              */
-                             "subq   $16,%5\n"
-
-                             /* Push "arg" and "fn" onto the stack that will be
-                              * used by the child.
-                              */
-                             "movq   %7,8(%5)\n"
-                             "movq   %4,0(%5)\n"
-
-                             /* %rax = syscall(%rax = __NR_clone,
-                              *                %rdi = flags,
-                              *                %rsi = child_stack,
-                              *                %rdx = parent_tidptr,
-                              *                %r8  = new_tls,
-                              *                %r10 = child_tidptr)
-                              */
-                             "movq   %2,%%rax\n"
-                             "syscall\n"
-
-                             /* if (%rax != 0)
-                              *   return;
-                              */
-                             "testq  %%rax,%%rax\n"
-                             "jnz    1f\n"
-
-                             /* In the child. Terminate frame pointer chain.
-                              */
-                             "xorq   %%rbp,%%rbp\n"
-
-                             /* Call "fn(arg)".
-                              */
-                             "popq   %%rax\n"
-                             "popq   %%rdi\n"
-                             "call   *%%rax\n"
-
-                             /* Call _exit(%ebx).
-                              */
-                             "movq   %%rax,%%rdi\n"
-                             "movq   %3,%%rax\n"
-                             "syscall\n"
-
-                             /* Return to parent.
-                              */
-                           "1:\n"
-                             : "=a" (__res)
-                             : "0"(-EINVAL), "i"(__NR_clone), "i"(__NR_exit),
-                               "r"(fn), "S"(child_stack), "D"(flags), "r"(arg),
-                               "d"(parent_tidptr), "r"(__tls), "r"(__ctid)
-                             : "memory", "r11", "rcx");
-      }
-      LSS_RETURN(int, __res);
-    }
-    LSS_INLINE _syscall4(int, fadvise64, int, fd, loff_t, offset, loff_t, len,
-                         int,  advice)
-
-    LSS_INLINE void (*LSS_NAME(restore_rt)(void))(void) {
-      /* On x86-64, the kernel does not know how to return from
-       * a signal handler. Instead, it relies on user space to provide a
-       * restorer function that calls the rt_sigreturn() system call.
-       * Unfortunately, we cannot just reference the glibc version of this
-       * function, as glibc goes out of its way to make it inaccessible.
-       */
-      void (*res)(void);
-      __asm__ __volatile__("call   2f\n"
-                         "0:.align 16\n"
-                         "1:movq   %1,%%rax\n"
-                           "syscall\n"
-                         "2:popq   %0\n"
-                           "addq   $(1b-0b),%0\n"
-                           : "=a" (res)
-                           : "i"  (__NR_rt_sigreturn));
-      return res;
-    }
-  #elif defined(__ARM_ARCH_3__)
-    #undef LSS_REG
-    #define LSS_REG(r,a) register long __r##r __asm__("r"#r) = (long)a
-    #undef  LSS_BODY
-    #define LSS_BODY(type,name,args...)                                       \
-          register long __res_r0 __asm__("r0");                               \
-          long __res;                                                         \
-          __asm__ __volatile__ (__syscall(name)                               \
-                                : "=r"(__res_r0) : args : "lr", "memory");    \
-          __res = __res_r0;                                                   \
-          LSS_RETURN(type, __res)
-    #undef _syscall0
-    #define _syscall0(type, name)                                             \
-      type LSS_NAME(name)() {                                                 \
-        LSS_BODY(type, name);                                                 \
-      }
-    #undef _syscall1
-    #define _syscall1(type, name, type1, arg1)                                \
-      type LSS_NAME(name)(type1 arg1) {                                       \
-        LSS_REG(0, arg1); LSS_BODY(type, name, "r"(__r0));                    \
-      }
-    #undef _syscall2
-    #define _syscall2(type, name, type1, arg1, type2, arg2)                   \
-      type LSS_NAME(name)(type1 arg1, type2 arg2) {                           \
-        LSS_REG(0, arg1); LSS_REG(1, arg2);                                   \
-        LSS_BODY(type, name, "r"(__r0), "r"(__r1));                           \
-      }
-    #undef _syscall3
-    #define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3)      \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) {               \
-        LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3);                 \
-        LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2));                \
-      }
-    #undef _syscall4
-    #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)  \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {   \
-        LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3);                 \
-        LSS_REG(3, arg4);                                                     \
-        LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3));     \
-      }
-    #undef _syscall5
-    #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,  \
-                      type5,arg5)                                             \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,     \
-                          type5 arg5) {                                       \
-        LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3);                 \
-        LSS_REG(3, arg4); LSS_REG(4, arg5);                                   \
-        LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3),      \
-                             "r"(__r4));                                      \
-      }
-    #undef _syscall6
-    #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,  \
-                      type5,arg5,type6,arg6)                                  \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,     \
-                          type5 arg5, type6 arg6) {                           \
-        LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3);                 \
-        LSS_REG(3, arg4); LSS_REG(4, arg5); LSS_REG(5, arg6);                 \
-        LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3),      \
-                             "r"(__r4), "r"(__r5));                           \
-      }
-    LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack,
-                                   int flags, void *arg, int *parent_tidptr,
-                                   void *newtls, int *child_tidptr) {
-      long __res;
-      {
-        register int   __flags __asm__("r0") = flags;
-        register void *__stack __asm__("r1") = child_stack;
-        register void *__ptid  __asm__("r2") = parent_tidptr;
-        register void *__tls   __asm__("r3") = newtls;
-        register int  *__ctid  __asm__("r4") = child_tidptr;
-        __asm__ __volatile__(/* if (fn == NULL || child_stack == NULL)
-                              *   return -EINVAL;
-                              */
-                             "cmp   %2,#0\n"
-                             "cmpne %3,#0\n"
-                             "moveq %0,%1\n"
-                             "beq   1f\n"
-
-                             /* Push "arg" and "fn" onto the stack that will be
-                              * used by the child.
-                              */
-                             "str   %5,[%3,#-4]!\n"
-                             "str   %2,[%3,#-4]!\n"
-
-                             /* %r0 = syscall(%r0 = flags,
-                              *               %r1 = child_stack,
-                              *               %r2 = parent_tidptr,
-                              *               %r3 = newtls,
-                              *               %r4 = child_tidptr)
-                              */
-                             __syscall(clone)"\n"
-
-                             /* if (%r0 != 0)
-                              *   return %r0;
-                              */
-                             "movs  %0,r0\n"
-                             "bne   1f\n"
-
-                             /* In the child, now. Call "fn(arg)".
-                              */
-                             "ldr   r0,[sp, #4]\n"
-                             "mov   lr,pc\n"
-                             "ldr   pc,[sp]\n"
-
-                             /* Call _exit(%r0).
-                              */
-                             __syscall(exit)"\n"
-                           "1:\n"
-                             : "=r" (__res)
-                             : "i"(-EINVAL),
-                               "r"(fn), "r"(__stack), "r"(__flags), "r"(arg),
-                               "r"(__ptid), "r"(__tls), "r"(__ctid)
-                             : "cc", "lr", "memory");
-      }
-      LSS_RETURN(int, __res);
-    }
-  #elif defined(__ARM_EABI__)
-    /* Most definitions of _syscallX() neglect to mark "memory" as being
-     * clobbered. This causes problems with compilers, that do a better job
-     * at optimizing across __asm__ calls.
-     * So, we just have to redefine all fo the _syscallX() macros.
-     */
-    #undef LSS_REG
-    #define LSS_REG(r,a) register long __r##r __asm__("r"#r) = (long)a
-    #undef  LSS_BODY
-    #define LSS_BODY(type,name,args...)                                       \
-          register long __res_r0 __asm__("r0");                               \
-          long __res;                                                         \
-          __asm__ __volatile__ ("push {r7}\n"                                 \
-                                "mov r7, %1\n"                                \
-                                "swi 0x0\n"                                   \
-                                "pop {r7}\n"                                  \
-                                : "=r"(__res_r0)                              \
-                                : "i"(__NR_##name) , ## args                  \
-                                : "lr", "memory");                            \
-          __res = __res_r0;                                                   \
-          LSS_RETURN(type, __res)
-    #undef _syscall0
-    #define _syscall0(type, name)                                             \
-      type LSS_NAME(name)() {                                                 \
-        LSS_BODY(type, name);                                                 \
-      }
-    #undef _syscall1
-    #define _syscall1(type, name, type1, arg1)                                \
-      type LSS_NAME(name)(type1 arg1) {                                       \
-        LSS_REG(0, arg1); LSS_BODY(type, name, "r"(__r0));                    \
-      }
-    #undef _syscall2
-    #define _syscall2(type, name, type1, arg1, type2, arg2)                   \
-      type LSS_NAME(name)(type1 arg1, type2 arg2) {                           \
-        LSS_REG(0, arg1); LSS_REG(1, arg2);                                   \
-        LSS_BODY(type, name, "r"(__r0), "r"(__r1));                           \
-      }
-    #undef _syscall3
-    #define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3)      \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) {               \
-        LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3);                 \
-        LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2));                \
-      }
-    #undef _syscall4
-    #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)  \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {   \
-        LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3);                 \
-        LSS_REG(3, arg4);                                                     \
-        LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3));     \
-      }
-    #undef _syscall5
-    #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,  \
-                      type5,arg5)                                             \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,     \
-                          type5 arg5) {                                       \
-        LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3);                 \
-        LSS_REG(3, arg4); LSS_REG(4, arg5);                                   \
-        LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3),      \
-                             "r"(__r4));                                      \
-      }
-    #undef _syscall6
-    #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,  \
-                      type5,arg5,type6,arg6)                                  \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,     \
-                          type5 arg5, type6 arg6) {                           \
-        LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3);                 \
-        LSS_REG(3, arg4); LSS_REG(4, arg5); LSS_REG(5, arg6);                 \
-        LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3),      \
-                             "r"(__r4), "r"(__r5));                           \
-      }
-    LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack,
-                                   int flags, void *arg, int *parent_tidptr,
-                                   void *newtls, int *child_tidptr) {
-      long __res;
-      {
-        register int   __flags __asm__("r0") = flags;
-        register void *__stack __asm__("r1") = child_stack;
-        register void *__ptid  __asm__("r2") = parent_tidptr;
-        register void *__tls   __asm__("r3") = newtls;
-        register int  *__ctid  __asm__("r4") = child_tidptr;
-        __asm__ __volatile__(/* if (fn == NULL || child_stack == NULL)
-                              *   return -EINVAL;
-                              */
-                             "cmp   %2,#0\n"
-                             "cmpne %3,#0\n"
-                             "moveq %0,%1\n"
-                             "beq   1f\n"
-
-                             /* Push "arg" and "fn" onto the stack that will be
-                              * used by the child.
-                              */
-                             "str   %5,[%3,#-4]!\n"
-                             "str   %2,[%3,#-4]!\n"
-
-                             /* %r0 = syscall(%r0 = flags,
-                              *               %r1 = child_stack,
-                              *               %r2 = parent_tidptr,
-                              *               %r3 = newtls,
-                              *               %r4 = child_tidptr)
-                              */
-                             "mov r7, %9\n"
-                             "swi 0x0\n"
-
-                             /* if (%r0 != 0)
-                              *   return %r0;
-                              */
-                             "movs  %0,r0\n"
-                             "bne   1f\n"
-
-                             /* In the child, now. Call "fn(arg)".
-                              */
-                             "ldr   r0,[sp, #4]\n"
-                             "mov   lr,pc\n"
-                             "ldr   pc,[sp]\n"
-
-                             /* Call _exit(%r0).
-                              */
-                             "mov r7, %10\n"
-                             "swi 0x0\n"
-                           "1:\n"
-                             : "=r" (__res)
-                             : "i"(-EINVAL),
-                               "r"(fn), "r"(__stack), "r"(__flags), "r"(arg),
-                               "r"(__ptid), "r"(__tls), "r"(__ctid),
-                               "i"(__NR_clone), "i"(__NR_exit)
-                             : "cc", "r7", "lr", "memory");
-      }
-      LSS_RETURN(int, __res);
-    }
-  #elif defined(__mips__)
-    #undef LSS_REG
-    #define LSS_REG(r,a) register unsigned long __r##r __asm__("$"#r) =       \
-                                 (unsigned long)(a)
-    #undef  LSS_BODY
-    #define LSS_BODY(type,name,r7,...)                                        \
-          register unsigned long __v0 __asm__("$2") = __NR_##name;            \
-          __asm__ __volatile__ ("syscall\n"                                   \
-                                : "=&r"(__v0), r7 (__r7)                      \
-                                : "0"(__v0), ##__VA_ARGS__                    \
-                                : "$8", "$9", "$10", "$11", "$12",            \
-                                  "$13", "$14", "$15", "$24", "memory");      \
-          LSS_RETURN(type, __v0, __r7)
-    #undef _syscall0
-    #define _syscall0(type, name)                                             \
-      type LSS_NAME(name)() {                                                 \
-        register unsigned long __r7 __asm__("$7");                            \
-        LSS_BODY(type, name, "=r");                                           \
-      }
-    #undef _syscall1
-    #define _syscall1(type, name, type1, arg1)                                \
-      type LSS_NAME(name)(type1 arg1) {                                       \
-        register unsigned long __r7 __asm__("$7");                            \
-        LSS_REG(4, arg1); LSS_BODY(type, name, "=r", "r"(__r4));              \
-      }
-    #undef _syscall2
-    #define _syscall2(type, name, type1, arg1, type2, arg2)                   \
-      type LSS_NAME(name)(type1 arg1, type2 arg2) {                           \
-        register unsigned long __r7 __asm__("$7");                            \
-        LSS_REG(4, arg1); LSS_REG(5, arg2);                                   \
-        LSS_BODY(type, name, "=r", "r"(__r4), "r"(__r5));                     \
-      }
-    #undef _syscall3
-    #define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3)      \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) {               \
-        register unsigned long __r7 __asm__("$7");                            \
-        LSS_REG(4, arg1); LSS_REG(5, arg2); LSS_REG(6, arg3);                 \
-        LSS_BODY(type, name, "=r", "r"(__r4), "r"(__r5), "r"(__r6));          \
-      }
-    #undef _syscall4
-    #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)  \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {   \
-        LSS_REG(4, arg1); LSS_REG(5, arg2); LSS_REG(6, arg3);                 \
-        LSS_REG(7, arg4);                                                     \
-        LSS_BODY(type, name, "+r", "r"(__r4), "r"(__r5), "r"(__r6));          \
-      }
-    #undef _syscall5
-    #if _MIPS_SIM == _MIPS_SIM_ABI32
-    /* The old 32bit MIPS system call API passes the fifth and sixth argument
-     * on the stack, whereas the new APIs use registers "r8" and "r9".
-     */
-    #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,  \
-                      type5,arg5)                                             \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,     \
-                          type5 arg5) {                                       \
-        LSS_REG(4, arg1); LSS_REG(5, arg2); LSS_REG(6, arg3);                 \
-        LSS_REG(7, arg4);                                                     \
-        register unsigned long __v0 __asm__("$2");                            \
-        __asm__ __volatile__ (".set noreorder\n"                              \
-                              "lw    $2, %6\n"                                \
-                              "subu  $29, 32\n"                               \
-                              "sw    $2, 16($29)\n"                           \
-                              "li    $2, %2\n"                                \
-                              "syscall\n"                                     \
-                              "addiu $29, 32\n"                               \
-                              ".set reorder\n"                                \
-                              : "=&r"(__v0), "+r" (__r7)                      \
-                              : "i" (__NR_##name), "r"(__r4), "r"(__r5),      \
-                                "r"(__r6), "m" ((unsigned long)arg5)          \
-                              : "$8", "$9", "$10", "$11", "$12",              \
-                                "$13", "$14", "$15", "$24", "memory");        \
-        LSS_RETURN(type, __v0, __r7);                                         \
-      }
-    #else
-    #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,  \
-                      type5,arg5)                                             \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,     \
-                          type5 arg5) {                                       \
-        LSS_REG(4, arg1); LSS_REG(5, arg2); LSS_REG(6, arg3);                 \
-        LSS_REG(7, arg4); LSS_REG(8, arg5);                                   \
-        LSS_BODY(type, name, "+r", "r"(__r4), "r"(__r5), "r"(__r6),           \
-                 "r"(__r8));                                                  \
-      }
-    #endif
-    #undef _syscall6
-    #if _MIPS_SIM == _MIPS_SIM_ABI32
-    /* The old 32bit MIPS system call API passes the fifth and sixth argument
-     * on the stack, whereas the new APIs use registers "r8" and "r9".
-     */
-    #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,  \
-                      type5,arg5,type6,arg6)                                  \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,     \
-                          type5 arg5, type6 arg6) {                           \
-        LSS_REG(4, arg1); LSS_REG(5, arg2); LSS_REG(6, arg3);                 \
-        LSS_REG(7, arg4);                                                     \
-        register unsigned long __v0 __asm__("$2");                            \
-        __asm__ __volatile__ (".set noreorder\n"                              \
-                              "lw    $2, %6\n"                                \
-                              "lw    $8, %7\n"                                \
-                              "subu  $29, 32\n"                               \
-                              "sw    $2, 16($29)\n"                           \
-                              "sw    $8, 20($29)\n"                           \
-                              "li    $2, %2\n"                                \
-                              "syscall\n"                                     \
-                              "addiu $29, 32\n"                               \
-                              ".set reorder\n"                                \
-                              : "=&r"(__v0), "+r" (__r7)                      \
-                              : "i" (__NR_##name), "r"(__r4), "r"(__r5),      \
-                                "r"(__r6), "r" ((unsigned long)arg5),         \
-                                "r" ((unsigned long)arg6)                     \
-                              : "$8", "$9", "$10", "$11", "$12",              \
-                                "$13", "$14", "$15", "$24", "memory");        \
-        LSS_RETURN(type, __v0, __r7);                                         \
-      }
-    #else
-    #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,  \
-                      type5,arg5,type6,arg6)                                  \
-      type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,     \
-                          type5 arg5,type6 arg6) {                            \
-        LSS_REG(4, arg1); LSS_REG(5, arg2); LSS_REG(6, arg3);                 \
-        LSS_REG(7, arg4); LSS_REG(8, arg5); LSS_REG(9, arg6);                 \
-        LSS_BODY(type, name, "+r", "r"(__r4), "r"(__r5), "r"(__r6),           \
-                 "r"(__r8), "r"(__r9));                                       \
-      }
-    #endif
-    LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack,
-                                   int flags, void *arg, int *parent_tidptr,
-                                   void *newtls, int *child_tidptr) {
-      register unsigned long __v0 __asm__("$2");
-      register unsigned long __r7 __asm__("$7") = (unsigned long)newtls;
-      {
-        register int   __flags __asm__("$4") = flags;
-        register void *__stack __asm__("$5") = child_stack;
-        register void *__ptid  __asm__("$6") = parent_tidptr;
-        register int  *__ctid  __asm__("$8") = child_tidptr;
-        __asm__ __volatile__(
-          #if _MIPS_SIM == _MIPS_SIM_ABI32 && _MIPS_SZPTR == 32
-                             "subu  $29,24\n"
-          #elif _MIPS_SIM == _MIPS_SIM_NABI32
-                             "sub   $29,16\n"
-          #else
-                             "dsubu $29,16\n"
-          #endif
-
-                             /* if (fn == NULL || child_stack == NULL)
-                              *   return -EINVAL;
-                              */
-                             "li    %0,%2\n"
-                             "beqz  %5,1f\n"
-                             "beqz  %6,1f\n"
-
-                             /* Push "arg" and "fn" onto the stack that will be
-                              * used by the child.
-                              */
-          #if _MIPS_SIM == _MIPS_SIM_ABI32 && _MIPS_SZPTR == 32
-                             "subu  %6,32\n"
-                             "sw    %5,0(%6)\n"
-                             "sw    %8,4(%6)\n"
-          #elif _MIPS_SIM == _MIPS_SIM_NABI32
-                             "sub   %6,32\n"
-                             "sw    %5,0(%6)\n"
-                             "sw    %8,8(%6)\n"
-          #else
-                             "dsubu %6,32\n"
-                             "sd    %5,0(%6)\n"
-                             "sd    %8,8(%6)\n"
-          #endif
-
-                             /* $7 = syscall($4 = flags,
-                              *              $5 = child_stack,
-                              *              $6 = parent_tidptr,
-                              *              $7 = newtls,
-                              *              $8 = child_tidptr)
-                              */
-                             "li    $2,%3\n"
-                             "syscall\n"
-
-                             /* if ($7 != 0)
-                              *   return $2;
-                              */
-                             "bnez  $7,1f\n"
-                             "bnez  $2,1f\n"
-
-                             /* In the child, now. Call "fn(arg)".
-                              */
-          #if _MIPS_SIM == _MIPS_SIM_ABI32 && _MIPS_SZPTR == 32
-                            "lw    $25,0($29)\n"
-                            "lw    $4,4($29)\n"
-          #elif _MIPS_SIM == _MIPS_SIM_NABI32
-                            "lw    $25,0($29)\n"
-                            "lw    $4,8($29)\n"
-          #else
-                            "ld    $25,0($29)\n"
-                            "ld    $4,8($29)\n"
-          #endif
-                            "jalr  $25\n"
-
-                             /* Call _exit($2)
-                              */
-                            "move  $4,$2\n"
-                            "li    $2,%4\n"
-                            "syscall\n"
-
-                           "1:\n"
-          #if _MIPS_SIM == _MIPS_SIM_ABI32 && _MIPS_SZPTR == 32
-                             "addu  $29, 24\n"
-          #elif _MIPS_SIM == _MIPS_SIM_NABI32
-                             "add   $29, 16\n"
-          #else
-                             "daddu $29,16\n"
-          #endif
-                             : "=&r" (__v0), "=r" (__r7)
-                             : "i"(-EINVAL), "i"(__NR_clone), "i"(__NR_exit),
-                               "r"(fn), "r"(__stack), "r"(__flags), "r"(arg),
-                               "r"(__ptid), "r"(__r7), "r"(__ctid)
-                             : "$9", "$10", "$11", "$12", "$13", "$14", "$15",
-                               "$24", "memory");
-      }
-      LSS_RETURN(int, __v0, __r7);
-    }
-  #elif defined (__PPC__)
-    #undef  LSS_LOADARGS_0
-    #define LSS_LOADARGS_0(name, dummy...)                                    \
-        __sc_0 = __NR_##name
-    #undef  LSS_LOADARGS_1
-    #define LSS_LOADARGS_1(name, arg1)                                        \
-            LSS_LOADARGS_0(name);                                             \
-            __sc_3 = (unsigned long) (arg1)
-    #undef  LSS_LOADARGS_2
-    #define LSS_LOADARGS_2(name, arg1, arg2)                                  \
-            LSS_LOADARGS_1(name, arg1);                                       \
-            __sc_4 = (unsigned long) (arg2)
-    #undef  LSS_LOADARGS_3
-    #define LSS_LOADARGS_3(name, arg1, arg2, arg3)                            \
-            LSS_LOADARGS_2(name, arg1, arg2);                                 \
-            __sc_5 = (unsigned long) (arg3)
-    #undef  LSS_LOADARGS_4
-    #define LSS_LOADARGS_4(name, arg1, arg2, arg3, arg4)                      \
-            LSS_LOADARGS_3(name, arg1, arg2, arg3);                           \
-            __sc_6 = (unsigned long) (arg4)
-    #undef  LSS_LOADARGS_5
-    #define LSS_LOADARGS_5(name, arg1, arg2, arg3, arg4, arg5)                \
-            LSS_LOADARGS_4(name, arg1, arg2, arg3, arg4);                     \
-            __sc_7 = (unsigned long) (arg5)
-    #undef  LSS_LOADARGS_6
-    #define LSS_LOADARGS_6(name, arg1, arg2, arg3, arg4, arg5, arg6)          \
-            LSS_LOADARGS_5(name, arg1, arg2, arg3, arg4, arg5);               \
-            __sc_8 = (unsigned long) (arg6)
-    #undef  LSS_ASMINPUT_0
-    #define LSS_ASMINPUT_0 "0" (__sc_0)
-    #undef  LSS_ASMINPUT_1
-    #define LSS_ASMINPUT_1 LSS_ASMINPUT_0, "1" (__sc_3)
-    #undef  LSS_ASMINPUT_2
-    #define LSS_ASMINPUT_2 LSS_ASMINPUT_1, "2" (__sc_4)
-    #undef  LSS_ASMINPUT_3
-    #define LSS_ASMINPUT_3 LSS_ASMINPUT_2, "3" (__sc_5)
-    #undef  LSS_ASMINPUT_4
-    #define LSS_ASMINPUT_4 LSS_ASMINPUT_3, "4" (__sc_6)
-    #undef  LSS_ASMINPUT_5
-    #define LSS_ASMINPUT_5 LSS_ASMINPUT_4, "5" (__sc_7)
-    #undef  LSS_ASMINPUT_6
-    #define LSS_ASMINPUT_6 LSS_ASMINPUT_5, "6" (__sc_8)
-    #undef  LSS_BODY
-    #define LSS_BODY(nr, type, name, args...)                                 \
-        long __sc_ret, __sc_err;                                              \
-        {                                                                     \
-                        register unsigned long __sc_0 __asm__ ("r0");         \
-                        register unsigned long __sc_3 __asm__ ("r3");         \
-                        register unsigned long __sc_4 __asm__ ("r4");         \
-                        register unsigned long __sc_5 __asm__ ("r5");         \
-                        register unsigned long __sc_6 __asm__ ("r6");         \
-                        register unsigned long __sc_7 __asm__ ("r7");         \
-                        register unsigned long __sc_8 __asm__ ("r8");         \
-                                                                              \
-            LSS_LOADARGS_##nr(name, args);                                    \
-            __asm__ __volatile__                                              \
-                ("sc\n\t"                                                     \
-                 "mfcr %0"                                                    \
-                 : "=&r" (__sc_0),                                            \
-                   "=&r" (__sc_3), "=&r" (__sc_4),                            \
-                   "=&r" (__sc_5), "=&r" (__sc_6),                            \
-                   "=&r" (__sc_7), "=&r" (__sc_8)                             \
-                 : LSS_ASMINPUT_##nr                                          \
-                 : "cr0", "ctr", "memory",                                    \
-                   "r9", "r10", "r11", "r12");                                \
-            __sc_ret = __sc_3;                                                \
-            __sc_err = __sc_0;                                                \
-        }                                                                     \
-        LSS_RETURN(type, __sc_ret, __sc_err)
-    #undef _syscall0
-    #define _syscall0(type, name)                                             \
-       type LSS_NAME(name)(void) {                                            \
-          LSS_BODY(0, type, name);                                            \
-       }
-    #undef _syscall1
-    #define _syscall1(type, name, type1, arg1)                                \
-       type LSS_NAME(name)(type1 arg1) {                                      \
-          LSS_BODY(1, type, name, arg1);                                      \
-       }
-    #undef _syscall2
-    #define _syscall2(type, name, type1, arg1, type2, arg2)                   \
-       type LSS_NAME(name)(type1 arg1, type2 arg2) {                          \
-          LSS_BODY(2, type, name, arg1, arg2);                                \
-       }
-    #undef _syscall3
-    #define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3)      \
-       type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) {              \
-          LSS_BODY(3, type, name, arg1, arg2, arg3);                          \
-       }
-    #undef _syscall4
-    #define _syscall4(type, name, type1, arg1, type2, arg2, type3, arg3,      \
-                                  type4, arg4)                                \
-       type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {  \
-          LSS_BODY(4, type, name, arg1, arg2, arg3, arg4);                    \
-       }
-    #undef _syscall5
-    #define _syscall5(type, name, type1, arg1, type2, arg2, type3, arg3,      \
-                                  type4, arg4, type5, arg5)                   \
-       type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,    \
-                                               type5 arg5) {                  \
-          LSS_BODY(5, type, name, arg1, arg2, arg3, arg4, arg5);              \
-       }
-    #undef _syscall6
-    #define _syscall6(type, name, type1, arg1, type2, arg2, type3, arg3,      \
-                                  type4, arg4, type5, arg5, type6, arg6)      \
-       type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4,    \
-                                               type5 arg5, type6 arg6) {      \
-          LSS_BODY(6, type, name, arg1, arg2, arg3, arg4, arg5, arg6);        \
-       }
-    /* clone function adapted from glibc 2.3.6 clone.S                       */
-    /* TODO(csilvers): consider wrapping some args up in a struct, like we
-     * do for i386's _syscall6, so we can compile successfully on gcc 2.95
-     */
-    LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack,
-                                   int flags, void *arg, int *parent_tidptr,
-                                   void *newtls, int *child_tidptr) {
-      long __ret, __err;
-      {
-        register int (*__fn)(void *)    __asm__ ("r8")  = fn;
-        register void *__cstack                 __asm__ ("r4")  = child_stack;
-        register int __flags                    __asm__ ("r3")  = flags;
-        register void * __arg                   __asm__ ("r9")  = arg;
-        register int * __ptidptr                __asm__ ("r5")  = parent_tidptr;
-        register void * __newtls                __asm__ ("r6")  = newtls;
-        register int * __ctidptr                __asm__ ("r7")  = child_tidptr;
-        __asm__ __volatile__(
-            /* check for fn == NULL
-             * and child_stack == NULL
-             */
-            "cmpwi cr0, %6, 0\n\t"
-            "cmpwi cr1, %7, 0\n\t"
-            "cror cr0*4+eq, cr1*4+eq, cr0*4+eq\n\t"
-            "beq- cr0, 1f\n\t"
-
-            /* set up stack frame for child                                  */
-            "clrrwi %7, %7, 4\n\t"
-            "li 0, 0\n\t"
-            "stwu 0, -16(%7)\n\t"
-
-            /* fn, arg, child_stack are saved across the syscall: r28-30     */
-            "mr 28, %6\n\t"
-            "mr 29, %7\n\t"
-            "mr 27, %9\n\t"
-
-            /* syscall                                                       */
-            "li 0, %4\n\t"
-            /* flags already in r3
-             * child_stack already in r4
-             * ptidptr already in r5
-             * newtls already in r6
-             * ctidptr already in r7
-             */
-            "sc\n\t"
-
-            /* Test if syscall was successful                                */
-            "cmpwi cr1, 3, 0\n\t"
-            "crandc cr1*4+eq, cr1*4+eq, cr0*4+so\n\t"
-            "bne- cr1, 1f\n\t"
-
-            /* Do the function call                                          */
-            "mtctr 28\n\t"
-            "mr 3, 27\n\t"
-            "bctrl\n\t"
-
-            /* Call _exit(r3)                                                */
-            "li 0, %5\n\t"
-            "sc\n\t"
-
-            /* Return to parent                                              */
-            "1:\n"
-            "mfcr %1\n\t"
-            "mr %0, 3\n\t"
-              : "=r" (__ret), "=r" (__err)
-              : "0" (-1), "1" (EINVAL),
-                "i" (__NR_clone), "i" (__NR_exit),
-                "r" (__fn), "r" (__cstack), "r" (__flags),
-                "r" (__arg), "r" (__ptidptr), "r" (__newtls),
-                "r" (__ctidptr)
-              : "cr0", "cr1", "memory", "ctr",
-                "r0", "r29", "r27", "r28");
-      }
-      LSS_RETURN(int, __ret, __err);
-    }
-  #endif
-  #define __NR__exit   __NR_exit
-  #define __NR__gettid __NR_gettid
-  #define __NR__mremap __NR_mremap
-  LSS_INLINE _syscall1(int,     chdir,           const char *,p)
-  LSS_INLINE _syscall1(int,     close,           int,         f)
-  LSS_INLINE _syscall1(int,     dup,             int,         f)
-  LSS_INLINE _syscall2(int,     dup2,            int,         s,
-                       int,            d)
-  LSS_INLINE _syscall3(int,     execve,          const char*, f,
-                       const char*const*,a,const char*const*, e)
-  LSS_INLINE _syscall1(int,     _exit,           int,         e)
-  LSS_INLINE _syscall3(int,     fcntl,           int,         f,
-                       int,            c, long,   a)
-  LSS_INLINE _syscall0(pid_t,   fork)
-  LSS_INLINE _syscall2(int,     fstat,           int,         f,
-                      struct kernel_stat*,   b)
-  LSS_INLINE _syscall2(int,     fstatfs,         int,         f,
-                      struct kernel_statfs*, b)
-  LSS_INLINE _syscall4(int,     futex,           int*,        a,
-                       int,            o, int,    v,
-                      struct kernel_timespec*, t)
-  LSS_INLINE _syscall3(int,     getdents,        int,         f,
-                      struct kernel_dirent*, d, int,    c)
-  LSS_INLINE _syscall3(int,     getdents64,      int,         f,
-                      struct kernel_dirent64*, d, int,    c)
-  LSS_INLINE _syscall0(gid_t,   getegid)
-  LSS_INLINE _syscall0(uid_t,   geteuid)
-  LSS_INLINE _syscall0(pid_t,   getpgrp)
-  LSS_INLINE _syscall0(pid_t,   getpid)
-  LSS_INLINE _syscall0(pid_t,   getppid)
-  LSS_INLINE _syscall2(int,     getpriority,     int,         a,
-                       int,            b)
-#if !defined(__ARM_EABI__)
-  LSS_INLINE _syscall2(int,     getrlimit,       int,         r,
-                      struct kernel_rlimit*, l)
-#endif
-  LSS_INLINE _syscall1(pid_t,   getsid,          pid_t,       p)
-  LSS_INLINE _syscall0(pid_t,   _gettid)
-  LSS_INLINE _syscall2(pid_t,   gettimeofday,    struct kernel_timeval*, t,
-                       void*, tz)
-  LSS_INLINE _syscall5(int,     setxattr,        const char *,p,
-                       const char *,   n,        const void *,v,
-                       size_t,         s,        int,         f)
-  LSS_INLINE _syscall5(int,     lsetxattr,       const char *,p,
-                       const char *,   n,        const void *,v,
-                       size_t,         s,        int,         f)
-  LSS_INLINE _syscall4(ssize_t, getxattr,        const char *,p,
-                       const char *,   n,        void *,      v, size_t, s)
-  LSS_INLINE _syscall4(ssize_t, lgetxattr,       const char *,p,
-                       const char *,   n,        void *,      v, size_t, s)
-  LSS_INLINE _syscall2(int,     kill,            pid_t,       p,
-                       int,            s)
-  LSS_INLINE _syscall3(off_t,   lseek,           int,         f,
-                       off_t,          o, int,    w)
-  LSS_INLINE _syscall2(int,     munmap,          void*,       s,
-                       size_t,         l)
-  LSS_INLINE _syscall6(long,    move_pages,      pid_t,       p,
-                       unsigned long,  n, void **,g, int *,   d,
-                       int *,          s, int,    f)
-  LSS_INLINE _syscall5(void*,   _mremap,         void*,       o,
-                       size_t,         os,       size_t,      ns,
-                       unsigned long,  f, void *, a)
-  LSS_INLINE _syscall3(int,     open,            const char*, p,
-                       int,            f, int,    m)
-  LSS_INLINE _syscall3(int,     poll,           struct kernel_pollfd*, u,
-                       unsigned int,   n, int,    t)
-  LSS_INLINE _syscall2(int,     prctl,           int,         o,
-                       long,           a)
-  LSS_INLINE _syscall4(long,    ptrace,          int,         r,
-                       pid_t,          p, void *, a, void *, d)
-  LSS_INLINE _syscall3(ssize_t, read,            int,         f,
-                       void *,         b, size_t, c)
-  LSS_INLINE _syscall3(int,     readlink,        const char*, p,
-                       char*,          b, size_t, s)
-  LSS_INLINE _syscall4(int,     rt_sigaction,    int,         s,
-                       const struct kernel_sigaction*, a,
-                       struct kernel_sigaction*, o, size_t,   c)
-  LSS_INLINE _syscall2(int, rt_sigpending, struct kernel_sigset_t *, s,
-                       size_t,         c)
-  LSS_INLINE _syscall4(int, rt_sigprocmask,      int,         h,
-                       const struct kernel_sigset_t*,  s,
-                       struct kernel_sigset_t*,        o, size_t, c)
-  LSS_INLINE _syscall2(int, rt_sigsuspend,
-                       const struct kernel_sigset_t*, s,  size_t, c)
-  LSS_INLINE _syscall3(int,     sched_getaffinity,pid_t,      p,
-                       unsigned int,   l, unsigned long *, m)
-  LSS_INLINE _syscall3(int,     sched_setaffinity,pid_t,      p,
-                       unsigned int,   l, unsigned long *, m)
-  LSS_INLINE _syscall0(int,     sched_yield)
-  LSS_INLINE _syscall1(long,    set_tid_address, int *,       t)
-  LSS_INLINE _syscall1(int,     setfsgid,        gid_t,       g)
-  LSS_INLINE _syscall1(int,     setfsuid,        uid_t,       u)
-  LSS_INLINE _syscall2(int,     setpgid,         pid_t,       p,
-                       pid_t,          g)
-  LSS_INLINE _syscall3(int,     setpriority,     int,         a,
-                       int,            b, int,    p)
-  LSS_INLINE _syscall3(int,     setresgid,       gid_t,       r,
-                       gid_t,          e, gid_t,  s)
-  LSS_INLINE _syscall3(int,     setresuid,       uid_t,       r,
-                       uid_t,          e, uid_t,  s)
-  LSS_INLINE _syscall2(int,     setrlimit,       int,         r,
-                       const struct kernel_rlimit*, l)
-  LSS_INLINE _syscall0(pid_t,    setsid)
-  LSS_INLINE _syscall2(int,     sigaltstack,     const stack_t*, s,
-                       const stack_t*, o)
-  LSS_INLINE _syscall2(int,     stat,            const char*, f,
-                      struct kernel_stat*,   b)
-  LSS_INLINE _syscall2(int,     statfs,          const char*, f,
-                      struct kernel_statfs*, b)
-  LSS_INLINE _syscall1(int,    unlink,          const char*, f)
-  LSS_INLINE _syscall3(ssize_t, write,            int,        f,
-                       const void *,   b, size_t, c)
-  LSS_INLINE _syscall3(ssize_t, writev,           int,        f,
-                       const struct kernel_iovec*, v, size_t, c)
-  #if defined(__x86_64__) ||                                                  \
-     (defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI32)
-    LSS_INLINE _syscall3(int, recvmsg,            int,   s,
-                        struct kernel_msghdr*,     m, int, f)
-    LSS_INLINE _syscall3(int, sendmsg,            int,   s,
-                         const struct kernel_msghdr*, m, int, f)
-    LSS_INLINE _syscall6(int, sendto,             int,   s,
-                         const void*,             m, size_t, l,
-                         int,                     f,
-                         const struct kernel_sockaddr*, a, int, t)
-    LSS_INLINE _syscall2(int, shutdown,           int,   s,
-                         int,                     h)
-    LSS_INLINE _syscall3(int, socket,             int,   d,
-                         int,                     t, int,       p)
-    LSS_INLINE _syscall4(int, socketpair,         int,   d,
-                         int,                     t, int,       p, int*, s)
-  #endif
-  #if defined(__x86_64__)
-    LSS_INLINE _syscall6(void*, mmap,              void*, s,
-                         size_t,                   l, int,               p,
-                         int,                      f, int,               d,
-                         __off64_t,                o)
-    LSS_INLINE _syscall4(int, newfstatat,         int,   d,
-                         const char *,            p,
-                        struct kernel_stat*,       b, int, f)
-
-    LSS_INLINE int LSS_NAME(setfsgid32)(gid_t gid) {
-      return LSS_NAME(setfsgid)(gid);
-    }
-
-    LSS_INLINE int LSS_NAME(setfsuid32)(uid_t uid) {
-      return LSS_NAME(setfsuid)(uid);
-    }
-
-    LSS_INLINE int LSS_NAME(setresgid32)(gid_t rgid, gid_t egid, gid_t sgid) {
-      return LSS_NAME(setresgid)(rgid, egid, sgid);
-    }
-
-    LSS_INLINE int LSS_NAME(setresuid32)(uid_t ruid, uid_t euid, uid_t suid) {
-      return LSS_NAME(setresuid)(ruid, euid, suid);
-    }
-
-    LSS_INLINE int LSS_NAME(sigaction)(int signum,
-                                       const struct kernel_sigaction *act,
-                                       struct kernel_sigaction *oldact) {
-      /* On x86_64, the kernel requires us to always set our own
-       * SA_RESTORER in order to be able to return from a signal handler.
-       * This function must have a "magic" signature that the "gdb"
-       * (and maybe the kernel?) can recognize.
-       */
-      if (act != NULL && !(act->sa_flags & SA_RESTORER)) {
-        struct kernel_sigaction a = *act;
-        a.sa_flags   |= SA_RESTORER;
-        a.sa_restorer = LSS_NAME(restore_rt)();
-        return LSS_NAME(rt_sigaction)(signum, &a, oldact,
-                                      (KERNEL_NSIG+7)/8);
-      } else {
-        return LSS_NAME(rt_sigaction)(signum, act, oldact,
-                                      (KERNEL_NSIG+7)/8);
-      }
-    }
-
-    LSS_INLINE int LSS_NAME(sigpending)(struct kernel_sigset_t *set) {
-      return LSS_NAME(rt_sigpending)(set, (KERNEL_NSIG+7)/8);
-    }
-
-    LSS_INLINE int LSS_NAME(sigprocmask)(int how,
-                                         const struct kernel_sigset_t *set,
-                                         struct kernel_sigset_t *oldset) {
-      return LSS_NAME(rt_sigprocmask)(how, set, oldset, (KERNEL_NSIG+7)/8);
-    }
-
-    LSS_INLINE int LSS_NAME(sigsuspend)(const struct kernel_sigset_t *set) {
-      return LSS_NAME(rt_sigsuspend)(set, (KERNEL_NSIG+7)/8);
-    }
-  #endif
-  #if defined(__x86_64__) || defined(__ARM_ARCH_3__) ||                       \
-      defined(__ARM_EABI__) ||                                             \
-     (defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI32)
-    LSS_INLINE _syscall4(pid_t, wait4,            pid_t, p,
-                         int*,                    s, int,       o,
-                        struct kernel_rusage*,     r)
-
-    LSS_INLINE pid_t LSS_NAME(waitpid)(pid_t pid, int *status, int options){
-      return LSS_NAME(wait4)(pid, status, options, 0);
-    }
-  #endif
-  #if defined(__i386__) || defined(__x86_64__)
-    LSS_INLINE _syscall4(int, openat, int, d, const char *, p, int, f, int, m)
-    LSS_INLINE _syscall3(int, unlinkat, int, d, const char *, p, int, f)
-  #endif
-  #if defined(__i386__) || defined(__ARM_ARCH_3__) || defined(__ARM_EABI__)
-    #define __NR__setfsgid32  __NR_setfsgid32
-    #define __NR__setfsuid32  __NR_setfsuid32
-    #define __NR__setresgid32 __NR_setresgid32
-    #define __NR__setresuid32 __NR_setresuid32
-#if defined(__ARM_EABI__)
-    LSS_INLINE _syscall2(int,   ugetrlimit,        int,          r,
-                        struct kernel_rlimit*, l)
-#endif
-    LSS_INLINE _syscall1(int,     _setfsgid32,      gid_t,       f)
-    LSS_INLINE _syscall1(int,     _setfsuid32,      uid_t,       f)
-    LSS_INLINE _syscall3(int,     _setresgid32,    gid_t,       r,
-                         gid_t,          e, gid_t,  s)
-    LSS_INLINE _syscall3(int,     _setresuid32,    uid_t,       r,
-                         uid_t,          e, uid_t,  s)
-
-    LSS_INLINE int LSS_NAME(setfsgid32)(gid_t gid) {
-      int rc;
-      if ((rc = LSS_NAME(_setfsgid32)(gid)) < 0 &&
-          LSS_ERRNO == ENOSYS) {
-        if ((unsigned int)gid & ~0xFFFFu) {
-          rc = EINVAL;
-        } else {
-          rc = LSS_NAME(setfsgid)(gid);
-        }
-      }
-      return rc;
-    }
-
-    LSS_INLINE int LSS_NAME(setfsuid32)(uid_t uid) {
-      int rc;
-      if ((rc = LSS_NAME(_setfsuid32)(uid)) < 0 &&
-          LSS_ERRNO == ENOSYS) {
-        if ((unsigned int)uid & ~0xFFFFu) {
-          rc = EINVAL;
-        } else {
-          rc = LSS_NAME(setfsuid)(uid);
-        }
-      }
-      return rc;
-    }
-
-    LSS_INLINE int LSS_NAME(setresgid32)(gid_t rgid, gid_t egid, gid_t sgid) {
-      int rc;
-      if ((rc = LSS_NAME(_setresgid32)(rgid, egid, sgid)) < 0 &&
-          LSS_ERRNO == ENOSYS) {
-        if ((unsigned int)rgid & ~0xFFFFu ||
-            (unsigned int)egid & ~0xFFFFu ||
-            (unsigned int)sgid & ~0xFFFFu) {
-          rc = EINVAL;
-        } else {
-          rc = LSS_NAME(setresgid)(rgid, egid, sgid);
-        }
-      }
-      return rc;
-    }
-
-    LSS_INLINE int LSS_NAME(setresuid32)(uid_t ruid, uid_t euid, uid_t suid) {
-      int rc;
-      if ((rc = LSS_NAME(_setresuid32)(ruid, euid, suid)) < 0 &&
-          LSS_ERRNO == ENOSYS) {
-        if ((unsigned int)ruid & ~0xFFFFu ||
-            (unsigned int)euid & ~0xFFFFu ||
-            (unsigned int)suid & ~0xFFFFu) {
-          rc = EINVAL;
-        } else {
-          rc = LSS_NAME(setresuid)(ruid, euid, suid);
-        }
-      }
-      return rc;
-    }
-  #endif
-  LSS_INLINE int LSS_NAME(sigemptyset)(struct kernel_sigset_t *set) {
-    memset(&set->sig, 0, sizeof(set->sig));
-    return 0;
-  }
-  
-  LSS_INLINE int LSS_NAME(sigfillset)(struct kernel_sigset_t *set) {
-    memset(&set->sig, -1, sizeof(set->sig));
-    return 0;
-  }
-  
-  LSS_INLINE int LSS_NAME(sigaddset)(struct kernel_sigset_t *set,
-                                     int signum) {
-    if (signum < 1 || signum > (int)(8*sizeof(set->sig))) {
-      LSS_ERRNO = EINVAL;
-      return -1;
-    } else {
-      set->sig[(signum - 1)/(8*sizeof(set->sig[0]))]
-          |= 1UL << ((signum - 1) % (8*sizeof(set->sig[0])));
-      return 0;
-    }
-  }
-  
-  LSS_INLINE int LSS_NAME(sigdelset)(struct kernel_sigset_t *set,
-                                        int signum) {
-    if (signum < 1 || signum > (int)(8*sizeof(set->sig))) {
-      LSS_ERRNO = EINVAL;
-      return -1;
-    } else {
-      set->sig[(signum - 1)/(8*sizeof(set->sig[0]))]
-          &= ~(1UL << ((signum - 1) % (8*sizeof(set->sig[0]))));
-      return 0;
-    }
-  }
-  
-  LSS_INLINE int LSS_NAME(sigismember)(struct kernel_sigset_t *set,
-                                          int signum) {
-    if (signum < 1 || signum > (int)(8*sizeof(set->sig))) {
-      LSS_ERRNO = EINVAL;
-      return -1;
-    } else {
-      return !!(set->sig[(signum - 1)/(8*sizeof(set->sig[0]))] &
-                (1UL << ((signum - 1) % (8*sizeof(set->sig[0])))));
-    }
-  }
-  #if defined(__i386__) || defined(__ARM_ARCH_3__) ||                         \
-      defined(__ARM_EABI__) ||                                             \
-     (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) || defined(__PPC__)
-    #define __NR__sigaction   __NR_sigaction
-    #define __NR__sigpending  __NR_sigpending
-    #define __NR__sigprocmask __NR_sigprocmask
-    #define __NR__sigsuspend  __NR_sigsuspend
-    #define __NR__socketcall  __NR_socketcall
-    LSS_INLINE _syscall2(int, fstat64,             int, f,
-                         struct kernel_stat64 *, b)
-    LSS_INLINE _syscall5(int, _llseek,     uint, fd, ulong, hi, ulong, lo,
-                         loff_t *, res, uint, wh)
-#if !defined(__ARM_EABI__)
-    LSS_INLINE _syscall1(void*, mmap,              void*, a)
-#endif
-    LSS_INLINE _syscall6(void*, mmap2,             void*, s,
-                         size_t,                   l, int,               p,
-                         int,                      f, int,               d,
-                         __off64_t,                o)
-    LSS_INLINE _syscall3(int,   _sigaction,        int,   s,
-                         const struct kernel_old_sigaction*,  a,
-                         struct kernel_old_sigaction*,        o)
-    LSS_INLINE _syscall1(int,   _sigpending, unsigned long*, s)
-    LSS_INLINE _syscall3(int,   _sigprocmask,      int,   h,
-                         const unsigned long*,     s,
-                         unsigned long*,           o)
-    #ifdef __PPC__
-    LSS_INLINE _syscall1(int, _sigsuspend,         unsigned long, s)
-    #else
-    LSS_INLINE _syscall3(int, _sigsuspend,         const void*, a,
-                         int,                      b,
-                         unsigned long,            s)
-    #endif
-    LSS_INLINE _syscall2(int, stat64,              const char *, p,
-                         struct kernel_stat64 *, b)
-
-    LSS_INLINE int LSS_NAME(sigaction)(int signum,
-                                       const struct kernel_sigaction *act,
-                                       struct kernel_sigaction *oldact) {
-      int old_errno = LSS_ERRNO;
-      int rc;
-      struct kernel_sigaction a;
-      if (act != NULL) {
-        a             = *act;
-        #ifdef __i386__
-        /* On i386, the kernel requires us to always set our own
-         * SA_RESTORER when using realtime signals. Otherwise, it does not
-         * know how to return from a signal handler. This function must have
-         * a "magic" signature that the "gdb" (and maybe the kernel?) can
-         * recognize.
-         * Apparently, a SA_RESTORER is implicitly set by the kernel, when
-         * using non-realtime signals.
-         *
-         * TODO: Test whether ARM needs a restorer
-         */
-        if (!(a.sa_flags & SA_RESTORER)) {
-          a.sa_flags   |= SA_RESTORER;
-          a.sa_restorer = (a.sa_flags & SA_SIGINFO)
-                          ? LSS_NAME(restore_rt)() : LSS_NAME(restore)();
-        }
-        #endif
-      }
-      rc = LSS_NAME(rt_sigaction)(signum, act ? &a : act, oldact,
-                                  (KERNEL_NSIG+7)/8);
-      if (rc < 0 && LSS_ERRNO == ENOSYS) {
-        struct kernel_old_sigaction oa, ooa, *ptr_a = &oa, *ptr_oa = &ooa;
-        if (!act) {
-          ptr_a            = NULL;
-        } else {
-          oa.sa_handler_   = act->sa_handler_;
-          memcpy(&oa.sa_mask, &act->sa_mask, sizeof(oa.sa_mask));
-          #ifndef __mips__
-          oa.sa_restorer   = act->sa_restorer;
-          #endif
-          oa.sa_flags      = act->sa_flags;
-        }
-        if (!oldact) {
-          ptr_oa           = NULL;
-        }
-        LSS_ERRNO = old_errno;
-        rc = LSS_NAME(_sigaction)(signum, ptr_a, ptr_oa);
-        if (rc == 0 && oldact) {
-          if (act) {
-            memcpy(oldact, act, sizeof(*act));
-          } else {
-            memset(oldact, 0, sizeof(*oldact));
-          }
-          oldact->sa_handler_    = ptr_oa->sa_handler_;
-          oldact->sa_flags       = ptr_oa->sa_flags;
-          memcpy(&oldact->sa_mask, &ptr_oa->sa_mask, sizeof(ptr_oa->sa_mask));
-          #ifndef __mips__
-          oldact->sa_restorer    = ptr_oa->sa_restorer;
-          #endif
-        }
-      }
-      return rc;
-    }
-
-    LSS_INLINE int LSS_NAME(sigpending)(struct kernel_sigset_t *set) {
-      int old_errno = LSS_ERRNO;
-      int rc = LSS_NAME(rt_sigpending)(set, (KERNEL_NSIG+7)/8);
-      if (rc < 0 && LSS_ERRNO == ENOSYS) {
-        LSS_ERRNO = old_errno;
-        LSS_NAME(sigemptyset)(set);
-        rc = LSS_NAME(_sigpending)(&set->sig[0]);
-      }
-      return rc;
-    }
-
-    LSS_INLINE int LSS_NAME(sigprocmask)(int how,
-                                         const struct kernel_sigset_t *set,
-                                         struct kernel_sigset_t *oldset) {
-      int olderrno = LSS_ERRNO;
-      int rc = LSS_NAME(rt_sigprocmask)(how, set, oldset, (KERNEL_NSIG+7)/8);
-      if (rc < 0 && LSS_ERRNO == ENOSYS) {
-        LSS_ERRNO = olderrno;
-        if (oldset) {
-          LSS_NAME(sigemptyset)(oldset);
-        }
-        rc = LSS_NAME(_sigprocmask)(how,
-                                    set ? &set->sig[0] : NULL,
-                                    oldset ? &oldset->sig[0] : NULL);
-      }
-      return rc;
-    }
-
-    LSS_INLINE int LSS_NAME(sigsuspend)(const struct kernel_sigset_t *set) {
-      int olderrno = LSS_ERRNO;
-      int rc = LSS_NAME(rt_sigsuspend)(set, (KERNEL_NSIG+7)/8);
-      if (rc < 0 && LSS_ERRNO == ENOSYS) {
-        LSS_ERRNO = olderrno;
-        rc = LSS_NAME(_sigsuspend)(
-        #ifndef __PPC__
-                                   set, 0,
-        #endif
-                                   set->sig[0]);
-      }
-      return rc;
-    }
-  #endif
-  #if defined(__PPC__)
-    #undef LSS_SC_LOADARGS_0
-    #define LSS_SC_LOADARGS_0(dummy...)
-    #undef LSS_SC_LOADARGS_1
-    #define LSS_SC_LOADARGS_1(arg1)                                           \
-        __sc_4  = (unsigned long) (arg1)
-    #undef LSS_SC_LOADARGS_2
-    #define LSS_SC_LOADARGS_2(arg1, arg2)                                     \
-        LSS_SC_LOADARGS_1(arg1);                                              \
-        __sc_5  = (unsigned long) (arg2)
-    #undef LSS_SC_LOADARGS_3
-    #define LSS_SC_LOADARGS_3(arg1, arg2, arg3)                               \
-        LSS_SC_LOADARGS_2(arg1, arg2);                                        \
-        __sc_6  = (unsigned long) (arg3)
-    #undef LSS_SC_LOADARGS_4
-    #define LSS_SC_LOADARGS_4(arg1, arg2, arg3, arg4)                         \
-        LSS_SC_LOADARGS_3(arg1, arg2, arg3);                                  \
-        __sc_7  = (unsigned long) (arg4)
-    #undef LSS_SC_LOADARGS_5
-    #define LSS_SC_LOADARGS_5(arg1, arg2, arg3, arg4, arg5)                   \
-        LSS_SC_LOADARGS_4(arg1, arg2, arg3, arg4);                            \
-        __sc_8  = (unsigned long) (arg5)
-    #undef LSS_SC_BODY
-    #define LSS_SC_BODY(nr, type, opt, args...)                               \
-        long __sc_ret, __sc_err;                                              \
-        {                                                                     \
-          register unsigned long __sc_0 __asm__ ("r0") = __NR_socketcall;     \
-          register unsigned long __sc_3 __asm__ ("r3") = opt;                 \
-          register unsigned long __sc_4 __asm__ ("r4");                       \
-          register unsigned long __sc_5 __asm__ ("r5");                       \
-          register unsigned long __sc_6 __asm__ ("r6");                       \
-          register unsigned long __sc_7 __asm__ ("r7");                       \
-          register unsigned long __sc_8 __asm__ ("r8");                       \
-          LSS_SC_LOADARGS_##nr(args);                                         \
-          __asm__ __volatile__                                                \
-              ("stwu 1, -48(1)\n\t"                                           \
-               "stw 4, 20(1)\n\t"                                             \
-               "stw 5, 24(1)\n\t"                                             \
-               "stw 6, 28(1)\n\t"                                             \
-               "stw 7, 32(1)\n\t"                                             \
-               "stw 8, 36(1)\n\t"                                             \
-               "addi 4, 1, 20\n\t"                                            \
-               "sc\n\t"                                                       \
-               "mfcr %0"                                                      \
-                 : "=&r" (__sc_0),                                            \
-                   "=&r" (__sc_3), "=&r" (__sc_4),                            \
-                   "=&r" (__sc_5), "=&r" (__sc_6),                            \
-                   "=&r" (__sc_7), "=&r" (__sc_8)                             \
-                 : LSS_ASMINPUT_##nr                                          \
-                 : "cr0", "ctr", "memory");                                   \
-          __sc_ret = __sc_3;                                                  \
-          __sc_err = __sc_0;                                                  \
-        }                                                                     \
-        LSS_RETURN(type, __sc_ret, __sc_err)
-
-    LSS_INLINE ssize_t LSS_NAME(recvmsg)(int s,struct kernel_msghdr *msg,
-                                         int flags){
-      LSS_SC_BODY(3, ssize_t, 17, s, msg, flags);
-    }
-
-    LSS_INLINE ssize_t LSS_NAME(sendmsg)(int s,
-                                         const struct kernel_msghdr *msg,
-                                         int flags) {
-      LSS_SC_BODY(3, ssize_t, 16, s, msg, flags);
-    }
-
-    // TODO(csilvers): why is this ifdef'ed out?
-#if 0
-    LSS_INLINE ssize_t LSS_NAME(sendto)(int s, const void *buf, size_t len,
-                                        int flags,
-                                        const struct kernel_sockaddr *to,
-                                        unsigned int tolen) {
-      LSS_BODY(6, ssize_t, 11, s, buf, len, flags, to, tolen);
-    }
-#endif
-
-    LSS_INLINE int LSS_NAME(shutdown)(int s, int how) {
-      LSS_SC_BODY(2, int, 13, s, how);
-    }
-
-    LSS_INLINE int LSS_NAME(socket)(int domain, int type, int protocol) {
-      LSS_SC_BODY(3, int, 1, domain, type, protocol);
-    }
-
-    LSS_INLINE int LSS_NAME(socketpair)(int d, int type, int protocol,
-                                        int sv[2]) {
-      LSS_SC_BODY(4, int, 8, d, type, protocol, sv);
-    }
-  #endif
-  #if defined(__ARM_EABI__)
-    LSS_INLINE _syscall3(ssize_t, recvmsg, int, s, struct kernel_msghdr*, msg,
-                         int, flags)
-    LSS_INLINE _syscall3(ssize_t, sendmsg, int, s, const struct kernel_msghdr*,
-                         msg, int, flags)
-    LSS_INLINE _syscall6(ssize_t, sendto, int, s, const void*, buf, size_t, len,
-                         int, falgs, const struct kernel_sockaddr*, to,
-                         unsigned int, tolen)
-    LSS_INLINE _syscall2(int, shutdown, int, s, int, how)
-    LSS_INLINE _syscall3(int, socket, int, domain, int, type, int, protocol)
-    LSS_INLINE _syscall4(int, socketpair, int, d, int, type, int, protocol, 
-                         int*, sv)
-  #endif
-  #if defined(__i386__) || defined(__ARM_ARCH_3__) ||                      \
-      (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32)
-    #define __NR__socketcall  __NR_socketcall
-    LSS_INLINE _syscall2(int,      _socketcall,    int,   c,
-                         va_list,                  a)
-    LSS_INLINE int LSS_NAME(socketcall)(int op, ...) {
-      int rc;
-      va_list ap;
-      va_start(ap, op);
-      rc = LSS_NAME(_socketcall)(op, ap);
-      va_end(ap);
-      return rc;
-    }
-    LSS_INLINE ssize_t LSS_NAME(recvmsg)(int s,struct kernel_msghdr *msg,
-                                         int flags){
-      return (ssize_t)LSS_NAME(socketcall)(17, s, msg, flags);
-    }
-    LSS_INLINE ssize_t LSS_NAME(sendmsg)(int s,
-                                         const struct kernel_msghdr *msg,
-                                         int flags) {
-      return (ssize_t)LSS_NAME(socketcall)(16, s, msg, flags);
-    }
-    LSS_INLINE ssize_t LSS_NAME(sendto)(int s, const void *buf, size_t len,
-                                        int flags,
-                                        const struct kernel_sockaddr *to,
-                                        unsigned int tolen) {
-      return (ssize_t)LSS_NAME(socketcall)(11, s, buf, len, flags, to, tolen);
-    }
-    LSS_INLINE int LSS_NAME(shutdown)(int s, int how) {
-      return LSS_NAME(socketcall)(13, s, how);
-    }
-    LSS_INLINE int LSS_NAME(socket)(int domain, int type, int protocol) {
-      return LSS_NAME(socketcall)(1, domain, type, protocol);
-    }
-
-    LSS_INLINE int LSS_NAME(socketpair)(int d, int type, int protocol,
-                                        int sv[2]) {
-      return LSS_NAME(socketcall)(8, d, type, protocol, sv);
-    }
-  #endif
-  #if defined(__i386__) || defined(__PPC__)
-    LSS_INLINE _syscall4(int,   fstatat64,        int,   d,
-                         const char *,      p,
-                         struct kernel_stat64 *,   b,    int,   f)
-  #endif
-  #if defined(__i386__) || defined(__PPC__) ||                                \
-     (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32)
-    LSS_INLINE _syscall3(pid_t, waitpid,          pid_t, p,
-                         int*,              s,    int,   o)
-  #endif
-  #if defined(__mips__)
-    /* sys_pipe() on MIPS has non-standard calling conventions, as it returns
-     * both file handles through CPU registers.
-     */
-    LSS_INLINE int LSS_NAME(pipe)(int *p) {
-      register unsigned long __v0 __asm__("$2") = __NR_pipe;
-      register unsigned long __v1 __asm__("$3");
-      register unsigned long __r7 __asm__("$7");
-      __asm__ __volatile__ ("syscall\n"
-                            : "=&r"(__v0), "=&r"(__v1), "+r" (__r7)
-                            : "0"(__v0)
-                            : "$8", "$9", "$10", "$11", "$12",
-                              "$13", "$14", "$15", "$24", "memory");
-      if (__r7) {
-        LSS_ERRNO = __v0;
-        return -1;
-      } else {
-        p[0] = __v0;
-        p[1] = __v1;
-        return 0;
-      }
-    }
-  #else
-    LSS_INLINE _syscall1(int,     pipe,           int *, p)
-  #endif
-  /* TODO(csilvers): see if ppc can/should support this as well              */
-  #if defined(__i386__) || defined(__ARM_ARCH_3__) ||                         \
-      defined(__ARM_EABI__) ||                                             \
-     (defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI64)
-    #define __NR__statfs64  __NR_statfs64
-    #define __NR__fstatfs64 __NR_fstatfs64
-    LSS_INLINE _syscall3(int, _statfs64,     const char*, p,
-                         size_t, s,struct kernel_statfs64*, b)
-    LSS_INLINE _syscall3(int, _fstatfs64,          int,   f,
-                         size_t, s,struct kernel_statfs64*, b)
-    LSS_INLINE int LSS_NAME(statfs64)(const char *p,
-                                     struct kernel_statfs64 *b) {
-      return LSS_NAME(_statfs64)(p, sizeof(*b), b);
-    }
-    LSS_INLINE int LSS_NAME(fstatfs64)(int f,struct kernel_statfs64 *b) {
-      return LSS_NAME(_fstatfs64)(f, sizeof(*b), b);
-    }
-  #endif
-
-  LSS_INLINE int LSS_NAME(execv)(const char *path, const char *const argv[]) {
-    extern char **environ;
-    return LSS_NAME(execve)(path, argv, (const char *const *)environ);
-  }
-
-  LSS_INLINE pid_t LSS_NAME(gettid)() {
-    pid_t tid = LSS_NAME(_gettid)();
-    if (tid != -1) {
-      return tid;
-    }
-    return LSS_NAME(getpid)();
-  }
-
-  LSS_INLINE void *LSS_NAME(mremap)(void *old_address, size_t old_size,
-                                    size_t new_size, int flags, ...) {
-    va_list ap;
-    void *new_address, *rc;
-    va_start(ap, flags);
-    new_address = va_arg(ap, void *);
-    rc = LSS_NAME(_mremap)(old_address, old_size, new_size,
-                           flags, new_address);
-    va_end(ap);
-    return rc;
-  }
-
-  LSS_INLINE int LSS_NAME(ptrace_detach)(pid_t pid) {
-    /* PTRACE_DETACH can sometimes forget to wake up the tracee and it
-     * then sends job control signals to the real parent, rather than to
-     * the tracer. We reduce the risk of this happening by starting a
-     * whole new time slice, and then quickly sending a SIGCONT signal
-     * right after detaching from the tracee.
-     */
-    int rc, err;
-    LSS_NAME(sched_yield)();
-    rc = LSS_NAME(ptrace)(PTRACE_DETACH, pid, (void *)0, (void *)0);
-    err = LSS_ERRNO;
-    LSS_NAME(kill)(pid, SIGCONT);
-    LSS_ERRNO = err;
-    return rc;
-  }
-
-  LSS_INLINE int LSS_NAME(raise)(int sig) {
-    return LSS_NAME(kill)(LSS_NAME(getpid)(), sig);
-  }
-
-  LSS_INLINE int LSS_NAME(setpgrp)() {
-    return LSS_NAME(setpgid)(0, 0);
-  }
-
-  LSS_INLINE int LSS_NAME(sysconf)(int name) {
-    extern int __getpagesize(void);
-    switch (name) {
-      case _SC_OPEN_MAX: {
-        struct kernel_rlimit limit;
-#if defined(__ARM_EABI__)
-        return LSS_NAME(ugetrlimit)(RLIMIT_NOFILE, &limit) < 0
-            ? 8192 : limit.rlim_cur;
-#else
-        return LSS_NAME(getrlimit)(RLIMIT_NOFILE, &limit) < 0
-            ? 8192 : limit.rlim_cur;
-#endif
-      }
-      case _SC_PAGESIZE:
-        return __getpagesize();
-      default:
-        errno = ENOSYS;
-        return -1;
-    }
-  }
-  #if defined(__x86_64__) ||                                                  \
-     (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64)
-    /* pread64() and pwrite64() do not exist on 64-bit systems...            */
-    LSS_INLINE _syscall3(int,     readahead,      int,         f,
-                         loff_t,         o, unsigned, c)
-  #else
-    #define __NR__pread64   __NR_pread64
-    #define __NR__pwrite64  __NR_pwrite64
-    #define __NR__readahead __NR_readahead
-    LSS_INLINE _syscall5(ssize_t, _pread64,        int,         f,
-                         void *,         b, size_t, c, unsigned, o1,
-                         unsigned, o2)
-    LSS_INLINE _syscall5(ssize_t, _pwrite64,       int,         f,
-                         const void *,   b, size_t, c, unsigned, o1,
-                         long, o2)
-    LSS_INLINE _syscall4(int, _readahead,          int,         f,
-                         unsigned,       o1, unsigned, o2, size_t, c)
-    /* We force 64bit-wide parameters onto the stack, then access each
-     * 32-bit component individually. This guarantees that we build the
-     * correct parameters independent of the native byte-order of the
-     * underlying architecture.
-     */
-    LSS_INLINE ssize_t LSS_NAME(pread64)(int fd, void *buf, size_t count,
-                                         loff_t off) {
-      union { loff_t off; unsigned arg[2]; } o = { off };
-      return LSS_NAME(_pread64)(fd, buf, count, o.arg[0], o.arg[1]);
-    }
-    LSS_INLINE ssize_t LSS_NAME(pwrite64)(int fd, const void *buf,
-                                          size_t count, loff_t off) {
-      union { loff_t off; unsigned arg[2]; } o = { off };
-      return LSS_NAME(_pwrite64)(fd, buf, count, o.arg[0], o.arg[1]);
-    }
-    LSS_INLINE int LSS_NAME(readahead)(int fd, loff_t off, int len) {
-      union { loff_t off; unsigned arg[2]; } o = { off };
-      return LSS_NAME(_readahead)(fd, o.arg[0], o.arg[1], len);
-    }
-  #endif
-#endif
-
-#if defined(__cplusplus) && !defined(SYS_CPLUSPLUS)
-}
-#endif
-
-#endif
-#endif
diff --git a/src/client/windows/tests/crash_generation_app/precompile.cc b/src/common/mac/Breakpad.xcconfig
similarity index 61%
copy from src/client/windows/tests/crash_generation_app/precompile.cc
copy to src/common/mac/Breakpad.xcconfig
index 9d2173c..b6bf92b 100644
--- a/src/client/windows/tests/crash_generation_app/precompile.cc
+++ b/src/common/mac/Breakpad.xcconfig
@@ -1,4 +1,4 @@
-// Copyright (c) 2008, Google Inc.
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -27,11 +27,32 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// precompile.cpp : source file that includes just the standard includes
-// CrashGenerationApp.pch will be the pre-compiled header
-// precompile.obj will contain the pre-compiled type information
+ARCHS = $(ARCHS_STANDARD_32_64_BIT)
+SDKROOT = macosx10.5
+SDKROOT[arch=i386] = macosx10.4
+SDKROOT[arch=ppc] = macosx10.4
 
-#include "precompile.h"
+GCC_VERSION = 4.2
+GCC_VERSION[sdk=macosx10.4][arch=*] = 4.0
 
-// Reference any additional headers you need in PRECOMPILE.H
-// and not in this file.
+GCC_C_LANGUAGE_STANDARD = c99
+
+GCC_WARN_CHECK_SWITCH_STATEMENTS = YES
+// TODO(nealsid): Get the code so we can turn on the 64_TO_32 warning.
+GCC_WARN_64_TO_32_BIT_CONVERSION = NO
+GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES
+GCC_WARN_ABOUT_RETURN_TYPE = YES
+GCC_WARN_MISSING_PARENTHESES = YES
+GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES
+GCC_WARN_ABOUT_MISSING_NEWLINE = YES
+GCC_WARN_SIGN_COMPARE = YES
+GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES
+GCC_WARN_UNDECLARED_SELECTOR = YES
+GCC_WARN_UNKNOWN_PRAGMAS = YES
+GCC_WARN_UNUSED_VARIABLE = YES
+GCC_TREAT_WARNINGS_AS_ERRORS = YES
+
+DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
+DEBUG_INFORMATION_FORMAT[sdk=macosx10.4][arch=*] = stabs
+
+ALWAYS_SEARCH_USER_PATHS = NO
diff --git a/src/client/windows/tests/crash_generation_app/precompile.cc b/src/common/mac/BreakpadDebug.xcconfig
similarity index 80%
rename from src/client/windows/tests/crash_generation_app/precompile.cc
rename to src/common/mac/BreakpadDebug.xcconfig
index 9d2173c..94cdd8c 100644
--- a/src/client/windows/tests/crash_generation_app/precompile.cc
+++ b/src/common/mac/BreakpadDebug.xcconfig
@@ -1,4 +1,4 @@
-// Copyright (c) 2008, Google Inc.
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -27,11 +27,6 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// precompile.cpp : source file that includes just the standard includes
-// CrashGenerationApp.pch will be the pre-compiled header
-// precompile.obj will contain the pre-compiled type information
+#include "Breakpad.xcconfig"
 
-#include "precompile.h"
-
-// Reference any additional headers you need in PRECOMPILE.H
-// and not in this file.
+GCC_OPTIMIZATION_LEVEL = 0
diff --git a/src/client/windows/tests/crash_generation_app/precompile.cc b/src/common/mac/BreakpadRelease.xcconfig
similarity index 80%
copy from src/client/windows/tests/crash_generation_app/precompile.cc
copy to src/common/mac/BreakpadRelease.xcconfig
index 9d2173c..af209a4 100644
--- a/src/client/windows/tests/crash_generation_app/precompile.cc
+++ b/src/common/mac/BreakpadRelease.xcconfig
@@ -1,4 +1,4 @@
-// Copyright (c) 2008, Google Inc.
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -27,11 +27,7 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// precompile.cpp : source file that includes just the standard includes
-// CrashGenerationApp.pch will be the pre-compiled header
-// precompile.obj will contain the pre-compiled type information
+#include "Breakpad.xcconfig"
 
-#include "precompile.h"
-
-// Reference any additional headers you need in PRECOMPILE.H
-// and not in this file.
+GCC_OPTIMIZATION_LEVEL = s
+GCC_WARN_UNINITIALIZED_AUTOS = YES
diff --git a/src/common/mac/HTTPMultipartUpload.m b/src/common/mac/HTTPMultipartUpload.m
index dd3612d..eee66a9 100644
--- a/src/common/mac/HTTPMultipartUpload.m
+++ b/src/common/mac/HTTPMultipartUpload.m
@@ -28,6 +28,7 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #import "HTTPMultipartUpload.h"
+#import "GTMDefines.h"
 
 @interface HTTPMultipartUpload(PrivateMethods)
 - (NSString *)multipartBoundary;
@@ -148,7 +149,6 @@
       timeoutInterval:10.0 ];
 
   NSMutableData *postBody = [NSMutableData data];
-  int i, count;
 
   [req setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",
     boundary_] forHTTPHeaderField:@"Content-type"];
@@ -157,8 +157,8 @@
   NSArray *parameterKeys = [parameters_ allKeys];
   NSString *key;
 
-  count = [parameterKeys count];
-  for (i = 0; i < count; ++i) {
+  NSInteger count = [parameterKeys count];
+  for (NSInteger i = 0; i < count; ++i) {
     key = [parameterKeys objectAtIndex:i];
     [postBody appendData:[self formDataForKey:key
                                         value:[parameters_ objectForKey:key]]];
@@ -167,7 +167,7 @@
   // Add any files to the message
   NSArray *fileNames = [files_ allKeys];
   count = [fileNames count];
-  for (i = 0; i < count; ++i) {
+  for (NSInteger i = 0; i < count; ++i) {
     NSString *name = [fileNames objectAtIndex:i];
     id fileOrData = [files_ objectForKey:name];
     NSData *fileData;
diff --git a/src/common/mac/MachIPC.h b/src/common/mac/MachIPC.h
index 8992412..2213fc6 100644
--- a/src/common/mac/MachIPC.h
+++ b/src/common/mac/MachIPC.h
@@ -94,6 +94,7 @@
 //    kern_return_t result = sender.SendMessage(message, 1000); // timeout 1000ms
 //
 
+namespace google_breakpad {
 #define PRINT_MACH_RESULT(result_, message_) \
   printf(message_" %s (%d)\n", mach_error_string(result_), result_ );
 
@@ -224,7 +225,7 @@
   void SetDescriptor(int n, const MachMsgPortDescriptor &desc);
 
   // Returns total message size setting msgh_size in the header to this value
-  int CalculateSize();
+  mach_msg_size_t CalculateSize();
 
   mach_msg_header_t  head;
   mach_msg_body_t    body;
@@ -255,11 +256,11 @@
 class ReceivePort {
  public:
   // Creates a new mach port for receiving messages and registers a name for it
-  ReceivePort(const char *receive_port_name);
+  explicit ReceivePort(const char *receive_port_name);
 
   // Given an already existing mach port, use it.  We take ownership of the
   // port and deallocate it in our destructor.
-  ReceivePort(mach_port_t receive_port);
+  explicit ReceivePort(mach_port_t receive_port);
 
   // Create a new mach port for receiving messages
   ReceivePort();
@@ -285,11 +286,11 @@
 class MachPortSender {
  public:
   // get a port with send rights corresponding to a named registered service
-  MachPortSender(const char *receive_port_name);
+  explicit MachPortSender(const char *receive_port_name);
 
 
   // Given an already existing mach port, use it.
-  MachPortSender(mach_port_t send_port);
+  explicit MachPortSender(mach_port_t send_port);
 
   kern_return_t SendMessage(MachSendMessage &message,
                             mach_msg_timeout_t timeout);
@@ -301,4 +302,6 @@
   kern_return_t init_result_;
 };
 
+}  // namespace google_breakpad
+
 #endif // MACH_IPC_H__
diff --git a/src/common/mac/MachIPC.mm b/src/common/mac/MachIPC.mm
index 9e521e4..4f58c02 100644
--- a/src/common/mac/MachIPC.mm
+++ b/src/common/mac/MachIPC.mm
@@ -33,6 +33,7 @@
 #import <stdio.h>
 #import "MachIPC.h"
 
+namespace google_breakpad {
 //==============================================================================
 MachSendMessage::MachSendMessage(int32_t message_id) : MachMessage() {
   head.msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0);
@@ -53,10 +54,10 @@
 bool MachMessage::SetData(void *data,
                           int32_t data_length) {
   // first check to make sure we have enough space
-  int size = CalculateSize();
-  int new_size = size + data_length;
+  size_t size = CalculateSize();
+  size_t new_size = size + data_length;
   
-  if ((unsigned)new_size > sizeof(MachMessage)) {
+  if (new_size > sizeof(MachMessage)) {
     return false;  // not enough space
   }
 
@@ -72,8 +73,8 @@
 // calculates and returns the total size of the message
 // Currently, the entire message MUST fit inside of the MachMessage
 //    messsage size <= sizeof(MachMessage)
-int MachMessage::CalculateSize() {
-  int size = sizeof(mach_msg_header_t) + sizeof(mach_msg_body_t);
+mach_msg_size_t MachMessage::CalculateSize() {
+  size_t size = sizeof(mach_msg_header_t) + sizeof(mach_msg_body_t);
   
   // add space for MessageDataPacket
   int32_t alignedDataLength = (GetDataLength() + 3) & ~0x3;
@@ -82,14 +83,14 @@
   // add space for descriptors
   size += GetDescriptorCount() * sizeof(MachMsgPortDescriptor);
   
-  head.msgh_size = size;
+  head.msgh_size = static_cast<mach_msg_size_t>(size);
   
-  return size;
+  return head.msgh_size;
 }
 
 //==============================================================================
 MachMessage::MessageDataPacket *MachMessage::GetDataPacket() {
-  int desc_size = sizeof(MachMsgPortDescriptor)*GetDescriptorCount();
+  size_t desc_size = sizeof(MachMsgPortDescriptor)*GetDescriptorCount();
   MessageDataPacket *packet =
     reinterpret_cast<MessageDataPacket*>(padding + desc_size);
 
@@ -109,9 +110,9 @@
 bool MachMessage::AddDescriptor(const MachMsgPortDescriptor &desc) {
   // first check to make sure we have enough space
   int size = CalculateSize();
-  int new_size = size + sizeof(MachMsgPortDescriptor);
+  size_t new_size = size + sizeof(MachMsgPortDescriptor);
   
-  if ((unsigned)new_size > sizeof(MachMessage)) {
+  if (new_size > sizeof(MachMessage)) {
     return false;  // not enough space
   }
 
@@ -180,8 +181,8 @@
   if (init_result_ != KERN_SUCCESS)
     return;
 
-  mach_port_t bootstrap_port = 0;
-  init_result_ = task_get_bootstrap_port(current_task, &bootstrap_port);
+  mach_port_t task_bootstrap_port = 0;
+  init_result_ = task_get_bootstrap_port(current_task, &task_bootstrap_port);
 
   if (init_result_ != KERN_SUCCESS)
     return;
@@ -240,8 +241,11 @@
   out_message->head.msgh_reserved = 0;
   out_message->head.msgh_id = 0;
 
+  mach_msg_option_t options = MACH_RCV_MSG;
+  if (timeout != MACH_MSG_TIMEOUT_NONE)
+    options |= MACH_RCV_TIMEOUT;
   kern_return_t result = mach_msg(&out_message->head,
-                                  MACH_RCV_MSG | MACH_RCV_TIMEOUT,
+                                  options,
                                   0,
                                   sizeof(MachMessage),
                                   port_,
@@ -256,13 +260,14 @@
 //==============================================================================
 // get a port with send rights corresponding to a named registered service
 MachPortSender::MachPortSender(const char *receive_port_name) {
-  mach_port_t bootstrap_port = 0;
-  init_result_ = task_get_bootstrap_port(mach_task_self(), &bootstrap_port);
+  mach_port_t task_bootstrap_port = 0;
+  init_result_ = task_get_bootstrap_port(mach_task_self(), 
+                                         &task_bootstrap_port);
   
   if (init_result_ != KERN_SUCCESS)
     return;
 
-  init_result_ = bootstrap_look_up(bootstrap_port,
+  init_result_ = bootstrap_look_up(task_bootstrap_port,
                     const_cast<char*>(receive_port_name),
                     &send_port_);
 }
@@ -295,3 +300,5 @@
 
   return result;
 }
+
+}  // namespace google_breakpad
diff --git a/src/common/mac/dump_syms.h b/src/common/mac/dump_syms.h
index 1acaf44..fbf11c7 100644
--- a/src/common/mac/dump_syms.h
+++ b/src/common/mac/dump_syms.h
@@ -1,4 +1,6 @@
-// Copyright (c) 2006, Google Inc.
+// -*- mode: c++ -*-
+
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -27,53 +29,143 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// dump_syms.h: Interface for DumpSymbols.  This class will take a mach-o file
-// and extract the symbol information and write it to a file using the
-// breakpad symbol file format.  
+// Author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com>
 
-#import <Foundation/Foundation.h>
+// dump_syms.h: Declaration of google_breakpad::DumpSymbols, a class for
+// reading debugging information from Mach-O files and writing it out as a
+// Breakpad symbol file.
+
+#include <Foundation/Foundation.h>
 #include <mach-o/loader.h>
-#include "common/dwarf/dwarf2reader.h"
+#include <stdio.h>
+#include <stdlib.h>
 
-// This will map from an architecture string to a SectionMap, which
-// will contain the offsets for all the sections in the dictionary
-typedef map<string, dwarf2reader::SectionMap *> ArchSectionMap;
+#include <string>
+#include <vector>
 
-@interface DumpSymbols : NSObject {
- @protected
-  NSString *sourcePath_;              // Source of symbols (STRONG)
-  NSString *architecture_;            // Architecture to extract (STRONG)
-  NSMutableDictionary *addresses_;    // Addresses and symbols (STRONG)
-  NSMutableSet *functionAddresses_;   // Function addresses (STRONG)
-  NSMutableDictionary *sources_;      // Address and Source file paths (STRONG)
-  NSMutableDictionary *headers_;      // Mach-o header information (STRONG)
-  NSMutableDictionary *sectionData_; // Keyed by seg/sect name (STRONG)
-  uint32_t   lastStartAddress_;
-  ArchSectionMap *sectionsForArch_;
-}
+#include "common/byte_cursor.h"
+#include "common/mac/macho_reader.h"
+#include "common/module.h"
 
-- (id)initWithContentsOfFile:(NSString *)machoFile;
+namespace google_breakpad {
 
-- (NSArray *)availableArchitectures;
+class DumpSymbols {
+ public:
+  DumpSymbols() 
+      : input_pathname_(),
+        object_filename_(), 
+        contents_(),
+        selected_object_file_(),
+        selected_object_name_() { }
+  ~DumpSymbols() {
+    [input_pathname_ release];
+    [object_filename_ release];
+    [contents_ release];
+  }
 
-// One of ppc, x86, i386, ppc64, x86_64
-// If the architecture is not available, it will return NO
-// If not set, the native architecture will be used
-- (BOOL)setArchitecture:(NSString *)architecture;
-- (NSString *)architecture;
+  // Prepare to read debugging information from |filename|. |filename| may be
+  // the name of a universal binary, a Mach-O file, or a dSYM bundle
+  // containing either of the above. On success, return true; if there is a
+  // problem reading |filename|, report it and return false.
+  //
+  // (This class uses NSString for filenames and related values,
+  // because the Mac Foundation framework seems to support
+  // filename-related operations more fully on NSString values.)
+  bool Read(NSString *filename);
 
-// Write the symbols to |symbolFilePath|.  Return YES if successful.
-- (BOOL)writeSymbolFile:(NSString *)symbolFilePath;
+  // If this dumper's file includes an object file for |cpu_type| and
+  // |cpu_subtype|, then select that object file for dumping, and return
+  // true. Otherwise, return false, and leave this dumper's selected
+  // architecture unchanged.
+  //
+  // By default, if this dumper's file contains only one object file, then
+  // the dumper will dump those symbols; and if it contains more than one
+  // object file, then the dumper will dump the object file whose
+  // architecture matches that of this dumper program.
+  bool SetArchitecture(cpu_type_t cpu_type, cpu_subtype_t cpu_subtype);
+  
+  // If this dumper's file includes an object file for |arch_name|, then select 
+  // that object file for dumping, and return true. Otherwise, return false, 
+  // and leave this dumper's selected architecture unchanged.
+  //
+  // By default, if this dumper's file contains only one object file, then
+  // the dumper will dump those symbols; and if it contains more than one
+  // object file, then the dumper will dump the object file whose
+  // architecture matches that of this dumper program.
+  bool SetArchitecture(const std::string &arch_name);
+  
+  // Return a pointer to an array of 'struct fat_arch' structures,
+  // describing the object files contained in this dumper's file. Set
+  // *|count| to the number of elements in the array. The returned array is
+  // owned by this DumpSymbols instance.
+  //
+  // If there are no available architectures, this function
+  // may return NULL.
+  const struct fat_arch *AvailableArchitectures(size_t *count) {
+    *count = object_files_.size();
+    if (object_files_.size() > 0)
+      return &object_files_[0];
+    return NULL;
+  }
 
-@end
+  // Read the selected object file's debugging information, and write it
+  // out to |stream|. Return true on success; if an error occurs, report it
+  // and return false.
+  bool WriteSymbolFile(FILE *stream);
 
-@interface MachSection : NSObject {
- @protected
-  struct section *sect_;
-  uint32_t sectionNumber_;
-}
-- (id)initWithMachSection:(struct section *)sect andNumber:(uint32_t)sectionNumber;
-- (struct section*)sectionPointer;
-- (uint32_t)sectionNumber;
+ private:
+  // Used internally.
+  class DumperLineToModule;
+  class LoadCommandDumper;
 
-@end
+  // Return an identifier string for the file this DumpSymbols is dumping.
+  std::string Identifier();
+
+  // Read debugging information from |dwarf_sections|, which was taken from
+  // |macho_reader|, and add it to |module|. On success, return true;
+  // on failure, report the problem and return false.
+  bool ReadDwarf(google_breakpad::Module *module,
+                 const mach_o::Reader &macho_reader,
+                 const mach_o::SectionMap &dwarf_sections) const;
+
+  // Read DWARF CFI or .eh_frame data from |section|, belonging to
+  // |macho_reader|, and record it in |module|.  If |eh_frame| is true,
+  // then the data is .eh_frame-format data; otherwise, it is standard DWARF
+  // .debug_frame data. On success, return true; on failure, report
+  // the problem and return false.
+  bool ReadCFI(google_breakpad::Module *module,
+               const mach_o::Reader &macho_reader,
+               const mach_o::Section &section,
+               bool eh_frame) const;
+
+  // The name of the file or bundle whose symbols this will dump.
+  // This is the path given to Read, for use in error messages.
+  NSString *input_pathname_;
+
+  // The name of the file this DumpSymbols will actually read debugging
+  // information from. Normally, this is the same as input_pathname_, but if
+  // filename refers to a dSYM bundle, then this is the resource file
+  // within that bundle.
+  NSString *object_filename_;
+
+  // The complete contents of object_filename_, mapped into memory.
+  NSData *contents_;
+
+  // A vector of fat_arch structures describing the object files
+  // object_filename_ contains. If object_filename_ refers to a fat binary,
+  // this may have more than one element; if it refers to a Mach-O file, this
+  // has exactly one element.
+  vector<struct fat_arch> object_files_;
+
+  // The object file in object_files_ selected to dump, or NULL if 
+  // SetArchitecture hasn't been called yet.
+  const struct fat_arch *selected_object_file_;
+
+  // A string that identifies the selected object file, for use in error
+  // messages.  This is usually object_filename_, but if that refers to a
+  // fat binary, it includes an indication of the particular architecture
+  // within that binary.
+  string selected_object_name_;
+};
+
+}  // namespace google_breakpad
diff --git a/src/common/mac/dump_syms.mm b/src/common/mac/dump_syms.mm
index cf70b1c..cc2efe1 100644
--- a/src/common/mac/dump_syms.mm
+++ b/src/common/mac/dump_syms.mm
@@ -1,4 +1,6 @@
-// Copyright (c) 2006, Google Inc.
+// -*- mode: c++ -*-
+
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -27,1196 +29,467 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+// Author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com>
+
 // dump_syms.mm: Create a symbol file for use with minidumps
 
-#include <unistd.h>
-#include <signal.h>
-#include <cxxabi.h>
-#include <stdlib.h>
+#include "common/mac/dump_syms.h"
 
-#include <mach/machine.h>
+#include <Foundation/Foundation.h>
 #include <mach-o/arch.h>
 #include <mach-o/fat.h>
-#include <mach-o/loader.h>
-#include <mach-o/nlist.h>
-#include <mach-o/stab.h>
-#include <fcntl.h>
+#include <stdio.h>
 
-#import <Foundation/Foundation.h>
+#include <string>
+#include <vector>
 
-#import "dump_syms.h"
-#import "common/mac/file_id.h"
-#import "common/mac/macho_utilities.h"
-#import "common/dwarf/dwarf2reader.h"
-#import "common/dwarf/functioninfo.h"
-#import "common/dwarf/bytereader.h"
+#include "common/dwarf/bytereader-inl.h"
+#include "common/dwarf/dwarf2reader.h"
+#include "common/dwarf_cfi_to_module.h"
+#include "common/dwarf_cu_to_module.h"
+#include "common/dwarf_line_to_module.h"
+#include "common/mac/file_id.h"
+#include "common/mac/macho_reader.h"
+#include "common/module.h"
+#include "common/stabs_reader.h"
+#include "common/stabs_to_module.h"
 
+#ifndef CPU_TYPE_ARM
+#define CPU_TYPE_ARM (static_cast<cpu_type_t>(12))
+#endif //  CPU_TYPE_ARM
+
+using dwarf2reader::ByteReader;
+using google_breakpad::DwarfCUToModule;
+using google_breakpad::DwarfLineToModule;
 using google_breakpad::FileID;
+using google_breakpad::mach_o::FatReader;
+using google_breakpad::mach_o::Section;
+using google_breakpad::mach_o::Segment;
+using google_breakpad::Module;
+using google_breakpad::StabsReader;
+using google_breakpad::StabsToModule;
+using std::make_pair;
+using std::pair;
+using std::string;
+using std::vector;
 
-static NSString *kAddressSymbolKey = @"symbol";
-static NSString *kAddressConvertedSymbolKey = @"converted_symbol";
-static NSString *kAddressSourceLineKey = @"line";
-static NSString *kFunctionSizeKey = @"size";
-static NSString *kFunctionFileKey = @"source_file";
-static NSString *kHeaderBaseAddressKey = @"baseAddr";
-static NSString *kHeaderSizeKey = @"size";
-static NSString *kHeaderOffsetKey = @"offset";  // Offset to the header
-static NSString *kHeaderIs64BitKey = @"is64";
-static NSString *kHeaderCPUTypeKey = @"cpuType";
+namespace google_breakpad {
 
-// The section for __TEXT, __text seems to be always 1.  This is useful
-// for pruning out extraneous non-function symbols.
-static const int kTextSection = 1;
-
-// Dump FunctionMap to stdout.  Print address, function name, file
-// name, line number, lowpc, and highpc if available.
-void DumpFunctionMap(const dwarf2reader::FunctionMap function_map) {
-  for (dwarf2reader::FunctionMap::const_iterator iter = function_map.begin();
-       iter != function_map.end(); ++iter) {
-    if (iter->second->name.empty()) {
-      continue;
-    }
-    printf("%08llx: %s", iter->first,
-	   iter->second->name.data());
-    if (!iter->second->file.empty()) {
-      printf(" - %s", iter->second->file.data());
-      if (iter->second->line != 0) {
-	printf(":%u", iter->second->line);
-      }
-    }
-    if (iter->second->lowpc != 0 && iter->second->highpc != 0) {
-      printf(" (%08llx - %08llx)\n",
-	     iter->second->lowpc,
-	     iter->second->highpc);
-    }
-  }
-}
-
-
-@interface DumpSymbols(PrivateMethods)
-- (NSString *)convertCPlusPlusSymbol:(NSString *)symbol;
-- (void)addFunction:(NSString *)name line:(int)line address:(uint64_t)address section:(int)section;
-- (BOOL)processSymbolItem:(struct nlist_64 *)list stringTable:(char *)table;
-- (BOOL)loadSymbolInfo:(void *)base offset:(uint32_t)offset;
-- (BOOL)loadSymbolInfo64:(void *)base offset:(uint32_t)offset;
-- (BOOL)loadSymbolInfoForArchitecture;
-- (BOOL)loadDWARFSymbolInfo:(void *)base offset:(uint32_t)offset;
-- (BOOL)loadSTABSSymbolInfo:(void *)base offset:(uint32_t)offset;
-- (void)generateSectionDictionary:(struct mach_header*)header;
-- (BOOL)loadHeader:(void *)base offset:(uint32_t)offset;
-- (BOOL)loadHeader64:(void *)base offset:(uint32_t)offset;
-- (BOOL)loadModuleInfo;
-- (void)processDWARFLineNumberInfo:(dwarf2reader::LineMap*)line_map;
-- (void)processDWARFFunctionInfo:(dwarf2reader::FunctionMap*)address_to_funcinfo;
-- (void)processDWARFSourceFileInfo:(vector<dwarf2reader::SourceFileInfo>*) files;
-- (BOOL)loadSymbolInfo:(void *)base offset:(uint32_t)offset;
-- (dwarf2reader::SectionMap*)getSectionMapForArchitecture:(NSString*)architecture;
-@end
-
-@implementation DumpSymbols
-//=============================================================================
-- (NSString *)convertCPlusPlusSymbol:(NSString *)symbol {
-  // __cxa_demangle will realloc this if needed
-  char *buffer = (char *)malloc(1024);
-  size_t buffer_size = 1024;
-  int result;
-
-  const char *sym = [symbol UTF8String];
-  NSString *demangled = nil;
-  buffer = abi::__cxa_demangle(sym, buffer, &buffer_size, &result);
-  if (result == 0) {
-    demangled = [NSString stringWithUTF8String:buffer];
-  }
-  free(buffer);
-  return demangled;
-}
-
-//=============================================================================
-- (void)addFunction:(NSString *)name line:(int)line address:(uint64_t)address section:(int)section {
-  NSNumber *addressNum = [NSNumber numberWithUnsignedLongLong:address];
-
-  if (!address)
-    return;
-
-  // If the function starts with "_Z" or "__Z" then demangle it.
-  BOOL isCPP = NO;
-
-  if ([name hasPrefix:@"__Z"]) {
-    // Remove the leading underscore
-    name = [name substringFromIndex:1];
-    isCPP = YES;
-  } else if ([name hasPrefix:@"_Z"]) {
-    isCPP = YES;
+bool DumpSymbols::Read(NSString *filename) {
+  if (![[NSFileManager defaultManager] fileExistsAtPath:filename]) {
+    fprintf(stderr, "Object file does not exist: %s\n",
+	    [filename fileSystemRepresentation]);
+    return false;
   }
 
-  // Filter out non-functions
-  if ([name hasSuffix:@".eh"])
-    return;
+  input_pathname_ = [filename retain];
 
-  if ([name hasSuffix:@"__func__"])
-    return;
+  // Does this filename refer to a dSYM bundle?
+  NSBundle *bundle = [NSBundle bundleWithPath:input_pathname_];
 
-  if ([name hasSuffix:@"GCC_except_table"])
-    return;
-
-  if (isCPP) {
-    // OBJCPP_MANGLING_HACK
-    // There are cases where ObjC++ mangles up an ObjC name using quasi-C++ 
-    // mangling:
-    // @implementation Foozles + (void)barzles {
-    //    static int Baz = 0;
-    // } @end
-    // gives you _ZZ18+[Foozles barzles]E3Baz
-    // c++filt won't parse this properly, and will crash in certain cases. 
-    // Logged as radar:
-    // 5129938: c++filt does not deal with ObjC++ symbols
-    // If 5129938 ever gets fixed, we can remove this, but for now this prevents
-    // c++filt from attempting to demangle names it doesn't know how to handle.
-    // This is with c++filt 2.16
-    NSCharacterSet *objcppCharSet = [NSCharacterSet characterSetWithCharactersInString:@"-+[]: "];
-    NSRange emptyRange = { NSNotFound, 0 };
-    NSRange objcppRange = [name rangeOfCharacterFromSet:objcppCharSet];
-    isCPP = NSEqualRanges(objcppRange, emptyRange);
-  } else if ([name characterAtIndex:0] == '_') {
-    // Remove the leading underscore
-    name = [name substringFromIndex:1];
-  }
-
-  // If there's already an entry for this address, check and see if we can add
-  // either the symbol, or a missing line #
-  NSMutableDictionary *dict = [addresses_ objectForKey:addressNum];
-
-  if (!dict) {
-    dict = [[NSMutableDictionary alloc] init];
-    [addresses_ setObject:dict forKey:addressNum];
-    [dict release];
-  }
-
-  if (name && ![dict objectForKey:kAddressSymbolKey]) {
-    [dict setObject:name forKey:kAddressSymbolKey];
-
-    // only functions, not line number addresses
-    [functionAddresses_ addObject:addressNum];
-  }
-
-  if (isCPP) {
-    // try demangling
-    NSString *demangled = [self convertCPlusPlusSymbol:name];
-    if (demangled != nil)
-      [dict setObject:demangled forKey:kAddressConvertedSymbolKey];
-  }
-  
-  if (line && ![dict objectForKey:kAddressSourceLineKey])
-    [dict setObject:[NSNumber numberWithUnsignedInt:line]
-             forKey:kAddressSourceLineKey];
-
-}
-
-//=============================================================================
-- (BOOL)processSymbolItem:(struct nlist_64 *)list stringTable:(char *)table {
-  uint32_t n_strx = list->n_un.n_strx;
-  BOOL result = NO;
-
-  // We don't care about non-section specific information except function length
-  if (list->n_sect == 0 && list->n_type != N_FUN )
-    return NO;
-
-  if (list->n_type == N_FUN) {
-    if (list->n_sect != 0) {
-      // we get the function address from the first N_FUN
-      lastStartAddress_ = list->n_value;
-    }
-    else {
-      // an N_FUN from section 0 may follow the initial N_FUN
-      // giving us function length information
-      NSMutableDictionary *dict = [addresses_ objectForKey:
-        [NSNumber numberWithUnsignedLong:lastStartAddress_]];
-      
-      assert(dict);
-
-      // only set the function size the first time
-      // (sometimes multiple section 0 N_FUN entries appear!)
-      if (![dict objectForKey:kFunctionSizeKey]) {
-        [dict setObject:[NSNumber numberWithUnsignedLongLong:list->n_value]
-                 forKey:kFunctionSizeKey];
-      }
-    }
-  }
-  
-  int line = list->n_desc;
-  
-  // __TEXT __text section
-  NSMutableDictionary *archSections = [sectionData_ objectForKey:architecture_];
-
-  uint32_t mainSection = [[archSections objectForKey:@"__TEXT__text" ] sectionNumber];
-
-  // Extract debugging information:
-  // Doc: http://developer.apple.com/documentation/DeveloperTools/gdb/stabs/stabs_toc.html
-  // Header: /usr/include/mach-o/stab.h:
-  if (list->n_type == N_SO)  {
-    NSString *src = [NSString stringWithUTF8String:&table[n_strx]];
-    NSString *ext = [src pathExtension];
-    NSNumber *address = [NSNumber numberWithUnsignedLongLong:list->n_value];
-
-    // Leopard puts .c files with no code as an offset of 0, but a
-    // crash can't happen here and it throws off our code that matches
-    // symbols to line numbers so we ignore them..
-    // Return YES because this isn't an error, just something we don't
-    // care to handle.
-    if ([address unsignedLongValue] == 0) {
-      return YES;
-    }
-    // TODO(waylonis):Ensure that we get the full path for the source file
-    // from the first N_SO record
-    // If there is an extension, we'll consider it source code
-    if ([ext length]) {
-      if (!sources_)
-        sources_ = [[NSMutableDictionary alloc] init];
-      // Save the source associated with an address
-      [sources_ setObject:src forKey:address];
-      result = YES;
-    }
-  } else if (list->n_type == N_FUN) {
-    NSString *fn = [NSString stringWithUTF8String:&table[n_strx]];
-    NSRange range = [fn rangeOfString:@":" options:NSBackwardsSearch];
-
-    if (![fn length])
-      return NO;
-
-    if (range.length > 0) {
-      // The function has a ":" followed by some stuff, so strip it off
-      fn = [fn substringToIndex:range.location];
-    }
+  if (bundle) {
+    // Filenames referring to bundles usually have names of the form
+    // "<basename>.dSYM"; however, if the user has specified a wrapper
+    // suffix (the WRAPPER_SUFFIX and WRAPPER_EXTENSION build settings),
+    // then the name may have the form "<basename>.<extension>.dSYM". In
+    // either case, the resource name for the file containing the DWARF
+    // info within the bundle is <basename>.
+    //
+    // Since there's no way to tell how much to strip off, remove one
+    // extension at a time, and use the first one that
+    // pathForResource:ofType:inDirectory likes.
+    NSString *base_name = [input_pathname_ lastPathComponent];
+    NSString *dwarf_resource;
     
-    [self addFunction:fn line:line address:list->n_value section:list->n_sect ];
+    do {
+      NSString *new_base_name = [base_name stringByDeletingPathExtension];
 
-    result = YES;
-  } else if (list->n_type == N_SLINE && list->n_sect == mainSection) {
-    [self addFunction:nil line:line address:list->n_value section:list->n_sect ];
-    result = YES;
-  } else if (((list->n_type & N_TYPE) == N_SECT) && !(list->n_type & N_STAB)) {
-    // Regular symbols or ones that are external
-    NSString *fn = [NSString stringWithUTF8String:&table[n_strx]];
+      // If stringByDeletingPathExtension returned the name unchanged, then
+      // there's nothing more for us to strip off --- lose.
+      if ([new_base_name isEqualToString:base_name]) {
+	fprintf(stderr, "Unable to find DWARF-bearing file in bundle: %s\n",
+		[input_pathname_ fileSystemRepresentation]);
+        return false;
+      }
 
-    [self addFunction:fn line:0 address:list->n_value section:list->n_sect ];
-    result = YES;
+      // Take the shortened result as our new base_name.
+      base_name = new_base_name;
+
+      // Try to find a DWARF resource in the bundle under the new base_name.
+      dwarf_resource = [bundle pathForResource:base_name
+                        ofType:nil inDirectory:@"DWARF"];
+    } while (!dwarf_resource);
+
+    object_filename_ = [dwarf_resource retain];
+  } else {
+    object_filename_ = [input_pathname_ retain];
   }
 
-  return result;
-}
+  // Read the file's contents into memory.
+  //
+  // The documentation for dataWithContentsOfMappedFile says:
+  //
+  //     Because of file mapping restrictions, this method should only be
+  //     used if the file is guaranteed to exist for the duration of the
+  //     data object’s existence. It is generally safer to use the
+  //     dataWithContentsOfFile: method.
+  //
+  // I gather this means that OS X doesn't have (or at least, that method
+  // doesn't use) a form of mapping like Linux's MAP_PRIVATE, where the
+  // process appears to get its own copy of the data, and changes to the
+  // file don't affect memory and vice versa).
+  NSError *error;
+  contents_ = [NSData dataWithContentsOfFile:object_filename_
+	                             options:0
+	                               error:&error];
+  if (!contents_) {
+    fprintf(stderr, "Error reading object file: %s: %s\n",
+	    [object_filename_ fileSystemRepresentation],
+	    [[error localizedDescription] UTF8String]);
+    return false;
+  }
+  [contents_ retain];
 
-#define SwapLongLongIfNeeded(a) (swap ? NXSwapLongLong(a) : (a))
-#define SwapLongIfNeeded(a) (swap ? NXSwapLong(a) : (a))
-#define SwapIntIfNeeded(a) (swap ? NXSwapInt(a) : (a))
-#define SwapShortIfNeeded(a) (swap ? NXSwapShort(a) : (a))
-
-//=============================================================================
-- (BOOL)loadSymbolInfo:(void *)base offset:(uint32_t)offset {
-  BOOL loadedStabs = [self loadSTABSSymbolInfo:base offset:offset];
-
-  NSMutableDictionary *archSections = [sectionData_ objectForKey:architecture_];
-  BOOL loadedDWARF = NO;
-  if ([archSections objectForKey:@"__DWARF__debug_info"]) {
-    // Treat this this as debug information
-    loadedDWARF = [self loadDWARFSymbolInfo:base offset:offset];
+  // Get the list of object files present in the file.
+  FatReader::Reporter fat_reporter([object_filename_
+                                    fileSystemRepresentation]);
+  FatReader fat_reader(&fat_reporter);
+  if (!fat_reader.Read(reinterpret_cast<const uint8_t *>([contents_ bytes]),
+                       [contents_ length])) {
+    return false;
   }
 
-  return loadedDWARF || loadedStabs;
+  // Get our own copy of fat_reader's object file list.
+  size_t object_files_count;
+  const struct fat_arch *object_files =
+    fat_reader.object_files(&object_files_count);
+  if (object_files_count == 0) {
+    fprintf(stderr, "Fat binary file contains *no* architectures: %s\n",
+	    [object_filename_ fileSystemRepresentation]);
+    return false;
+  }
+  object_files_.resize(object_files_count);
+  memcpy(&object_files_[0], object_files,
+         sizeof(struct fat_arch) * object_files_count);
+
+  return true;
 }
 
-//=============================================================================
-- (BOOL)loadDWARFSymbolInfo:(void *)base offset:(uint32_t)offset {
+bool DumpSymbols::SetArchitecture(cpu_type_t cpu_type,
+                                  cpu_subtype_t cpu_subtype) {
+  // Find the best match for the architecture the user requested.
+  const struct fat_arch *best_match
+    = NXFindBestFatArch(cpu_type, cpu_subtype, &object_files_[0],
+                        static_cast<uint32_t>(object_files_.size()));
+  if (!best_match) return false;
 
-  struct mach_header *header = (struct mach_header *) 
-    ((uint32_t)base + offset);
-  BOOL swap = (header->magic == MH_CIGAM);
+  // Record the selected object file.
+  selected_object_file_ = best_match;
+  return true;
+}
 
-  NSMutableDictionary *archSections = [sectionData_ objectForKey:architecture_];
-  assert (archSections != nil);
-  section *dbgInfoSection = [[archSections objectForKey:@"__DWARF__debug_info"] sectionPointer];
-  uint32_t debugInfoSize = SwapLongIfNeeded(dbgInfoSection->size);
+bool DumpSymbols::SetArchitecture(const std::string &arch_name) {
+  bool arch_set = false;
+  const NXArchInfo *arch_info = NXGetArchInfoFromName(arch_name.c_str());
+  if (arch_info) {
+    arch_set = SetArchitecture(arch_info->cputype, arch_info->cpusubtype);
+  }
+  return arch_set;
+}
+  
+string DumpSymbols::Identifier() {
+  FileID file_id([object_filename_ fileSystemRepresentation]);
+  unsigned char identifier_bytes[16];
+  cpu_type_t cpu_type = selected_object_file_->cputype;
+  if (!file_id.MachoIdentifier(cpu_type, identifier_bytes)) {
+    fprintf(stderr, "Unable to calculate UUID of mach-o binary %s!\n",
+	    [object_filename_ fileSystemRepresentation]);
+    return "";
+  }
 
-#if __BIG_ENDIAN__
-  dwarf2reader::ByteReader byte_reader(swap ?
-                                       dwarf2reader::ENDIANNESS_LITTLE :
-                                       dwarf2reader::ENDIANNESS_BIG);
-#elif __LITTLE_ENDIAN__
-  dwarf2reader::ByteReader byte_reader(swap ?
+  char identifier_string[40];
+  FileID::ConvertIdentifierToString(identifier_bytes, identifier_string,
+                                    sizeof(identifier_string));
+
+  string compacted(identifier_string);
+  for(size_t i = compacted.find('-'); i != string::npos;
+      i = compacted.find('-', i))
+    compacted.erase(i, 1);
+
+  return compacted;
+}
+
+// A line-to-module loader that accepts line number info parsed by
+// dwarf2reader::LineInfo and populates a Module and a line vector
+// with the results.
+class DumpSymbols::DumperLineToModule:
+      public DwarfCUToModule::LineToModuleFunctor {
+ public:
+  // Create a line-to-module converter using BYTE_READER.
+  DumperLineToModule(dwarf2reader::ByteReader *byte_reader)
+      : byte_reader_(byte_reader) { }
+  void operator()(const char *program, uint64 length,
+                  Module *module, vector<Module::Line> *lines) {
+    DwarfLineToModule handler(module, lines);
+    dwarf2reader::LineInfo parser(program, length, byte_reader_, &handler);
+    parser.Start();
+  }
+ private:
+  dwarf2reader::ByteReader *byte_reader_;  // WEAK
+};
+
+bool DumpSymbols::ReadDwarf(google_breakpad::Module *module,
+                            const mach_o::Reader &macho_reader,
+                            const mach_o::SectionMap &dwarf_sections) const {
+  // Build a byte reader of the appropriate endianness.
+  ByteReader byte_reader(macho_reader.big_endian() 
+                         ? dwarf2reader::ENDIANNESS_BIG
+                         : dwarf2reader::ENDIANNESS_LITTLE);
+
+  // Construct a context for this file.
+  DwarfCUToModule::FileContext file_context(selected_object_name_,
+                                            module);
+
+  // Build a dwarf2reader::SectionMap from our mach_o::SectionMap.
+  for (mach_o::SectionMap::const_iterator it = dwarf_sections.begin();
+       it != dwarf_sections.end(); it++) {
+    file_context.section_map[it->first] =
+      make_pair(reinterpret_cast<const char *>(it->second.contents.start),
+                it->second.contents.Size());
+  }
+
+  // Find the __debug_info section.
+  std::pair<const char *, uint64> debug_info_section
+      = file_context.section_map["__debug_info"];
+  // There had better be a __debug_info section!
+  if (!debug_info_section.first) {
+    fprintf(stderr, "%s: __DWARF segment of file has no __debug_info section\n",
+	    selected_object_name_.c_str());
+    return false;
+  }
+ 
+  // Build a line-to-module loader for the root handler to use.
+  DumperLineToModule line_to_module(&byte_reader);
+
+  // Walk the __debug_info section, one compilation unit at a time.
+  uint64 debug_info_length = debug_info_section.second;
+  for (uint64 offset = 0; offset < debug_info_length;) {
+    // Make a handler for the root DIE that populates MODULE with the
+    // debug info.
+    DwarfCUToModule::WarningReporter reporter(selected_object_name_,
+                                              offset);
+    DwarfCUToModule root_handler(&file_context, &line_to_module, &reporter);
+    // Make a Dwarf2Handler that drives our DIEHandler.
+    dwarf2reader::DIEDispatcher die_dispatcher(&root_handler);
+    // Make a DWARF parser for the compilation unit at OFFSET.
+    dwarf2reader::CompilationUnit dwarf_reader(file_context.section_map,
+                                               offset,
+                                               &byte_reader,
+                                               &die_dispatcher);
+    // Process the entire compilation unit; get the offset of the next.
+    offset += dwarf_reader.Start();
+  }
+
+  return true;
+}
+
+bool DumpSymbols::ReadCFI(google_breakpad::Module *module,
+                          const mach_o::Reader &macho_reader,
+                          const mach_o::Section &section,
+                          bool eh_frame) const {
+  // Find the appropriate set of register names for this file's
+  // architecture.
+  vector<string> register_names;
+  switch (macho_reader.cpu_type()) {
+    case CPU_TYPE_X86:
+      register_names = DwarfCFIToModule::RegisterNames::I386();
+      break;
+    case CPU_TYPE_X86_64:
+      register_names = DwarfCFIToModule::RegisterNames::X86_64();
+      break;
+    case CPU_TYPE_ARM:
+      register_names = DwarfCFIToModule::RegisterNames::ARM();
+      break;
+    default: {
+      const NXArchInfo *arch =
+          NXGetArchInfoFromCpuType(macho_reader.cpu_type(),
+                                   macho_reader.cpu_subtype());
+      fprintf(stderr, "%s: cannot convert DWARF call frame information for ",
+              selected_object_name_.c_str());
+      if (arch)
+        fprintf(stderr, "architecture '%s'", arch->name);
+      else
+        fprintf(stderr, "architecture %d,%d",
+                macho_reader.cpu_type(), macho_reader.cpu_subtype());
+      fprintf(stderr, " to Breakpad symbol file: no register name table\n");
+      return false;
+    }
+  }
+
+  // Find the call frame information and its size.
+  const char *cfi = reinterpret_cast<const char *>(section.contents.start);
+  size_t cfi_size = section.contents.Size();
+
+  // Plug together the parser, handler, and their entourages.
+  DwarfCFIToModule::Reporter module_reporter(selected_object_name_,
+                                             section.section_name);
+  DwarfCFIToModule handler(module, register_names, &module_reporter);
+  dwarf2reader::ByteReader byte_reader(macho_reader.big_endian() ?
                                        dwarf2reader::ENDIANNESS_BIG :
                                        dwarf2reader::ENDIANNESS_LITTLE);
-#endif
-  uint64_t dbgOffset = 0;
-
-  dwarf2reader::SectionMap* oneArchitectureSectionMap = [self getSectionMapForArchitecture:architecture_];
-
-  while (dbgOffset < debugInfoSize) {
-    // Prepare necessary objects.
-    dwarf2reader::FunctionMap off_to_funcinfo;
-    dwarf2reader::FunctionMap address_to_funcinfo;
-    dwarf2reader::LineMap line_map;
-    vector<dwarf2reader::SourceFileInfo> files;
-    vector<string> dirs;
-
-    dwarf2reader::CULineInfoHandler line_info_handler(&files, &dirs,
-						      &line_map);
-
-    dwarf2reader::CUFunctionInfoHandler function_info_handler(&files, &dirs,
-                                                              &line_map,
-                                                              &off_to_funcinfo,
-                                                              &address_to_funcinfo,
-							      &line_info_handler,
-                                                              *oneArchitectureSectionMap,
-                                                              &byte_reader);
-
-    dwarf2reader::CompilationUnit compilation_unit(*oneArchitectureSectionMap,
-                                                   dbgOffset,
-                                                   &byte_reader,
-                                                   &function_info_handler);
-
-    dbgOffset += compilation_unit.Start();
-
-    // The next 3 functions take the info that the dwarf reader
-    // gives and massages them into the data structures that
-    // dump_syms uses 
-    [self processDWARFSourceFileInfo:&files];
-    [self processDWARFFunctionInfo:&address_to_funcinfo];
-    [self processDWARFLineNumberInfo:&line_map];
-  }
-
-  return YES;
-}
-
-- (void)processDWARFSourceFileInfo:(vector<dwarf2reader::SourceFileInfo>*) files {
-  if (!sources_)
-    sources_ = [[NSMutableDictionary alloc] init];
-  // Save the source associated with an address
-  vector<dwarf2reader::SourceFileInfo>::const_iterator iter = files->begin();
-  for (; iter != files->end(); iter++) {
-    NSString *sourceFile = [NSString stringWithUTF8String:(*iter).name.c_str()];
-    if ((*iter).lowpc != ULLONG_MAX) {
-      NSNumber *address = [NSNumber numberWithUnsignedLongLong:(*iter).lowpc];
-      if ([address unsignedLongLongValue] == 0) {
-        continue;
-      }
-      [sources_ setObject:sourceFile forKey:address];
-    }
-  }
-}
-  
-- (void)processDWARFFunctionInfo:(dwarf2reader::FunctionMap*)address_to_funcinfo {
-  for (dwarf2reader::FunctionMap::const_iterator iter = address_to_funcinfo->begin();
-       iter != address_to_funcinfo->end(); ++iter) {
-    if (iter->second->name.empty()) {
-      continue;
-    }
-
-    if (!addresses_)
-      addresses_ = [[NSMutableDictionary alloc] init];
-
-    NSNumber *addressNum = [NSNumber numberWithUnsignedLongLong:(*iter).second->lowpc];
-	
-    [functionAddresses_ addObject:addressNum];
-
-    NSMutableDictionary *dict = [addresses_ objectForKey:addressNum];
-
-    if (!dict) {
-      dict = [[NSMutableDictionary alloc] init];
-      [addresses_ setObject:dict forKey:addressNum];
-      [dict release];
-    }
-
-    // set name of function if it isn't already set
-    if (![dict objectForKey:kAddressSymbolKey]) {
-      NSString *symbolName = [NSString stringWithUTF8String:iter->second->name.c_str()];
-      [dict setObject:symbolName forKey:kAddressSymbolKey];
-    }
-
-    // try demangling function name if we have a mangled name
-    if (![dict objectForKey:kAddressConvertedSymbolKey] &&
-        !iter->second->mangled_name.empty()) {
-      NSString *mangled = [NSString stringWithUTF8String:iter->second->mangled_name.c_str()];
-      NSString *demangled = [self convertCPlusPlusSymbol:mangled];
-      if (demangled != nil)
-        [dict setObject:demangled forKey:kAddressConvertedSymbolKey];
-    }
-  
-    // set line number for beginning of function
-    if (iter->second->line && ![dict objectForKey:kAddressSourceLineKey])
-      [dict setObject:[NSNumber numberWithUnsignedInt:iter->second->line]
-	    forKey:kAddressSourceLineKey];
-
-    // set function size by subtracting low PC from high PC
-    if (![dict objectForKey:kFunctionSizeKey]) {
-      [dict setObject:[NSNumber numberWithUnsignedLongLong:iter->second->highpc - iter->second->lowpc]
-	    forKey:kFunctionSizeKey];
-    }
-
-    // Set the file that the function is in
-    if (![dict objectForKey:kFunctionFileKey]) {
-      [dict setObject:[NSString stringWithUTF8String:iter->second->file.c_str()]
-               forKey:kFunctionFileKey];
-    }
-  }
-}
-
-- (void)processDWARFLineNumberInfo:(dwarf2reader::LineMap*)line_map {
-  for (dwarf2reader::LineMap::const_iterator iter = line_map->begin();
-       iter != line_map->end(); 
-       ++iter) {
-
-    NSNumber *addressNum = [NSNumber numberWithUnsignedLongLong:iter->first];
-    NSMutableDictionary *dict = [addresses_ objectForKey:addressNum];
-
-    if (!dict) {
-      dict = [[NSMutableDictionary alloc] init];
-      [addresses_ setObject:dict forKey:addressNum];
-      [dict release];
-    } 
-	
-    if (iter->second.second && ![dict objectForKey:kAddressSourceLineKey]) {
-      [dict setObject:[NSNumber numberWithUnsignedInt:iter->second.second]
-	    forKey:kAddressSourceLineKey];
-    }
-
-    // Set the file that the function's address is in
-    if (![dict objectForKey:kFunctionFileKey]) {
-      [dict setObject:[NSString stringWithUTF8String:iter->second.first.c_str()]
-               forKey:kFunctionFileKey];
-    }
-  }
-}
-
-//=============================================================================
-- (BOOL)loadSTABSSymbolInfo:(void *)base offset:(uint32_t)offset {
-  struct mach_header *header = (struct mach_header *)((uint32_t)base + offset);
-  BOOL swap = (header->magic == MH_CIGAM);
-  uint32_t count = SwapLongIfNeeded(header->ncmds);
-  struct load_command *cmd =
-    (struct load_command *)((uint32_t)header + sizeof(struct mach_header));
-  uint32_t symbolTableCommand = SwapLongIfNeeded(LC_SYMTAB);
-  BOOL result = NO;
-
-  if (!addresses_)
-    addresses_ = [[NSMutableDictionary alloc] init];
-
-  for (uint32_t i = 0; cmd && (i < count); ++i) {
-    if (cmd->cmd == symbolTableCommand) {
-      struct symtab_command *symtab = (struct symtab_command *)cmd;
-      uint32_t ncmds = SwapLongIfNeeded(symtab->nsyms);
-      uint32_t symoff = SwapLongIfNeeded(symtab->symoff);
-      uint32_t stroff = SwapLongIfNeeded(symtab->stroff);
-      struct nlist *list = (struct nlist *)((uint32_t)base + symoff + offset);
-      char *strtab = ((char *)header + stroff);
-
-      // Process each command, looking for debugging stuff
-      for (uint32_t j = 0; j < ncmds; ++j, ++list) {
-        // Fill in an nlist_64 structure and process with that
-        struct nlist_64 nlist64;
-        nlist64.n_un.n_strx = SwapLongIfNeeded(list->n_un.n_strx);
-        nlist64.n_type = list->n_type;
-        nlist64.n_sect = list->n_sect;
-        nlist64.n_desc = SwapShortIfNeeded(list->n_desc);
-        nlist64.n_value = (uint64_t)SwapLongIfNeeded(list->n_value);
-
-        // TODO(nealsid): is this broken? we get NO if one symbol fails
-        // but then we lose that information if another suceeeds
-        if ([self processSymbolItem:&nlist64 stringTable:strtab])
-          result = YES;
-      }
-    }
-
-    uint32_t cmdSize = SwapLongIfNeeded(cmd->cmdsize);
-    cmd = (struct load_command *)((uint32_t)cmd + cmdSize);
-  }
-
-  return result;
-}
-
-//=============================================================================
-- (BOOL)loadSymbolInfo64:(void *)base offset:(uint32_t)offset {
-  struct mach_header_64 *header = (struct mach_header_64 *)
-    ((uint32_t)base + offset);
-  BOOL swap = (header->magic == MH_CIGAM_64);
-  uint32_t count = SwapLongIfNeeded(header->ncmds);
-  struct load_command *cmd =
-    (struct load_command *)((uint32_t)header + sizeof(struct mach_header));
-  uint32_t symbolTableCommand = SwapLongIfNeeded(LC_SYMTAB);
-  BOOL result = NO;
-
-  for (uint32_t i = 0; cmd && (i < count); i++) {
-    if (cmd->cmd == symbolTableCommand) {
-      struct symtab_command *symtab = (struct symtab_command *)cmd;
-      uint32_t ncmds = SwapLongIfNeeded(symtab->nsyms);
-      uint32_t symoff = SwapLongIfNeeded(symtab->symoff);
-      uint32_t stroff = SwapLongIfNeeded(symtab->stroff);
-      struct nlist_64 *list = (struct nlist_64 *)((uint32_t)base + symoff);
-      char *strtab = ((char *)header + stroff);
-
-      // Process each command, looking for debugging stuff
-      for (uint32_t j = 0; j < ncmds; ++j, ++list) {
-        if (!(list->n_type & (N_STAB | N_TYPE)))
-          continue;
-
-        // Fill in an nlist_64 structure and process with that
-        struct nlist_64 nlist64;
-        nlist64.n_un.n_strx = SwapLongIfNeeded(list->n_un.n_strx);
-        nlist64.n_type = list->n_type;
-        nlist64.n_sect = list->n_sect;
-        nlist64.n_desc = SwapShortIfNeeded(list->n_desc);
-        nlist64.n_value = SwapLongLongIfNeeded(list->n_value);
-
-        if ([self processSymbolItem:&nlist64 stringTable:strtab])
-          result = YES;
-      }
-    }
-
-    uint32_t cmdSize = SwapLongIfNeeded(cmd->cmdsize);
-    cmd = (struct load_command *)((uint32_t)cmd + cmdSize);
-  }
-
-  return result;
-}
-
-//=============================================================================
-- (BOOL)loadSymbolInfoForArchitecture {
-  NSMutableData *data = [[NSMutableData alloc]
-    initWithContentsOfMappedFile:sourcePath_];
-
-  NSDictionary *headerInfo = [headers_ objectForKey:architecture_];
-  void *base = [data mutableBytes];
-  uint32_t offset =
-    [[headerInfo objectForKey:kHeaderOffsetKey] unsignedLongValue];
-  BOOL is64 = [[headerInfo objectForKey:kHeaderIs64BitKey] boolValue];
-  BOOL result = is64 ? [self loadSymbolInfo64:base offset:offset] :
-    [self loadSymbolInfo:base offset:offset];
-
-  [data release];
-  return result;
-}
-
-- (dwarf2reader::SectionMap*)getSectionMapForArchitecture:(NSString*)architecture {
-
-  string currentArch([architecture UTF8String]);
-  dwarf2reader::SectionMap *oneArchitectureSectionMap;
-
-  ArchSectionMap::const_iterator iter = sectionsForArch_->find(currentArch);
-  
-  if (iter == sectionsForArch_->end()) {
-    oneArchitectureSectionMap = new dwarf2reader::SectionMap();
-    sectionsForArch_->insert(make_pair(currentArch, oneArchitectureSectionMap));
-  } else {
-    oneArchitectureSectionMap = iter->second;
-  }
+  byte_reader.SetAddressSize(macho_reader.bits_64() ? 8 : 4);
+  // At the moment, according to folks at Apple and some cursory
+  // investigation, Mac OS X only uses DW_EH_PE_pcrel-based pointers, so
+  // this is the only base address the CFI parser will need.
+  byte_reader.SetCFIDataBase(section.address, cfi);
     
-  return oneArchitectureSectionMap;
+  dwarf2reader::CallFrameInfo::Reporter dwarf_reporter(selected_object_name_,
+                                                       section.section_name);
+  dwarf2reader::CallFrameInfo parser(cfi, cfi_size,
+                                     &byte_reader, &handler, &dwarf_reporter,
+                                     eh_frame);
+  parser.Start();
+  return true;
 }
 
-//=============================================================================
-// build a dictionary of section numbers keyed off a string
-// which is the concatenation of the segment name and the section name
-- (void)generateSectionDictionary:(struct mach_header*)header {
+// A LoadCommandHandler that loads whatever debugging data it finds into a
+// Module.
+class DumpSymbols::LoadCommandDumper:
+      public mach_o::Reader::LoadCommandHandler {
+ public:
+  // Create a load command dumper handling load commands from READER's
+  // file, and adding data to MODULE.
+  LoadCommandDumper(const DumpSymbols &dumper,
+                    google_breakpad::Module *module,
+                    const mach_o::Reader &reader)
+      : dumper_(dumper), module_(module), reader_(reader) { }
 
-  BOOL swap = (header->magic == MH_CIGAM);
-  uint32_t count = SwapLongIfNeeded(header->ncmds);
-  struct load_command *cmd =
-    (struct load_command *)((uint32_t)header + sizeof(struct mach_header));
-  uint32_t segmentCommand = SwapLongIfNeeded(LC_SEGMENT);
-  uint32_t sectionNumber = 1;   // section numbers are counted from 1
-  
-  cpu_type_t cpu = SwapIntIfNeeded(header->cputype);
+  bool SegmentCommand(const mach_o::Segment &segment);
+  bool SymtabCommand(const ByteBuffer &entries, const ByteBuffer &strings);
 
-  NSString *arch;
+ private:
+  const DumpSymbols &dumper_;
+  google_breakpad::Module *module_;  // WEAK
+  const mach_o::Reader &reader_;
+};
 
-  if (cpu & CPU_ARCH_ABI64)
-    arch = ((cpu & ~CPU_ARCH_ABI64) == CPU_TYPE_X86) ?
-      @"x86_64" : @"ppc64";
-  else
-    arch = (cpu == CPU_TYPE_X86) ? @"x86" : @"ppc";
+bool DumpSymbols::LoadCommandDumper::SegmentCommand(const Segment &segment) {
+  mach_o::SectionMap section_map;
+  if (!reader_.MapSegmentSections(segment, &section_map))
+    return false;
 
-  NSMutableDictionary *archSections;
-
-  if (!sectionData_) {
-    sectionData_ = [[NSMutableDictionary alloc] init];
-  }
-  
-  if (![sectionData_ objectForKey:architecture_]) {
-    [sectionData_ setObject:[[NSMutableDictionary alloc] init] forKey:arch];
+  if (segment.name == "__TEXT") {
+    module_->SetLoadAddress(segment.vmaddr);
+    mach_o::SectionMap::const_iterator eh_frame =
+        section_map.find("__eh_frame");
+    if (eh_frame != section_map.end()) {
+      // If there is a problem reading this, don't treat it as a fatal error.
+      dumper_.ReadCFI(module_, reader_, eh_frame->second, true);
+    }
+    return true;
   }
 
-  archSections = [sectionData_ objectForKey:arch];
+  if (segment.name == "__DWARF") {
+    if (!dumper_.ReadDwarf(module_, reader_, section_map))
+      return false;
+    mach_o::SectionMap::const_iterator debug_frame
+        = section_map.find("__debug_frame");
+    if (debug_frame != section_map.end()) {
+      // If there is a problem reading this, don't treat it as a fatal error.
+      dumper_.ReadCFI(module_, reader_, debug_frame->second, false);
+    }
+  }
 
-  dwarf2reader::SectionMap* oneArchitectureSectionMap = [self getSectionMapForArchitecture:arch];
-  
-  // loop through every segment command, then through every section
-  // contained inside each of them
-  for (uint32_t i = 0; cmd && (i < count); ++i) {
-    if (cmd->cmd == segmentCommand) {            
-      struct segment_command *seg = (struct segment_command *)cmd;
-      section *sect = (section *)((uint32_t)cmd + sizeof(segment_command));
-      uint32_t nsects = SwapLongIfNeeded(seg->nsects);
-      
-      for (uint32_t j = 0; j < nsects; ++j) {
-        NSString *segSectName = [NSString stringWithFormat:@"%s%s",
-          seg->segname, sect->sectname];
-        
-        [archSections setObject:[[MachSection alloc] initWithMachSection:sect andNumber:sectionNumber]
-		      forKey:segSectName];
+  return true;
+}
 
-	// filter out sections with size 0, offset 0
-	if (sect->offset != 0 && sect->size != 0) {
-	  // fill sectionmap for dwarf reader
-	  oneArchitectureSectionMap->insert(make_pair(sect->sectname,make_pair(((const char*)header) + SwapLongIfNeeded(sect->offset), (size_t)SwapLongIfNeeded(sect->size))));
-	}
+bool DumpSymbols::LoadCommandDumper::SymtabCommand(const ByteBuffer &entries,
+                                                   const ByteBuffer &strings) {
+  StabsToModule stabs_to_module(module_);
+  // Mac OS X STABS are never "unitized", and the size of the 'value' field
+  // matches the address size of the executable.
+  StabsReader stabs_reader(entries.start, entries.Size(),
+                           strings.start, strings.Size(),
+                           reader_.big_endian(),
+                           reader_.bits_64() ? 8 : 4,
+                           true,
+                           &stabs_to_module);
+  if (!stabs_reader.Process())
+    return false;
+  stabs_to_module.Finalize();
+  return true;
+}
 
-        ++sect;
-        ++sectionNumber;
+bool DumpSymbols::WriteSymbolFile(FILE *stream) {
+  // Select an object file, if SetArchitecture hasn't been called to set one
+  // explicitly.
+  if (!selected_object_file_) {
+    // If there's only one architecture, that's the one.
+    if (object_files_.size() == 1)
+      selected_object_file_ = &object_files_[0];
+    else {
+      // Look for an object file whose architecture matches our own.
+      const NXArchInfo *local_arch = NXGetLocalArchInfo();
+      if (!SetArchitecture(local_arch->cputype, local_arch->cpusubtype)) {
+        fprintf(stderr, "%s: object file contains more than one"
+		" architecture, none of which match the current"
+                " architecture; specify an architecture explicitly"
+		" with '-a ARCH' to resolve the ambiguity\n",
+		[object_filename_ fileSystemRepresentation]);
+        return false;
       }
     }
-
-    uint32_t cmdSize = SwapLongIfNeeded(cmd->cmdsize);
-    cmd = (struct load_command *)((uint32_t)cmd + cmdSize);
   }
+
+  assert(selected_object_file_);
+
+  // Find the name of the selected file's architecture, to appear in
+  // the MODULE record and in error messages.
+  const NXArchInfo *selected_arch_info
+      = NXGetArchInfoFromCpuType(selected_object_file_->cputype,
+                                 selected_object_file_->cpusubtype);
+
+  const char *selected_arch_name = selected_arch_info->name;
+  if (strcmp(selected_arch_name, "i386") == 0)
+    selected_arch_name = "x86";
+
+  // Produce a name to use in error messages that includes the
+  // filename, and the architecture, if there is more than one.
+  selected_object_name_ = [object_filename_ UTF8String];
+  if (object_files_.size() > 1) {
+    selected_object_name_ += ", architecture ";
+    selected_object_name_ + selected_arch_name;
+  }
+
+  // Compute a module name, to appear in the MODULE record.
+  NSString *module_name = [object_filename_ lastPathComponent];
+
+  // Choose an identifier string, to appear in the MODULE record.
+  string identifier = Identifier();
+  if (identifier.empty())
+    return false;
+  identifier += "0";
+
+  // Create a module to hold the debugging information.
+  Module module([module_name UTF8String], "mac", selected_arch_name, 
+                identifier);
+
+  // Parse the selected object file.
+  mach_o::Reader::Reporter reporter(selected_object_name_);
+  mach_o::Reader reader(&reporter);
+  if (!reader.Read(reinterpret_cast<const uint8_t *>([contents_ bytes])
+                   + selected_object_file_->offset,
+                   selected_object_file_->size,
+		   selected_object_file_->cputype,
+		   selected_object_file_->cpusubtype))
+    return false;
+
+  // Walk its load commands, and deal with whatever is there.
+  LoadCommandDumper load_command_dumper(*this, &module, reader);
+  if (!reader.WalkLoadCommands(&load_command_dumper))
+    return false;
+
+  return module.Write(stream);
 }
 
-//=============================================================================
-- (BOOL)loadHeader:(void *)base offset:(uint32_t)offset {
-  struct mach_header *header = (struct mach_header *)((uint32_t)base + offset);
-  BOOL swap = (header->magic == MH_CIGAM);
-  uint32_t count = SwapLongIfNeeded(header->ncmds);
-  struct load_command *cmd =
-    (struct load_command *)((uint32_t)header + sizeof(struct mach_header));
-  uint32_t segmentCommand = SwapLongIfNeeded(LC_SEGMENT);
-
-  [self generateSectionDictionary:header];
-
-  for (uint32_t i = 0; cmd && (i < count); ++i) {
-    if (cmd->cmd == segmentCommand) {
-      struct segment_command *seg = (struct segment_command *)cmd;
-      
-      if (!strcmp(seg->segname, "__TEXT")) {
-        uint32_t addr = SwapLongIfNeeded(seg->vmaddr);
-        uint32_t size = SwapLongIfNeeded(seg->vmsize);
-        cpu_type_t cpu = SwapIntIfNeeded(header->cputype);
-        NSString *cpuStr = (cpu == CPU_TYPE_I386) ? @"x86" : @"ppc";
-
-        [headers_ setObject:[NSDictionary dictionaryWithObjectsAndKeys:
-          [NSNumber numberWithUnsignedLongLong:(uint64_t)addr],
-          kHeaderBaseAddressKey,
-          [NSNumber numberWithUnsignedLongLong:(uint64_t)size], kHeaderSizeKey,
-          [NSNumber numberWithUnsignedLong:offset], kHeaderOffsetKey,
-          [NSNumber numberWithBool:NO], kHeaderIs64BitKey,
-          [NSNumber numberWithUnsignedLong:cpu], kHeaderCPUTypeKey,
-          nil] forKey:cpuStr];
-
-        return YES;
-      }
-    }
-
-    uint32_t cmdSize = SwapLongIfNeeded(cmd->cmdsize);
-    cmd = (struct load_command *)((uint32_t)cmd + cmdSize);
-  }
-
-  return NO;
-}
-
-//=============================================================================
-- (BOOL)loadHeader64:(void *)base offset:(uint32_t)offset {
-  struct mach_header_64 *header =
-    (struct mach_header_64 *)((uint32_t)base + offset);
-  BOOL swap = (header->magic == MH_CIGAM_64);
-  uint32_t count = SwapLongIfNeeded(header->ncmds);
-  struct load_command *cmd =
-    (struct load_command *)((uint32_t)header + sizeof(struct mach_header_64));
-
-  for (uint32_t i = 0; cmd && (i < count); ++i) {
-    uint32_t segmentCommand = SwapLongIfNeeded(LC_SEGMENT_64);
-    if (cmd->cmd == segmentCommand) {
-      struct segment_command_64 *seg = (struct segment_command_64 *)cmd;
-      if (!strcmp(seg->segname, "__TEXT")) {
-        uint64_t addr = SwapLongLongIfNeeded(seg->vmaddr);
-        uint64_t size = SwapLongLongIfNeeded(seg->vmsize);
-        cpu_type_t cpu = SwapIntIfNeeded(header->cputype);
-        cpu &= (~CPU_ARCH_ABI64);
-        NSString *cpuStr = (cpu == CPU_TYPE_I386) ? @"x86_64" : @"ppc64";
-
-        [headers_ setObject:[NSDictionary dictionaryWithObjectsAndKeys:
-          [NSNumber numberWithUnsignedLongLong:addr], kHeaderBaseAddressKey,
-          [NSNumber numberWithUnsignedLongLong:size], kHeaderSizeKey,
-          [NSNumber numberWithUnsignedLong:offset], kHeaderOffsetKey,
-          [NSNumber numberWithBool:YES], kHeaderIs64BitKey,
-          [NSNumber numberWithUnsignedLong:cpu], kHeaderCPUTypeKey,
-          nil] forKey:cpuStr];
-        return YES;
-      }
-    }
-
-    uint32_t cmdSize = SwapLongIfNeeded(cmd->cmdsize);
-    cmd = (struct load_command *)((uint32_t)cmd + cmdSize);
-  }
-
-  return NO;
-}
-
-//=============================================================================
-- (BOOL)loadModuleInfo {
-  uint64_t result = 0;
-  NSMutableData *data = [[NSMutableData alloc]
-    initWithContentsOfMappedFile:sourcePath_];
-  void *bytes = [data mutableBytes];
-  struct fat_header *fat = (struct fat_header *)bytes;
-
-  if (!fat) {
-    [data release];
-    return 0;
-  }
-
-  // Gather some information based on the header
-  BOOL isFat = fat->magic == FAT_MAGIC || fat->magic == FAT_CIGAM;
-  BOOL is64 = fat->magic == MH_MAGIC_64 || fat->magic == MH_CIGAM_64;
-  BOOL is32 = fat->magic == MH_MAGIC || fat->magic == MH_CIGAM;
-  BOOL swap = fat->magic == FAT_CIGAM || fat->magic == MH_CIGAM_64 ||
-    fat->magic == MH_CIGAM;
-
-  if (!is64 && !is32 && !isFat) {
-    [data release];
-    return 0;
-  }
-
-  // Load any available architectures and save the information
-  headers_ = [[NSMutableDictionary alloc] init];
-
-  if (isFat) {
-    struct fat_arch *archs =
-      (struct fat_arch *)((uint32_t)fat + sizeof(struct fat_header));
-    uint32_t count = SwapLongIfNeeded(fat->nfat_arch);
-
-    for (uint32_t i = 0; i < count; ++i) {
-      archs[i].cputype = SwapIntIfNeeded(archs[i].cputype);
-      archs[i].cpusubtype = SwapIntIfNeeded(archs[i].cpusubtype);
-      archs[i].offset = SwapLongIfNeeded(archs[i].offset);
-      archs[i].size = SwapLongIfNeeded(archs[i].size);
-      archs[i].align = SwapLongIfNeeded(archs[i].align);
-
-      if (archs[i].cputype & CPU_ARCH_ABI64)
-        result = [self loadHeader64:bytes offset:archs[i].offset];
-      else
-        result = [self loadHeader:bytes offset:archs[i].offset];
-    }
-  } else if (is32) {
-    result = [self loadHeader:bytes offset:0];
-  } else {
-    result = [self loadHeader64:bytes offset:0];
-  }
-
-  [data release];
-  return result;
-}
-
-//=============================================================================
-static BOOL WriteFormat(int fd, const char *fmt, ...) {
-  va_list list;
-  char buffer[4096];
-  ssize_t expected, written;
-
-  va_start(list, fmt);
-  vsnprintf(buffer, sizeof(buffer), fmt, list);
-  expected = strlen(buffer);
-  written = write(fd, buffer, strlen(buffer));
-  va_end(list);
-
-  return expected == written;
-}
-
-//=============================================================================
-- (BOOL)outputSymbolFile:(int)fd {
-  // Get the baseAddress for this architecture
-  NSDictionary *archDict = [headers_ objectForKey:architecture_];
-  NSNumber *baseAddressNum = [archDict objectForKey:kHeaderBaseAddressKey];
-  uint64_t baseAddress =
-    baseAddressNum ? [baseAddressNum unsignedLongLongValue] : 0;
-  NSNumber *moduleSizeNum = [archDict objectForKey:kHeaderSizeKey];
-  uint64_t moduleSize =
-    moduleSizeNum ? [moduleSizeNum unsignedLongLongValue] : 0;
-
-  // UUID
-  FileID file_id([sourcePath_ fileSystemRepresentation]);
-  unsigned char identifier[16];
-  char identifierStr[40];
-  const char *moduleName = [[sourcePath_ lastPathComponent] UTF8String];
-  int cpu_type = [[archDict objectForKey:kHeaderCPUTypeKey] unsignedLongValue];
-  if (file_id.MachoIdentifier(cpu_type, identifier)) {
-    FileID::ConvertIdentifierToString(identifier, identifierStr,
-                                      sizeof(identifierStr));
-  }
-  else {
-    fprintf(stderr, "Unable to calculate UUID of mach-o binary!\n");
-    return NO;
-  }
-
-  // keep track exclusively of function addresses
-  // for sanity checking function lengths
-  functionAddresses_ = [[NSMutableSet alloc] init];
-
-  // Gather the information
-  [self loadSymbolInfoForArchitecture];
-
-  NSArray *sortedAddresses = [[addresses_ allKeys]
-    sortedArrayUsingSelector:@selector(compare:)];
-
-  NSArray *sortedFunctionAddresses = [[functionAddresses_ allObjects]
-    sortedArrayUsingSelector:@selector(compare:)];
-
-  // position ourselves at the 2nd function
-  unsigned int funcIndex = 1;
-
-  // Remove the dashes from the string
-  NSMutableString *compactedStr =
-    [NSMutableString stringWithCString:identifierStr encoding:NSASCIIStringEncoding];
-  [compactedStr replaceOccurrencesOfString:@"-" withString:@"" options:0
-                                     range:NSMakeRange(0, [compactedStr length])];
-
-  if (!WriteFormat(fd, "MODULE mac %s %s0 %s\n", [architecture_ UTF8String],
-                   [compactedStr UTF8String], moduleName)) {
-    return NO;
-  }
-
-  // Sources ordered by address
-  NSArray *sources = [[sources_ allKeys]
-    sortedArrayUsingSelector:@selector(compare:)];
-  NSMutableDictionary *fileNameToFileIndex = [[NSMutableDictionary alloc] init];
-  unsigned int sourceCount = [sources count];
-  for (unsigned int i = 0; i < sourceCount; ++i) {
-    NSString *file = [sources_ objectForKey:[sources objectAtIndex:i]];
-    if (!WriteFormat(fd, "FILE %d %s\n", i + 1, [file UTF8String]))
-      return NO;
-
-    [fileNameToFileIndex setObject:[NSNumber numberWithUnsignedInt:i+1]
-                            forKey:file];
-  }
-
-  // Symbols
-  char terminatingChar = '\n';
-  uint32_t fileIdx = 0, nextFileIdx = 0;
-  uint64_t nextSourceFileAddress = 0;
-  NSNumber *nextAddress;
-  uint64_t nextAddressVal;
-  unsigned int addressCount = [sortedAddresses count];
-  
-  bool insideFunction = false;
-  
-  for (unsigned int i = 0; i < addressCount; ++i) {
-    NSNumber *address = [sortedAddresses objectAtIndex:i];
-    // skip sources that have a starting address of 0
-    if ([address unsignedLongValue] == 0) {
-      continue;
-    }
-
-    uint64_t addressVal = [address unsignedLongLongValue] - baseAddress;
-
-    // Get the next address to calculate the length
-    if (i + 1 < addressCount) {
-      nextAddress = [sortedAddresses objectAtIndex:i + 1];
-      nextAddressVal = [nextAddress unsignedLongLongValue] - baseAddress;
-    } else {
-      nextAddressVal = baseAddress + moduleSize;
-      // The symbol reader doesn't want a trailing newline
-      terminatingChar = '\0';
-    }
-    
-    NSDictionary *dict = [addresses_ objectForKey:address];
-    NSNumber *line = [dict objectForKey:kAddressSourceLineKey];
-    NSString *symbol = [dict objectForKey:kAddressConvertedSymbolKey];
-
-    if (!symbol)
-      symbol = [dict objectForKey:kAddressSymbolKey];
-
-    // sanity check the function length by making sure it doesn't
-    // run beyond the next function entry
-    uint64_t nextFunctionAddress = 0;
-    if (symbol && funcIndex < [sortedFunctionAddresses count]) {
-      nextFunctionAddress = [[sortedFunctionAddresses objectAtIndex:funcIndex]
-        unsignedLongLongValue] - baseAddress;
-      ++funcIndex;
-    }
-
-    // Skip some symbols
-    if ([symbol hasPrefix:@"vtable for"])
-      continue;
-
-    if ([symbol hasPrefix:@"__static_initialization_and_destruction_0"])
-      continue;
-
-    if ([symbol hasPrefix:@"_GLOBAL__I_"])
-      continue;
-
-    if ([symbol hasPrefix:@"__func__."])
-      continue;
-
-    if ([symbol hasPrefix:@"__gnu"])
-      continue;
-
-    if ([symbol hasPrefix:@"typeinfo "])
-      continue;
-
-    if ([symbol hasPrefix:@"EH_frame"])
-      continue;
-
-    if ([symbol hasPrefix:@"GCC_except_table"])
-      continue;
-
-    if ([symbol hasPrefix:@"__tcf"])
-      continue;
-
-    if ([symbol hasPrefix:@"non-virtual thunk"])
-      continue;
-
-    // Find the source file (if any) that contains this address
-    while (sourceCount && (addressVal >= nextSourceFileAddress)) {
-      fileIdx = nextFileIdx;
-
-      if (nextFileIdx < sourceCount) {
-        NSNumber *addr = [sources objectAtIndex:nextFileIdx];
-        ++nextFileIdx;
-        nextSourceFileAddress = [addr unsignedLongLongValue] - baseAddress;
-      } else {
-        nextSourceFileAddress = baseAddress + moduleSize;
-        break;
-      }
-    }
-
-    NSNumber *functionLength = [dict objectForKey:kFunctionSizeKey];
-
-    if (line) {
-      if (symbol && functionLength) {
-
-        uint64_t functionLengthVal = [functionLength unsignedLongLongValue];
-
-        insideFunction = true;
-        // sanity check to make sure the length we were told does not exceed
-        // the space between this function and the next
-        if (nextFunctionAddress != 0) {
-          uint64_t functionLengthVal2 = nextFunctionAddress - addressVal;
-
-          if(functionLengthVal > functionLengthVal2 ) {
-            functionLengthVal = functionLengthVal2;
-          }
-        }
-
-        // Function
-        if (!WriteFormat(fd, "FUNC %llx %llx 0 %s\n", addressVal,
-                         functionLengthVal, [symbol UTF8String]))
-          return NO;
-      }
-
-      // Throw out line number information that doesn't correspond to
-      // any function
-      if (insideFunction) {
-        // Source line
-        uint64_t length = nextAddressVal - addressVal;
-
-        // if fileNameToFileIndex/dict has an entry for the
-        // file/kFunctionFileKey, we're processing DWARF and have stored
-        // files for each program counter.  If there is no entry, we're
-        // processing STABS and can use the old method of mapping
-        // addresses to files(which was basically iterating over a set
-        // of addresses until we reached one that was greater than the
-        // high PC of the current file, then moving on to the next file)
-        NSNumber *fileIndex = [fileNameToFileIndex objectForKey:[dict objectForKey:kFunctionFileKey]];
-        if (!WriteFormat(fd, "%llx %llx %d %d\n", addressVal, length,
-                         [line unsignedIntValue], fileIndex ? [fileIndex unsignedIntValue] : fileIdx))
-          return NO;
-      } 
-    } else {
-      // PUBLIC <address> <stack-size> <name>
-      if (!WriteFormat(fd, "PUBLIC %llx 0 %s\n", addressVal,
-                       [symbol UTF8String]))
-        return NO;
-      insideFunction = false;
-    }
-  }
-
-  return YES;
-}
-
-//=============================================================================
-- (id)initWithContentsOfFile:(NSString *)path {
-  if ((self = [super init])) {
-
-    if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
-      [self autorelease];
-      return nil;
-    }
-
-    sourcePath_ = [path copy];
-
-    // Test for .DSYM bundle
-    NSBundle *dsymBundle = [NSBundle bundleWithPath:sourcePath_];
-
-    if (dsymBundle) {
-
-      // we need to take the DSYM bundle path and remove it's
-      // extension to get the name of the file inside the resources
-      // directory of the bundle that actually has the DWARF
-      // information
-      // But, Xcode supports something called "Wrapper extension"(see
-      // build settings), which would make the bundle name
-      // /tmp/foo/test.kext.dSYM, but the dwarf binary name would
-      // still be "test".  so, now we loop through until deleting the
-      // extension doesn't change the string
-
-      // e.g. suppose sourcepath_ is /tmp/foo/test.dSYM
-
-      NSString *dwarfBinName = [sourcePath_ lastPathComponent];
-      NSString *dwarfBinPath;
-
-      // We use a do/while loop so we can handle files without an extension
-      do {
-        dwarfBinName = [dwarfBinName stringByDeletingPathExtension];
-        // now, dwarfBinName is "test"
-        dwarfBinPath = [dsymBundle pathForResource:dwarfBinName ofType:nil inDirectory:@"DWARF"];
-        if (dwarfBinPath != nil)
-          break;
-      } while (![[dwarfBinName stringByDeletingPathExtension] isEqualToString:dwarfBinName]);
-
-      if (dwarfBinPath == nil) {
-        NSLog(@"The bundle passed on the command line does not appear to be a DWARF dSYM bundle");
-        [self autorelease];
-        return nil;
-      }
-
-      // otherwise we're good to go
-      [sourcePath_ release];
-
-      sourcePath_ = [dwarfBinPath copy];
-      NSLog(@"Loading DWARF dSYM file from %@", sourcePath_);
-    }
-
-    sectionsForArch_ = new ArchSectionMap();
-
-    if (![self loadModuleInfo]) {
-      [self autorelease];
-      return nil;
-    }
-
-    // If there's more than one, use the native one
-    if ([headers_ count] > 1) {
-      const NXArchInfo *localArchInfo = NXGetLocalArchInfo();
-
-      if (localArchInfo) {
-        cpu_type_t cpu = localArchInfo->cputype;
-        NSString *arch;
-
-        if (cpu & CPU_ARCH_ABI64)
-          arch = ((cpu & ~CPU_ARCH_ABI64) == CPU_TYPE_X86) ?
-            @"x86_64" : @"ppc64";
-        else
-          arch = (cpu == CPU_TYPE_X86) ? @"x86" : @"ppc";
-
-        [self setArchitecture:arch];
-      }
-    } else {
-      // Specify the default architecture
-      [self setArchitecture:[[headers_ allKeys] objectAtIndex:0]];
-    }
-  }
-
-  return self;
-}
-
-//=============================================================================
-- (NSArray *)availableArchitectures {
-  return [headers_ allKeys];
-}
-
-//=============================================================================
-- (void)dealloc {
-  [sourcePath_ release];
-  [architecture_ release];
-  [addresses_ release];
-  [functionAddresses_ release];
-  [sources_ release];
-  [headers_ release];
-  delete sectionsForArch_;
-
-  [super dealloc];
-}
-
-//=============================================================================
-- (BOOL)setArchitecture:(NSString *)architecture {
-  NSString *normalized = [architecture lowercaseString];
-  BOOL isValid = NO;
-
-  if ([normalized isEqualToString:@"ppc"]) {
-    isValid = YES;
-  }
-  else if ([normalized isEqualToString:@"i386"]) {
-    normalized = @"x86";
-    isValid = YES;
-  }
-  else if ([normalized isEqualToString:@"x86"]) {
-    isValid = YES;
-  }
-  else if ([normalized isEqualToString:@"ppc64"]) {
-    isValid = YES;
-  }
-  else if ([normalized isEqualToString:@"x86_64"]) {
-    isValid = YES;
-  }
-
-  if (isValid) {
-    if (![headers_ objectForKey:normalized])
-      return NO;
-
-    [architecture_ autorelease];
-    architecture_ = [normalized copy];
-  }
-
-  return isValid;
-}
-
-//=============================================================================
-- (NSString *)architecture {
-  return architecture_;
-}
-
-//=============================================================================
-- (BOOL)writeSymbolFile:(NSString *)destinationPath {
-  const char *dest = [destinationPath fileSystemRepresentation];
-  int fd;
-
-  if ([[destinationPath substringToIndex:1] isEqualToString:@"-"])
-    fd = STDOUT_FILENO;
-  else
-    fd = open(dest, O_WRONLY | O_CREAT | O_TRUNC, 0666);
-
-  if (fd == -1)
-    return NO;
-
-  BOOL result = [self outputSymbolFile:fd];
-
-  close(fd);
-
-  return result;
-}
-
-@end
-
-@implementation MachSection 
-
-- (id)initWithMachSection:(section *)sect andNumber:(uint32_t)sectionNumber {
-  if ((self = [super init])) {
-    sect_ = sect;
-    sectionNumber_ = sectionNumber;
-  }
-
-  return self;
-}
-
-- (section*)sectionPointer {
-  return sect_;
-}
-
-- (uint32_t)sectionNumber {
-  return sectionNumber_;
-}
-@end
+}  // namespace google_breakpad
diff --git a/src/common/mac/macho_id.cc b/src/common/mac/macho_id.cc
index 160f6ed..486cf53 100644
--- a/src/common/mac/macho_id.cc
+++ b/src/common/mac/macho_id.cc
@@ -53,7 +53,12 @@
 
 namespace MacFileUtilities {
 
-MachoID::MachoID(const char *path) {
+MachoID::MachoID(const char *path)
+   : file_(0), 
+     crc_(0), 
+     md5_context_(), 
+     sha1_context_(), 
+     update_function_(NULL) {
   strlcpy(path_, path, sizeof(path_));
   file_ = open(path, O_RDONLY);
 }
@@ -119,7 +124,7 @@
   SHA_Update(&sha1_context_, bytes, size);
 }
 
-void MachoID::Update(MachoWalker *walker, unsigned long offset, size_t size) {
+void MachoID::Update(MachoWalker *walker, off_t offset, size_t size) {
   if (!update_function_ || !size)
     return;
 
@@ -182,7 +187,7 @@
     identifier[2] = 0;
     identifier[3] = 0;
 
-    for (int j = 0, i = strlen(path_)-1; i >= 0 && path_[i]!='/'; ++j, --i) {
+    for (int j = 0, i = (int)strlen(path_)-1; i>=0 && path_[i]!='/'; ++j, --i) {
       identifier[j%4] += path_[i];
     }
 
@@ -313,7 +318,9 @@
       // sections of type S_ZEROFILL are "virtual" and contain no data
       // in the file itself
       if ((sec64.flags & SECTION_TYPE) != S_ZEROFILL && sec64.offset != 0)
-        macho_id->Update(walker, header_offset + sec64.offset, sec64.size);
+        macho_id->Update(walker, 
+                         header_offset + sec64.offset, 
+                         (size_t)sec64.size);
 
       offset += sizeof(struct section_64);
     }
diff --git a/src/common/mac/macho_id.h b/src/common/mac/macho_id.h
index 039bba3..ea01a6d 100644
--- a/src/common/mac/macho_id.h
+++ b/src/common/mac/macho_id.h
@@ -86,7 +86,7 @@
   void UpdateSHA1(unsigned char *bytes, size_t size);
 
   // Bottleneck for update routines
-  void Update(MachoWalker *walker, unsigned long offset, size_t size);
+  void Update(MachoWalker *walker, off_t offset, size_t size);
 
   // The callback from the MachoWalker for CRC, MD5, and SHA1
   static bool WalkerCB(MachoWalker *walker, load_command *cmd, off_t offset,
diff --git a/src/common/mac/macho_reader.cc b/src/common/mac/macho_reader.cc
new file mode 100644
index 0000000..ff16bc6
--- /dev/null
+++ b/src/common/mac/macho_reader.cc
@@ -0,0 +1,524 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Original author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com>
+
+// macho_reader.cc: Implementation of google_breakpad::Mach_O::FatReader and
+// google_breakpad::Mach_O::Reader. See macho_reader.h for details.
+
+#include "common/mac/macho_reader.h"
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+namespace google_breakpad {
+namespace mach_o {
+
+// If NDEBUG is #defined, then the 'assert' macro doesn't evaluate its
+// arguments, so you can't place expressions that do necessary work in
+// the argument of an assert. Nor can you assign the result of the
+// expression to a variable and assert that the variable's value is
+// true: you'll get unused variable warnings when NDEBUG is #defined.
+//
+// ASSERT_ALWAYS_EVAL always evaluates its argument, and asserts that
+// the result is true if NDEBUG is not #defined.
+#if defined(NDEBUG)
+#define ASSERT_ALWAYS_EVAL(x) (x)
+#else
+#define ASSERT_ALWAYS_EVAL(x) assert(x)
+#endif
+
+void FatReader::Reporter::BadHeader() {
+  fprintf(stderr, "%s: file is neither a fat binary file"
+          " nor a Mach-O object file\n", filename_.c_str());
+}
+
+void FatReader::Reporter::TooShort() {
+  fprintf(stderr, "%s: file too short for the data it claims to contain\n",
+          filename_.c_str());
+}
+
+void FatReader::Reporter::MisplacedObjectFile() {
+  fprintf(stderr, "%s: file too short for the object files it claims"
+          " to contain\n", filename_.c_str());
+}
+
+bool FatReader::Read(const uint8_t *buffer, size_t size) {
+  buffer_.start = buffer;
+  buffer_.end = buffer + size;
+  ByteCursor cursor(&buffer_);
+
+  // Fat binaries always use big-endian, so read the magic number in
+  // that endianness. To recognize Mach-O magic numbers, which can use
+  // either endianness, check for both the proper and reversed forms
+  // of the magic numbers.
+  cursor.set_big_endian(true);
+  if (cursor >> magic_) {
+    if (magic_ == FAT_MAGIC) {
+      // How many object files does this fat binary contain?
+      uint32_t object_files_count;
+      if (!(cursor >> object_files_count)) {  // nfat_arch
+        reporter_->TooShort();
+        return false;
+      }
+
+      // Read the list of object files.
+      object_files_.resize(object_files_count);
+      for (size_t i = 0; i < object_files_count; i++) {
+        struct fat_arch *objfile = &object_files_[i];
+
+        // Read this object file entry, byte-swapping as appropriate.
+        cursor >> objfile->cputype
+               >> objfile->cpusubtype
+               >> objfile->offset
+               >> objfile->size
+               >> objfile->align;
+        if (!cursor) {
+          reporter_->TooShort();
+          return false;
+        }
+        // Does the file actually have the bytes this entry refers to?
+        size_t fat_size = buffer_.Size();
+        if (objfile->offset > fat_size ||
+            objfile->size > fat_size - objfile->offset) {
+          reporter_->MisplacedObjectFile();
+          return false;
+        }
+      }
+
+      return true;
+    } else if (magic_ == MH_MAGIC || magic_ == MH_MAGIC_64 ||
+               magic_ == MH_CIGAM || magic_ == MH_CIGAM_64) {
+      // If this is a little-endian Mach-O file, fix the cursor's endianness.
+      if (magic_ == MH_CIGAM || magic_ == MH_CIGAM_64)
+        cursor.set_big_endian(false);
+      // Record the entire file as a single entry in the object file list.
+      object_files_.resize(1);
+
+      // Get the cpu type and subtype from the Mach-O header.
+      if (!(cursor >> object_files_[0].cputype
+                   >> object_files_[0].cpusubtype)) {
+        reporter_->TooShort();
+        return false;
+      }
+
+      object_files_[0].offset = 0;
+      object_files_[0].size = static_cast<uint32_t>(buffer_.Size());
+      // This alignment is correct for 32 and 64-bit x86 and ppc.
+      // See get_align in the lipo source for other architectures:
+      // http://www.opensource.apple.com/source/cctools/cctools-773/misc/lipo.c
+      object_files_[0].align = 12;  // 2^12 == 4096
+      
+      return true;
+    }
+  }
+  
+  reporter_->BadHeader();
+  return false;
+}
+
+void Reader::Reporter::BadHeader() {
+  fprintf(stderr, "%s: file is not a Mach-O object file\n", filename_.c_str());
+}
+
+void Reader::Reporter::CPUTypeMismatch(cpu_type_t cpu_type,
+                                       cpu_subtype_t cpu_subtype,
+                                       cpu_type_t expected_cpu_type,
+                                       cpu_subtype_t expected_cpu_subtype) {
+  fprintf(stderr, "%s: CPU type %d, subtype %d does not match expected"
+          " type %d, subtype %d\n",
+          filename_.c_str(), cpu_type, cpu_subtype,
+          expected_cpu_type, expected_cpu_subtype);
+}
+
+void Reader::Reporter::HeaderTruncated() {
+  fprintf(stderr, "%s: file does not contain a complete Mach-O header\n",
+          filename_.c_str());
+}
+
+void Reader::Reporter::LoadCommandRegionTruncated() {
+  fprintf(stderr, "%s: file too short to hold load command region"
+          " given in Mach-O header\n", filename_.c_str());
+}
+
+void Reader::Reporter::LoadCommandsOverrun(size_t claimed, size_t i,
+                                           LoadCommandType type) {
+  fprintf(stderr, "%s: file's header claims there are %ld"
+          " load commands, but load command #%ld",
+          filename_.c_str(), claimed, i);
+  if (type) fprintf(stderr, ", of type %d,", type);
+  fprintf(stderr, " extends beyond the end of the load command region\n");
+}
+
+void Reader::Reporter::LoadCommandTooShort(size_t i, LoadCommandType type) {
+  fprintf(stderr, "%s: the contents of load command #%ld, of type %d,"
+          " extend beyond the size given in the load command's header\n",
+          filename_.c_str(), i, type);
+}
+
+void Reader::Reporter::SectionsMissing(const string &name) {
+  fprintf(stderr, "%s: the load command for segment '%s'"
+          " is too short to hold the section headers it claims to have\n",
+          filename_.c_str(), name.c_str());
+}
+
+void Reader::Reporter::MisplacedSegmentData(const string &name) {
+  fprintf(stderr, "%s: the segment '%s' claims its contents lie beyond"
+          " the end of the file\n", filename_.c_str(), name.c_str());
+}
+
+void Reader::Reporter::MisplacedSectionData(const string &section,
+                                            const string &segment) {
+  fprintf(stderr, "%s: the section '%s' in segment '%s'"
+          " claims its contents lie outside the segment's contents\n",
+          filename_.c_str(), section.c_str(), segment.c_str());
+}
+
+void Reader::Reporter::MisplacedSymbolTable() {
+  fprintf(stderr, "%s: the LC_SYMTAB load command claims that the symbol"
+          " table's contents are located beyond the end of the file\n",
+          filename_.c_str());
+}
+
+void Reader::Reporter::UnsupportedCPUType(cpu_type_t cpu_type) {
+  fprintf(stderr, "%s: CPU type %d is not supported\n",
+          filename_.c_str(), cpu_type);
+}
+
+bool Reader::Read(const uint8_t *buffer,
+                  size_t size,
+                  cpu_type_t expected_cpu_type,
+                  cpu_subtype_t expected_cpu_subtype) {
+  assert(!buffer_.start);
+  buffer_.start = buffer;
+  buffer_.end = buffer + size;
+  ByteCursor cursor(&buffer_, true);
+  uint32_t magic;
+  if (!(cursor >> magic)) {
+    reporter_->HeaderTruncated();
+    return false;
+  }
+
+  if (expected_cpu_type != CPU_TYPE_ANY) {
+    uint32_t expected_magic;
+    // validate that magic matches the expected cpu type
+    switch (expected_cpu_type) {
+      case CPU_TYPE_I386:
+        expected_magic = MH_CIGAM;
+        break;
+      case CPU_TYPE_POWERPC:
+        expected_magic = MH_MAGIC;
+        break;
+      case CPU_TYPE_X86_64:
+        expected_magic = MH_CIGAM_64;
+        break;
+      case CPU_TYPE_POWERPC64:
+        expected_magic = MH_MAGIC_64;
+        break;
+      default:
+        reporter_->UnsupportedCPUType(expected_cpu_type);
+        return false;
+    }
+
+    if (expected_magic != magic) {
+      reporter_->BadHeader();
+      return false;
+    }
+  }
+
+  // Since the byte cursor is in big-endian mode, a reversed magic number
+  // always indicates a little-endian file, regardless of our own endianness.
+  switch (magic) {
+    case MH_MAGIC:    big_endian_ = true;  bits_64_ = false; break;
+    case MH_CIGAM:    big_endian_ = false; bits_64_ = false; break;
+    case MH_MAGIC_64: big_endian_ = true;  bits_64_ = true;  break;
+    case MH_CIGAM_64: big_endian_ = false; bits_64_ = true;  break;
+    default:
+      reporter_->BadHeader();
+      return false;
+  }
+  cursor.set_big_endian(big_endian_);
+  uint32_t commands_size, reserved;
+  cursor >> cpu_type_ >> cpu_subtype_ >> file_type_ >> load_command_count_
+         >> commands_size >> flags_;
+  if (bits_64_)
+    cursor >> reserved;
+  if (!cursor) {
+    reporter_->HeaderTruncated();
+    return false;
+  }
+
+  if (expected_cpu_type != CPU_TYPE_ANY &&
+      (expected_cpu_type != cpu_type_ ||
+       expected_cpu_subtype != cpu_subtype_)) {
+    reporter_->CPUTypeMismatch(cpu_type_, cpu_subtype_,
+                              expected_cpu_type, expected_cpu_subtype);
+    return false;
+  }
+
+  cursor
+      .PointTo(&load_commands_.start, commands_size)
+      .PointTo(&load_commands_.end, 0);
+  if (!cursor) {
+    reporter_->LoadCommandRegionTruncated();
+    return false;
+  }
+
+  return true;
+}
+
+bool Reader::WalkLoadCommands(Reader::LoadCommandHandler *handler) const {
+  ByteCursor list_cursor(&load_commands_, big_endian_);
+
+  for (size_t index = 0; index < load_command_count_; ++index) {
+    // command refers to this load command alone, so that cursor will
+    // refuse to read past the load command's end. But since we haven't
+    // read the size yet, let command initially refer to the entire
+    // remainder of the load command series.
+    ByteBuffer command(list_cursor.here(), list_cursor.Available());
+    ByteCursor cursor(&command, big_endian_);
+    
+    // Read the command type and size --- fields common to all commands.
+    uint32_t type, size;
+    if (!(cursor >> type)) {
+      reporter_->LoadCommandsOverrun(load_command_count_, index, 0);
+      return false;
+    }
+    if (!(cursor >> size) || size > command.Size()) {
+      reporter_->LoadCommandsOverrun(load_command_count_, index, type);
+      return false;
+    }
+
+    // Now that we've read the length, restrict command's range to this
+    // load command only.
+    command.end = command.start + size;
+
+    switch (type) {
+      case LC_SEGMENT:
+      case LC_SEGMENT_64: {
+        Segment segment;
+        segment.bits_64 = (type == LC_SEGMENT_64);
+        size_t word_size = segment.bits_64 ? 8 : 4;
+        cursor.CString(&segment.name, 16);
+        size_t file_offset, file_size;
+        cursor
+            .Read(word_size, false, &segment.vmaddr)
+            .Read(word_size, false, &segment.vmsize)
+            .Read(word_size, false, &file_offset)
+            .Read(word_size, false, &file_size);
+        cursor >> segment.maxprot
+               >> segment.initprot
+               >> segment.nsects
+               >> segment.flags;
+        if (!cursor) {
+          reporter_->LoadCommandTooShort(index, type);
+          return false;
+        }
+        if (file_offset > buffer_.Size() ||
+            file_size > buffer_.Size() - file_offset) {
+          reporter_->MisplacedSegmentData(segment.name);
+          return false;
+        }
+        // Mach-O files in .dSYM bundles have the contents of the loaded
+        // segments removed, and their file offsets and file sizes zeroed
+        // out. To help us handle this special case properly, give such
+        // segments' contents NULL starting and ending pointers.
+        if (file_offset == 0 && file_size == 0) {
+          segment.contents.start = segment.contents.end = NULL;
+        } else {
+          segment.contents.start = buffer_.start + file_offset;
+          segment.contents.end = segment.contents.start + file_size;
+        }
+        // The section list occupies the remainder of this load command's space.
+        segment.section_list.start = cursor.here();
+        segment.section_list.end = command.end;
+
+        if (!handler->SegmentCommand(segment))
+          return false;
+        break;
+      }
+
+      case LC_SYMTAB: {
+        uint32_t symoff, nsyms, stroff, strsize;
+        cursor >> symoff >> nsyms >> stroff >> strsize;
+        if (!cursor) {
+          reporter_->LoadCommandTooShort(index, type);
+          return false;
+        }
+        // How big are the entries in the symbol table?
+        // sizeof(struct nlist_64) : sizeof(struct nlist),
+        // but be paranoid about alignment vs. target architecture.
+        size_t symbol_size = bits_64_ ? 16 : 12;
+        // How big is the entire symbol array?
+        size_t symbols_size = nsyms * symbol_size;
+        if (symoff > buffer_.Size() || symbols_size > buffer_.Size() - symoff ||
+            stroff > buffer_.Size() || strsize > buffer_.Size() - stroff) {
+          reporter_->MisplacedSymbolTable();
+          return false;
+        }
+        ByteBuffer entries(buffer_.start + symoff, symbols_size);
+        ByteBuffer names(buffer_.start + stroff, strsize);
+        if (!handler->SymtabCommand(entries, names))
+          return false;
+        break;
+      }
+      
+      default: {
+        if (!handler->UnknownCommand(type, command))
+          return false;
+        break;
+      }
+    }
+
+    list_cursor.set_here(command.end);
+  }
+
+  return true;
+}
+
+// A load command handler that looks for a segment of a given name.
+class Reader::SegmentFinder : public LoadCommandHandler {
+ public:
+  // Create a load command handler that looks for a segment named NAME,
+  // and sets SEGMENT to describe it if found.
+  SegmentFinder(const string &name, Segment *segment) 
+      : name_(name), segment_(segment), found_() { }
+
+  // Return true if the traversal found the segment, false otherwise.
+  bool found() const { return found_; }
+
+  bool SegmentCommand(const Segment &segment) {
+    if (segment.name == name_) {
+      *segment_ = segment;
+      found_ = true;
+      return false;
+    }
+    return true;
+  }
+
+ private:
+  // The name of the segment our creator is looking for.
+  const string &name_;
+
+  // Where we should store the segment if found. (WEAK)
+  Segment *segment_;
+
+  // True if we found the segment.
+  bool found_;
+};
+
+bool Reader::FindSegment(const string &name, Segment *segment) const {
+  SegmentFinder finder(name, segment);
+  WalkLoadCommands(&finder);
+  return finder.found();
+}
+
+bool Reader::WalkSegmentSections(const Segment &segment,
+                                 SectionHandler *handler) const {
+  size_t word_size = segment.bits_64 ? 8 : 4;
+  ByteCursor cursor(&segment.section_list, big_endian_);
+
+  for (size_t i = 0; i < segment.nsects; i++) {
+    Section section;
+    section.bits_64 = segment.bits_64;
+    uint64_t size;
+    uint32_t offset, dummy32;
+    cursor
+        .CString(&section.section_name, 16)
+        .CString(&section.segment_name, 16)
+        .Read(word_size, false, &section.address)
+        .Read(word_size, false, &size)
+        >> offset
+        >> section.align
+        >> dummy32
+        >> dummy32
+        >> section.flags
+        >> dummy32
+        >> dummy32;
+    if (section.bits_64)
+      cursor >> dummy32;
+    if (!cursor) {
+      reporter_->SectionsMissing(segment.name);
+      return false;
+    }
+    if ((section.flags & SECTION_TYPE) == S_ZEROFILL) {
+      // Zero-fill sections have a size, but no contents.
+      section.contents.start = section.contents.end = NULL;
+    } else if (segment.contents.start == NULL && 
+               segment.contents.end == NULL) {
+      // Mach-O files in .dSYM bundles have the contents of the loaded
+      // segments removed, and their file offsets and file sizes zeroed
+      // out.  However, the sections within those segments still have
+      // non-zero sizes.  There's no reason to call MisplacedSectionData in
+      // this case; the caller may just need the section's load
+      // address. But do set the contents' limits to NULL, for safety.
+      section.contents.start = section.contents.end = NULL;
+    } else {
+      if (offset < size_t(segment.contents.start - buffer_.start) ||
+          offset > size_t(segment.contents.end - buffer_.start) ||
+          size > size_t(segment.contents.end - buffer_.start - offset)) {
+        reporter_->MisplacedSectionData(section.section_name,
+                                        section.segment_name);
+        return false;
+      }
+      section.contents.start = buffer_.start + offset;
+      section.contents.end = section.contents.start + size;
+    }
+    if (!handler->HandleSection(section))
+      return false;
+  }
+  return true;
+}
+
+// A SectionHandler that builds a SectionMap for the sections within a
+// given segment.
+class Reader::SectionMapper: public SectionHandler {
+ public:
+  // Create a SectionHandler that populates MAP with an entry for
+  // each section it is given.
+  SectionMapper(SectionMap *map) : map_(map) { }
+  bool HandleSection(const Section &section) {
+    (*map_)[section.section_name] = section;
+    return true;
+  }
+ private:
+  // The map under construction. (WEAK)
+  SectionMap *map_;
+};
+
+bool Reader::MapSegmentSections(const Segment &segment,
+                                SectionMap *section_map) const {
+  section_map->clear();
+  SectionMapper mapper(section_map);
+  return WalkSegmentSections(segment, &mapper);
+}
+
+}  // namespace mach_o
+}  // namespace google_breakpad
diff --git a/src/common/mac/macho_reader.h b/src/common/mac/macho_reader.h
new file mode 100644
index 0000000..7537648
--- /dev/null
+++ b/src/common/mac/macho_reader.h
@@ -0,0 +1,459 @@
+// -*- mode: C++ -*-
+
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Original author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com>
+
+// macho_reader.h: A class for parsing Mach-O files.
+
+#ifndef BREAKPAD_COMMON_MAC_MACHO_READER_H_
+#define BREAKPAD_COMMON_MAC_MACHO_READER_H_
+
+#include <mach-o/loader.h>
+#include <mach-o/fat.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "common/byte_cursor.h"
+
+namespace google_breakpad {
+namespace mach_o {
+
+using std::map;
+using std::string;
+using std::vector;
+
+// The Mac headers don't specify particular types for these groups of
+// constants, but defining them here provides some documentation
+// value.  We also give them the same width as the fields in which
+// they appear, which makes them a bit easier to use with ByteCursors.
+typedef uint32_t Magic;
+typedef uint32_t FileType;
+typedef uint32_t FileFlags;
+typedef uint32_t LoadCommandType;
+typedef uint32_t SegmentFlags;
+typedef uint32_t SectionFlags;
+
+// A parser for fat binary files, used to store universal binaries.
+// When applied to a (non-fat) Mach-O file, this behaves as if the
+// file were a fat file containing a single object file.
+class FatReader {
+ public:
+
+  // A class for reporting errors found while parsing fat binary files. The
+  // default definitions of these methods print messages to stderr.
+  class Reporter {
+   public:
+    // Create a reporter that attributes problems to |filename|.
+    explicit Reporter(const string &filename) : filename_(filename) { }
+
+    virtual ~Reporter() { }
+
+    // The data does not begin with a fat binary or Mach-O magic number.
+    // This is a fatal error.
+    virtual void BadHeader();
+
+    // The Mach-O fat binary file ends abruptly, without enough space
+    // to contain an object file it claims is present.
+    virtual void MisplacedObjectFile();
+
+    // The file ends abruptly: either it is not large enough to hold a
+    // complete header, or the header implies that contents are present
+    // beyond the actual end of the file.
+    virtual void TooShort();
+  
+   private:
+    // The filename to which the reader should attribute problems.
+    string filename_;
+  };
+
+  // Create a fat binary file reader that uses |reporter| to report problems.
+  explicit FatReader(Reporter *reporter) : reporter_(reporter) { }
+  
+  // Read the |size| bytes at |buffer| as a fat binary file. On success,
+  // return true; on failure, report the problem to reporter_ and return
+  // false.
+  //
+  // If the data is a plain Mach-O file, rather than a fat binary file,
+  // then the reader behaves as if it had found a fat binary file whose
+  // single object file is the Mach-O file.
+  bool Read(const uint8_t *buffer, size_t size);
+
+  // Return an array of 'struct fat_arch' structures describing the
+  // object files present in this fat binary file. Set |size| to the
+  // number of elements in the array.
+  //
+  // Assuming Read returned true, the entries are validated: it is
+  // safe to assume that the offsets and sizes in each 'struct
+  // fat_arch' refer to subranges of the bytes passed to Read.
+  //
+  // If there are no object files in this fat binary, then this
+  // function can return NULL.
+  //
+  // The array is owned by this FatReader instance; it will be freed when
+  // this FatReader is destroyed.
+  //
+  // This function returns a C-style array instead of a vector to make it
+  // possible to use the result with OS X functions like NXFindBestFatArch,
+  // so that the symbol dumper will behave consistently with other OS X
+  // utilities that work with fat binaries.
+  const struct fat_arch *object_files(size_t *count) const { 
+    *count = object_files_.size();
+    if (object_files_.size() > 0)
+      return &object_files_[0];
+    return NULL;
+  }
+
+ private:
+  // We use this to report problems parsing the file's contents. (WEAK)
+  Reporter *reporter_;
+
+  // The contents of the fat binary or Mach-O file we're parsing. We do not
+  // own the storage it refers to.
+  ByteBuffer buffer_;
+
+  // The magic number of this binary, in host byte order.
+  Magic magic_;
+
+  // The list of object files in this binary.
+  // object_files_.size() == fat_header.nfat_arch
+  vector<struct fat_arch> object_files_;
+};
+
+// A segment in a Mach-O file. All these fields have been byte-swapped as
+// appropriate for use by the executing architecture.
+struct Segment {
+  // The ByteBuffers below point into the bytes passed to the Reader that
+  // created this Segment.
+
+  ByteBuffer section_list;    // This segment's section list.
+  ByteBuffer contents;        // This segment's contents.
+
+  // This segment's name.
+  string name;
+
+  // The address at which this segment should be loaded in memory. If
+  // bits_64 is false, only the bottom 32 bits of this value are valid.
+  uint64_t vmaddr;
+
+  // The size of this segment when loaded into memory. This may be larger
+  // than contents.Size(), in which case the extra area will be
+  // initialized with zeros. If bits_64 is false, only the bottom 32 bits
+  // of this value are valid.
+  uint64_t vmsize;
+
+  // The maximum and initial VM protection of this segment's contents.
+  uint32_t maxprot;
+  uint32_t initprot;
+  
+  // The number of sections in section_list.
+  uint32_t nsects;
+
+  // Flags describing this segment, from SegmentFlags.
+  uint32_t flags;
+
+  // True if this is a 64-bit section; false if it is a 32-bit section.
+  bool bits_64;
+};
+
+// A section in a Mach-O file. All these fields have been byte-swapped as
+// appropriate for use by the executing architecture.
+struct Section {
+  // This section's contents. This points into the bytes passed to the
+  // Reader that created this Section.
+  ByteBuffer contents;
+
+  // This section's name.
+  string section_name;  // section[_64].sectname
+  // The name of the segment this section belongs to.
+  string segment_name;  // section[_64].segname
+
+  // The address at which this section's contents should be loaded in
+  // memory. If bits_64 is false, only the bottom 32 bits of this value
+  // are valid.
+  uint64_t address;
+
+  // The contents of this section should be loaded into memory at an
+  // address which is a multiple of (two raised to this power).
+  uint32_t align;
+
+  // Flags from SectionFlags describing the section's contents.
+  uint32_t flags;
+
+  // We don't support reading relocations yet.
+
+  // True if this is a 64-bit section; false if it is a 32-bit section.
+  bool bits_64;
+};
+
+// A map from section names to Sections.
+typedef map<string, Section> SectionMap;
+
+// A reader for a Mach-O file.
+//
+// This does not handle fat binaries; see FatReader above. FatReader
+// provides a friendly interface for parsing data that could be either a
+// fat binary or a Mach-O file.
+class Reader {
+ public:
+
+  // A class for reporting errors found while parsing Mach-O files. The
+  // default definitions of these member functions print messages to
+  // stderr.
+  class Reporter {
+   public:
+    // Create a reporter that attributes problems to |filename|.
+    explicit Reporter(const string &filename) : filename_(filename) { }
+    virtual ~Reporter() { }
+
+    // Reporter functions for fatal errors return void; the reader will
+    // definitely return an error to its caller after calling them
+
+    // The data does not begin with a Mach-O magic number, or the magic
+    // number does not match the expected value for the cpu architecture.
+    // This is a fatal error.
+    virtual void BadHeader();
+
+    // The data contained in a Mach-O fat binary (|cpu_type|, |cpu_subtype|)
+    // does not match the expected CPU architecture
+    // (|expected_cpu_type|, |expected_cpu_subtype|).
+    virtual void CPUTypeMismatch(cpu_type_t cpu_type,
+                                 cpu_subtype_t cpu_subtype,
+                                 cpu_type_t expected_cpu_type,
+                                 cpu_subtype_t expected_cpu_subtype);
+
+    // The file ends abruptly: either it is not large enough to hold a
+    // complete header, or the header implies that contents are present
+    // beyond the actual end of the file.
+    virtual void HeaderTruncated();
+
+    // The file's load command region, as given in the Mach-O header, is
+    // too large for the file.
+    virtual void LoadCommandRegionTruncated();
+
+    // The file's Mach-O header claims the file contains |claimed| load
+    // commands, but the I'th load command, of type |type|, extends beyond
+    // the end of the load command region, as given by the Mach-O header.
+    // If |type| is zero, the command's type was unreadable.
+    virtual void LoadCommandsOverrun(size_t claimed, size_t i,
+                                     LoadCommandType type);
+
+    // The contents of the |i|'th load command, of type |type|, extend beyond
+    // the size given in the load command's header.
+    virtual void LoadCommandTooShort(size_t i, LoadCommandType type);
+
+    // The LC_SEGMENT or LC_SEGMENT_64 load command for the segment named
+    // |name| is too short to hold the sections that its header says it does.
+    // (This more specific than LoadCommandTooShort.)
+    virtual void SectionsMissing(const string &name);
+
+    // The segment named |name| claims that its contents lie beyond the end
+    // of the file.
+    virtual void MisplacedSegmentData(const string &name);
+
+    // The section named |section| in the segment named |segment| claims that
+    // its contents do not lie entirely within the segment.
+    virtual void MisplacedSectionData(const string &section,
+                                      const string &segment);
+
+    // The LC_SYMTAB command claims that symbol table contents are located
+    // beyond the end of the file.
+    virtual void MisplacedSymbolTable();
+
+    // An attempt was made to read a Mach-O file of the unsupported
+    // CPU architecture |cpu_type|.
+    virtual void UnsupportedCPUType(cpu_type_t cpu_type);
+
+   private:
+    string filename_;
+  };
+
+  // A handler for sections parsed from a segment. The WalkSegmentSections
+  // member function accepts an instance of this class, and applies it to
+  // each section defined in a given segment.
+  class SectionHandler {
+   public:
+    virtual ~SectionHandler() { }
+
+    // Called to report that the segment's section list contains |section|.
+    // This should return true if the iteration should continue, or false
+    // if it should stop.
+    virtual bool HandleSection(const Section &section) = 0;
+  };
+
+  // A handler for the load commands in a Mach-O file.
+  class LoadCommandHandler {
+   public:
+    LoadCommandHandler() { }
+    virtual ~LoadCommandHandler() { }
+
+    // When called from WalkLoadCommands, the following handler functions
+    // should return true if they wish to continue iterating over the load
+    // command list, or false if they wish to stop iterating.
+    //
+    // When called from LoadCommandIterator::Handle or Reader::Handle,
+    // these functions' return values are simply passed through to Handle's
+    // caller.
+    //
+    // The definitions provided by this base class simply return true; the
+    // default is to silently ignore sections whose member functions the
+    // subclass doesn't override.
+
+    // COMMAND is load command we don't recognize. We provide only the
+    // command type and a ByteBuffer enclosing the command's data (If we
+    // cannot parse the command type or its size, we call
+    // reporter_->IncompleteLoadCommand instead.)
+    virtual bool UnknownCommand(LoadCommandType type,
+                                const ByteBuffer &contents) {
+      return true;
+    }
+
+    // The load command is LC_SEGMENT or LC_SEGMENT_64, defining a segment
+    // with the properties given in |segment|.
+    virtual bool SegmentCommand(const Segment &segment) {
+      return true;
+    }
+
+    // The load command is LC_SYMTAB. |entries| holds the array of nlist
+    // entries, and |names| holds the strings the entries refer to.
+    virtual bool SymtabCommand(const ByteBuffer &entries,
+                               const ByteBuffer &names) {
+      return true;
+    }
+
+    // Add handler functions for more load commands here as needed.
+  };
+
+  // Create a Mach-O file reader that reports problems to |reporter|.
+  explicit Reader(Reporter *reporter)
+      : reporter_(reporter) { }
+
+  // Read the given data as a Mach-O file. The reader retains pointers
+  // into the data passed, so the data should live as long as the reader
+  // does. On success, return true; on failure, return false.
+  //
+  // At most one of these functions should be invoked once on each Reader
+  // instance.
+  bool Read(const uint8_t *buffer,
+            size_t size,
+            cpu_type_t expected_cpu_type,
+            cpu_subtype_t expected_cpu_subtype);
+  bool Read(const ByteBuffer &buffer,
+            cpu_type_t expected_cpu_type,
+            cpu_subtype_t expected_cpu_subtype) {
+    return Read(buffer.start,
+                buffer.Size(),
+                expected_cpu_type,
+                expected_cpu_subtype); 
+  }
+
+  // Return this file's characteristics, as found in the Mach-O header.
+  cpu_type_t    cpu_type()    const { return cpu_type_; }
+  cpu_subtype_t cpu_subtype() const { return cpu_subtype_; }
+  FileType      file_type()   const { return file_type_; }
+  FileFlags     flags()       const { return flags_; }
+
+  // Return true if this is a 64-bit Mach-O file, false if it is a 32-bit
+  // Mach-O file.
+  bool bits_64() const { return bits_64_; }
+
+  // Return true if this is a big-endian Mach-O file, false if it is
+  // little-endian.
+  bool big_endian() const { return big_endian_; }
+
+  // Apply |handler| to each load command in this Mach-O file, stopping when
+  // a handler function returns false. If we encounter a malformed load
+  // command, report it via reporter_ and return false. Return true if all
+  // load commands were parseable and all handlers returned true.
+  bool WalkLoadCommands(LoadCommandHandler *handler) const;
+
+  // Set |segment| to describe the segment named |name|, if present. If
+  // found, |segment|'s byte buffers refer to a subregion of the bytes
+  // passed to Read. If we find the section, return true; otherwise,
+  // return false.
+  bool FindSegment(const string &name, Segment *segment) const;
+
+  // Apply |handler| to each section defined in |segment|. If |handler| returns
+  // false, stop iterating and return false. If all calls to |handler| return
+  // true and we reach the end of the section list, return true.
+  bool WalkSegmentSections(const Segment &segment, SectionHandler *handler)
+    const;
+
+  // Clear |section_map| and then populate it with a map of the sections
+  // in |segment|, from section names to Section structures.
+  // Each Section's contents refer to bytes in |segment|'s contents.
+  // On success, return true; if a problem occurs, report it and return false.
+  bool MapSegmentSections(const Segment &segment, SectionMap *section_map)
+    const;
+
+ private:
+  // Used internally.
+  class SegmentFinder;
+  class SectionMapper;
+
+  // We use this to report problems parsing the file's contents. (WEAK)
+  Reporter *reporter_;
+
+  // The contents of the Mach-O file we're parsing. We do not own the
+  // storage it refers to.
+  ByteBuffer buffer_;
+
+  // True if this file is big-endian.
+  bool big_endian_;
+
+  // True if this file is a 64-bit Mach-O file.
+  bool bits_64_;
+
+  // This file's cpu type and subtype.
+  cpu_type_t cpu_type_;        // mach_header[_64].cputype
+  cpu_subtype_t cpu_subtype_;  // mach_header[_64].cpusubtype
+
+  // This file's type.
+  FileType file_type_;         // mach_header[_64].filetype
+
+  // The region of buffer_ occupied by load commands.
+  ByteBuffer load_commands_;
+
+  // The number of load commands in load_commands_.
+  uint32_t load_command_count_;  // mach_header[_64].ncmds
+
+  // This file's header flags.
+  FileFlags flags_;
+};
+
+}  // namespace mach_o
+}  // namespace google_breakpad
+
+#endif  // BREAKPAD_COMMON_MAC_MACHO_READER_H_
diff --git a/src/common/mac/macho_reader_unittest.cc b/src/common/mac/macho_reader_unittest.cc
new file mode 100644
index 0000000..9bc6d25
--- /dev/null
+++ b/src/common/mac/macho_reader_unittest.cc
@@ -0,0 +1,1898 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Original author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com>
+
+// macho_reader_unittest.cc: Unit tests for google_breakpad::Mach_O::FatReader
+// and google_breakpad::Mach_O::Reader.
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "breakpad_googletest_includes.h"
+#include "common/mac/macho_reader.h"
+#include "common/test_assembler.h"
+
+namespace mach_o = google_breakpad::mach_o;
+namespace test_assembler = google_breakpad::test_assembler;
+
+using mach_o::FatReader;
+using mach_o::FileFlags;
+using mach_o::FileType;
+using mach_o::LoadCommandType;
+using mach_o::Reader;
+using mach_o::Section;
+using mach_o::SectionMap;
+using mach_o::Segment;
+using test_assembler::Endianness;
+using test_assembler::Label;
+using test_assembler::kBigEndian;
+using test_assembler::kLittleEndian;
+using test_assembler::kUnsetEndian;
+using google_breakpad::ByteBuffer;
+using std::map;
+using std::string;
+using std::vector;
+using testing::AllOf;
+using testing::DoAll;
+using testing::Field;
+using testing::InSequence;
+using testing::Matcher;
+using testing::Return;
+using testing::SaveArg;
+using testing::Test;
+using testing::_;
+
+
+// Mock classes for the reader's various reporters and handlers.
+
+class MockFatReaderReporter: public FatReader::Reporter {
+ public:
+  MockFatReaderReporter(const string &filename)
+      : FatReader::Reporter(filename) { }
+  MOCK_METHOD0(BadHeader, void());
+  MOCK_METHOD0(MisplacedObjectFile, void());
+  MOCK_METHOD0(TooShort, void());
+};
+
+class MockReaderReporter: public Reader::Reporter {
+ public:
+  MockReaderReporter(const string &filename) : Reader::Reporter(filename) { }
+  MOCK_METHOD0(BadHeader, void());
+  MOCK_METHOD4(CPUTypeMismatch, void(cpu_type_t cpu_type,
+                                     cpu_subtype_t cpu_subtype,
+                                     cpu_type_t expected_cpu_type,
+                                     cpu_subtype_t expected_cpu_subtype));
+  MOCK_METHOD0(HeaderTruncated, void());
+  MOCK_METHOD0(LoadCommandRegionTruncated, void());
+  MOCK_METHOD3(LoadCommandsOverrun, void(size_t claimed, size_t i,
+                                         LoadCommandType type));
+  MOCK_METHOD2(LoadCommandTooShort, void(size_t i, LoadCommandType type));
+  MOCK_METHOD1(SectionsMissing, void(const string &name));
+  MOCK_METHOD1(MisplacedSegmentData, void(const string &name));
+  MOCK_METHOD2(MisplacedSectionData, void(const string &section,
+                                          const string &segment));
+  MOCK_METHOD0(MisplacedSymbolTable, void());
+  MOCK_METHOD1(UnsupportedCPUType, void(cpu_type_t cpu_type));
+};
+
+class MockLoadCommandHandler: public Reader::LoadCommandHandler {
+ public:
+  MOCK_METHOD2(UnknownCommand, bool(LoadCommandType, const ByteBuffer &));
+  MOCK_METHOD1(SegmentCommand, bool(const Segment &));
+  MOCK_METHOD2(SymtabCommand,  bool(const ByteBuffer &, const ByteBuffer &));
+};
+
+class MockSectionHandler: public Reader::SectionHandler {
+ public:
+  MOCK_METHOD1(HandleSection, bool(const Section &section));
+};
+
+
+// Tests for mach_o::FatReader.
+
+// Since the effect of these functions is to write to stderr, the
+// results of these tests must be inspected by hand.
+TEST(FatReaderReporter, BadHeader) {
+  FatReader::Reporter reporter("filename");
+  reporter.BadHeader();
+}
+
+TEST(FatReaderReporter, MisplacedObjectFile) {
+  FatReader::Reporter reporter("filename");
+  reporter.MisplacedObjectFile();
+}
+
+TEST(FatReaderReporter, TooShort) {
+  FatReader::Reporter reporter("filename");
+  reporter.TooShort();
+}
+
+TEST(MachOReaderReporter, BadHeader) {
+  Reader::Reporter reporter("filename");
+  reporter.BadHeader();
+}
+
+TEST(MachOReaderReporter, CPUTypeMismatch) {
+  Reader::Reporter reporter("filename");
+  reporter.CPUTypeMismatch(CPU_TYPE_I386, CPU_SUBTYPE_X86_ALL,
+                           CPU_TYPE_POWERPC, CPU_SUBTYPE_POWERPC_ALL);
+}
+
+TEST(MachOReaderReporter, HeaderTruncated) {
+  Reader::Reporter reporter("filename");
+  reporter.HeaderTruncated();
+}
+
+TEST(MachOReaderReporter, LoadCommandRegionTruncated) {
+  Reader::Reporter reporter("filename");
+  reporter.LoadCommandRegionTruncated();
+}
+
+TEST(MachOReaderReporter, LoadCommandsOverrun) {
+  Reader::Reporter reporter("filename");
+  reporter.LoadCommandsOverrun(10, 9, LC_DYSYMTAB);
+  reporter.LoadCommandsOverrun(10, 9, 0);
+}
+
+TEST(MachOReaderReporter, LoadCommandTooShort) {
+  Reader::Reporter reporter("filename");
+  reporter.LoadCommandTooShort(11, LC_SYMTAB);
+}
+
+TEST(MachOReaderReporter, SectionsMissing) {
+  Reader::Reporter reporter("filename");
+  reporter.SectionsMissing("segment name");
+}
+
+TEST(MachOReaderReporter, MisplacedSegmentData) {
+  Reader::Reporter reporter("filename");
+  reporter.MisplacedSegmentData("segment name");
+}
+
+TEST(MachOReaderReporter, MisplacedSectionData) {
+  Reader::Reporter reporter("filename");
+  reporter.MisplacedSectionData("section name", "segment name");
+}
+
+TEST(MachOReaderReporter, MisplacedSymbolTable) {
+  Reader::Reporter reporter("filename");
+  reporter.MisplacedSymbolTable();
+}
+
+TEST(MachOReaderReporter, UnsupportedCPUType) {
+  Reader::Reporter reporter("filename");
+  reporter.UnsupportedCPUType(CPU_TYPE_HPPA);
+}
+
+struct FatReaderFixture {
+  FatReaderFixture()
+      : fat(kBigEndian),
+        reporter("reporter filename"),
+        reader(&reporter), object_files(), object_files_size() { 
+    EXPECT_CALL(reporter, BadHeader()).Times(0);
+    EXPECT_CALL(reporter, TooShort()).Times(0);
+
+    // here, start, and Mark are file offsets in 'fat'.
+    fat.start() = 0;
+  }
+  // Append a 'fat_arch' entry to 'fat', with the given field values.
+  void AppendFatArch(cpu_type_t type, cpu_subtype_t subtype,
+                     Label offset, Label size, uint32_t align) {
+    fat
+        .B32(type)
+        .B32(subtype)
+        .B32(offset)
+        .B32(size)
+        .B32(align);
+  }
+  // Append |n| dummy 'fat_arch' entries to 'fat'. The cpu type and
+  // subtype have unrealistic values.
+  void AppendDummyArchEntries(int n) {
+    for (int i = 0; i < n; i++)
+      AppendFatArch(0xb68ad617, 0x715a0840, 0, 0, 1);
+  }
+  void ReadFat(bool expect_parse_success = true) {
+    ASSERT_TRUE(fat.GetContents(&contents));
+    fat_bytes = reinterpret_cast<const uint8_t *>(contents.data());
+    if (expect_parse_success) {
+      EXPECT_TRUE(reader.Read(fat_bytes, contents.size()));
+      object_files = reader.object_files(&object_files_size);
+    }
+    else
+      EXPECT_FALSE(reader.Read(fat_bytes, contents.size()));
+  }
+  test_assembler::Section fat;
+  MockFatReaderReporter reporter;
+  FatReader reader;
+  string contents;
+  const uint8_t *fat_bytes;
+  const struct fat_arch *object_files;
+  size_t object_files_size;
+};
+
+class FatReaderTest: public FatReaderFixture, public Test { };
+
+TEST_F(FatReaderTest, BadMagic) {
+  EXPECT_CALL(reporter, BadHeader()).Times(1);
+  fat
+      .B32(0xcafed00d)           // magic number (incorrect)
+      .B32(10);                  // number of architectures
+  AppendDummyArchEntries(10);
+  ReadFat(false);
+}
+
+TEST_F(FatReaderTest, HeaderTooShort) {
+  EXPECT_CALL(reporter, TooShort()).Times(1);
+  fat
+      .B32(0xcafebabe);             // magic number
+  ReadFat(false);
+}
+
+TEST_F(FatReaderTest, ObjectListTooShort) {
+  EXPECT_CALL(reporter, TooShort()).Times(1);
+  fat
+      .B32(0xcafebabe)              // magic number
+      .B32(10);                     // number of architectures
+  AppendDummyArchEntries(9);        // nine dummy architecture entries...
+  fat                               // and a tenth, missing a byte at the end
+      .B32(0x3d46c8fc)              // cpu type
+      .B32(0x8a7bfb01)              // cpu subtype
+      .B32(0)                       // offset
+      .B32(0)                       // size
+      .Append(3, '*');              // one byte short of a four-byte alignment
+  ReadFat(false);
+}
+
+TEST_F(FatReaderTest, DataTooShort) {
+  EXPECT_CALL(reporter, MisplacedObjectFile()).Times(1);
+  Label arch_data;
+  fat
+      .B32(0xcafebabe)              // magic number
+      .B32(1);                      // number of architectures
+  AppendFatArch(0xb4d4a366, 0x4ba4f525, arch_data, 40, 0);
+  fat
+      .Mark(&arch_data)             // file data begins here
+      .Append(30, '*');             // only 30 bytes, not 40 as header claims
+  ReadFat(false);
+}
+
+TEST_F(FatReaderTest, NoObjectFiles) {
+  fat
+      .B32(0xcafebabe)              // magic number
+      .B32(0);                      // number of architectures
+  ReadFat();
+  EXPECT_EQ(0U, object_files_size);
+}
+
+TEST_F(FatReaderTest, OneObjectFile) {
+  Label obj1_offset;
+  fat
+      .B32(0xcafebabe)              // magic number
+      .B32(1);                      // number of architectures
+  // First object file list entry
+  AppendFatArch(0x5e3a6e91, 0x52ccd852, obj1_offset, 0x42, 0x355b15b2);
+  // First object file data
+  fat
+      .Mark(&obj1_offset)           
+      .Append(0x42, '*');           // dummy contents
+  ReadFat();
+  ASSERT_EQ(1U, object_files_size);
+  EXPECT_EQ(0x5e3a6e91, object_files[0].cputype);
+  EXPECT_EQ(0x52ccd852, object_files[0].cpusubtype);
+  EXPECT_EQ(obj1_offset.Value(), object_files[0].offset);
+  EXPECT_EQ(0x42U, object_files[0].size);
+  EXPECT_EQ(0x355b15b2U, object_files[0].align);
+}
+
+TEST_F(FatReaderTest, ThreeObjectFiles) {
+  Label obj1, obj2, obj3;
+  fat
+      .B32(0xcafebabe)              // magic number
+      .B32(3);                      // number of architectures
+  // Three object file list entries.
+  AppendFatArch(0x0cb92c30, 0x6a159a71, obj1, 0xfb4, 0x2615dbe8);
+  AppendFatArch(0x0f3f1cbb, 0x6c55e90f, obj2, 0xc31, 0x83af6ffd);
+  AppendFatArch(0x3717276d, 0x10ecdc84, obj3, 0x4b3, 0x035267d7);
+  fat
+      // First object file data
+      .Mark(&obj1)           
+      .Append(0xfb4, '*')           // dummy contents
+      // Second object file data
+      .Mark(&obj2)           
+      .Append(0xc31, '%')           // dummy contents
+      // Third object file data
+      .Mark(&obj3)           
+      .Append(0x4b3, '^');          // dummy contents
+  
+  ReadFat();
+
+  ASSERT_EQ(3U, object_files_size);
+
+  // First object file.
+  EXPECT_EQ(0x0cb92c30, object_files[0].cputype);
+  EXPECT_EQ(0x6a159a71, object_files[0].cpusubtype);
+  EXPECT_EQ(obj1.Value(), object_files[0].offset);
+  EXPECT_EQ(0xfb4U, object_files[0].size);
+  EXPECT_EQ(0x2615dbe8U, object_files[0].align);
+
+  // Second object file.
+  EXPECT_EQ(0x0f3f1cbb, object_files[1].cputype);
+  EXPECT_EQ(0x6c55e90f, object_files[1].cpusubtype);
+  EXPECT_EQ(obj2.Value(), object_files[1].offset);
+  EXPECT_EQ(0xc31U, object_files[1].size);
+  EXPECT_EQ(0x83af6ffdU, object_files[1].align);
+
+  // Third object file.
+  EXPECT_EQ(0x3717276d, object_files[2].cputype);
+  EXPECT_EQ(0x10ecdc84, object_files[2].cpusubtype);
+  EXPECT_EQ(obj3.Value(), object_files[2].offset);
+  EXPECT_EQ(0x4b3U, object_files[2].size);
+  EXPECT_EQ(0x035267d7U, object_files[2].align);
+}
+
+TEST_F(FatReaderTest, BigEndianMachO32) {
+  fat.set_endianness(kBigEndian);
+  fat
+      .D32(0xfeedface)                  // Mach-O file magic number
+      .D32(0x1a9d0518)                  // cpu type
+      .D32(0x1b779357)                  // cpu subtype
+      .D32(0x009df67e)                  // file type
+      .D32(0)                           // no load commands
+      .D32(0)                           // the load commands occupy no bytes
+      .D32(0x21987a99);                 // flags
+
+  ReadFat();
+
+  // FatReader should treat a Mach-O file as if it were a fat binary file
+  // containing one object file --- the whole thing.
+  ASSERT_EQ(1U, object_files_size);
+  EXPECT_EQ(0x1a9d0518, object_files[0].cputype);
+  EXPECT_EQ(0x1b779357, object_files[0].cpusubtype);
+  EXPECT_EQ(0U, object_files[0].offset);
+  EXPECT_EQ(contents.size(), object_files[0].size);
+}
+
+TEST_F(FatReaderTest, BigEndianMachO64) {
+  fat.set_endianness(kBigEndian);
+  fat
+      .D32(0xfeedfacf)                  // Mach-O 64-bit file magic number
+      .D32(0x5aff8487)                  // cpu type
+      .D32(0x4c6a57f7)                  // cpu subtype
+      .D32(0x4392d2c8)                  // file type
+      .D32(0)                           // no load commands
+      .D32(0)                           // the load commands occupy no bytes
+      .D32(0x1b033eea);                 // flags
+
+  ReadFat();
+
+  // FatReader should treat a Mach-O file as if it were a fat binary file
+  // containing one object file --- the whole thing.
+  ASSERT_EQ(1U, object_files_size);
+  EXPECT_EQ(0x5aff8487, object_files[0].cputype);
+  EXPECT_EQ(0x4c6a57f7, object_files[0].cpusubtype);
+  EXPECT_EQ(0U, object_files[0].offset);
+  EXPECT_EQ(contents.size(), object_files[0].size);
+}
+
+TEST_F(FatReaderTest, LittleEndianMachO32) {
+  fat.set_endianness(kLittleEndian);
+  fat
+      .D32(0xfeedface)                  // Mach-O file magic number
+      .D32(0x1a9d0518)                  // cpu type
+      .D32(0x1b779357)                  // cpu subtype
+      .D32(0x009df67e)                  // file type
+      .D32(0)                           // no load commands
+      .D32(0)                           // the load commands occupy no bytes
+      .D32(0x21987a99);                 // flags
+
+  ReadFat();
+
+  // FatReader should treat a Mach-O file as if it were a fat binary file
+  // containing one object file --- the whole thing.
+  ASSERT_EQ(1U, object_files_size);
+  EXPECT_EQ(0x1a9d0518, object_files[0].cputype);
+  EXPECT_EQ(0x1b779357, object_files[0].cpusubtype);
+  EXPECT_EQ(0U, object_files[0].offset);
+  EXPECT_EQ(contents.size(), object_files[0].size);
+}
+
+TEST_F(FatReaderTest, LittleEndianMachO64) {
+  fat.set_endianness(kLittleEndian);
+  fat
+      .D32(0xfeedfacf)                  // Mach-O 64-bit file magic number
+      .D32(0x5aff8487)                  // cpu type
+      .D32(0x4c6a57f7)                  // cpu subtype
+      .D32(0x4392d2c8)                  // file type
+      .D32(0)                           // no load commands
+      .D32(0)                           // the load commands occupy no bytes
+      .D32(0x1b033eea);                 // flags
+
+  ReadFat();
+
+  // FatReader should treat a Mach-O file as if it were a fat binary file
+  // containing one object file --- the whole thing.
+  ASSERT_EQ(1U, object_files_size);
+  EXPECT_EQ(0x5aff8487, object_files[0].cputype);
+  EXPECT_EQ(0x4c6a57f7, object_files[0].cpusubtype);
+  EXPECT_EQ(0U, object_files[0].offset);
+  EXPECT_EQ(contents.size(), object_files[0].size);
+}
+
+TEST_F(FatReaderTest, IncompleteMach) {
+  fat.set_endianness(kLittleEndian);
+  fat
+      .D32(0xfeedfacf)                  // Mach-O 64-bit file magic number
+      .D32(0x5aff8487);                 // cpu type
+      // Truncated!
+
+  EXPECT_CALL(reporter, TooShort()).WillOnce(Return());
+
+  ReadFat(false);
+}
+
+
+// General mach_o::Reader tests.
+
+// Dynamically scoped configuration data.
+class WithConfiguration {
+ public:
+  // Establish the given parameters as the default for SizedSections
+  // created within the dynamic scope of this instance.
+  WithConfiguration(Endianness endianness, size_t word_size)
+      : endianness_(endianness), word_size_(word_size), saved_(current_) {
+    current_ = this;
+  }
+  ~WithConfiguration() { current_ = saved_; }
+  static Endianness endianness() { 
+    assert(current_);
+    return current_->endianness_;
+  }
+  static size_t word_size() { 
+    assert(current_);
+    return current_->word_size_;
+  }
+
+ private:
+  // The innermost WithConfiguration in whose dynamic scope we are
+  // currently executing.
+  static WithConfiguration *current_;
+
+  // The innermost WithConfiguration whose dynamic scope encloses this
+  // WithConfiguration.
+  Endianness endianness_;
+  size_t word_size_;
+  WithConfiguration *saved_;
+};
+
+WithConfiguration *WithConfiguration::current_ = NULL;
+
+// A test_assembler::Section with a size that we can cite. The start(),
+// Here() and Mark() member functions of a SizedSection always represent
+// offsets within the overall file.
+class SizedSection: public test_assembler::Section {
+ public:
+  // Construct a section of the given endianness and word size.
+  explicit SizedSection(Endianness endianness, size_t word_size)
+      : test_assembler::Section(endianness), word_size_(word_size) {
+    assert(word_size_ == 32 || word_size_ == 64);
+  }
+  SizedSection()
+      : test_assembler::Section(WithConfiguration::endianness()),
+        word_size_(WithConfiguration::word_size()) {
+    assert(word_size_ == 32 || word_size_ == 64);
+  }
+
+  // Access/set this section's word size.
+  size_t word_size() const { return word_size_; }
+  void set_word_size(size_t word_size) { 
+    assert(word_size_ == 32 || word_size_ == 64);
+    word_size_ = word_size;
+  }
+
+  // Return a label representing the size this section will have when it
+  // is Placed in some containing section.
+  Label final_size() const { return final_size_; }
+
+  // Append SECTION to the end of this section, and call its Finish member.
+  // Return a reference to this section.
+  SizedSection &Place(SizedSection *section) {
+    assert(section->endianness() == endianness());
+    section->Finish();
+    section->start() = Here();
+    test_assembler::Section::Append(*section);
+    return *this;
+  }
+
+ protected:
+  // Mark this section's contents as complete. For plain SizedSections, we
+  // set SECTION's start to its position in this section, and its final_size
+  // label to its current size. Derived classes can extend this as needed
+  // for their additional semantics.
+  virtual void Finish() {
+    final_size_ = Size();
+  }
+
+  // The word size for this data: either 32 or 64.
+  size_t word_size_;
+
+ private:
+  // This section's final size, set when we are placed in some other
+  // SizedSection.
+  Label final_size_;
+};
+
+// A SizedSection that is loaded into memory at a particular address.
+class LoadedSection: public SizedSection {
+ public:
+  explicit LoadedSection(Label address = Label()) : address_(address) { }
+
+  // Return a label representing this section's address.
+  Label address() const { return address_; }
+
+  // Placing a loaded section within a loaded section sets the relationship
+  // between their addresses.
+  LoadedSection &Place(LoadedSection *section) {
+    section->address() = address() + Size();
+    SizedSection::Place(section);
+    return *this;
+  }
+
+ protected:
+  // The address at which this section's contents will be loaded.
+  Label address_;
+};
+  
+// A SizedSection representing a segment load command.
+class SegmentLoadCommand: public SizedSection {
+ public:
+  SegmentLoadCommand() : section_count_(0) { }
+
+  // Append a segment load command header with the given characteristics.
+  // The load command will refer to CONTENTS, which must be Placed in the
+  // file separately, at the desired position. Return a reference to this
+  // section.
+  SegmentLoadCommand &Header(const string &name, const LoadedSection &contents,
+                             uint32_t maxprot, uint32_t initprot,
+                             uint32_t flags) {
+    assert(contents.word_size() == word_size());
+    D32(word_size() == 32 ? LC_SEGMENT : LC_SEGMENT_64);
+    D32(final_size());
+    AppendCString(name, 16);
+    Append(endianness(), word_size() / 8, contents.address());
+    Append(endianness(), word_size() / 8, vmsize_);
+    Append(endianness(), word_size() / 8, contents.start());
+    Append(endianness(), word_size() / 8, contents.final_size());
+    D32(maxprot);
+    D32(initprot);
+    D32(final_section_count_);
+    D32(flags);
+
+    content_final_size_ = contents.final_size();
+
+    return *this;
+  }
+
+  // Return a label representing the size of this segment when loaded into
+  // memory. If this label is still undefined by the time we place this
+  // segment, it defaults to the final size of the segment's in-file
+  // contents. Return a reference to this load command.
+  Label &vmsize() { return vmsize_; }
+
+  // Add a section entry with the given characteristics to this segment
+  // load command. Return a reference to this. The section entry will refer
+  // to CONTENTS, which must be Placed in the segment's contents
+  // separately, at the desired position.
+  SegmentLoadCommand &AppendSectionEntry(const string &section_name,
+                                         const string &segment_name,
+                                         uint32_t alignment, uint32_t flags,
+                                         const LoadedSection &contents) {
+    AppendCString(section_name, 16);
+    AppendCString(segment_name, 16);
+    Append(endianness(), word_size() / 8, contents.address());
+    Append(endianness(), word_size() / 8, contents.final_size());
+    D32(contents.start());
+    D32(alignment);
+    D32(0);                  // relocations start
+    D32(0);                  // relocations size
+    D32(flags);
+    D32(0x93656b95);         // reserved1
+    D32(0xc35a2473);         // reserved2
+    if (word_size() == 64)
+      D32(0x70284b95);       // reserved3
+
+    section_count_++;
+
+    return *this;
+  }
+
+ protected:
+  void Finish() {
+    final_section_count_ = section_count_;
+    if (!vmsize_.IsKnownConstant())
+      vmsize_ = content_final_size_;
+    SizedSection::Finish();
+  }
+
+ private:
+  // The number of sections that have been added to this segment so far.
+  size_t section_count_;
+
+  // A label representing the final number of sections this segment will hold.
+  Label final_section_count_;
+
+  // The size of the contents for this segment present in the file.
+  Label content_final_size_;
+
+  // A label representing the size of this segment when loaded; this can be
+  // larger than the size of its file contents, the difference being
+  // zero-filled. If not set explicitly by calling set_vmsize, this is set
+  // equal to the size of the contents.
+  Label vmsize_;
+};
+
+// A SizedSection holding a list of Mach-O load commands.
+class LoadCommands: public SizedSection {
+ public:
+  LoadCommands() : command_count_(0) { }
+
+  // Return a label representing the final load command count.
+  Label final_command_count() const { return final_command_count_; }
+
+  // Increment the command count; return a reference to this section.
+  LoadCommands &CountCommand() {
+    command_count_++;
+    return *this;
+  }
+
+  // Place COMMAND, containing a load command, at the end of this section.
+  // Return a reference to this section.
+  LoadCommands &Place(SizedSection *section) {
+    SizedSection::Place(section);
+    CountCommand();
+    return *this;
+  }
+
+ protected:
+  // Mark this load command list as complete.
+  void Finish() {
+    SizedSection::Finish();
+    final_command_count_ = command_count_;
+  }
+
+ private:
+  // The number of load commands we have added to this file so far.
+  size_t command_count_;
+
+  // A label representing the final command count.
+  Label final_command_count_;
+};
+
+// A SizedSection holding the contents of a Mach-O file. Within a
+// MachOFile, the start, Here, and Mark members refer to file offsets.
+class MachOFile: public SizedSection {
+ public:
+  MachOFile() { 
+    start() = 0;
+  }
+
+  // Create a Mach-O file header using the given characteristics and load
+  // command list. This Places COMMANDS immediately after the header.
+  // Return a reference to this section.
+  MachOFile &Header(LoadCommands *commands,
+                    cpu_type_t cpu_type = CPU_TYPE_X86,
+                    cpu_subtype_t cpu_subtype = CPU_SUBTYPE_I386_ALL,
+                    FileType file_type = MH_EXECUTE,
+                    uint32_t file_flags = (MH_TWOLEVEL |
+                                           MH_DYLDLINK |
+                                           MH_NOUNDEFS)) {
+    D32(word_size() == 32 ? 0xfeedface : 0xfeedfacf);  // magic number
+    D32(cpu_type);                              // cpu type
+    D32(cpu_subtype);                           // cpu subtype
+    D32(file_type);                             // file type
+    D32(commands->final_command_count());       // number of load commands
+    D32(commands->final_size());                // their size in bytes
+    D32(file_flags);                            // flags
+    if (word_size() == 64)
+      D32(0x55638b90);                          // reserved
+    Place(commands);
+    return *this;
+  }
+};
+
+
+struct ReaderFixture {
+  ReaderFixture()
+      : reporter("reporter filename"),
+        reader(&reporter) { 
+    EXPECT_CALL(reporter, BadHeader()).Times(0);
+    EXPECT_CALL(reporter, CPUTypeMismatch(_, _, _, _)).Times(0);
+    EXPECT_CALL(reporter, HeaderTruncated()).Times(0);
+    EXPECT_CALL(reporter, LoadCommandRegionTruncated()).Times(0);
+    EXPECT_CALL(reporter, LoadCommandsOverrun(_, _, _)).Times(0);
+    EXPECT_CALL(reporter, LoadCommandTooShort(_, _)).Times(0);
+    EXPECT_CALL(reporter, SectionsMissing(_)).Times(0);
+    EXPECT_CALL(reporter, MisplacedSegmentData(_)).Times(0);
+    EXPECT_CALL(reporter, MisplacedSectionData(_, _)).Times(0);
+    EXPECT_CALL(reporter, MisplacedSymbolTable()).Times(0);
+    EXPECT_CALL(reporter, UnsupportedCPUType(_)).Times(0);
+
+    EXPECT_CALL(load_command_handler, UnknownCommand(_, _)).Times(0);
+    EXPECT_CALL(load_command_handler, SegmentCommand(_)).Times(0);
+  }
+
+  void ReadFile(MachOFile *file,
+                bool expect_parse_success,
+                cpu_type_t expected_cpu_type,
+                cpu_subtype_t expected_cpu_subtype) {
+    ASSERT_TRUE(file->GetContents(&file_contents));
+    file_bytes = reinterpret_cast<const uint8_t *>(file_contents.data());
+    if (expect_parse_success) {
+      EXPECT_TRUE(reader.Read(file_bytes,
+                              file_contents.size(),
+                              expected_cpu_type,
+                              expected_cpu_subtype));
+    } else {
+      EXPECT_FALSE(reader.Read(file_bytes,
+                               file_contents.size(),
+                               expected_cpu_type,
+                               expected_cpu_subtype));
+    }
+  }
+
+  string file_contents;
+  const uint8_t *file_bytes;
+  MockReaderReporter reporter;
+  Reader reader;
+  MockLoadCommandHandler load_command_handler;
+  MockSectionHandler section_handler;
+};
+
+class ReaderTest: public ReaderFixture, public Test { };
+
+TEST_F(ReaderTest, BadMagic) {
+  WithConfiguration config(kLittleEndian, 32);
+  const cpu_type_t kCPUType = 0x46b760df;
+  const cpu_subtype_t kCPUSubType = 0x76a0e7f7;
+  MachOFile file;
+  file
+      .D32(0x67bdebe1)                  // Not a proper magic number.
+      .D32(kCPUType)                    // cpu type
+      .D32(kCPUSubType)                 // cpu subtype
+      .D32(0x149fc717)                  // file type
+      .D32(0)                           // no load commands
+      .D32(0)                           // they occupy no bytes
+      .D32(0x80e71d64)                  // flags
+      .D32(0);                          // reserved
+  EXPECT_CALL(reporter, BadHeader()).WillOnce(Return());
+  ReadFile(&file, false, CPU_TYPE_ANY, kCPUSubType);
+}
+
+TEST_F(ReaderTest, MismatchedMagic) {
+  WithConfiguration config(kLittleEndian, 32);
+  const cpu_type_t kCPUType = CPU_TYPE_I386;
+  const cpu_subtype_t kCPUSubType = CPU_SUBTYPE_X86_ALL;
+  MachOFile file;
+  file
+      .D32(MH_CIGAM)                    // Right magic, but winds up wrong
+                                        // due to bitswapping
+      .D32(kCPUType)                    // cpu type
+      .D32(kCPUSubType)                 // cpu subtype
+      .D32(0x149fc717)                  // file type
+      .D32(0)                           // no load commands
+      .D32(0)                           // they occupy no bytes
+      .D32(0x80e71d64)                  // flags
+      .D32(0);                          // reserved
+  EXPECT_CALL(reporter, BadHeader()).WillOnce(Return());
+  ReadFile(&file, false, kCPUType, kCPUSubType);
+}
+
+TEST_F(ReaderTest, ShortMagic) {
+  WithConfiguration config(kBigEndian, 32);
+  MachOFile file;
+  file
+      .D16(0xfeed);                     // magic number
+                                        // truncated!
+  EXPECT_CALL(reporter, HeaderTruncated()).WillOnce(Return());
+  ReadFile(&file, false, CPU_TYPE_ANY, 0);
+}
+
+TEST_F(ReaderTest, ShortHeader) {
+  WithConfiguration config(kBigEndian, 32);
+  const cpu_type_t kCPUType = CPU_TYPE_ANY;
+  const cpu_subtype_t kCPUSubType = 0x76a0e7f7;
+  MachOFile file;
+  file
+      .D32(0xfeedface)                  // magic number
+      .D32(kCPUType)                    // cpu type
+      .D32(kCPUSubType)                 // cpu subtype
+      .D32(0x149fc717)                  // file type
+      .D32(0)                           // no load commands
+      .D32(0);                          // they occupy no bytes
+  EXPECT_CALL(reporter, HeaderTruncated()).WillOnce(Return());
+  ReadFile(&file, false, CPU_TYPE_ANY, kCPUSubType);
+}
+
+TEST_F(ReaderTest, MismatchedCPU) {
+  WithConfiguration config(kBigEndian, 32);
+  const cpu_type_t kCPUType = CPU_TYPE_I386;
+  const cpu_subtype_t kCPUSubType = CPU_SUBTYPE_X86_ALL;
+  MachOFile file;
+  file
+      .D32(MH_MAGIC)                    // Right magic for PPC (once bitswapped)
+      .D32(kCPUType)                    // cpu type
+      .D32(kCPUSubType)                 // cpu subtype
+      .D32(0x149fc717)                  // file type
+      .D32(0)                           // no load commands
+      .D32(0)                           // they occupy no bytes
+      .D32(0x80e71d64)                  // flags
+      .D32(0);                          // reserved
+  EXPECT_CALL(reporter,
+              CPUTypeMismatch(CPU_TYPE_I386, CPU_SUBTYPE_X86_ALL,
+                              CPU_TYPE_POWERPC, CPU_SUBTYPE_POWERPC_ALL))
+    .WillOnce(Return());
+  ReadFile(&file, false, CPU_TYPE_POWERPC, CPU_SUBTYPE_POWERPC_ALL);
+}
+
+TEST_F(ReaderTest, LittleEndian32Bit) {
+  WithConfiguration config(kLittleEndian, 32);
+  const cpu_type_t kCPUType = 0x46b760df;
+  const cpu_subtype_t kCPUSubType = 0x76a0e7f7;
+  MachOFile file;
+  file
+      .D32(0xfeedface)                  // magic number
+      .D32(kCPUType)                    // cpu type
+      .D32(kCPUSubType)                 // cpu subtype
+      .D32(0x149fc717)                  // file type
+      .D32(0)                           // no load commands
+      .D32(0)                           // they occupy no bytes
+      .D32(0x80e71d64)                  // flags
+      .D32(0);                          // reserved
+           ReadFile(&file, true, CPU_TYPE_ANY, kCPUSubType);
+  EXPECT_FALSE(reader.bits_64());
+  EXPECT_FALSE(reader.big_endian());
+  EXPECT_EQ(kCPUType,               reader.cpu_type());
+  EXPECT_EQ(kCPUSubType,            reader.cpu_subtype());
+  EXPECT_EQ(FileType(0x149fc717),   reader.file_type());
+  EXPECT_EQ(FileFlags(0x80e71d64),  reader.flags());
+}
+
+TEST_F(ReaderTest, LittleEndian64Bit) {
+  WithConfiguration config(kLittleEndian, 64);
+  const cpu_type_t kCPUType = 0x46b760df;
+  const cpu_subtype_t kCPUSubType = 0x76a0e7f7;
+  MachOFile file;
+  file
+      .D32(0xfeedfacf)                  // magic number
+      .D32(kCPUType)                    // cpu type
+      .D32(kCPUSubType)                 // cpu subtype
+      .D32(0x149fc717)                  // file type
+      .D32(0)                           // no load commands
+      .D32(0)                           // they occupy no bytes
+      .D32(0x80e71d64)                  // flags
+      .D32(0);                          // reserved
+  ReadFile(&file, true, CPU_TYPE_ANY, kCPUSubType);
+  EXPECT_TRUE(reader.bits_64());
+  EXPECT_FALSE(reader.big_endian());
+  EXPECT_EQ(kCPUType,               reader.cpu_type());
+  EXPECT_EQ(kCPUSubType,            reader.cpu_subtype());
+  EXPECT_EQ(FileType(0x149fc717),   reader.file_type());
+  EXPECT_EQ(FileFlags(0x80e71d64),  reader.flags());
+}
+
+TEST_F(ReaderTest, BigEndian32Bit) {
+  WithConfiguration config(kBigEndian, 32);
+  const cpu_type_t kCPUType = 0x46b760df;
+  const cpu_subtype_t kCPUSubType = 0x76a0e7f7;
+  MachOFile file;
+  file
+      .D32(0xfeedface)                  // magic number
+      .D32(kCPUType)                    // cpu type
+      .D32(kCPUSubType)                 // cpu subtype
+      .D32(0x149fc717)                  // file type
+      .D32(0)                           // no load commands
+      .D32(0)                           // they occupy no bytes
+      .D32(0x80e71d64)                  // flags
+      .D32(0);                          // reserved
+  ReadFile(&file, true, CPU_TYPE_ANY, kCPUSubType);
+  EXPECT_FALSE(reader.bits_64());
+  EXPECT_TRUE(reader.big_endian());
+  EXPECT_EQ(kCPUType,               reader.cpu_type());
+  EXPECT_EQ(kCPUSubType,            reader.cpu_subtype());
+  EXPECT_EQ(FileType(0x149fc717),   reader.file_type());
+  EXPECT_EQ(FileFlags(0x80e71d64),  reader.flags());
+}
+
+TEST_F(ReaderTest, BigEndian64Bit) {
+  WithConfiguration config(kBigEndian, 64);
+  const cpu_type_t kCPUType = 0x46b760df;
+  const cpu_subtype_t kCPUSubType = 0x76a0e7f7;
+  MachOFile file;
+  file
+      .D32(0xfeedfacf)                  // magic number
+      .D32(kCPUType)                    // cpu type
+      .D32(kCPUSubType)                 // cpu subtype
+      .D32(0x149fc717)                  // file type
+      .D32(0)                           // no load commands
+      .D32(0)                           // they occupy no bytes
+      .D32(0x80e71d64)                  // flags
+      .D32(0);                          // reserved
+  ReadFile(&file, true, CPU_TYPE_ANY, kCPUSubType);
+  EXPECT_TRUE(reader.bits_64());
+  EXPECT_TRUE(reader.big_endian());
+  EXPECT_EQ(kCPUType,               reader.cpu_type());
+  EXPECT_EQ(kCPUSubType,            reader.cpu_subtype());
+  EXPECT_EQ(FileType(0x149fc717),   reader.file_type());
+  EXPECT_EQ(FileFlags(0x80e71d64),  reader.flags());
+}
+
+
+// Load command tests.
+
+class LoadCommand: public ReaderFixture, public Test { };
+
+TEST_F(LoadCommand, RegionTruncated) {
+  WithConfiguration config(kBigEndian, 64);
+  const cpu_type_t kCPUType = 0x46b760df;
+  const cpu_subtype_t kCPUSubType = 0x76a0e7f7;
+  MachOFile file;
+  file
+      .D32(0xfeedfacf)                  // magic number
+      .D32(kCPUType)                    // cpu type
+      .D32(kCPUSubType)                 // cpu subtype
+      .D32(0x149fc717)                  // file type
+      .D32(1)                           // one load command
+      .D32(40)                          // occupying 40 bytes
+      .D32(0x80e71d64)                  // flags
+      .D32(0)                           // reserved
+      .Append(20, 0);                   // load command region, not as long as
+                                        // Mach-O header promised
+
+  EXPECT_CALL(reporter, LoadCommandRegionTruncated()).WillOnce(Return());
+
+  ReadFile(&file, false, CPU_TYPE_ANY, kCPUSubType);
+}
+
+TEST_F(LoadCommand, None) {
+  WithConfiguration config(kLittleEndian, 32);
+  LoadCommands load_commands;
+  MachOFile file;
+  file.Header(&load_commands);
+
+  ReadFile(&file, true, CPU_TYPE_X86, CPU_SUBTYPE_I386_ALL);
+
+  EXPECT_FALSE(reader.bits_64());
+  EXPECT_FALSE(reader.big_endian());
+  EXPECT_EQ(CPU_TYPE_X86,         reader.cpu_type());
+  EXPECT_EQ(CPU_SUBTYPE_I386_ALL, reader.cpu_subtype());
+  EXPECT_EQ(static_cast<uint32_t>(MH_EXECUTE), reader.file_type());
+  EXPECT_EQ(FileFlags(MH_TWOLEVEL |
+                      MH_DYLDLINK |
+                      MH_NOUNDEFS),
+            FileFlags(reader.flags()));
+  
+  EXPECT_TRUE(reader.WalkLoadCommands(&load_command_handler));
+}
+
+TEST_F(LoadCommand, Unknown) {
+  WithConfiguration config(kBigEndian, 32);
+  LoadCommands load_commands;
+  load_commands
+      .CountCommand()
+      .D32(0x33293d4a)                  // unknown load command
+      .D32(40)                          // total size in bytes
+      .Append(32, '*');                 // dummy data
+  MachOFile file;
+  file.Header(&load_commands);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  EXPECT_FALSE(reader.bits_64());
+  EXPECT_TRUE(reader.big_endian());
+  EXPECT_EQ(CPU_TYPE_X86,         reader.cpu_type());
+  EXPECT_EQ(CPU_SUBTYPE_I386_ALL, reader.cpu_subtype());
+  EXPECT_EQ(static_cast<uint32_t>(MH_EXECUTE), reader.file_type());
+  EXPECT_EQ(FileFlags(MH_TWOLEVEL |
+                      MH_DYLDLINK |
+                      MH_NOUNDEFS),
+            reader.flags());
+
+  ByteBuffer expected;
+  expected.start = file_bytes + load_commands.start().Value();
+  expected.end = expected.start + load_commands.final_size().Value();
+  EXPECT_CALL(load_command_handler, UnknownCommand(0x33293d4a,
+                                                   expected))
+      .WillOnce(Return(true));
+
+  EXPECT_TRUE(reader.WalkLoadCommands(&load_command_handler));
+}
+
+TEST_F(LoadCommand, TypeIncomplete) {
+  WithConfiguration config(kLittleEndian, 32);
+  LoadCommands load_commands;
+  load_commands
+      .CountCommand()
+      .Append(3, 0);                    // load command type, incomplete
+
+  MachOFile file;
+  file.Header(&load_commands);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  EXPECT_CALL(reporter, LoadCommandsOverrun(1, 0, 0))
+      .WillOnce(Return());
+  EXPECT_FALSE(reader.WalkLoadCommands(&load_command_handler));
+}
+
+TEST_F(LoadCommand, LengthIncomplete) {
+  WithConfiguration config(kBigEndian, 64);
+  LoadCommands load_commands;
+  load_commands
+      .CountCommand()
+      .D32(LC_SEGMENT);                 // load command
+                                                // no length
+  MachOFile file;
+  file.Header(&load_commands);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  EXPECT_CALL(reporter, LoadCommandsOverrun(1, 0, LC_SEGMENT))
+      .WillOnce(Return());
+  EXPECT_FALSE(reader.WalkLoadCommands(&load_command_handler));
+}
+
+TEST_F(LoadCommand, ContentIncomplete) {
+  WithConfiguration config(kLittleEndian, 64);
+  LoadCommands load_commands;
+  load_commands
+      .CountCommand()
+      .D32(LC_SEGMENT)          // load command
+      .D32(40)                          // total size in bytes
+      .Append(28, '*');                 // not enough dummy data
+  MachOFile file;
+  file.Header(&load_commands);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  EXPECT_CALL(reporter, LoadCommandsOverrun(1, 0, LC_SEGMENT))
+      .WillOnce(Return());
+  EXPECT_FALSE(reader.WalkLoadCommands(&load_command_handler));
+}
+
+TEST_F(LoadCommand, SegmentBE32) {
+  WithConfiguration config(kBigEndian, 32);
+  LoadedSection segment;
+  segment.address() = 0x1891139c;
+  segment.Append(42, '*');              // segment contents
+  SegmentLoadCommand segment_command;
+  segment_command
+      .Header("froon", segment, 0x94d6dd22, 0x8bdbc319, 0x990a16dd);
+  segment_command.vmsize() = 0xcb76584fU;
+  LoadCommands load_commands;
+  load_commands.Place(&segment_command);
+  MachOFile file;
+  file
+      .Header(&load_commands)
+      .Place(&segment);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  Segment actual_segment;
+  EXPECT_CALL(load_command_handler, SegmentCommand(_))
+    .WillOnce(DoAll(SaveArg<0>(&actual_segment),
+                    Return(true)));
+  EXPECT_TRUE(reader.WalkLoadCommands(&load_command_handler));
+
+  EXPECT_EQ(false,                        actual_segment.bits_64);
+  EXPECT_EQ("froon",                      actual_segment.name);
+  EXPECT_EQ(0x1891139cU,                  actual_segment.vmaddr);
+  EXPECT_EQ(0xcb76584fU,                  actual_segment.vmsize);
+  EXPECT_EQ(0x94d6dd22U,                  actual_segment.maxprot);
+  EXPECT_EQ(0x8bdbc319U,                  actual_segment.initprot);
+  EXPECT_EQ(0x990a16ddU,                  actual_segment.flags);
+  EXPECT_EQ(0U,                           actual_segment.nsects);
+  EXPECT_EQ(0U,                           actual_segment.section_list.Size());
+  EXPECT_EQ(segment.final_size().Value(), actual_segment.contents.Size());
+}
+
+TEST_F(LoadCommand, SegmentLE32) {
+  WithConfiguration config(kLittleEndian, 32);
+  LoadedSection segment;
+  segment.address() = 0x4b877866;
+  segment.Append(42, '*');              // segment contents
+  SegmentLoadCommand segment_command;
+  segment_command
+      .Header("sixteenprecisely", segment,
+              0x350759ed, 0x6cf5a62e, 0x990a16dd);
+  segment_command.vmsize() = 0xcb76584fU;
+  LoadCommands load_commands;
+  load_commands.Place(&segment_command);
+  MachOFile file;
+  file
+      .Header(&load_commands)
+      .Place(&segment);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  Segment actual_segment;
+  EXPECT_CALL(load_command_handler, SegmentCommand(_))
+    .WillOnce(DoAll(SaveArg<0>(&actual_segment),
+                    Return(true)));
+  EXPECT_TRUE(reader.WalkLoadCommands(&load_command_handler));
+
+  EXPECT_EQ(false,                        actual_segment.bits_64);
+  EXPECT_EQ("sixteenprecisely",           actual_segment.name);
+  EXPECT_EQ(0x4b877866U,                  actual_segment.vmaddr);
+  EXPECT_EQ(0xcb76584fU,                  actual_segment.vmsize);
+  EXPECT_EQ(0x350759edU,                  actual_segment.maxprot);
+  EXPECT_EQ(0x6cf5a62eU,                  actual_segment.initprot);
+  EXPECT_EQ(0x990a16ddU,                  actual_segment.flags);
+  EXPECT_EQ(0U,                           actual_segment.nsects);
+  EXPECT_EQ(0U,                           actual_segment.section_list.Size());
+  EXPECT_EQ(segment.final_size().Value(), actual_segment.contents.Size());
+}
+
+TEST_F(LoadCommand, SegmentBE64) {
+  WithConfiguration config(kBigEndian, 64);
+  LoadedSection segment;
+  segment.address() = 0x79f484f77009e511ULL;
+  segment.Append(42, '*');              // segment contents
+  SegmentLoadCommand segment_command;
+  segment_command
+      .Header("froon", segment, 0x42b45da5, 0x8bdbc319, 0xb2335220);
+  segment_command.vmsize() = 0x8d92397ce6248abaULL;
+  LoadCommands load_commands;
+  load_commands.Place(&segment_command);
+  MachOFile file;
+  file
+      .Header(&load_commands)
+      .Place(&segment);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  Segment actual_segment;
+  EXPECT_CALL(load_command_handler, SegmentCommand(_))
+    .WillOnce(DoAll(SaveArg<0>(&actual_segment),
+                    Return(true)));
+  EXPECT_TRUE(reader.WalkLoadCommands(&load_command_handler));
+
+  EXPECT_EQ(true,                         actual_segment.bits_64);
+  EXPECT_EQ("froon",                      actual_segment.name);
+  EXPECT_EQ(0x79f484f77009e511ULL,        actual_segment.vmaddr);
+  EXPECT_EQ(0x8d92397ce6248abaULL,        actual_segment.vmsize);
+  EXPECT_EQ(0x42b45da5U,                  actual_segment.maxprot);
+  EXPECT_EQ(0x8bdbc319U,                  actual_segment.initprot);
+  EXPECT_EQ(0xb2335220U,                  actual_segment.flags);
+  EXPECT_EQ(0U,                           actual_segment.nsects);
+  EXPECT_EQ(0U,                           actual_segment.section_list.Size());
+  EXPECT_EQ(segment.final_size().Value(), actual_segment.contents.Size());
+}
+
+TEST_F(LoadCommand, SegmentLE64) {
+  WithConfiguration config(kLittleEndian, 64);
+  LoadedSection segment;
+  segment.address() = 0x50c0501dc5922d35ULL;
+  segment.Append(42, '*');              // segment contents
+  SegmentLoadCommand segment_command;
+  segment_command
+      .Header("sixteenprecisely", segment,
+              0x917c339d, 0xdbc446fa, 0xb650b563);
+  segment_command.vmsize() = 0x84ae73e7c75469bfULL;
+  LoadCommands load_commands;
+  load_commands.Place(&segment_command);
+  MachOFile file;
+  file
+      .Header(&load_commands)
+      .Place(&segment);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  Segment actual_segment;
+  EXPECT_CALL(load_command_handler, SegmentCommand(_))
+    .WillOnce(DoAll(SaveArg<0>(&actual_segment),
+                    Return(true)));
+  EXPECT_TRUE(reader.WalkLoadCommands(&load_command_handler));
+
+  EXPECT_EQ(true,                         actual_segment.bits_64);
+  EXPECT_EQ("sixteenprecisely",           actual_segment.name);
+  EXPECT_EQ(0x50c0501dc5922d35ULL,        actual_segment.vmaddr);
+  EXPECT_EQ(0x84ae73e7c75469bfULL,        actual_segment.vmsize);
+  EXPECT_EQ(0x917c339dU,                  actual_segment.maxprot);
+  EXPECT_EQ(0xdbc446faU,                  actual_segment.initprot);
+  EXPECT_EQ(0xb650b563U,                  actual_segment.flags);
+  EXPECT_EQ(0U,                           actual_segment.nsects);
+  EXPECT_EQ(0U,                           actual_segment.section_list.Size());
+  EXPECT_EQ(segment.final_size().Value(), actual_segment.contents.Size());
+}
+
+TEST_F(LoadCommand, SegmentCommandTruncated) {
+  WithConfiguration config(kBigEndian, 32);
+  LoadedSection segment_contents;
+  segment_contents.Append(20, '*');     	// lah di dah
+  SizedSection command;
+  command
+      .D32(LC_SEGMENT)          	// command type
+      .D32(command.final_size())                // command size
+      .AppendCString("too-short", 16)           // segment name
+      .D32(0x9c759211)                          // vmaddr
+      .D32(segment_contents.final_size())       // vmsize
+      .D32(segment_contents.start())            // file offset
+      .D32(segment_contents.final_size())       // file size
+      .D32(0x56f28446)                          // max protection
+      .D32(0xe7910dcb)                          // initial protection
+      .D32(0)                                   // no sections
+      .Append(3, 0);                            // flags (one byte short!)
+  LoadCommands load_commands;
+  load_commands.Place(&command);
+  MachOFile file;
+  file
+      .Header(&load_commands)
+      .Place(&segment_contents);
+  
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  EXPECT_CALL(reporter, LoadCommandTooShort(0, LC_SEGMENT))
+      .WillOnce(Return());
+
+  EXPECT_FALSE(reader.WalkLoadCommands(&load_command_handler));
+}
+
+TEST_F(LoadCommand, SegmentBadContentOffset) {
+  WithConfiguration config(kLittleEndian, 32);
+  // Instead of letting a Place call set the segment's file offset and size,
+  // set them ourselves, to check that the parser catches invalid offsets
+  // instead of handing us bogus pointers.
+  LoadedSection segment;
+  segment.address() = 0x4db5489c;
+  segment.start() = 0x7e189e76;         // beyond end of file
+  segment.final_size() = 0x98b9c3ab;
+  SegmentLoadCommand segment_command;
+  segment_command
+      .Header("notmerelyfifteen", segment, 0xcbab25ee, 0x359a20db, 0x68a3933f);
+  LoadCommands load_commands;
+  load_commands.Place(&segment_command);
+  MachOFile file;
+  file.Header(&load_commands);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  EXPECT_CALL(reporter, MisplacedSegmentData("notmerelyfifteen"))
+      .WillOnce(Return());
+
+  EXPECT_FALSE(reader.WalkLoadCommands(&load_command_handler));
+}
+
+TEST_F(LoadCommand, ThreeLoadCommands) {
+  WithConfiguration config(kBigEndian, 32);
+  LoadedSection seg1, seg2, seg3;
+  SegmentLoadCommand cmd1, cmd2, cmd3;
+
+  seg1.Append(128, '@');
+  seg1.address() = 0xa7f61ef6;
+  cmd1.Header("head", seg1, 0x88bf1cc7, 0x889a26a4, 0xe9b80d87);
+  // Include some dummy data at the end of the load command. Since we
+  // didn't claim to have any sections, the reader should ignore this. But
+  // making sure the commands have different lengths ensures that we're
+  // using the right command's length to advance the LoadCommandIterator.
+  cmd1.Append(128, '!');
+
+  seg2.Append(42, '*');
+  seg2.address() = 0xc70fc909;
+  cmd2.Header("thorax", seg2, 0xde7327f4, 0xfdaf771d, 0x65e74b30);
+  // More dummy data at the end of the load command. 
+  cmd2.Append(32, '^');
+
+  seg3.Append(42, '%');
+  seg3.address() = 0x46b3ab05;
+  cmd3.Header("abdomen", seg3, 0x7098b70d, 0x8d8d7728, 0x5131419b);
+  // More dummy data at the end of the load command. 
+  cmd3.Append(64, '&');
+
+  LoadCommands load_commands;
+  load_commands.Place(&cmd1).Place(&cmd2).Place(&cmd3);
+
+  MachOFile file;
+  file.Header(&load_commands).Place(&seg1).Place(&seg2).Place(&seg3);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  {
+    InSequence s;
+    EXPECT_CALL(load_command_handler,
+                SegmentCommand(Field(&Segment::name, "head")))
+      .WillOnce(Return(true));
+    EXPECT_CALL(load_command_handler,
+                SegmentCommand(Field(&Segment::name, "thorax")))
+      .WillOnce(Return(true));
+    EXPECT_CALL(load_command_handler,
+                SegmentCommand(Field(&Segment::name, "abdomen")))
+      .WillOnce(Return(true));
+  }
+
+  EXPECT_TRUE(reader.WalkLoadCommands(&load_command_handler));
+}
+
+static inline Matcher<const Section &> MatchSection(
+    Matcher<bool> bits_64,
+    Matcher<const string &> section_name,
+    Matcher<const string &> segment_name,
+    Matcher<uint64_t> address,
+    Matcher<uint32_t> alignment,
+    Matcher<uint32_t> flags,
+    Matcher<const ByteBuffer &> contents) {
+  return AllOf(AllOf(Field(&Section::bits_64, bits_64),
+                     Field(&Section::section_name, section_name),
+                     Field(&Section::segment_name, segment_name),
+                     Field(&Section::address, address)),
+               AllOf(Field(&Section::align, alignment),
+                     Field(&Section::flags, flags),
+                     Field(&Section::contents, contents)));
+}
+
+static inline Matcher<const Section &> MatchSection(
+    Matcher<bool> bits_64,
+    Matcher<const string &> section_name,
+    Matcher<const string &> segment_name,
+    Matcher<uint64_t> address) {
+  return AllOf(Field(&Section::bits_64, bits_64),
+               Field(&Section::section_name, section_name),
+               Field(&Section::segment_name, segment_name),
+               Field(&Section::address, address));
+}
+
+TEST_F(LoadCommand, OneSegmentTwoSections) {
+  WithConfiguration config(kBigEndian, 64);
+
+  // Create some sections with some data.
+  LoadedSection section1, section2;
+  section1.Append("buddha's hand");
+  section2.Append("kumquat");
+
+  // Create a segment to hold them.
+  LoadedSection segment;
+  segment.address() = 0xe1d0eeec;
+  segment.Place(&section2).Place(&section1);
+
+  SegmentLoadCommand segment_command;
+  segment_command
+      .Header("head", segment, 0x92c9568c, 0xa89f2627, 0x4dc7a1e2)
+      .AppendSectionEntry("mandarin", "kishu", 12, 0x8cd4604bU, section1)
+      .AppendSectionEntry("bergamot", "cara cara", 12, 0x98746efaU, section2);
+
+  LoadCommands commands;
+  commands.Place(&segment_command);
+
+  MachOFile file;
+  file.Header(&commands).Place(&segment);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+  
+  Segment actual_segment;
+  EXPECT_CALL(load_command_handler, SegmentCommand(_))
+      .WillOnce(DoAll(SaveArg<0>(&actual_segment),
+                      Return(true)));
+  EXPECT_TRUE(reader.WalkLoadCommands(&load_command_handler));
+
+  {
+    InSequence s;
+    ByteBuffer contents1;
+    contents1.start = file_bytes + section1.start().Value();
+    contents1.end = contents1.start + section1.final_size().Value();
+    EXPECT_EQ("buddha's hand",
+              string(reinterpret_cast<const char *>(contents1.start),
+                     contents1.Size()));
+    EXPECT_CALL(section_handler,
+                HandleSection(MatchSection(true, "mandarin", "kishu",
+                                           section1.address().Value(), 12,
+                                           0x8cd4604bU, contents1)))
+      .WillOnce(Return(true));
+    
+    ByteBuffer contents2;
+    contents2.start = file_bytes + section2.start().Value();
+    contents2.end = contents2.start + section2.final_size().Value();
+    EXPECT_EQ("kumquat",
+              string(reinterpret_cast<const char *>(contents2.start),
+                     contents2.Size()));
+    EXPECT_CALL(section_handler,
+                HandleSection(MatchSection(true, "bergamot", "cara cara",
+                                           section2.address().Value(), 12,
+                                           0x98746efaU, contents2)))
+      .WillOnce(Return(true));
+  }
+
+  EXPECT_TRUE(reader.WalkSegmentSections(actual_segment, &section_handler));
+}
+
+TEST_F(LoadCommand, MisplacedSectionBefore) {
+  WithConfiguration config(kLittleEndian, 64);
+
+  // The segment.
+  LoadedSection segment;
+  segment.address() = 0x696d83cc;
+  segment.Append(10, '0');
+
+  // The contents of the following sections don't matter, because
+  // we're not really going to Place them in segment; we're just going
+  // to set all their labels by hand to get the (impossible)
+  // configurations we want.
+
+  // A section whose starting offset is before that of its section.
+  LoadedSection before;
+  before.Append(10, '1');
+  before.start()   = segment.start() - 1;
+  before.address() = segment.address() - 1;
+  before.final_size() = before.Size();
+  
+  SegmentLoadCommand command;
+  command
+    .Header("segment", segment, 0x173baa29, 0x8407275d, 0xed8f7057)
+    .AppendSectionEntry("before",     "segment", 0, 0x686c6921, before);
+
+  LoadCommands commands;
+  commands.Place(&command);
+
+  MachOFile file;
+  file.Header(&commands).Place(&segment);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  Segment actual_segment;
+  EXPECT_TRUE(reader.FindSegment("segment", &actual_segment));
+
+  EXPECT_CALL(reporter, MisplacedSectionData("before", "segment"))
+    .WillOnce(Return());
+  EXPECT_FALSE(reader.WalkSegmentSections(actual_segment, &section_handler));
+}
+
+TEST_F(LoadCommand, MisplacedSectionAfter) {
+  WithConfiguration config(kLittleEndian, 64);
+
+  // The segment.
+  LoadedSection segment;
+  segment.address() = 0x696d83cc;
+  segment.Append(10, '0');
+
+  // The contents of the following sections don't matter, because
+  // we're not really going to Place them in segment; we're just going
+  // to set all their labels by hand to get the (impossible)
+  // configurations we want.
+
+  // A section whose starting offset is after the end of its section.
+  LoadedSection after;
+  after.Append(10, '2');
+  after.start()    = segment.start() + 11;
+  after.address()   = segment.address() + 11;
+  after.final_size() = after.Size();
+
+  SegmentLoadCommand command;
+  command
+    .Header("segment", segment, 0x173baa29, 0x8407275d, 0xed8f7057)
+    .AppendSectionEntry("after",      "segment", 0, 0x2ee50124, after);
+
+  LoadCommands commands;
+  commands.Place(&command);
+
+  MachOFile file;
+  file.Header(&commands).Place(&segment);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  Segment actual_segment;
+  EXPECT_TRUE(reader.FindSegment("segment", &actual_segment));
+
+  EXPECT_CALL(reporter, MisplacedSectionData("after", "segment"))
+    .WillOnce(Return());
+  EXPECT_FALSE(reader.WalkSegmentSections(actual_segment, &section_handler));
+}
+
+TEST_F(LoadCommand, MisplacedSectionTooBig) {
+  WithConfiguration config(kLittleEndian, 64);
+
+  // The segment.
+  LoadedSection segment;
+  segment.address() = 0x696d83cc;
+  segment.Append(10, '0');
+
+  // The contents of the following sections don't matter, because
+  // we're not really going to Place them in segment; we're just going
+  // to set all their labels by hand to get the (impossible)
+  // configurations we want.
+
+  // A section that extends beyond the end of its section.
+  LoadedSection too_big;
+  too_big.Append(10, '3');
+  too_big.start()   = segment.start() + 1;
+  too_big.address() = segment.address() + 1;
+  too_big.final_size() = too_big.Size();
+
+  SegmentLoadCommand command;
+  command
+    .Header("segment", segment, 0x173baa29, 0x8407275d, 0xed8f7057)
+    .AppendSectionEntry("too big",    "segment", 0, 0x8b53ae5c, too_big);
+
+  LoadCommands commands;
+  commands.Place(&command);
+
+  MachOFile file;
+  file.Header(&commands).Place(&segment);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  Segment actual_segment;
+  EXPECT_TRUE(reader.FindSegment("segment", &actual_segment));
+
+  EXPECT_CALL(reporter, MisplacedSectionData("too big", "segment"))
+    .WillOnce(Return());
+  EXPECT_FALSE(reader.WalkSegmentSections(actual_segment, &section_handler));
+}
+
+
+// The segments in a .dSYM bundle's Mach-O file have their file offset
+// and size set to zero, but the sections don't.  The reader shouldn't
+// report an error in this case.
+TEST_F(LoadCommand, ZappedSegment) {
+  WithConfiguration config(kBigEndian, 32);
+
+  // The segment.
+  LoadedSection segment;
+  segment.address() = 0x696d83cc;
+  segment.start() = 0;
+  segment.final_size() = 0;
+
+  // The section.
+  LoadedSection section;
+  section.address() = segment.address();
+  section.start() = 0;
+  section.final_size() = 1000;          // extends beyond its segment
+  
+  SegmentLoadCommand command;
+  command
+    .Header("zapped", segment, 0x0861a5cb, 0x68ccff67, 0x0b66255c)
+    .AppendSectionEntry("twitching", "zapped", 0, 0x93b3bd42, section);
+
+  LoadCommands commands;
+  commands.Place(&command);
+
+  MachOFile file;
+  file.Header(&commands);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  Segment actual_segment;
+  EXPECT_TRUE(reader.FindSegment("zapped", &actual_segment));
+
+  ByteBuffer zapped_extent(NULL, 0);
+  EXPECT_CALL(section_handler,
+              HandleSection(MatchSection(false, "twitching", "zapped",
+                                         0x696d83cc, 0, 0x93b3bd42,
+                                         zapped_extent)))
+    .WillOnce(Return(true));
+
+  EXPECT_TRUE(reader.WalkSegmentSections(actual_segment, &section_handler));
+}
+
+TEST_F(LoadCommand, MapSegmentSections) {
+  WithConfiguration config(kLittleEndian, 32);
+
+  // Create some sections with some data.
+  LoadedSection section1, section2, section3, section4;
+  section1.Append("buddha's hand");
+  section2.start() = 0;                 // Section 2 is an S_ZEROFILL section.
+  section2.final_size() = 0;
+  section3.Append("shasta gold");
+  section4.Append("satsuma");
+
+  // Create two segments to hold them.
+  LoadedSection segment1, segment2;
+  segment1.address() = 0x13e6c8a9;
+  segment1.Place(&section3).Place(&section1);
+  segment2.set_word_size(64);
+  segment2.address() = 0x04d462e2;
+  segment2.Place(&section4);
+  section2.address() = segment2.address() + segment2.Size();
+
+  SegmentLoadCommand segment_command1, segment_command2;
+  segment_command1
+      .Header("head", segment1, 0x67d955a6, 0x7a61c13e, 0xe3e50c64)
+      .AppendSectionEntry("mandarin", "head", 12, 0x5bb565d7, section1)
+      .AppendSectionEntry("bergamot", "head", 12, 0x8620de73, section3);
+  segment_command2.set_word_size(64);
+  segment_command2
+      .Header("thorax", segment2, 0x7aab2419, 0xe908007f, 0x17961d33)
+      .AppendSectionEntry("sixteenprecisely", "thorax",
+                          12, S_ZEROFILL, section2)
+      .AppendSectionEntry("cara cara", "thorax", 12, 0xb6c5dd8a, section4);
+
+  LoadCommands commands;
+  commands.Place(&segment_command1).Place(&segment_command2);
+
+  MachOFile file;
+  file.Header(&commands).Place(&segment1).Place(&segment2);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  Segment segment;
+  SectionMap section_map;
+
+  EXPECT_FALSE(reader.FindSegment("smoot", &segment));
+
+  ASSERT_TRUE(reader.FindSegment("thorax", &segment));
+  ASSERT_TRUE(reader.MapSegmentSections(segment, &section_map));
+
+  EXPECT_FALSE(section_map.find("sixteenpreciselyandthensome")
+               != section_map.end());
+  EXPECT_FALSE(section_map.find("mandarin") != section_map.end());
+  ASSERT_TRUE(section_map.find("cara cara") != section_map.end());
+  EXPECT_THAT(section_map["cara cara"],
+              MatchSection(true, "cara cara", "thorax", 0x04d462e2));
+  ASSERT_TRUE(section_map.find("sixteenprecisely")
+              != section_map.end());
+  ByteBuffer sixteenprecisely_contents(NULL, 0);
+  EXPECT_THAT(section_map["sixteenprecisely"],
+              MatchSection(true, "sixteenprecisely", "thorax",
+                           0x04d462e2 + 7, 12, S_ZEROFILL,
+                           sixteenprecisely_contents));
+
+  ASSERT_TRUE(reader.FindSegment("head", &segment));
+  ASSERT_TRUE(reader.MapSegmentSections(segment, &section_map));
+
+  ASSERT_TRUE(section_map.find("mandarin") != section_map.end());
+  EXPECT_THAT(section_map["mandarin"],
+              MatchSection(false, "mandarin", "head", 0x13e6c8a9 + 11));
+  ASSERT_TRUE(section_map.find("bergamot") != section_map.end());
+  EXPECT_THAT(section_map["bergamot"],
+              MatchSection(false, "bergamot", "head", 0x13e6c8a9));
+}
+
+TEST_F(LoadCommand, FindSegment) {
+  WithConfiguration config(kBigEndian, 32);
+
+  LoadedSection segment1, segment2, segment3;
+  segment1.address() = 0xb8ae5752;
+  segment1.Append("Some contents!");
+  segment2.address() = 0xd6b0ce83;
+  segment2.Append("Different stuff.");
+  segment3.address() = 0x7374fd2a;
+  segment3.Append("Further materials.");
+
+  SegmentLoadCommand cmd1, cmd2, cmd3;
+  cmd1.Header("first",  segment1, 0xfadb6932, 0x175bf529, 0x0de790ad);
+  cmd2.Header("second", segment2, 0xeef716e0, 0xe103a9d7, 0x7d38a8ef);
+  cmd3.Header("third",  segment3, 0xe172b39e, 0x86012f07, 0x080ac94d);
+
+  LoadCommands commands;
+  commands.Place(&cmd1).Place(&cmd2).Place(&cmd3);
+
+  MachOFile file;
+  file.Header(&commands).Place(&segment1).Place(&segment2).Place(&segment3);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  Segment actual_segment;
+
+  EXPECT_FALSE(reader.FindSegment("murphy", &actual_segment));
+
+  EXPECT_TRUE(reader.FindSegment("second", &actual_segment));
+  EXPECT_EQ(0xd6b0ce83, actual_segment.vmaddr);
+}
+
+
+// Symtab tests.
+
+// A StringAssembler is a class for generating .stabstr sections to present
+// as input to the STABS parser.
+class StringAssembler: public SizedSection {
+ public:
+  // Add the string S to this StringAssembler, and return the string's
+  // offset within this compilation unit's strings.
+  size_t Add(const string &s) {
+    size_t offset = Size();
+    AppendCString(s);
+    return offset;
+  }
+};
+
+// A SymbolAssembler is a class for generating .stab sections to present as
+// test input for the STABS parser.
+class SymbolAssembler: public SizedSection {
+ public:
+  // Create a SymbolAssembler that uses StringAssembler for its strings.
+  explicit SymbolAssembler(StringAssembler *string_assembler) 
+      : string_assembler_(string_assembler),
+        entry_count_(0) { }
+
+  // Append a STAB entry to the end of this section with the given
+  // characteristics. NAME is the offset of this entry's name string within
+  // its compilation unit's portion of the .stabstr section; this can be a
+  // value generated by a StringAssembler. Return a reference to this
+  // SymbolAssembler.
+  SymbolAssembler &Symbol(uint8_t type, uint8_t other, Label descriptor,
+                          Label value, Label name) {
+    D32(name);
+    D8(type);
+    D8(other);
+    D16(descriptor);
+    Append(endianness(), word_size_ / 8, value);
+    entry_count_++;
+    return *this;
+  }
+
+  // As above, but automatically add NAME to our StringAssembler.
+  SymbolAssembler &Symbol(uint8_t type, uint8_t other, Label descriptor,
+                       Label value, const string &name) {
+    return Symbol(type, other, descriptor, value, string_assembler_->Add(name));
+  }
+
+ private:
+  // The strings for our STABS entries.
+  StringAssembler *string_assembler_;
+
+  // The number of entries in this compilation unit so far.
+  size_t entry_count_;
+};
+
+class Symtab: public ReaderFixture, public Test { };
+
+TEST_F(Symtab, Symtab32) {
+  WithConfiguration config(kLittleEndian, 32);
+
+  StringAssembler strings;
+  SymbolAssembler symbols(&strings);
+  symbols
+      .Symbol(0x52, 0x7c, 0x3470, 0x9bb02e7c, "hrududu")
+      .Symbol(0x50, 0x90, 0x7520, 0x1122525d, "Frith");
+
+  SizedSection symtab_command;
+  symtab_command
+      .D32(LC_SYMTAB)                    // command
+      .D32(symtab_command.final_size())  // size
+      .D32(symbols.start())              // file offset of symbols
+      .D32(2)                            // symbol count
+      .D32(strings.start())              // file offset of strings
+      .D32(strings.final_size());        // strings size
+
+  LoadCommands load_commands;
+  load_commands.Place(&symtab_command);
+
+  MachOFile file;
+  file.Header(&load_commands).Place(&symbols).Place(&strings);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  ByteBuffer symbols_found, strings_found;
+  EXPECT_CALL(load_command_handler, SymtabCommand(_, _))
+      .WillOnce(DoAll(SaveArg<0>(&symbols_found),
+                      SaveArg<1>(&strings_found),
+                      Return(true)));
+  EXPECT_TRUE(reader.WalkLoadCommands(&load_command_handler));
+
+  EXPECT_EQ(24U, symbols_found.Size());
+  EXPECT_EQ(14U, strings_found.Size());
+}
+
+TEST_F(Symtab, Symtab64) {
+  WithConfiguration config(kBigEndian, 64);
+
+  StringAssembler strings;
+  SymbolAssembler symbols(&strings);
+  symbols
+      .Symbol(0xa7, 0xaf, 0x03af, 0x42f3072c74335181ULL, "foo")
+      .Symbol(0xb0, 0x9a, 0x2aa7, 0x2e2d349b3d5744a0ULL, "bar");
+
+  SizedSection symtab_command;
+  symtab_command
+      .D32(LC_SYMTAB)                    // command
+      .D32(symtab_command.final_size())  // size
+      .D32(symbols.start())              // file offset of symbols
+      .D32(2)                            // symbol count
+      .D32(strings.start())              // file offset of strings
+      .D32(strings.final_size());        // strings size
+
+  LoadCommands load_commands;
+  load_commands.Place(&symtab_command);
+
+  MachOFile file;
+  file.Header(&load_commands).Place(&symbols).Place(&strings);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  ByteBuffer symbols_found, strings_found;
+  EXPECT_CALL(load_command_handler, SymtabCommand(_, _))
+      .WillOnce(DoAll(SaveArg<0>(&symbols_found),
+                      SaveArg<1>(&strings_found),
+                      Return(true)));
+  EXPECT_TRUE(reader.WalkLoadCommands(&load_command_handler));
+
+  EXPECT_EQ(32U, symbols_found.Size());
+  EXPECT_EQ(8U,  strings_found.Size());
+}
+
+TEST_F(Symtab, SymtabMisplacedSymbols) {
+  WithConfiguration config(kBigEndian, 32);
+
+  StringAssembler strings;
+  SymbolAssembler symbols(&strings);
+  symbols
+      .Symbol(0xa7, 0xaf, 0x03af, 0x42f3072c74335181ULL, "foo")
+      .Symbol(0xb0, 0x9a, 0x2aa7, 0x2e2d349b3d5744a0ULL, "bar");
+
+  SizedSection symtab_command;
+  symtab_command
+      .D32(LC_SYMTAB)                    // command
+      .D32(symtab_command.final_size())  // size
+      .D32(symbols.start())              // file offset of symbols
+      .D32(3)                            // symbol count (too many)
+      .D32(strings.start())              // file offset of strings
+      .D32(strings.final_size());        // strings size
+
+  LoadCommands load_commands;
+  load_commands.Place(&symtab_command);
+
+  MachOFile file;
+  // Put symbols at end, so the excessive length will be noticed.
+  file.Header(&load_commands).Place(&strings).Place(&symbols);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  EXPECT_CALL(reporter, MisplacedSymbolTable()).Times(1);
+  EXPECT_FALSE(reader.WalkLoadCommands(&load_command_handler));
+}
+
+TEST_F(Symtab, SymtabMisplacedStrings) {
+  WithConfiguration config(kLittleEndian, 32);
+
+  StringAssembler strings;
+  SymbolAssembler symbols(&strings);
+  symbols
+      .Symbol(0xa7, 0xaf, 0x03af, 0x42f3072c74335181ULL, "foo")
+      .Symbol(0xb0, 0x9a, 0x2aa7, 0x2e2d349b3d5744a0ULL, "bar");
+
+  SizedSection symtab_command;
+  symtab_command
+      .D32(LC_SYMTAB)                    // command
+      .D32(symtab_command.final_size())  // size
+      .D32(symbols.start())              // file offset of symbols
+      .D32(2)                            // symbol count
+      .D32(strings.start())              // file offset of strings
+      .D32(strings.final_size() + 1);    // strings size (too long)
+
+  LoadCommands load_commands;
+  load_commands.Place(&symtab_command);
+
+  MachOFile file;
+  // Put strings at end, so the excessive length will be noticed.
+  file.Header(&load_commands).Place(&symbols).Place(&strings);
+
+  ReadFile(&file, true, CPU_TYPE_ANY, 0);
+
+  EXPECT_CALL(reporter, MisplacedSymbolTable()).Times(1);
+  EXPECT_FALSE(reader.WalkLoadCommands(&load_command_handler));
+}
+
diff --git a/src/common/mac/macho_walker.cc b/src/common/mac/macho_walker.cc
index 4e1d9f1..3e8fe21 100644
--- a/src/common/mac/macho_walker.cc
+++ b/src/common/mac/macho_walker.cc
@@ -51,8 +51,12 @@
 
 MachoWalker::MachoWalker(const char *path, LoadCommandCallback callback,
                          void *context)
-    : callback_(callback),
-      callback_context_(context) {
+    : file_(0),
+      callback_(callback),
+      callback_context_(context),
+      current_header_(NULL),
+      current_header_size_(0),
+      current_header_offset_(0) {
   file_ = open(path, O_RDONLY);
 }
 
@@ -62,22 +66,11 @@
 }
 
 int MachoWalker::ValidateCPUType(int cpu_type) {
-  // If the user didn't specify, try to use the local architecture.  If that
-  // fails, use the base type for the executable.
+  // If the user didn't specify, use the local architecture.
   if (cpu_type == 0) {
     const NXArchInfo *arch = NXGetLocalArchInfo();
-    if (arch)
-      cpu_type = arch->cputype;
-    else
-#if __ppc__
-      cpu_type = CPU_TYPE_POWERPC;
-#elif __i386__
-      cpu_type = CPU_TYPE_X86;
-#elif __x86_64__
-      cpu_type = CPU_TYPE_X86_64;
-#else
-#error Unknown architecture -- are you on a PDP-11?
-#endif
+    assert(arch);
+    cpu_type = arch->cputype;
   }
 
   return cpu_type;
@@ -106,7 +99,7 @@
     *offset = current_header_offset_;
     return true;
   }
-  
+
   return false;
 }
 
@@ -122,7 +115,7 @@
   // Figure out what type of file we've got
   bool is_fat = false;
   if (magic == FAT_MAGIC || magic == FAT_CIGAM) {
-    is_fat = true;    
+    is_fat = true;
   }
   else if (magic != MH_MAGIC && magic != MH_CIGAM && magic != MH_MAGIC_64 &&
            magic != MH_CIGAM_64) {
@@ -185,13 +178,13 @@
   bool swap = (header.magic == MH_CIGAM);
   if (swap)
     swap_mach_header(&header, NXHostByteOrder());
-  
+
   // Copy the data into the mach_header_64 structure.  Since the 32-bit and
   // 64-bit only differ in the last field (reserved), this is safe to do.
   struct mach_header_64 header64;
   memcpy((void *)&header64, (const void *)&header, sizeof(header));
   header64.reserved = 0;
-  
+
   current_header_ = &header64;
   current_header_size_ = sizeof(header); // 32-bit, not 64-bit
   current_header_offset_ = offset;
diff --git a/src/common/mac/macho_walker.h b/src/common/mac/macho_walker.h
index 6445a4f..0d30b5c 100644
--- a/src/common/mac/macho_walker.h
+++ b/src/common/mac/macho_walker.h
@@ -99,6 +99,10 @@
   struct mach_header_64 *current_header_;
   unsigned long current_header_size_;
   off_t current_header_offset_;
+  
+ private:
+  MachoWalker(const MachoWalker &);
+  MachoWalker &operator=(const MachoWalker &);
 };
 
 }  // namespace MacFileUtilities
diff --git a/src/client/windows/tests/crash_generation_app/precompile.cc b/src/common/mac/scoped_task_suspend-inl.h
similarity index 70%
copy from src/client/windows/tests/crash_generation_app/precompile.cc
copy to src/common/mac/scoped_task_suspend-inl.h
index 9d2173c..d6d1bef 100644
--- a/src/client/windows/tests/crash_generation_app/precompile.cc
+++ b/src/common/mac/scoped_task_suspend-inl.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2008, Google Inc.
+// Copyright (c) 2010 Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -27,11 +27,30 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// precompile.cpp : source file that includes just the standard includes
-// CrashGenerationApp.pch will be the pre-compiled header
-// precompile.obj will contain the pre-compiled type information
+// Inline implementation of ScopedTaskSuspend, which suspends a Mach
+// task for the duration of its scope.
 
-#include "precompile.h"
+#ifndef GOOGLE_BREAKPAD_COMMON_MAC_SCOPED_TASK_SUSPEND_H_
+#define GOOGLE_BREAKPAD_COMMON_MAC_SCOPED_TASK_SUSPEND_H_
 
-// Reference any additional headers you need in PRECOMPILE.H
-// and not in this file.
+#include <mach/mach.h>
+
+namespace google_breakpad {
+
+class ScopedTaskSuspend {
+ public:
+  explicit ScopedTaskSuspend(mach_port_t target) : target_(target) {
+    task_suspend(target_);
+  }
+
+  ~ScopedTaskSuspend() {
+    task_resume(target_);
+  }
+
+ private:
+  mach_port_t target_;
+};
+
+}  // namespace google_breakpad
+
+#endif  // GOOGLE_BREAKPAD_COMMON_MAC_SCOPED_TASK_SUSPEND_H_
diff --git a/src/common/mac/string_utilities.cc b/src/common/mac/string_utilities.cc
index 5a89be3..e1f63a9 100644
--- a/src/common/mac/string_utilities.cc
+++ b/src/common/mac/string_utilities.cc
@@ -58,7 +58,7 @@
   size_t start = 0;
   size_t end;
   size_t found = 0;
-  size_t result = 0;
+  unsigned int result = 0;
 
   for (; found <= idx; ++found) {
     end = str.find_first_not_of(digits, start);
diff --git a/src/common/linux/memory.h b/src/common/memory.h
similarity index 88%
rename from src/common/linux/memory.h
rename to src/common/memory.h
index f10a194..a02ac57 100644
--- a/src/common/linux/memory.h
+++ b/src/common/memory.h
@@ -27,15 +27,22 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#ifndef CLIENT_LINUX_HANDLER_MEMORY_H_
-#define CLIENT_LINUX_HANDLER_MEMORY_H_
+#ifndef GOOGLE_BREAKPAD_COMMON_MEMORY_H_
+#define GOOGLE_BREAKPAD_COMMON_MEMORY_H_
 
 #include <stdint.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <sys/mman.h>
 
-#include "common/linux/linux_syscall_support.h"
+#ifdef __APPLE__
+#define sys_mmap mmap
+#define sys_mmap2 mmap
+#define sys_munmap munmap
+#define MAP_ANONYMOUS MAP_ANON
+#else
+#include "third_party/lss/linux_syscall_support.h"
+#endif
 
 namespace google_breakpad {
 
@@ -148,6 +155,24 @@
     return used_;
   }
 
+  void resize(unsigned sz, T c = T()) {
+    // No need to test "sz >= 0", as "sz" is unsigned.
+    if (sz <= used_) {
+      used_ = sz;
+    } else {
+      unsigned a = allocated_;
+      if (sz > a) {
+        while (sz > a) {
+          a *= 2;
+        }
+        Realloc(a);
+      }
+      while (sz > used_) {
+        a_[used_++] = c;
+      }
+    }
+  }
+
   T& operator[](size_t index) {
     return a_[index];
   }
@@ -178,4 +203,4 @@
    return allocator.Alloc(nbytes);
 }
 
-#endif  // CLIENT_LINUX_HANDLER_MEMORY_H_
+#endif  // GOOGLE_BREAKPAD_COMMON_MEMORY_H_
diff --git a/src/common/linux/memory_unittest.cc b/src/common/memory_unittest.cc
similarity index 97%
rename from src/common/linux/memory_unittest.cc
rename to src/common/memory_unittest.cc
index 66c8346..8b2ec41 100644
--- a/src/common/linux/memory_unittest.cc
+++ b/src/common/memory_unittest.cc
@@ -27,7 +27,7 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include "common/linux/memory.h"
+#include "common/memory.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using namespace google_breakpad;
@@ -74,7 +74,7 @@
 
 TEST(WastefulVectorTest, Simple) {
   PageAllocator allocator_;
-  wasteful_vector<int> v(&allocator_);
+  wasteful_vector<unsigned> v(&allocator_);
 
   for (unsigned i = 0; i < 256; ++i)
     v.push_back(i);
diff --git a/src/common/module.cc b/src/common/module.cc
index fd36f3f..c980b96 100644
--- a/src/common/module.cc
+++ b/src/common/module.cc
@@ -31,11 +31,11 @@
 
 // module.cc: Implement google_breakpad::Module.  See module.h.
 
-#include <cerrno>
-#include <cstring>
-
 #include "common/module.h"
 
+#include <errno.h>
+#include <string.h>
+
 namespace google_breakpad {
 
 Module::Module(const string &name, const string &os,
@@ -49,7 +49,7 @@
 Module::~Module() {
   for (FileByNameMap::iterator it = files_.begin(); it != files_.end(); it++)
     delete it->second;
-  for (vector<Function *>::iterator it = functions_.begin();
+  for (FunctionSet::iterator it = functions_.begin();
        it != functions_.end(); it++)
     delete *it;
   for (vector<StackFrameEntry *>::iterator it = stack_frame_entries_.begin();
@@ -62,12 +62,17 @@
 }
 
 void Module::AddFunction(Function *function) {
-  functions_.push_back(function);
+  std::pair<FunctionSet::iterator,bool> ret = functions_.insert(function);
+  if (!ret.second) {
+    // Free the duplicate we failed to insert because we own it.
+    delete function;
+  }
 }
 
 void Module::AddFunctions(vector<Function *>::iterator begin,
                           vector<Function *>::iterator end) {
-  functions_.insert(functions_.end(), begin, end);
+  for (vector<Function *>::iterator it = begin; it != end; it++)
+    AddFunction(*it);
 }
 
 void Module::AddStackFrameEntry(StackFrameEntry *stack_frame_entry) {
@@ -130,7 +135,7 @@
 
   // Next, mark all files actually cited by our functions' line number
   // info, by setting each one's source id to zero.
-  for (vector<Function *>::const_iterator func_it = functions_.begin();
+  for (FunctionSet::const_iterator func_it = functions_.begin();
        func_it != functions_.end(); func_it++) {
     Function *func = *func_it;
     for (vector<Line>::iterator line_it = func->lines.begin();
@@ -145,13 +150,13 @@
   int next_source_id = 0;
   for (FileByNameMap::iterator file_it = files_.begin();
        file_it != files_.end(); file_it++)
-    if (! file_it->second->source_id)
+    if (!file_it->second->source_id)
       file_it->second->source_id = next_source_id++;
 }
 
 bool Module::ReportError() {
   fprintf(stderr, "error writing symbol file: %s\n",
-          strerror (errno));
+          strerror(errno));
   return false;
 }
 
@@ -187,7 +192,7 @@
   }
 
   // Write out functions and their lines.
-  for (vector<Function *>::const_iterator func_it = functions_.begin();
+  for (FunctionSet::const_iterator func_it = functions_.begin();
        func_it != functions_.end(); func_it++) {
     Function *func = *func_it;
     if (0 > fprintf(stream, "FUNC %llx %llx %llx %s\n",
@@ -217,7 +222,7 @@
         || !WriteRuleMap(entry->initial_rules, stream)
         || 0 > putc('\n', stream))
       return ReportError();
-    
+
     // Write out this entry's delta rules as 'STACK CFI' records.
     for (RuleChangeMap::const_iterator delta_it = entry->rule_changes.begin();
          delta_it != entry->rule_changes.end(); delta_it++) {
diff --git a/src/common/module.h b/src/common/module.h
index 9201224..8c20cea 100644
--- a/src/common/module.h
+++ b/src/common/module.h
@@ -38,15 +38,18 @@
 #ifndef COMMON_LINUX_MODULE_H__
 #define COMMON_LINUX_MODULE_H__
 
+#include <stdio.h>
+
 #include <map>
+#include <set>
 #include <string>
 #include <vector>
-#include <cstdio>
 
 #include "google_breakpad/common/breakpad_types.h"
 
 namespace google_breakpad {
 
+using std::set;
 using std::string;
 using std::vector;
 using std::map;
@@ -89,7 +92,7 @@
 
     // The function's name.
     string name;
-    
+
     // The start address and length of the function's code.
     Address address, size;
 
@@ -123,7 +126,7 @@
   // A map from addresses to RuleMaps, representing changes that take
   // effect at given addresses.
   typedef map<Address, RuleMap> RuleChangeMap;
-  
+
   // A range of 'STACK CFI' stack walking information. An instance of
   // this structure corresponds to a 'STACK CFI INIT' record and the
   // subsequent 'STACK CFI' records that fall within its range.
@@ -142,10 +145,19 @@
     // including the address you're interested in.
     RuleChangeMap rule_changes;
   };
-    
+
+  struct FunctionCompare {
+    bool operator() (const Function *lhs,
+                     const Function *rhs) const {
+      if (lhs->address == rhs->address)
+        return lhs->name < rhs->name;
+      return lhs->address < rhs->address;
+    }
+  };
+
   // Create a new module with the given name, operating system,
   // architecture, and ID string.
-  Module(const string &name, const string &os, const string &architecture, 
+  Module(const string &name, const string &os, const string &architecture,
          const string &id);
   ~Module();
 
@@ -175,7 +187,7 @@
                     vector<Function *>::iterator end);
 
   // Add STACK_FRAME_ENTRY to the module.
-  // 
+  //
   // This module owns all StackFrameEntry objects added with this
   // function: destroying the module destroys them as well.
   void AddStackFrameEntry(StackFrameEntry *stack_frame_entry);
@@ -257,12 +269,13 @@
   // A map from filenames to File structures.  The map's keys are
   // pointers to the Files' names.
   typedef map<const string *, File *, CompareStringPtrs> FileByNameMap;
+  typedef set<Function *, FunctionCompare> FunctionSet;
 
   // The module owns all the files and functions that have been added
   // to it; destroying the module frees the Files and Functions these
   // point to.
-  FileByNameMap files_;                 // This module's source files.  
-  vector<Function *> functions_;        // This module's functions.
+  FileByNameMap files_;    // This module's source files.
+  FunctionSet functions_;  // This module's functions.
 
   // The module owns all the call frame info entries that have been
   // added to it.
diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc
index dab0dac..2418994 100644
--- a/src/common/module_unittest.cc
+++ b/src/common/module_unittest.cc
@@ -31,10 +31,10 @@
 
 // module_unittest.cc: Unit tests for google_breakpad::Module.
 
-#include <cerrno>
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 
 #include <algorithm>
 #include <string>
@@ -49,7 +49,7 @@
 
 // Return a FILE * referring to a temporary file that will be deleted
 // automatically when the stream is closed or the program exits.
-FILE *checked_tmpfile() {
+static FILE *checked_tmpfile() {
   FILE *f = tmpfile();
   if (!f) {
     fprintf(stderr, "error creating temporary file: %s\n", strerror(errno));
@@ -60,7 +60,7 @@
 
 // Read from STREAM until end of file, and return the contents as a
 // string.
-string checked_read(FILE *stream) {
+static string checked_read(FILE *stream) {
   string contents;
   int c;
   while ((c = getc(stream)) != EOF)
@@ -74,7 +74,7 @@
 }
 
 // Apply 'fflush' to STREAM, and check for errors.
-void checked_fflush(FILE *stream) {
+static void checked_fflush(FILE *stream) {
   if (fflush(stream) == EOF) {
     fprintf(stderr, "error flushing temporary file stream: %s\n",
             strerror(errno));
@@ -83,7 +83,7 @@
 }
 
 // Apply 'fclose' to STREAM, and check for errors.
-void checked_fclose(FILE *stream) {
+static void checked_fclose(FILE *stream) {
   if (fclose(stream) == EOF) {
     fprintf(stderr, "error closing temporary file stream: %s\n",
             strerror(errno));
@@ -91,6 +91,19 @@
   }
 }
 
+static Module::Function *generate_duplicate_function(const string &name) {
+  const Module::Address DUP_ADDRESS = 0xd35402aac7a7ad5cLL;
+  const Module::Address DUP_SIZE = 0x200b26e605f99071LL;
+  const Module::Address DUP_PARAMETER_SIZE = 0xf14ac4fed48c4a99LL;
+
+  Module::Function *function = new(Module::Function);
+  function->name = name;
+  function->address = DUP_ADDRESS;
+  function->size = DUP_SIZE;
+  function->parameter_size = DUP_PARAMETER_SIZE;
+  return function;
+}
+
 #define MODULE_NAME "name with spaces"
 #define MODULE_OS "os-name"
 #define MODULE_ARCH "architecture"
@@ -222,7 +235,7 @@
   m.AddFunction(function);
 
   m.AssignSourceIds();
-  
+
   vector<Module::File *> vec;
   m.GetFiles(&vec);
   EXPECT_EQ((size_t) 3, vec.size());
@@ -280,10 +293,10 @@
   string contents = checked_read(f);
   checked_fclose(f);
   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
-               "FUNC d35024aa7ca7da5c 200b26e605f99071 f14ac4fed48c4a99"
-               " _without_form\n"
                "FUNC 2987743d0b35b13f b369db048deb3010 938e556cb5a79988"
-               " _and_void\n",
+               " _and_void\n"
+               "FUNC d35024aa7ca7da5c 200b26e605f99071 f14ac4fed48c4a99"
+               " _without_form\n",
                contents.c_str());
 
   // Check that m.GetFunctions returns the functions we expect.
@@ -303,7 +316,7 @@
   entry1->address = 0xddb5f41285aa7757ULL;
   entry1->size = 0x1486493370dc5073ULL;
   m.AddStackFrameEntry(entry1);
-  
+
   // Second STACK CFI entry, with initial rules but no deltas.
   Module::StackFrameEntry *entry2 = new Module::StackFrameEntry();
   entry2->address = 0x8064f3af5e067e38ULL;
@@ -396,3 +409,49 @@
   EXPECT_EQ(file1, m.FindExistingFile("foo"));
   EXPECT_TRUE(m.FindExistingFile("baz") == NULL);
 }
+
+TEST(Construct, DuplicateFunctions) {
+  FILE *f = checked_tmpfile();
+  Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
+
+  // Two functions.
+  Module::Function *function1 = generate_duplicate_function("_without_form");
+  Module::Function *function2 = generate_duplicate_function("_without_form");
+
+  m.AddFunction(function1);
+  m.AddFunction(function2);
+
+  m.Write(f);
+  checked_fflush(f);
+  rewind(f);
+  string contents = checked_read(f);
+  checked_fclose(f);
+  EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+               "FUNC d35402aac7a7ad5c 200b26e605f99071 f14ac4fed48c4a99"
+               " _without_form\n",
+               contents.c_str());
+}
+
+TEST(Construct, FunctionsWithSameAddress) {
+  FILE *f = checked_tmpfile();
+  Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
+
+  // Two functions.
+  Module::Function *function1 = generate_duplicate_function("_without_form");
+  Module::Function *function2 = generate_duplicate_function("_and_void");
+
+  m.AddFunction(function1);
+  m.AddFunction(function2);
+
+  m.Write(f);
+  checked_fflush(f);
+  rewind(f);
+  string contents = checked_read(f);
+  checked_fclose(f);
+  EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+               "FUNC d35402aac7a7ad5c 200b26e605f99071 f14ac4fed48c4a99"
+               " _and_void\n"
+               "FUNC d35402aac7a7ad5c 200b26e605f99071 f14ac4fed48c4a99"
+               " _without_form\n",
+               contents.c_str());
+}
diff --git a/src/common/stabs_reader_unittest.cc b/src/common/stabs_reader_unittest.cc
index 9d2f88c..9461ac0 100644
--- a/src/common/stabs_reader_unittest.cc
+++ b/src/common/stabs_reader_unittest.cc
@@ -56,10 +56,10 @@
 using ::testing::_;
 using google_breakpad::StabsHandler;
 using google_breakpad::StabsReader;
-using google_breakpad::TestAssembler::Label;
-using google_breakpad::TestAssembler::Section;
-using google_breakpad::TestAssembler::kBigEndian;
-using google_breakpad::TestAssembler::kLittleEndian;
+using google_breakpad::test_assembler::Label;
+using google_breakpad::test_assembler::Section;
+using google_breakpad::test_assembler::kBigEndian;
+using google_breakpad::test_assembler::kLittleEndian;
 using std::map;
 using std::string;
 
diff --git a/src/common/stabs_to_module.cc b/src/common/stabs_to_module.cc
index fbe4c02..62fcd39 100644
--- a/src/common/stabs_to_module.cc
+++ b/src/common/stabs_to_module.cc
@@ -58,7 +58,7 @@
 
 StabsToModule::~StabsToModule() {
   // Free any functions we've accumulated but not added to the module.
-  for (vector<Module::Function *>::iterator func_it = functions_.begin();
+  for (vector<Module::Function *>::const_iterator func_it = functions_.begin();
        func_it != functions_.end(); func_it++)
     delete *func_it;
   // Free any function that we're currently within.
@@ -104,16 +104,8 @@
   assert(current_function_);
   // Functions in this compilation unit should have address bigger
   // than the compilation unit's starting address.  There may be a lot
-  // of duplicated entries for functions in the STABS data; only one
-  // entry can meet this requirement.
-  //
-  // (I don't really understand the above comment; just bringing it along
-  // from the previous code, and leaving the behavior unchanged. GCC marks
-  // the end of each function with an N_FUN entry with no name, whose value
-  // is the size of the function; perhaps this test was concerned with
-  // skipping those. Now StabsReader interprets them properly. If you know
-  // the whole story, please patch this comment. --jimb)
-  //
+  // of duplicated entries for functions in the STABS data. We will
+  // count on the Module to remove the duplicates.
   if (current_function_->address >= comp_unit_base_address_)
     functions_.push_back(current_function_);
   else
@@ -153,12 +145,13 @@
   // Sort all functions by address, just for neatness.
   sort(functions_.begin(), functions_.end(),
        Module::Function::CompareByAddress);
-  for (vector<Module::Function *>::iterator func_it = functions_.begin();
+
+  for (vector<Module::Function *>::const_iterator func_it = functions_.begin();
        func_it != functions_.end();
        func_it++) {
     Module::Function *f = *func_it;
     // Compute the function f's size.
-    vector<Module::Address>::iterator boundary
+    vector<Module::Address>::const_iterator boundary
         = std::upper_bound(boundaries_.begin(), boundaries_.end(), f->address);
     if (boundary != boundaries_.end())
       f->size = *boundary - f->address;
diff --git a/src/common/stabs_to_module_unittest.cc b/src/common/stabs_to_module_unittest.cc
index 4248b3c..2c432a3 100644
--- a/src/common/stabs_to_module_unittest.cc
+++ b/src/common/stabs_to_module_unittest.cc
@@ -74,6 +74,38 @@
   EXPECT_EQ(174823314, line->number);
 }
 
+TEST(StabsToModule, DuplicateFunctionNames) {
+  Module m("name", "os", "arch", "id");
+  StabsToModule h(&m);
+
+  // Compilation unit with one function, mangled name.
+  EXPECT_TRUE(h.StartCompilationUnit("compilation-unit", 0xf2cfda36ecf7f46cLL,
+                                     "build-directory"));
+  EXPECT_TRUE(h.StartFunction("funcfoo",
+                              0xf2cfda36ecf7f46dLL));
+  EXPECT_TRUE(h.EndFunction(0));
+  EXPECT_TRUE(h.StartFunction("funcfoo",
+                              0xf2cfda36ecf7f46dLL));
+  EXPECT_TRUE(h.EndFunction(0));
+  EXPECT_TRUE(h.EndCompilationUnit(0));
+
+  h.Finalize();
+
+  // Now check to see what has been added to the Module.
+  Module::File *file = m.FindExistingFile("compilation-unit");
+  ASSERT_TRUE(file != NULL);
+
+  vector<Module::Function *> functions;
+  m.GetFunctions(&functions, functions.end());
+  ASSERT_EQ(1U, functions.size());
+
+  Module::Function *function = functions[0];
+  EXPECT_EQ(0xf2cfda36ecf7f46dLL, function->address);
+  EXPECT_LT(0U, function->size);  // should have used dummy size
+  EXPECT_EQ(0U, function->parameter_size);
+  ASSERT_EQ(0U, function->lines.size());
+}
+
 TEST(InferSizes, LineSize) {
   Module m("name", "os", "arch", "id");
   StabsToModule h(&m);
@@ -88,7 +120,7 @@
   EXPECT_TRUE(h.EndFunction(0));  // unknown function end address
   EXPECT_TRUE(h.EndCompilationUnit(0)); // unknown CU end address
   EXPECT_TRUE(h.StartCompilationUnit("compilation-unit-2", 0xb4523963eff94e92LL,
-                                     "build-directory-2")); // next boundary  
+                                     "build-directory-2")); // next boundary
   EXPECT_TRUE(h.EndCompilationUnit(0));
   h.Finalize();
 
diff --git a/src/common/string_conversion.cc b/src/common/string_conversion.cc
index 50054eb..5af12f5 100644
--- a/src/common/string_conversion.cc
+++ b/src/common/string_conversion.cc
@@ -68,7 +68,7 @@
                                                  strictConversion);
 
     if (result == conversionOK)
-      return source_ptr - reinterpret_cast<const UTF8 *>(in);
+      return static_cast<int>(source_ptr - reinterpret_cast<const UTF8 *>(in));
 
     // Add another character to the input stream and try again
     source_ptr = reinterpret_cast<const UTF8 *>(in);
@@ -135,7 +135,7 @@
 
   // The maximum expansion would be 4x the size of the input string.
   const UTF16 *source_end_ptr = source_ptr + in.size();
-  int target_capacity = in.size() * 4;
+  size_t target_capacity = in.size() * 4;
   scoped_array<UTF8> target_buffer(new UTF8[target_capacity]);
   UTF8 *target_ptr = target_buffer.get();
   UTF8 *target_end_ptr = target_ptr + target_capacity;
@@ -145,8 +145,7 @@
 
   if (result == conversionOK) {
     const char *targetPtr = reinterpret_cast<const char *>(target_buffer.get());
-    string result(targetPtr);
-    return result;
+    return targetPtr;
   }
 
   return "";
diff --git a/src/common/test_assembler.cc b/src/common/test_assembler.cc
index 54092f3..7f5dd38 100644
--- a/src/common/test_assembler.cc
+++ b/src/common/test_assembler.cc
@@ -32,14 +32,15 @@
 // test_assembler.cc: Implementation of google_breakpad::TestAssembler.
 // See test_assembler.h for details.
 
-#include <cassert>
-#include <cstdio>
-#include <iterator>
-
 #include "common/test_assembler.h"
 
+#include <assert.h>
+#include <stdio.h>
+
+#include <iterator>
+
 namespace google_breakpad {
-namespace TestAssembler {
+namespace test_assembler {
 
 using std::back_insert_iterator;
 
@@ -95,7 +96,7 @@
 }
 
 u_int64_t Label::Value() const {
-  u_int64_t v;
+  u_int64_t v = 0;
   ALWAYS_EVALUATE_AND_ASSERT(IsKnownConstant(&v));
   return v;
 };
@@ -201,7 +202,7 @@
 }
 
 template<typename Inserter>
-static inline void InsertEndian(TestAssembler::Endianness endianness,
+static inline void InsertEndian(test_assembler::Endianness endianness,
                                 size_t size, u_int64_t number, Inserter dest) {
   assert(size > 0);
   if (endianness == kLittleEndian) {
@@ -341,7 +342,7 @@
     Reference &r = references_[i];
     u_int64_t value;
     if (!r.label.IsKnownConstant(&value)) {
-      fprintf(stderr, "Undefined label #%d at offset 0x%x\n", i, r.offset);
+      fprintf(stderr, "Undefined label #%zu at offset 0x%zx\n", i, r.offset);
       return false;
     }
     assert(r.offset < contents_.size());
@@ -354,5 +355,5 @@
   return true;
 }
 
-} // namespace TestAssembler
-} // namespace google_breakpad
+}  // namespace test_assembler
+}  // namespace google_breakpad
diff --git a/src/common/test_assembler.h b/src/common/test_assembler.h
index 19782b9..5ce6b0c 100644
--- a/src/common/test_assembler.h
+++ b/src/common/test_assembler.h
@@ -68,7 +68,7 @@
 using std::string;
 using std::vector;
 
-namespace TestAssembler {
+namespace test_assembler {
 
 // A Label represents a value not yet known that we need to store in a
 // section. As long as all the labels a section refers to are defined
@@ -475,7 +475,7 @@
   Label start_;
 };
 
-}  // namespace TestAssembler
+}  // namespace test_assembler
 }  // namespace google_breakpad
 
 #endif  // PROCESSOR_TEST_ASSEMBLER_H_
diff --git a/src/common/test_assembler_unittest.cc b/src/common/test_assembler_unittest.cc
index c26a938..5db1326 100644
--- a/src/common/test_assembler_unittest.cc
+++ b/src/common/test_assembler_unittest.cc
@@ -37,10 +37,10 @@
 #include "breakpad_googletest_includes.h"
 #include "common/test_assembler.h"
 
-using google_breakpad::TestAssembler::Label;
-using google_breakpad::TestAssembler::Section;
-using google_breakpad::TestAssembler::kBigEndian;
-using google_breakpad::TestAssembler::kLittleEndian;
+using google_breakpad::test_assembler::Label;
+using google_breakpad::test_assembler::Section;
+using google_breakpad::test_assembler::kBigEndian;
+using google_breakpad::test_assembler::kLittleEndian;
 using std::string;
 using testing::Test;
 
diff --git a/src/common/windows/http_upload.cc b/src/common/windows/http_upload.cc
index 6526572..a687979 100644
--- a/src/common/windows/http_upload.cc
+++ b/src/common/windows/http_upload.cc
@@ -122,6 +122,7 @@
   }
 
   DWORD http_open_flags = secure ? INTERNET_FLAG_SECURE : 0;
+  http_open_flags |= INTERNET_FLAG_NO_COOKIES;
   AutoInternetHandle request(HttpOpenRequest(connection.get(),
                                              L"POST",
                                              path,
diff --git a/src/common/windows/pdb_source_line_writer.cc b/src/common/windows/pdb_source_line_writer.cc
index 9cd0d2e..9969530 100644
--- a/src/common/windows/pdb_source_line_writer.cc
+++ b/src/common/windows/pdb_source_line_writer.cc
@@ -28,8 +28,8 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include <atlbase.h>
-#include <DbgHelp.h>
 #include <dia2.h>
+#include <ImageHlp.h>
 #include <stdio.h>
 
 #include "common/windows/string_utils-inl.h"
@@ -45,6 +45,24 @@
 
 namespace google_breakpad {
 
+using std::vector;
+
+// A helper class to scope a PLOADED_IMAGE.
+class AutoImage {
+ public:
+  explicit AutoImage(PLOADED_IMAGE img) : img_(img) {}
+  ~AutoImage() {
+    if (img_)
+      ImageUnload(img_);
+  }
+
+  operator PLOADED_IMAGE() { return img_; }
+  PLOADED_IMAGE operator->() { return img_; }
+
+ private:
+  PLOADED_IMAGE img_;
+};
+
 PDBSourceLineWriter::PDBSourceLineWriter() : output_(NULL) {
 }
 
@@ -78,6 +96,7 @@
         fprintf(stderr, "loadDataForExe failed\n");
         return false;
       }
+      code_file_ = file;
       break;
     case ANY_FILE:
       if (FAILED(data_source->loadDataFromPdb(file.c_str()))) {
@@ -85,6 +104,7 @@
           fprintf(stderr, "loadDataForPdb and loadDataFromExe failed\n");
           return false;
         }
+	code_file_ = file;
       }
       break;
     default:
@@ -498,6 +518,18 @@
   return true;
 }
 
+bool PDBSourceLineWriter::PrintPEInfo() {
+  PEModuleInfo info;
+  if (!GetPEInfo(&info)) {
+    return false;
+  }
+
+  fprintf(output_, "INFO CODE_ID %ws %ws\n",
+	  info.code_identifier.c_str(),
+	  info.code_file.c_str());
+  return true;
+}
+
 // wcstol_positive_strict is sort of like wcstol, but much stricter.  string
 // should be a buffer pointing to a null-terminated string containing only
 // decimal digits.  If the entire string can be converted to an integer
@@ -535,6 +567,35 @@
   return true;
 }
 
+bool PDBSourceLineWriter::FindPEFile() {
+  CComPtr<IDiaSymbol> global;
+  if (FAILED(session_->get_globalScope(&global))) {
+    fprintf(stderr, "get_globalScope failed\n");
+    return false;
+  }
+
+  CComBSTR symbols_file;
+  if (SUCCEEDED(global->get_symbolsFileName(&symbols_file))) {
+    wstring file(symbols_file);
+    
+    // Look for an EXE or DLL file.
+    const wchar_t *extensions[] = { L"exe", L"dll" };
+    for (int i = 0; i < sizeof(extensions) / sizeof(extensions[0]); i++) {
+      size_t dot_pos = file.find_last_of(L".");
+      if (dot_pos != wstring::npos) {
+	file.replace(dot_pos + 1, wstring::npos, extensions[i]);
+	// Check if this file exists.
+	if (GetFileAttributesW(file.c_str()) != INVALID_FILE_ATTRIBUTES) {
+	  code_file_ = file;
+	  return true;
+	}
+      }
+    }
+  }
+
+  return false;
+}
+
 // static
 bool PDBSourceLineWriter::GetSymbolFunctionName(IDiaSymbol *function,
                                                 BSTR *name,
@@ -737,10 +798,15 @@
 bool PDBSourceLineWriter::WriteMap(FILE *map_file) {
   output_ = map_file;
 
-  bool ret = PrintPDBInfo() &&
-             PrintSourceFiles() && 
-             PrintFunctions() &&
-             PrintFrameData();
+  bool ret = PrintPDBInfo();
+  // TODO(ted): This is currently disabled to allow Breakpad users to update
+  // processing infrastructure.
+  // This is not a critical piece of the symbol file.
+  // PrintPEInfo();
+  ret = ret &&
+    PrintSourceFiles() && 
+    PrintFunctions() &&
+    PrintFrameData();
 
   output_ = NULL;
   return ret;
@@ -764,11 +830,25 @@
     return false;
   }
 
-  // All CPUs in CV_CPU_TYPE_e (cvconst.h) below 0x10 are x86.  There's no
-  // single specific constant to use.
-  DWORD platform;
-  if (SUCCEEDED(global->get_platform(&platform)) && platform < 0x10) {
-    info->cpu = L"x86";
+  DWORD machine_type;
+  // get_machineType can return S_FALSE.
+  if (global->get_machineType(&machine_type) == S_OK) {
+    // The documentation claims that get_machineType returns a value from
+    // the CV_CPU_TYPE_e enumeration, but that's not the case.
+    // Instead, it returns one of the IMAGE_FILE_MACHINE values as
+    // defined here:
+    // http://msdn.microsoft.com/en-us/library/ms680313%28VS.85%29.aspx
+    switch (machine_type) {
+      case IMAGE_FILE_MACHINE_I386:
+        info->cpu = L"x86";
+        break;
+      case IMAGE_FILE_MACHINE_AMD64:
+        info->cpu = L"x86_64";
+        break;
+      default:
+        info->cpu = L"unknown";
+        break;
+    }
   } else {
     // Unexpected, but handle gracefully.
     info->cpu = L"unknown";
@@ -832,6 +912,54 @@
   return true;
 }
 
+bool PDBSourceLineWriter::GetPEInfo(PEModuleInfo *info) {
+  if (!info) {
+    return false;
+  }
+
+  if (code_file_.empty() && !FindPEFile()) {
+    fprintf(stderr, "Couldn't locate EXE or DLL file.\n");
+    return false;
+  }
+
+  // Convert wchar to native charset because ImageLoad only takes
+  // a PSTR as input.
+  string code_file;
+  if (!WindowsStringUtils::safe_wcstombs(code_file_, &code_file)) {
+    return false;
+  }
+
+  AutoImage img(ImageLoad((PSTR)code_file.c_str(), NULL));
+  if (!img) {
+    fprintf(stderr, "Failed to open PE file: %s\n", code_file.c_str());
+    return false;
+  }
+
+  info->code_file = WindowsStringUtils::GetBaseName(code_file_);
+
+  // The date and time that the file was created by the linker.
+  DWORD TimeDateStamp = img->FileHeader->FileHeader.TimeDateStamp;
+  // The size of the file in bytes, including all headers.
+  DWORD SizeOfImage = 0;
+  PIMAGE_OPTIONAL_HEADER64 opt =
+    &((PIMAGE_NT_HEADERS64)img->FileHeader)->OptionalHeader;
+  if (opt->Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC) {
+    // 64-bit PE file.
+    SizeOfImage = opt->SizeOfImage;
+  }
+  else {
+    // 32-bit PE file.
+    SizeOfImage = img->FileHeader->OptionalHeader.SizeOfImage;
+  }
+  wchar_t code_identifier[32];
+  swprintf(code_identifier,
+	   sizeof(code_identifier) / sizeof(code_identifier[0]),
+	   L"%08X%X", TimeDateStamp, SizeOfImage);
+  info->code_identifier = code_identifier;
+
+  return true;
+}
+
 bool PDBSourceLineWriter::UsesGUID(bool *uses_guid) {
   if (!uses_guid)
     return false;
diff --git a/src/common/windows/pdb_source_line_writer.h b/src/common/windows/pdb_source_line_writer.h
index 8524d8b..ef2a27d 100644
--- a/src/common/windows/pdb_source_line_writer.h
+++ b/src/common/windows/pdb_source_line_writer.h
@@ -67,6 +67,21 @@
   wstring cpu;
 };
 
+// A structure that carries information that identifies a PE file,
+// either an EXE or a DLL.
+struct PEModuleInfo {
+  // The basename of the PE file.
+  wstring code_file;
+
+  // The PE file's code identifier, which consists of its timestamp
+  // and file size concatenated together into a single hex string.
+  // (The fields IMAGE_OPTIONAL_HEADER::SizeOfImage and
+  // IMAGE_FILE_HEADER::TimeDateStamp, as defined in the ImageHlp
+  // documentation.) This is not well documented, if it's documented
+  // at all, but it's what symstore does and what DbgHelp supports.
+  wstring code_identifier;
+};
+
 class PDBSourceLineWriter {
  public:
   enum FileFormat {
@@ -100,6 +115,10 @@
   // true on success and false on failure.
   bool GetModuleInfo(PDBModuleInfo *info);
 
+  // Retrieves information about the module's PE file.  Returns
+  // true on success and false on failure.
+  bool GetPEInfo(PEModuleInfo *info);
+
   // Sets uses_guid to true if the opened file uses a new-style CodeView
   // record with a 128-bit GUID, or false if the opened file uses an old-style
   // CodeView record.  When no GUID is available, a 32-bit signature should be
@@ -139,6 +158,11 @@
   // its uuid and age.
   bool PrintPDBInfo();
 
+  // Outputs a line identifying the PE file corresponding to the PDB
+  // file that is being dumped, along with its code identifier,
+  // which consists of its timestamp and file size.
+  bool PrintPEInfo();
+
   // Returns true if this filename has already been seen,
   // and an ID is stored for it, or false if it has not.
   bool FileIDIsCached(const wstring &file) {
@@ -170,6 +194,10 @@
     return iter->second;
   };
 
+  // Find the PE file corresponding to the loaded PDB file, and
+  // set the code_file_ member. Returns false on failure.
+  bool FindPEFile();
+
   // Returns the function name for a symbol.  If possible, the name is
   // undecorated.  If the symbol's decorated form indicates the size of
   // parameters on the stack, this information is returned in stack_param_size.
@@ -183,6 +211,10 @@
   // a failure, returns 0, which is also a valid number of bytes.
   static int GetFunctionStackParamSize(IDiaSymbol *function);
 
+  // The filename of the PE file corresponding to the currently-open
+  // pdb file.
+  wstring code_file_;
+
   // The session for the currently-open pdb file.
   CComPtr<IDiaSession> session_;
 
diff --git a/src/common/windows/string_utils-inl.h b/src/common/windows/string_utils-inl.h
index 6f65081..d281aaa 100644
--- a/src/common/windows/string_utils-inl.h
+++ b/src/common/windows/string_utils-inl.h
@@ -87,6 +87,9 @@
   // without setting wcs.
   static bool safe_mbstowcs(const string &mbs, wstring *wcs);
 
+  // The inverse of safe_mbstowcs.
+  static bool safe_wcstombs(const wstring &wcs, string *mbs);
+
   // Returns the base name of a file, e.g. strips off the path.
   static wstring GetBaseName(const wstring &filename);
 
diff --git a/src/common/windows/string_utils.cc b/src/common/windows/string_utils.cc
index 5d46480..e6ffa08 100644
--- a/src/common/windows/string_utils.cc
+++ b/src/common/windows/string_utils.cc
@@ -28,6 +28,7 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include <cassert>
+#include <vector>
 
 #include "common/windows/string_utils-inl.h"
 
@@ -55,6 +56,7 @@
   if ((err = mbstowcs_s(&wcs_length, NULL, 0, mbs.c_str(), _TRUNCATE)) != 0) {
     return false;
   }
+  assert(wcs_length > 0);
 #else  // _MSC_VER >= 1400
   if ((wcs_length = mbstowcs(NULL, mbs.c_str(), mbs.length())) < 0) {
     return false;
@@ -64,28 +66,67 @@
   ++wcs_length;
 #endif  // _MSC_VER >= 1400
 
-  // TODO(mmentovai): move scoped_ptr into common and use it for wcs_c.
-  wchar_t *wcs_c = new wchar_t[wcs_length];
+  std::vector<wchar_t> wcs_v(wcs_length);
 
   // Now, convert.
 #if _MSC_VER >= 1400  // MSVC 2005/8
-  if ((err = mbstowcs_s(NULL, wcs_c, wcs_length, mbs.c_str(),
+  if ((err = mbstowcs_s(NULL, &wcs_v[0], wcs_length, mbs.c_str(),
                         _TRUNCATE)) != 0) {
-    delete[] wcs_c;
     return false;
   }
 #else  // _MSC_VER >= 1400
-  if (mbstowcs(wcs_c, mbs.c_str(), mbs.length()) < 0) {
-    delete[] wcs_c;
+  if (mbstowcs(&wcs_v[0], mbs.c_str(), mbs.length()) < 0) {
     return false;
   }
 
   // Ensure presence of 0-terminator.
-  wcs_c[wcs_length - 1] = '\0';
+  wcs_v[wcs_length - 1] = '\0';
 #endif  // _MSC_VER >= 1400
 
-  *wcs = wcs_c;
-  delete[] wcs_c;
+  *wcs = &wcs_v[0];
+  return true;
+}
+
+// static
+bool WindowsStringUtils::safe_wcstombs(const wstring &wcs, string *mbs) {
+  assert(mbs);
+
+  // First, determine the length of the destination buffer.
+  size_t mbs_length;
+
+#if _MSC_VER >= 1400  // MSVC 2005/8
+  errno_t err;
+  if ((err = wcstombs_s(&mbs_length, NULL, 0, wcs.c_str(), _TRUNCATE)) != 0) {
+    return false;
+  }
+  assert(mbs_length > 0);
+#else  // _MSC_VER >= 1400
+  if ((mbs_length = wcstombs(NULL, wcs.c_str(), wcs.length())) < 0) {
+    return false;
+  }
+
+  // Leave space for the 0-terminator.
+  ++mbs_length;
+#endif  // _MSC_VER >= 1400
+
+  std::vector<char> mbs_v(mbs_length);
+
+  // Now, convert.
+#if _MSC_VER >= 1400  // MSVC 2005/8
+  if ((err = wcstombs_s(NULL, &mbs_v[0], mbs_length, wcs.c_str(),
+                        _TRUNCATE)) != 0) {
+    return false;
+  }
+#else  // _MSC_VER >= 1400
+  if (wcstombs(&mbs_v[0], wcs.c_str(), wcs.length()) < 0) {
+    return false;
+  }
+
+  // Ensure presence of 0-terminator.
+  mbs_v[mbs_length - 1] = '\0';
+#endif  // _MSC_VER >= 1400
+
+  *mbs = &mbs_v[0];
   return true;
 }
 
diff --git a/src/config.h.in b/src/config.h.in
index d290931..c4c1a1a 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -3,42 +3,11 @@
 /* actual length of specific struct sockaddr */
 #undef GET_SA_LEN
 
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
 /* Define if you have POSIX threads libraries and header files. */
 #undef HAVE_PTHREAD
 
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
-#undef LT_OBJDIR
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
 
 /* Name of package */
 #undef PACKAGE
diff --git a/src/google_breakpad/common/minidump_exception_solaris.h b/src/google_breakpad/common/minidump_exception_solaris.h
index d48632a..f18ddf4 100644
--- a/src/google_breakpad/common/minidump_exception_solaris.h
+++ b/src/google_breakpad/common/minidump_exception_solaris.h
@@ -34,7 +34,7 @@
  *
  * Author: Mark Mentovai
  * Split into its own file: Neal Sidhwaney */
- 
+
 
 #ifndef GOOGLE_BREAKPAD_COMMON_MINIDUMP_EXCEPTION_SOLARIS_H__
 #define GOOGLE_BREAKPAD_COMMON_MINIDUMP_EXCEPTION_SOLARIS_H__
@@ -69,7 +69,7 @@
   MD_EXCEPTION_CODE_SOL_SIGPWR = 19,     /* power-fail restart */
   MD_EXCEPTION_CODE_SOL_SIGWINCH = 20,   /* window size change */
   MD_EXCEPTION_CODE_SOL_SIGURG = 21,     /* urgent socket condition */
-  MD_EXCEPTION_CODE_SOL_SIGPOLL = 22,    /* pollable event occured */
+  MD_EXCEPTION_CODE_SOL_SIGPOLL = 22,    /* pollable event occurred */
   MD_EXCEPTION_CODE_SOL_SIGIO = 22,      /* socket I/O possible (SIGPOLL alias) */
   MD_EXCEPTION_CODE_SOL_SIGSTOP = 23,    /* stop (cannot be caught or ignored) */
   MD_EXCEPTION_CODE_SOL_SIGTSTP = 24,    /* user stop requested from tty */
diff --git a/src/google_breakpad/common/minidump_exception_win32.h b/src/google_breakpad/common/minidump_exception_win32.h
index f052401..458a705 100644
--- a/src/google_breakpad/common/minidump_exception_win32.h
+++ b/src/google_breakpad/common/minidump_exception_win32.h
@@ -34,7 +34,7 @@
  *
  * Author: Mark Mentovai
  * Split into its own file: Neal Sidhwaney */
- 
+
 
 #ifndef GOOGLE_BREAKPAD_COMMON_MINIDUMP_EXCEPTION_WIN32_H__
 #define GOOGLE_BREAKPAD_COMMON_MINIDUMP_EXCEPTION_WIN32_H__
@@ -96,10 +96,21 @@
       /* EXCEPTION_STACK_OVERFLOW */
   MD_EXCEPTION_CODE_WIN_POSSIBLE_DEADLOCK        = 0xc0000194,
       /* EXCEPTION_POSSIBLE_DEADLOCK */
+  MD_EXCEPTION_CODE_WIN_STACK_BUFFER_OVERRUN     = 0xc0000409,
+      /* STATUS_STACK_BUFFER_OVERRUN */
+  MD_EXCEPTION_CODE_WIN_HEAP_CORRUPTION          = 0xc0000374,
+      /* STATUS_HEAP_CORRUPTION */
   MD_EXCEPTION_CODE_WIN_UNHANDLED_CPP_EXCEPTION  = 0xe06d7363
       /* Per http://support.microsoft.com/kb/185294,
          generated by Visual C++ compiler */
 } MDExceptionCodeWin;
 
+// These constants are defined in the MSDN documentation of
+// the EXCEPTION_RECORD structure.
+typedef enum {
+  MD_ACCESS_VIOLATION_WIN_READ  = 0,
+  MD_ACCESS_VIOLATION_WIN_WRITE = 1,
+  MD_ACCESS_VIOLATION_WIN_EXEC  = 8
+} MDAccessViolationTypeWin;
 
 #endif  /* GOOGLE_BREAKPAD_COMMON_MINIDUMP_EXCEPTION_WIN32_H__ */
diff --git a/src/google_breakpad/processor/basic_source_line_resolver.h b/src/google_breakpad/processor/basic_source_line_resolver.h
index fe93f4d..f77b3bb 100644
--- a/src/google_breakpad/processor/basic_source_line_resolver.h
+++ b/src/google_breakpad/processor/basic_source_line_resolver.h
@@ -27,59 +27,52 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// BasicSourceLineResolver implements SourceLineResolverInterface, using
-// address map files produced by a compatible writer, e.g. PDBSourceLineWriter.
+// basic_source_line_resolver.h: BasicSourceLineResolver is derived from
+// SourceLineResolverBase, and is a concrete implementation of
+// SourceLineResolverInterface, using address map files produced by a
+// compatible writer, e.g. PDBSourceLineWriter.
+//
+// see "processor/source_line_resolver_base.h"
+// and "source_line_resolver_interface.h" for more documentation.
 
 #ifndef GOOGLE_BREAKPAD_PROCESSOR_BASIC_SOURCE_LINE_RESOLVER_H__
 #define GOOGLE_BREAKPAD_PROCESSOR_BASIC_SOURCE_LINE_RESOLVER_H__
 
 #include <map>
 
-#include "google_breakpad/processor/source_line_resolver_interface.h"
+#include "google_breakpad/processor/source_line_resolver_base.h"
 
 namespace google_breakpad {
 
 using std::string;
 using std::map;
 
-class BasicSourceLineResolver : public SourceLineResolverInterface {
+class BasicSourceLineResolver : public SourceLineResolverBase {
  public:
   BasicSourceLineResolver();
-  virtual ~BasicSourceLineResolver();
+  virtual ~BasicSourceLineResolver() { }
 
-  // SourceLineResolverInterface methods, see source_line_resolver_interface.h
-  // for more details.
-
-  // Adds a module to this resolver, returning true on success.
-  // The given map_file is read into memory, and its symbols will be
-  // retained until the BasicSourceLineResolver is destroyed.
-  virtual bool LoadModule(const CodeModule *module, const string &map_file);
-
-  // Exactly the same as above, except the given map_buffer is used
-  // for symbols. 
-  virtual bool LoadModuleUsingMapBuffer(const CodeModule *module,
-                                        const string &map_buffer);
-
-  void UnloadModule(const CodeModule *module);
-  virtual bool HasModule(const CodeModule *module);
-  virtual void FillSourceLineInfo(StackFrame *frame);
-  virtual WindowsFrameInfo *FindWindowsFrameInfo(const StackFrame *frame);
-  virtual CFIFrameInfo *FindCFIFrameInfo(const StackFrame *frame);
+  using SourceLineResolverBase::LoadModule;
+  using SourceLineResolverBase::LoadModuleUsingMapBuffer;
+  using SourceLineResolverBase::LoadModuleUsingMemoryBuffer;
+  using SourceLineResolverBase::ShouldDeleteMemoryBufferAfterLoadModule;
+  using SourceLineResolverBase::UnloadModule;
+  using SourceLineResolverBase::HasModule;
+  using SourceLineResolverBase::FillSourceLineInfo;
+  using SourceLineResolverBase::FindWindowsFrameInfo;
+  using SourceLineResolverBase::FindCFIFrameInfo;
 
  private:
-  template<class T> class MemAddrMap;
-  struct Line;
-  struct Function;
-  struct PublicSymbol;
-  struct File;
-  struct CompareString {
-    bool operator()(const string &s1, const string &s2) const;
-  };
-  class Module;
+  // friend declarations:
+  friend class BasicModuleFactory;
+  friend class ModuleComparer;
+  friend class ModuleSerializer;
+  template<class> friend class SimpleSerializer;
 
-  // All of the modules we've loaded
-  typedef map<string, Module*, CompareString> ModuleMap;
-  ModuleMap *modules_;
+  // Function derives from SourceLineResolverBase::Function.
+  struct Function;
+  // Module implements SourceLineResolverBase::Module interface.
+  class Module;
 
   // Disallow unwanted copy ctor and assignment operator
   BasicSourceLineResolver(const BasicSourceLineResolver&);
diff --git a/src/google_breakpad/processor/exploitability.h b/src/google_breakpad/processor/exploitability.h
new file mode 100644
index 0000000..225206d
--- /dev/null
+++ b/src/google_breakpad/processor/exploitability.h
@@ -0,0 +1,73 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// exploitability_engine.h: Generic exploitability engine.
+//
+// The Exploitability class is an abstract base class providing common
+// generic methods that apply to exploitability engines for specific platforms.
+// Specific implementations will extend this class by providing run
+// methods to fill in the exploitability_ enumeration of the ProcessState
+// for a crash.
+//
+// Author: Cris Neckar
+
+#ifndef GOOGLE_BREAKPAD_PROCESSOR_EXPLOITABILITY_H_
+#define GOOGLE_BREAKPAD_PROCESSOR_EXPLOITABILITY_H_
+
+#include "google_breakpad/common/breakpad_types.h"
+#include "google_breakpad/processor/minidump.h"
+#include "google_breakpad/processor/process_state.h"
+
+namespace google_breakpad {
+
+class Exploitability {
+ public:
+  virtual ~Exploitability() {}
+
+  static Exploitability *ExploitabilityForPlatform(Minidump *dump,
+                                                   ProcessState *process_state);
+
+  ExploitabilityRating CheckExploitability();
+  bool AddressIsAscii(u_int64_t);
+
+ protected:
+  Exploitability(Minidump *dump,
+                 ProcessState *process_state);
+
+  Minidump *dump_;
+  ProcessState *process_state_;
+  SystemInfo *system_info_;
+
+ private:
+  virtual ExploitabilityRating CheckPlatformExploitability() = 0;
+};
+
+}  // namespace google_breakpad
+
+#endif  // GOOGLE_BREAKPAD_PROCESSOR_EXPLOITABILITY_H_
diff --git a/src/google_breakpad/processor/fast_source_line_resolver.h b/src/google_breakpad/processor/fast_source_line_resolver.h
new file mode 100644
index 0000000..60f6dfc
--- /dev/null
+++ b/src/google_breakpad/processor/fast_source_line_resolver.h
@@ -0,0 +1,99 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// fast_source_line_resolver.h: FastSourceLineResolver is derived from
+// SourceLineResolverBase, and is a concrete implementation of
+// SourceLineResolverInterface.
+//
+// FastSourceLineResolver is a sibling class of BasicSourceLineResolver.  The
+// difference is FastSourceLineResolver loads a serialized memory chunk of data
+// which can be used directly a Module without parsing or copying of underlying
+// data.  Therefore loading a symbol in FastSourceLineResolver is much faster
+// and more memory-efficient than BasicSourceLineResolver.
+//
+// See "source_line_resolver_base.h" and
+// "google_breakpad/source_line_resolver_interface.h" for more reference.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef GOOGLE_BREAKPAD_PROCESSOR_FAST_SOURCE_LINE_RESOLVER_H__
+#define GOOGLE_BREAKPAD_PROCESSOR_FAST_SOURCE_LINE_RESOLVER_H__
+
+#include <map>
+#include <string>
+
+#include "google_breakpad/processor/source_line_resolver_base.h"
+
+namespace google_breakpad {
+
+using std::map;
+
+class FastSourceLineResolver : public SourceLineResolverBase {
+ public:
+  FastSourceLineResolver();
+  virtual ~FastSourceLineResolver() { }
+
+  using SourceLineResolverBase::FillSourceLineInfo;
+  using SourceLineResolverBase::FindCFIFrameInfo;
+  using SourceLineResolverBase::FindWindowsFrameInfo;
+  using SourceLineResolverBase::HasModule;
+  using SourceLineResolverBase::LoadModule;
+  using SourceLineResolverBase::LoadModuleUsingMapBuffer;
+  using SourceLineResolverBase::LoadModuleUsingMemoryBuffer;
+  using SourceLineResolverBase::UnloadModule;
+
+ private:
+  // Friend declarations.
+  friend class ModuleComparer;
+  friend class ModuleSerializer;
+  friend class FastModuleFactory;
+
+  // Nested types that will derive from corresponding nested types defined in
+  // SourceLineResolverBase.
+  struct Line;
+  struct Function;
+  struct PublicSymbol;
+  class Module;
+
+  // Deserialize raw memory data to construct a WindowsFrameInfo object.
+  static WindowsFrameInfo CopyWFI(const char *raw_memory);
+
+  // FastSourceLineResolver requires the memory buffer stays alive during the
+  // lifetime of a corresponding module, therefore it needs to redefine this
+  // virtual method.
+  virtual bool ShouldDeleteMemoryBufferAfterLoadModule();
+
+  // Disallow unwanted copy ctor and assignment operator
+  FastSourceLineResolver(const FastSourceLineResolver&);
+  void operator=(const FastSourceLineResolver&);
+};
+
+}  // namespace google_breakpad
+
+#endif  // GOOGLE_BREAKPAD_PROCESSOR_FAST_SOURCE_LINE_RESOLVER_H__
diff --git a/src/google_breakpad/processor/minidump_processor.h b/src/google_breakpad/processor/minidump_processor.h
index 756a868..384c60c 100644
--- a/src/google_breakpad/processor/minidump_processor.h
+++ b/src/google_breakpad/processor/minidump_processor.h
@@ -30,7 +30,7 @@
 #ifndef GOOGLE_BREAKPAD_PROCESSOR_MINIDUMP_PROCESSOR_H__
 #define GOOGLE_BREAKPAD_PROCESSOR_MINIDUMP_PROCESSOR_H__
 
-#include <cassert>
+#include <assert.h>
 #include <string>
 #include "google_breakpad/common/breakpad_types.h"
 
@@ -94,6 +94,14 @@
   // implementation of the SymbolSupplier abstract base class.
   MinidumpProcessor(SymbolSupplier *supplier,
                     SourceLineResolverInterface *resolver);
+
+  // Initializes the MinidumpProcessor with the option of
+  // enabling the exploitability framework to analyze dumps
+  // for probable security relevance.
+  MinidumpProcessor(SymbolSupplier *supplier,
+                    SourceLineResolverInterface *resolver,
+                    bool enable_exploitability);
+
   ~MinidumpProcessor();
 
   // Processes the minidump file and fills process_state with the result.
@@ -149,6 +157,11 @@
  private:
   SymbolSupplier *supplier_;
   SourceLineResolverInterface *resolver_;
+
+  // This flag enables the exploitability scanner which attempts to
+  // guess how likely it is that the crash represents an exploitable
+  // memory corruption issue.
+  bool enable_exploitability_;
 };
 
 }  // namespace google_breakpad
diff --git a/src/google_breakpad/processor/network_source_line_resolver.h b/src/google_breakpad/processor/network_source_line_resolver.h
index f2c7732..138b2f5 100644
--- a/src/google_breakpad/processor/network_source_line_resolver.h
+++ b/src/google_breakpad/processor/network_source_line_resolver.h
@@ -37,8 +37,8 @@
 // An implementation of the server side of the protocol is provided there
 // as NetworkSourceLineServer.
 
-#ifndef GOOGLE_BREAKPAD_PROCESSOR_NETWORK_SOURCE_LINE_RESOLVER_H_
-#define GOOGLE_BREAKPAD_PROCESSOR_NETWORK_SOURCE_LINE_RESOLVER_H_
+#ifndef GOOGLE_BREAKPAD_PROCESSOR_NETWORK_SOURCE_LINE_RESOLVER_H__
+#define GOOGLE_BREAKPAD_PROCESSOR_NETWORK_SOURCE_LINE_RESOLVER_H__
 
 #include <sys/socket.h>
 
@@ -81,6 +81,12 @@
   virtual bool LoadModule(const CodeModule *module, const string &map_file);
   virtual bool LoadModuleUsingMapBuffer(const CodeModule *module,
                                         const string &map_buffer);
+  virtual bool LoadModuleUsingMemoryBuffer(const CodeModule *module,
+                                           char *memory_buffer);
+
+  // It doesn't matter whether returns true or false, since no memory buffer
+  // will be allocated in GetCStringSymbolData().
+  virtual bool ShouldDeleteMemoryBufferAfterLoadModule() { return true; }
 
   void UnloadModule(const CodeModule *module);
 
@@ -104,6 +110,16 @@
                                      const SystemInfo *system_info,
                                      string *symbol_file,
                                      string *symbol_data);
+  // Similar as the above GetSymbolFile() method, see the comment above.
+  virtual SymbolResult GetCStringSymbolData(const CodeModule *module,
+                                            const SystemInfo *system_info,
+                                            string *symbol_file,
+                                            char **symbol_data);
+
+  // Delete the data buffer allocated in GetCStringSymbolData().
+  // Since the above GetCStringSymbolData() won't allocate any memory at all,
+  // this method is no-op.
+  virtual void FreeSymbolData(const CodeModule *module) { }
 
  private:
   int wait_milliseconds_;
@@ -165,4 +181,4 @@
 
 }  // namespace google_breakpad
 
-#endif  // GOOGLE_BREAKPAD_PROCESSOR_NETWORK_SOURCE_LINE_RESOLVER_H_
+#endif  // GOOGLE_BREAKPAD_PROCESSOR_NETWORK_SOURCE_LINE_RESOLVER_H__
diff --git a/src/google_breakpad/processor/process_state.h b/src/google_breakpad/processor/process_state.h
index 2301422..f3f2ec4 100644
--- a/src/google_breakpad/processor/process_state.h
+++ b/src/google_breakpad/processor/process_state.h
@@ -48,6 +48,42 @@
 class CallStack;
 class CodeModules;
 
+enum ExploitabilityRating {
+  EXPLOITABILITY_HIGH,                    // The crash likely represents
+                                          // a exploitable memory corruption
+                                          // vulnerability.
+
+  EXPLOITABLITY_MEDIUM,                   // The crash appears to corrupt
+                                          // memory in a way which may be
+                                          // exploitable in some situations.
+
+  EXPLOITABILITY_LOW,                     // The crash either does not corrupt
+                                          // memory directly or control over
+                                          // the effected data is limited. The
+                                          // issue may still be exploitable
+                                          // on certain platforms or situations.
+
+  EXPLOITABILITY_INTERESTING,             // The crash does not appear to be
+                                          // directly exploitable. However it
+                                          // represents a condition which should
+                                          // be furthur analyzed.
+
+  EXPLOITABILITY_NONE,                    // The crash does not appear to represent
+                                          // an exploitable condition.
+
+  EXPLOITABILITY_NOT_ANALYZED,            // The crash was not analyzed for
+                                          // exploitability because the engine
+                                          // was disabled.
+
+  EXPLOITABILITY_ERR_NOENGINE,            // The supplied minidump's platform does
+                                          // not have a exploitability engine
+                                          // associated with it.
+
+  EXPLOITABILITY_ERR_PROCESSING           // An error occured within the
+                                          // exploitability engine and no rating
+                                          // was calculated.
+};
+
 class ProcessState {
  public:
   ProcessState() : modules_(NULL) { Clear(); }
@@ -69,6 +105,7 @@
   }
   const SystemInfo* system_info() const { return &system_info_; }
   const CodeModules* modules() const { return modules_; }
+  ExploitabilityRating exploitability() const { return exploitability_; }
 
  private:
   // MinidumpProcessor is responsible for building ProcessState objects.
@@ -119,6 +156,11 @@
   // The modules that were loaded into the process represented by the
   // ProcessState.
   const CodeModules *modules_;
+
+  // The exploitability rating as determined by the exploitability
+  // engine. When the exploitability engine is not enabled this
+  // defaults to EXPLOITABILITY_NONE.
+  ExploitabilityRating exploitability_;
 };
 
 }  // namespace google_breakpad
diff --git a/src/google_breakpad/processor/source_line_resolver_base.h b/src/google_breakpad/processor/source_line_resolver_base.h
new file mode 100644
index 0000000..efa76e7
--- /dev/null
+++ b/src/google_breakpad/processor/source_line_resolver_base.h
@@ -0,0 +1,118 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// source_line_resolver_base.h: SourceLineResolverBase, an (incomplete)
+// implementation of SourceLineResolverInterface.  It serves as a common base
+// class for concrete implementations: FastSourceLineResolver and
+// BasicSourceLineResolver.  It is designed for refactoring that removes
+// code redundancy in the two concrete source line resolver classes.
+//
+// See "google_breakpad/processor/source_line_resolver_interface.h" for more
+// documentation.
+
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef GOOGLE_BREAKPAD_PROCESSOR_SOURCE_LINE_RESOLVER_BASE_H__
+#define GOOGLE_BREAKPAD_PROCESSOR_SOURCE_LINE_RESOLVER_BASE_H__
+
+#include <map>
+#include <string>
+
+#include "google_breakpad/processor/source_line_resolver_interface.h"
+
+namespace google_breakpad {
+
+using std::map;
+
+// Forward declaration.
+// ModuleFactory is a simple factory interface for creating a Module instance
+// at run-time.
+class ModuleFactory;
+
+class SourceLineResolverBase : public SourceLineResolverInterface {
+ public:
+  // Read the symbol_data from a file with given file_name.
+  // The part of code was originally in BasicSourceLineResolver::Module's
+  // LoadMap() method.
+  // Place dynamically allocated heap buffer in symbol_data. Caller has the
+  // ownership of the buffer, and should call delete [] to free the buffer.
+  static bool ReadSymbolFile(char **symbol_data, const string &file_name);
+
+ protected:
+  // Users are not allowed create SourceLineResolverBase instance directly.
+  SourceLineResolverBase(ModuleFactory *module_factory);
+  virtual ~SourceLineResolverBase();
+
+  // Virtual methods inherited from SourceLineResolverInterface.
+  virtual bool LoadModule(const CodeModule *module, const string &map_file);
+  virtual bool LoadModuleUsingMapBuffer(const CodeModule *module,
+                                        const string &map_buffer);
+  virtual bool LoadModuleUsingMemoryBuffer(const CodeModule *module,
+                                           char *memory_buffer);
+  virtual bool ShouldDeleteMemoryBufferAfterLoadModule();
+  virtual void UnloadModule(const CodeModule *module);
+  virtual bool HasModule(const CodeModule *module);
+  virtual void FillSourceLineInfo(StackFrame *frame);
+  virtual WindowsFrameInfo *FindWindowsFrameInfo(const StackFrame *frame);
+  virtual CFIFrameInfo *FindCFIFrameInfo(const StackFrame *frame);
+
+  // Nested structs and classes.
+  struct Line;
+  struct Function;
+  struct PublicSymbol;
+  struct CompareString {
+    bool operator()(const string &s1, const string &s2) const;
+  };
+  // Module is an interface for an in-memory symbol file.
+  class Module;
+  class AutoFileCloser;
+
+  // All of the modules that are loaded.
+  typedef map<string, Module*, CompareString> ModuleMap;
+  ModuleMap *modules_;
+
+  // All of heap-allocated buffers that are owned locally by resolver.
+  typedef std::map<string, char*, CompareString> MemoryMap;
+  MemoryMap *memory_buffers_;
+
+  // Creates a concrete module at run-time.
+  ModuleFactory *module_factory_;
+
+ private:
+  // ModuleFactory needs to have access to protected type Module.
+  friend class ModuleFactory;
+
+  // Disallow unwanted copy ctor and assignment operator
+  SourceLineResolverBase(const SourceLineResolverBase&);
+  void operator=(const SourceLineResolverBase&);
+};
+
+}  // namespace google_breakpad
+
+#endif  // GOOGLE_BREAKPAD_PROCESSOR_SOURCE_LINE_RESOLVER_BASE_H__
diff --git a/src/google_breakpad/processor/source_line_resolver_interface.h b/src/google_breakpad/processor/source_line_resolver_interface.h
index fa45d75..103f979 100644
--- a/src/google_breakpad/processor/source_line_resolver_interface.h
+++ b/src/google_breakpad/processor/source_line_resolver_interface.h
@@ -64,6 +64,18 @@
   virtual bool LoadModuleUsingMapBuffer(const CodeModule *module,
                                         const string &map_buffer) = 0;
 
+  // Add an interface to load symbol using C-String data insteading string.
+  // This is useful in the optimization design for avoiding unnecessary copying
+  // of symbol data, in order to improve memory efficiency.
+  // LoadModuleUsingMemoryBuffer() does NOT take ownership of memory_buffer.
+  virtual bool LoadModuleUsingMemoryBuffer(const CodeModule *module,
+                                           char *memory_buffer) = 0;
+
+  // Return true if the memory buffer should be deleted immediately after
+  // LoadModuleUsingMemoryBuffer(). Return false if the memory buffer has to be
+  // alive during the lifetime of the corresponding Module.
+  virtual bool ShouldDeleteMemoryBufferAfterLoadModule() = 0;
+
   // Request that the specified module be unloaded from this resolver.
   // A resolver may choose to ignore such a request.
   virtual void UnloadModule(const CodeModule *module) = 0;
@@ -73,7 +85,7 @@
 
   // Fills in the function_base, function_name, source_file_name,
   // and source_line fields of the StackFrame.  The instruction and
-  // module_name fields must already be filled in.  
+  // module_name fields must already be filled in.
   virtual void FillSourceLineInfo(StackFrame *frame) = 0;
 
   // If Windows stack walking information is available covering
@@ -81,7 +93,7 @@
   // describing it. If the information is not available, returns NULL.
   // A NULL return value does not indicate an error. The caller takes
   // ownership of any returned WindowsFrameInfo object.
-  virtual WindowsFrameInfo *FindWindowsFrameInfo(const StackFrame *frame) = 0; 
+  virtual WindowsFrameInfo *FindWindowsFrameInfo(const StackFrame *frame) = 0;
 
   // If CFI stack walking information is available covering ADDRESS,
   // return a CFIFrameInfo structure describing it. If the information
diff --git a/src/google_breakpad/processor/stack_frame.h b/src/google_breakpad/processor/stack_frame.h
index b330f8a..c444993 100644
--- a/src/google_breakpad/processor/stack_frame.h
+++ b/src/google_breakpad/processor/stack_frame.h
@@ -40,6 +40,19 @@
 using std::string;
 
 struct StackFrame {
+  // Indicates how well the instruction pointer derived during
+  // stack walking is trusted. Since the stack walker can resort to
+  // stack scanning, it can wind up with dubious frames.
+  // In rough order of "trust metric".
+  enum FrameTrust {
+    FRAME_TRUST_NONE,     // Unknown
+    FRAME_TRUST_SCAN,     // Scanned the stack, found this
+    FRAME_TRUST_CFI_SCAN, // Scanned the stack using call frame info, found this
+    FRAME_TRUST_FP,       // Derived from frame pointer
+    FRAME_TRUST_CFI,      // Derived from call frame info
+    FRAME_TRUST_CONTEXT   // Given as instruction pointer in a context
+  };
+
   StackFrame()
       : instruction(),
         module(NULL),
@@ -47,9 +60,29 @@
         function_base(),
         source_file_name(),
         source_line(),
-        source_line_base() {}
+        source_line_base(),
+        trust(FRAME_TRUST_NONE) {}
   virtual ~StackFrame() {}
 
+  // Return a string describing how this stack frame was found
+  // by the stackwalker.
+  string trust_description() const {
+    switch (trust) {
+      case StackFrame::FRAME_TRUST_CONTEXT:
+        return "given as instruction pointer in context";
+      case StackFrame::FRAME_TRUST_CFI:
+        return "call frame info";
+      case StackFrame::FRAME_TRUST_CFI_SCAN:
+        return "call frame info with scanning";
+      case StackFrame::FRAME_TRUST_FP:
+        return "previous frame's frame pointer";
+      case StackFrame::FRAME_TRUST_SCAN:
+        return "stack scanning";
+      default:
+        return "unknown";
+    }
+  };
+
   // The program counter location as an absolute virtual address.  For the
   // innermost called frame in a stack, this will be an exact program counter
   // or instruction pointer value.  For all other frames, this will be within
@@ -77,6 +110,10 @@
   // The start address of the source line, may be omitted if debug symbols
   // are not available.
   u_int64_t source_line_base;
+
+  // Amount of trust the stack walker has in the instruction pointer
+  // of this frame.
+  FrameTrust trust;
 };
 
 }  // namespace google_breakpad
diff --git a/src/google_breakpad/processor/stack_frame_cpu.h b/src/google_breakpad/processor/stack_frame_cpu.h
index 0996886..805b6bc 100644
--- a/src/google_breakpad/processor/stack_frame_cpu.h
+++ b/src/google_breakpad/processor/stack_frame_cpu.h
@@ -70,23 +70,9 @@
     CONTEXT_VALID_ALL  = -1
   };
 
-  // Indicates how well we trust the instruction pointer we derived
-  // during stack walking. Since the stack walker can resort to
-  // stack scanning, we can wind up with dubious frames.
-  // In rough order of "trust metric".
-  enum FrameTrust {
-    FRAME_TRUST_NONE,     // Unknown
-    FRAME_TRUST_SCAN,     // Scanned the stack, found this
-    FRAME_TRUST_CFI_SCAN, // Scanned the stack using call frame info, found this
-    FRAME_TRUST_FP,       // Derived from frame pointer
-    FRAME_TRUST_CFI,      // Derived from call frame info
-    FRAME_TRUST_CONTEXT   // Given as instruction pointer in a context
-  };
-
  StackFrameX86()
      : context(),
        context_validity(CONTEXT_VALID_NONE),
-       trust(FRAME_TRUST_NONE),
        windows_frame_info(NULL),
        cfi_frame_info(NULL) {}
   ~StackFrameX86();
@@ -101,10 +87,6 @@
   // the OR operator doesn't work well with enumerated types.  This indicates
   // which fields in context are valid.
   int context_validity;
-  
-  // Amount of trust the stack walker has in the instruction pointer
-  // of this frame.
-  FrameTrust trust;
 
   // Any stack walking information we found describing this.instruction.
   // These may be NULL if there is no such information for that address.
diff --git a/src/google_breakpad/processor/stackwalker.h b/src/google_breakpad/processor/stackwalker.h
index 3abcee7..6822f16 100644
--- a/src/google_breakpad/processor/stackwalker.h
+++ b/src/google_breakpad/processor/stackwalker.h
@@ -44,13 +44,12 @@
 #include <set>
 #include <string>
 #include "google_breakpad/common/breakpad_types.h"
+#include "google_breakpad/processor/code_modules.h"
+#include "google_breakpad/processor/memory_region.h"
 
 namespace google_breakpad {
 
 class CallStack;
-class CodeModule;
-class CodeModules;
-class MemoryRegion;
 class MinidumpContext;
 class SourceLineResolverInterface;
 struct StackFrame;
@@ -80,6 +79,9 @@
                                         SymbolSupplier *supplier,
                                         SourceLineResolverInterface *resolver);
 
+  static void set_max_frames(u_int32_t max_frames) { max_frames_ = max_frames; }
+  static u_int32_t max_frames() { return max_frames_; }
+
  protected:
   // system_info identifies the operating system, NULL or empty if unknown.
   // memory identifies a MemoryRegion that provides the stack memory
@@ -106,6 +108,39 @@
   // Returns false otherwise.
   bool InstructionAddressSeemsValid(u_int64_t address);
 
+  // Scan the stack starting at location_start, looking for an address
+  // that looks like a valid instruction pointer. Addresses must
+  // 1) be contained in the current stack memory
+  // 2) pass the checks in InstructionAddressSeemsValid
+  //
+  // Returns true if a valid-looking instruction pointer was found.
+  // When returning true, sets location_found to the address at which
+  // the value was found, and ip_found to the value contained at that
+  // location in memory.
+  template<typename InstructionType>
+  bool ScanForReturnAddress(InstructionType location_start,
+                            InstructionType *location_found,
+                            InstructionType *ip_found) {
+    const int kRASearchWords = 30;
+    for (InstructionType location = location_start;
+         location <= location_start + kRASearchWords * sizeof(InstructionType);
+         location += sizeof(InstructionType)) {
+      InstructionType ip;
+      if (!memory_->GetMemoryAtAddress(location, &ip))
+        break;
+
+      if (modules_ && modules_->GetModuleForAddress(ip) &&
+          InstructionAddressSeemsValid(ip)) {
+
+        *ip_found = ip;
+        *location_found = location;
+        return true;
+      }
+    }
+    // nothing found
+    return false;
+  }
+
   // Information about the system that produced the minidump.  Subclasses
   // and the SymbolSupplier may find this information useful.
   const SystemInfo *system_info_;
@@ -146,6 +181,10 @@
   // this in order to avoid repeatedly looking them up again within
   // one minidump.
   set<std::string> no_symbol_modules_;
+
+  // The maximum number of frames Stackwalker will walk through.
+  // This defaults to 1024 to prevent infinite loops.
+  static u_int32_t max_frames_;
 };
 
 
diff --git a/src/google_breakpad/processor/symbol_supplier.h b/src/google_breakpad/processor/symbol_supplier.h
index 7b9d00e..26f5d7f 100644
--- a/src/google_breakpad/processor/symbol_supplier.h
+++ b/src/google_breakpad/processor/symbol_supplier.h
@@ -75,6 +75,22 @@
                                      const SystemInfo *system_info,
                                      string *symbol_file,
                                      string *symbol_data) = 0;
+
+  // Same as above, except allocates data buffer on heap and then places the
+  // symbol data into the buffer as C-string.
+  // SymbolSupplier is responsible for deleting the data buffer. After the call
+  // to GetCStringSymbolData(), the caller should call FreeSymbolData(const
+  // Module *module) once the data buffer is no longer needed.
+  // If symbol_data is not NULL, symbol supplier won't return FOUND unless it
+  // returns a valid buffer in symbol_data, e.g., returns INTERRUPT on memory
+  // allocation failure.
+  virtual SymbolResult GetCStringSymbolData(const CodeModule *module,
+                                            const SystemInfo *system_info,
+                                            string *symbol_file,
+                                            char **symbol_data) = 0;
+
+  // Frees the data buffer allocated for the module in GetCStringSymbolData.
+  virtual void FreeSymbolData(const CodeModule *module) = 0;
 };
 
 }  // namespace google_breakpad
diff --git a/src/processor/address_map-inl.h b/src/processor/address_map-inl.h
index d88b4fc..251c447 100644
--- a/src/processor/address_map-inl.h
+++ b/src/processor/address_map-inl.h
@@ -36,9 +36,10 @@
 #ifndef PROCESSOR_ADDRESS_MAP_INL_H__
 #define PROCESSOR_ADDRESS_MAP_INL_H__
 
-#include <cassert>
-
 #include "processor/address_map.h"
+
+#include <assert.h>
+
 #include "processor/logging.h"
 
 namespace google_breakpad {
diff --git a/src/processor/address_map.h b/src/processor/address_map.h
index 14139e7..2972cbb 100644
--- a/src/processor/address_map.h
+++ b/src/processor/address_map.h
@@ -42,6 +42,9 @@
 
 namespace google_breakpad {
 
+// Forward declarations (for later friend declarations).
+template<class, class> class AddressMapSerializer;
+
 template<typename AddressType, typename EntryType>
 class AddressMap {
  public:
@@ -65,6 +68,9 @@
   void Clear();
 
  private:
+  friend class AddressMapSerializer<AddressType, EntryType>;
+  friend class ModuleComparer;
+
   // Convenience types.
   typedef std::map<AddressType, EntryType> AddressToEntryMap;
   typedef typename AddressToEntryMap::const_iterator MapConstIterator;
@@ -77,4 +83,3 @@
 }  // namespace google_breakpad
 
 #endif  // PROCESSOR_ADDRESS_MAP_H__
-
diff --git a/src/processor/address_map_unittest.cc b/src/processor/address_map_unittest.cc
index f64a898..9b4095b 100644
--- a/src/processor/address_map_unittest.cc
+++ b/src/processor/address_map_unittest.cc
@@ -31,8 +31,8 @@
 //
 // Author: Mark Mentovai
 
-#include <climits>
-#include <cstdio>
+#include <limits.h>
+#include <stdio.h>
 
 #include "processor/address_map-inl.h"
 #include "processor/linked_ptr.h"
diff --git a/src/processor/basic_code_modules.cc b/src/processor/basic_code_modules.cc
index a21491c..63da899 100644
--- a/src/processor/basic_code_modules.cc
+++ b/src/processor/basic_code_modules.cc
@@ -34,9 +34,10 @@
 //
 // Author: Mark Mentovai
 
-#include <cassert>
-
 #include "processor/basic_code_modules.h"
+
+#include <assert.h>
+
 #include "google_breakpad/processor/code_module.h"
 #include "processor/linked_ptr.h"
 #include "processor/logging.h"
diff --git a/src/processor/basic_source_line_resolver.cc b/src/processor/basic_source_line_resolver.cc
index 98d94a9..ff57140 100644
--- a/src/processor/basic_source_line_resolver.cc
+++ b/src/processor/basic_source_line_resolver.cc
@@ -26,6 +26,12 @@
 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// basic_source_line_resolver.cc: BasicSourceLineResolver implementation.
+//
+// See basic_source_line_resolver.h and basic_source_line_resolver_types.h
+// for documentation.
+
 
 #include <stdio.h>
 #include <string.h>
@@ -37,17 +43,10 @@
 #include <utility>
 #include <vector>
 
-#include "processor/address_map-inl.h"
-#include "processor/contained_range_map-inl.h"
-#include "processor/range_map-inl.h"
-
 #include "google_breakpad/processor/basic_source_line_resolver.h"
-#include "google_breakpad/processor/code_module.h"
-#include "google_breakpad/processor/stack_frame.h"
-#include "processor/cfi_frame_info.h"
-#include "processor/linked_ptr.h"
-#include "processor/scoped_ptr.h"
-#include "processor/windows_frame_info.h"
+#include "processor/basic_source_line_resolver_types.h"
+#include "processor/module_factory.h"
+
 #include "processor/tokenize.h"
 
 using std::map;
@@ -58,297 +57,28 @@
 
 static const char *kWhitespace = " \r\n";
 
-struct BasicSourceLineResolver::Line {
-  Line(MemAddr addr, MemAddr code_size, int file_id, int source_line)
-      : address(addr)
-      , size(code_size)
-      , source_file_id(file_id)
-      , line(source_line) { }
+BasicSourceLineResolver::BasicSourceLineResolver() :
+    SourceLineResolverBase(new BasicModuleFactory) { }
 
-  MemAddr address;
-  MemAddr size;
-  int source_file_id;
-  int line;
-};
-
-struct BasicSourceLineResolver::Function {
-  Function(const string &function_name,
-           MemAddr function_address,
-           MemAddr code_size,
-           int set_parameter_size)
-      : name(function_name), address(function_address), size(code_size),
-        parameter_size(set_parameter_size) { }
-
-  string name;
-  MemAddr address;
-  MemAddr size;
-
-  // The size of parameters passed to this function on the stack.
-  int parameter_size;
-
-  RangeMap< MemAddr, linked_ptr<Line> > lines;
-};
-
-struct BasicSourceLineResolver::PublicSymbol {
-  PublicSymbol(const string& set_name,
-               MemAddr set_address,
-               int set_parameter_size)
-      : name(set_name),
-        address(set_address),
-        parameter_size(set_parameter_size) {}
-
-  string name;
-  MemAddr address;
-
-  // If the public symbol is used as a function entry point, parameter_size
-  // is set to the size of the parameters passed to the funciton on the
-  // stack, if known.
-  int parameter_size;
-};
-
-class BasicSourceLineResolver::Module {
- public:
-  Module(const string &name) : name_(name) { }
-
-  // Loads the given map file, returning true on success.  Reads the
-  // map file into memory and calls LoadMapFromBuffer
-  bool LoadMap(const string &map_file);
-
-  // Loads a map from the given buffer, returning true on success
-  bool LoadMapFromBuffer(const string &map_buffer);
-
-  // Looks up the given relative address, and fills the StackFrame struct
-  // with the result.
-  void LookupAddress(StackFrame *frame) const;
-
-  // If Windows stack walking information is available covering ADDRESS,
-  // return a WindowsFrameInfo structure describing it. If the information
-  // is not available, returns NULL. A NULL return value does not indicate
-  // an error. The caller takes ownership of any returned WindowsFrameInfo
-  // object.
-  WindowsFrameInfo *FindWindowsFrameInfo(const StackFrame *frame) const;
-
-  // If CFI stack walking information is available covering ADDRESS,
-  // return a CFIFrameInfo structure describing it. If the information
-  // is not available, return NULL. The caller takes ownership of any
-  // returned CFIFrameInfo object.
-  CFIFrameInfo *FindCFIFrameInfo(const StackFrame *frame) const;
-
- private:
-  friend class BasicSourceLineResolver;
-  typedef map<int, string> FileMap;
-
-  // Parses a file declaration
-  bool ParseFile(char *file_line);
-
-  // Parses a function declaration, returning a new Function object.
-  Function* ParseFunction(char *function_line);
-
-  // Parses a line declaration, returning a new Line object.
-  Line* ParseLine(char *line_line);
-
-  // Parses a PUBLIC symbol declaration, storing it in public_symbols_.
-  // Returns false if an error occurs.
-  bool ParsePublicSymbol(char *public_line);
-
-  // Parses a STACK WIN or STACK CFI frame info declaration, storing
-  // it in the appropriate table.
-  bool ParseStackInfo(char *stack_info_line);
-
-  // Parses a STACK CFI record, storing it in cfi_frame_info_.
-  bool ParseCFIFrameInfo(char *stack_info_line);
-
-  // Parse RULE_SET, a series of rules of the sort appearing in STACK
-  // CFI records, and store the given rules in FRAME_INFO.
-  bool ParseCFIRuleSet(const string &rule_set, CFIFrameInfo *frame_info) const;
-
-  string name_;
-  FileMap files_;
-  RangeMap< MemAddr, linked_ptr<Function> > functions_;
-  AddressMap< MemAddr, linked_ptr<PublicSymbol> > public_symbols_;
-
-  // Each element in the array is a ContainedRangeMap for a type
-  // listed in WindowsFrameInfoTypes. These are split by type because
-  // there may be overlaps between maps of different types, but some
-  // information is only available as certain types.
-  ContainedRangeMap< MemAddr, linked_ptr<WindowsFrameInfo> >
-    windows_frame_info_[WindowsFrameInfo::STACK_INFO_LAST];
-
-  // DWARF CFI stack walking data. The Module stores the initial rule sets
-  // and rule deltas as strings, just as they appear in the symbol file:
-  // although the file may contain hundreds of thousands of STACK CFI
-  // records, walking a stack will only ever use a few of them, so it's
-  // best to delay parsing a record until it's actually needed.
-
-  // STACK CFI INIT records: for each range, an initial set of register
-  // recovery rules. The RangeMap's itself gives the starting and ending
-  // addresses.
-  RangeMap<MemAddr, string> cfi_initial_rules_;
-
-  // STACK CFI records: at a given address, the changes to the register
-  // recovery rules that take effect at that address. The map key is the
-  // starting address; the ending address is the key of the next entry in
-  // this map, or the end of the range as given by the cfi_initial_rules_
-  // entry (which FindCFIFrameInfo looks up first).
-  map<MemAddr, string> cfi_delta_rules_;
-};
-
-BasicSourceLineResolver::BasicSourceLineResolver() : modules_(new ModuleMap) {
-}
-
-BasicSourceLineResolver::~BasicSourceLineResolver() {
-  ModuleMap::iterator it;
-  for (it = modules_->begin(); it != modules_->end(); ++it) {
-    delete it->second;
-  }
-  delete modules_;
-}
-
-bool BasicSourceLineResolver::LoadModule(const CodeModule *module,
-                                         const string &map_file) {
-  if (module == NULL)
-    return false;
-
-  // Make sure we don't already have a module with the given name.
-  if (modules_->find(module->code_file()) != modules_->end()) {
-    BPLOG(INFO) << "Symbols for module " << module->code_file()
-                << " already loaded";
-    return false;
-  }
-
-  BPLOG(INFO) << "Loading symbols for module " << module->code_file()
-              << " from " << map_file;
-
-  Module *basic_module = new Module(module->code_file());
-  if (!basic_module->LoadMap(map_file)) {
-    delete basic_module;
-    return false;
-  }
-
-  modules_->insert(make_pair(module->code_file(), basic_module));
-  return true;
-}
-
-bool BasicSourceLineResolver::LoadModuleUsingMapBuffer(
-    const CodeModule *module,
-    const string &map_buffer) {
-  if (!module)
-    return false;
-
-  // Make sure we don't already have a module with the given name.
-  if (modules_->find(module->code_file()) != modules_->end()) {
-    BPLOG(INFO) << "Symbols for module " << module->code_file()
-                << " already loaded";
-    return false;
-  }
-
-  BPLOG(INFO) << "Loading symbols for module " << module->code_file()
-              << " from buffer";
-
-  Module *basic_module = new Module(module->code_file());
-  if (!basic_module->LoadMapFromBuffer(map_buffer)) {
-    delete basic_module;
-    return false;
-  }
-
-  modules_->insert(make_pair(module->code_file(), basic_module));
-  return true;
-}
-
-void BasicSourceLineResolver::UnloadModule(const CodeModule *module)
-{
-  if (!module)
-    return;
-
-  ModuleMap::iterator iter = modules_->find(module->code_file());
-  if (iter != modules_->end()) {
-    modules_->erase(iter);
-  }
-}
-
-bool BasicSourceLineResolver::HasModule(const CodeModule *module) {
-  if (!module)
-    return false;
-  return modules_->find(module->code_file()) != modules_->end();
-}
-
-void BasicSourceLineResolver::FillSourceLineInfo(StackFrame *frame) {
-  if (frame->module) {
-    ModuleMap::const_iterator it = modules_->find(frame->module->code_file());
-    if (it != modules_->end()) {
-      it->second->LookupAddress(frame);
-    }
-  }
-}
-
-WindowsFrameInfo *BasicSourceLineResolver::FindWindowsFrameInfo(
-    const StackFrame *frame) {
-  if (frame->module) {
-    ModuleMap::const_iterator it = modules_->find(frame->module->code_file());
-    if (it != modules_->end()) {
-      return it->second->FindWindowsFrameInfo(frame);
-    }
-  }
-  return NULL;
-}
-
-CFIFrameInfo *BasicSourceLineResolver::FindCFIFrameInfo(
-    const StackFrame *frame) {
-  if (frame->module) {
-    ModuleMap::const_iterator it = modules_->find(frame->module->code_file());
-    if (it != modules_->end()) {
-      return it->second->FindCFIFrameInfo(frame);
-    }
-  }
-  return NULL;
-}
-
-class AutoFileCloser {
- public:
-  AutoFileCloser(FILE *file) : file_(file) {}
-  ~AutoFileCloser() {
-    if (file_)
-      fclose(file_);
-  }
-
- private:
-  FILE *file_;
-};
-
-bool BasicSourceLineResolver::Module::LoadMapFromBuffer(
-    const string &map_buffer) {
+bool BasicSourceLineResolver::Module::LoadMapFromMemory(char *memory_buffer) {
   linked_ptr<Function> cur_func;
   int line_number = 0;
-  const char *map_buffer_c_str = map_buffer.c_str();
   char *save_ptr;
-
-  // set up our input buffer as a c-style string so we
-  // can we use strtok()
-  // have to copy because modifying the result of string::c_str is not
-  // permitted
-  size_t map_buffer_length = strlen(map_buffer_c_str);
+  size_t map_buffer_length = strlen(memory_buffer);
 
   // If the length is 0, we can still pretend we have a symbol file. This is
-  // for scenarios that want to test symbol lookup, but don't necessarily care if
-  // certain modules do not have any information, like system libraries.
+  // for scenarios that want to test symbol lookup, but don't necessarily care
+  // if certain modules do not have any information, like system libraries.
   if (map_buffer_length == 0) {
     return true;
   }
 
-  scoped_array<char> map_buffer_chars(new char[map_buffer_length]);
-  if (map_buffer_chars == NULL) {
-    BPLOG(ERROR) << "Memory allocation of " << map_buffer_length <<
-        " bytes failed";
-    return false;
+  if (memory_buffer[map_buffer_length - 1] == '\n') {
+    memory_buffer[map_buffer_length - 1] = '\0';
   }
 
-  strncpy(map_buffer_chars.get(), map_buffer_c_str, map_buffer_length);
-
-  if (map_buffer_chars[map_buffer_length - 1] == '\n') {
-    map_buffer_chars[map_buffer_length - 1] = '\0';
-  }
   char *buffer;
-  buffer = strtok_r(map_buffer_chars.get(), "\r\n", &save_ptr);
+  buffer = strtok_r(memory_buffer, "\r\n", &save_ptr);
 
   while (buffer != NULL) {
     ++line_number;
@@ -392,6 +122,10 @@
       // be accessed by a SymbolSupplier.
       //
       // MODULE <guid> <age> <filename>
+    } else if (strncmp(buffer, "INFO ", 5) == 0) {
+      // Ignore these as well, they're similarly just for housekeeping.
+      //
+      // INFO CODE_ID <code id> <filename>
     } else {
       if (!cur_func.get()) {
         BPLOG(ERROR) << "Found source line data without a function at " <<
@@ -407,68 +141,11 @@
       cur_func->lines.StoreRange(line->address, line->size,
                                  linked_ptr<Line>(line));
     }
-
     buffer = strtok_r(NULL, "\r\n", &save_ptr);
   }
-
   return true;
 }
 
-bool BasicSourceLineResolver::Module::LoadMap(const string &map_file) {
-  struct stat buf;
-  int error_code = stat(map_file.c_str(), &buf);
-  if (error_code == -1) {
-    string error_string;
-    int error_code = ErrnoString(&error_string);
-    BPLOG(ERROR) << "Could not open " << map_file <<
-        ", error " << error_code << ": " << error_string;
-    return false;
-  }
-
-  off_t file_size = buf.st_size;
-
-  // Allocate memory for file contents, plus a null terminator
-  // since we'll use strtok() on the contents.
-  char *file_buffer = new char[sizeof(char)*file_size + 1];
-
-  if (file_buffer == NULL) {
-    BPLOG(ERROR) << "Could not allocate memory for " << map_file;
-    return false;
-  }
-
-  BPLOG(INFO) << "Opening " << map_file;
-
-  FILE *f = fopen(map_file.c_str(), "rt");
-  if (!f) {
-    string error_string;
-    int error_code = ErrnoString(&error_string);
-    BPLOG(ERROR) << "Could not open " << map_file <<
-        ", error " << error_code << ": " << error_string;
-    delete [] file_buffer;
-    return false;
-  }
-
-  AutoFileCloser closer(f);
-
-  int items_read = 0;
-
-  items_read = fread(file_buffer, 1, file_size, f);
-
-  if (items_read != file_size) {
-    string error_string;
-    int error_code = ErrnoString(&error_string);
-    BPLOG(ERROR) << "Could not slurp " << map_file <<
-        ", error " << error_code << ": " << error_string;
-    delete [] file_buffer;
-    return false;
-  }
-  file_buffer[file_size] = '\0';
-  string map_buffer(file_buffer);
-  delete [] file_buffer;
-
-  return LoadMapFromBuffer(map_buffer);
-}
-
 void BasicSourceLineResolver::Module::LookupAddress(StackFrame *frame) const {
   MemAddr address = frame->instruction - frame->module->base_address();
 
@@ -537,7 +214,7 @@
   linked_ptr<Function> function;
   MemAddr function_base, function_size;
   if (functions_.RetrieveNearestRange(address, &function,
-                                      &function_base, &function_size) && 
+                                      &function_base, &function_size) &&
       address >= function_base && address - function_base < function_size) {
     result->parameter_size = function->parameter_size;
     result->valid |= WindowsFrameInfo::VALID_PARAMETER_SIZE;
@@ -552,7 +229,7 @@
       (!function.get() || public_address > function_base)) {
     result->parameter_size = public_symbol->parameter_size;
   }
-  
+
   return NULL;
 }
 
@@ -590,13 +267,6 @@
   return rules.release();
 }
 
-bool BasicSourceLineResolver::Module::ParseCFIRuleSet(
-    const string &rule_set, CFIFrameInfo *frame_info) const {
-  CFIFrameInfoParseHandler handler(frame_info);
-  CFIRuleParser parser(&handler);
-  return parser.Parse(rule_set);
-}
-
 bool BasicSourceLineResolver::Module::ParseFile(char *file_line) {
   // FILE <id> <filename>
   file_line += 5;  // skip prefix
@@ -756,7 +426,7 @@
     // This record has the form "STACK INIT <address> <size> <rules...>".
     char *address_field = strtok_r(NULL, " \r\n", &cursor);
     if (!address_field) return false;
-    
+
     char *size_field = strtok_r(NULL, " \r\n", &cursor);
     if (!size_field) return false;
 
@@ -778,9 +448,4 @@
   return true;
 }
 
-bool BasicSourceLineResolver::CompareString::operator()(
-    const string &s1, const string &s2) const {
-  return strcmp(s1.c_str(), s2.c_str()) < 0;
-}
-
 }  // namespace google_breakpad
diff --git a/src/processor/basic_source_line_resolver_types.h b/src/processor/basic_source_line_resolver_types.h
new file mode 100644
index 0000000..87b93db
--- /dev/null
+++ b/src/processor/basic_source_line_resolver_types.h
@@ -0,0 +1,161 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// basic_source_line_types.h: definition of nested classes/structs in
+// BasicSourceLineResolver.  It moves the definitions out of
+// basic_source_line_resolver.cc, so that other classes could have access
+// to these private nested types without including basic_source_line_resolver.cc
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_BASIC_SOURCE_LINE_RESOLVER_TYPES_H__
+#define PROCESSOR_BASIC_SOURCE_LINE_RESOLVER_TYPES_H__
+
+#include <map>
+#include <string>
+
+#include "google_breakpad/processor/basic_source_line_resolver.h"
+#include "processor/source_line_resolver_base_types.h"
+
+#include "processor/address_map-inl.h"
+#include "processor/range_map-inl.h"
+#include "processor/contained_range_map-inl.h"
+
+#include "processor/linked_ptr.h"
+#include "processor/scoped_ptr.h"
+#include "google_breakpad/processor/stack_frame.h"
+#include "processor/cfi_frame_info.h"
+#include "processor/windows_frame_info.h"
+
+namespace google_breakpad {
+
+struct
+BasicSourceLineResolver::Function : public SourceLineResolverBase::Function {
+  Function(const string &function_name,
+           MemAddr function_address,
+           MemAddr code_size,
+           int set_parameter_size) : Base(function_name,
+                                          function_address,
+                                          code_size,
+                                          set_parameter_size),
+                                     lines() { }
+  RangeMap< MemAddr, linked_ptr<Line> > lines;
+ private:
+  typedef SourceLineResolverBase::Function Base;
+};
+
+
+class BasicSourceLineResolver::Module : public SourceLineResolverBase::Module {
+ public:
+  explicit Module(const string &name) : name_(name) { }
+  virtual ~Module() { }
+
+  // Loads a map from the given buffer in char* type.
+  // Does NOT have ownership of memory_buffer.
+  virtual bool LoadMapFromMemory(char *memory_buffer);
+
+  // Looks up the given relative address, and fills the StackFrame struct
+  // with the result.
+  virtual void LookupAddress(StackFrame *frame) const;
+
+  // If Windows stack walking information is available covering ADDRESS,
+  // return a WindowsFrameInfo structure describing it. If the information
+  // is not available, returns NULL. A NULL return value does not indicate
+  // an error. The caller takes ownership of any returned WindowsFrameInfo
+  // object.
+  virtual WindowsFrameInfo *FindWindowsFrameInfo(const StackFrame *frame) const;
+
+  // If CFI stack walking information is available covering ADDRESS,
+  // return a CFIFrameInfo structure describing it. If the information
+  // is not available, return NULL. The caller takes ownership of any
+  // returned CFIFrameInfo object.
+  virtual CFIFrameInfo *FindCFIFrameInfo(const StackFrame *frame) const;
+
+ private:
+  // Friend declarations.
+  friend class BasicSourceLineResolver;
+  friend class ModuleComparer;
+  friend class ModuleSerializer;
+
+  typedef std::map<int, string> FileMap;
+
+  // Parses a file declaration
+  bool ParseFile(char *file_line);
+
+  // Parses a function declaration, returning a new Function object.
+  Function* ParseFunction(char *function_line);
+
+  // Parses a line declaration, returning a new Line object.
+  Line* ParseLine(char *line_line);
+
+  // Parses a PUBLIC symbol declaration, storing it in public_symbols_.
+  // Returns false if an error occurs.
+  bool ParsePublicSymbol(char *public_line);
+
+  // Parses a STACK WIN or STACK CFI frame info declaration, storing
+  // it in the appropriate table.
+  bool ParseStackInfo(char *stack_info_line);
+
+  // Parses a STACK CFI record, storing it in cfi_frame_info_.
+  bool ParseCFIFrameInfo(char *stack_info_line);
+
+  string name_;
+  FileMap files_;
+  RangeMap< MemAddr, linked_ptr<Function> > functions_;
+  AddressMap< MemAddr, linked_ptr<PublicSymbol> > public_symbols_;
+
+  // Each element in the array is a ContainedRangeMap for a type
+  // listed in WindowsFrameInfoTypes. These are split by type because
+  // there may be overlaps between maps of different types, but some
+  // information is only available as certain types.
+  ContainedRangeMap< MemAddr, linked_ptr<WindowsFrameInfo> >
+    windows_frame_info_[WindowsFrameInfo::STACK_INFO_LAST];
+
+  // DWARF CFI stack walking data. The Module stores the initial rule sets
+  // and rule deltas as strings, just as they appear in the symbol file:
+  // although the file may contain hundreds of thousands of STACK CFI
+  // records, walking a stack will only ever use a few of them, so it's
+  // best to delay parsing a record until it's actually needed.
+
+  // STACK CFI INIT records: for each range, an initial set of register
+  // recovery rules. The RangeMap's itself gives the starting and ending
+  // addresses.
+  RangeMap<MemAddr, string> cfi_initial_rules_;
+
+  // STACK CFI records: at a given address, the changes to the register
+  // recovery rules that take effect at that address. The map key is the
+  // starting address; the ending address is the key of the next entry in
+  // this map, or the end of the range as given by the cfi_initial_rules_
+  // entry (which FindCFIFrameInfo looks up first).
+  std::map<MemAddr, string> cfi_delta_rules_;
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_BASIC_SOURCE_LINE_RESOLVER_TYPES_H__
diff --git a/src/processor/basic_source_line_resolver_unittest.cc b/src/processor/basic_source_line_resolver_unittest.cc
index 693a5ce..c241ea0 100644
--- a/src/processor/basic_source_line_resolver_unittest.cc
+++ b/src/processor/basic_source_line_resolver_unittest.cc
@@ -27,7 +27,8 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include <cstdio>
+#include <stdio.h>
+
 #include <string>
 
 #include "breakpad_googletest_includes.h"
diff --git a/src/processor/cfi_frame_info.cc b/src/processor/cfi_frame_info.cc
index 135eee2..1ded99d 100644
--- a/src/processor/cfi_frame_info.cc
+++ b/src/processor/cfi_frame_info.cc
@@ -32,10 +32,12 @@
 // cfi_frame_info.cc: Implementation of CFIFrameInfo class.
 // See cfi_frame_info.h for details.
 
-#include <cstring>
+#include "processor/cfi_frame_info.h"
+
+#include <string.h>
+
 #include <sstream>
 
-#include "processor/cfi_frame_info.h"
 #include "processor/postfix_evaluator-inl.h"
 #include "processor/scoped_ptr.h"
 
diff --git a/src/processor/contained_range_map-inl.h b/src/processor/contained_range_map-inl.h
index 5cc498d..4c0ad41 100644
--- a/src/processor/contained_range_map-inl.h
+++ b/src/processor/contained_range_map-inl.h
@@ -36,10 +36,10 @@
 #ifndef PROCESSOR_CONTAINED_RANGE_MAP_INL_H__
 #define PROCESSOR_CONTAINED_RANGE_MAP_INL_H__
 
-
-#include <cassert>
-
 #include "processor/contained_range_map.h"
+
+#include <assert.h>
+
 #include "processor/logging.h"
 
 
diff --git a/src/processor/contained_range_map.h b/src/processor/contained_range_map.h
index f30016f..1015ae8 100644
--- a/src/processor/contained_range_map.h
+++ b/src/processor/contained_range_map.h
@@ -66,6 +66,8 @@
 
 namespace google_breakpad {
 
+// Forward declarations (for later friend declarations of specialized template).
+template<class, class> class ContainedRangeMapSerializer;
 
 template<typename AddressType, typename EntryType>
 class ContainedRangeMap {
@@ -103,6 +105,9 @@
   void Clear();
 
  private:
+  friend class ContainedRangeMapSerializer<AddressType, EntryType>;
+  friend class ModuleComparer;
+
   // AddressToRangeMap stores pointers.  This makes reparenting simpler in
   // StoreRange, because it doesn't need to copy entire objects.
   typedef std::map<AddressType, ContainedRangeMap *> AddressToRangeMap;
diff --git a/src/processor/contained_range_map_unittest.cc b/src/processor/contained_range_map_unittest.cc
index 6b65b4e..e5910da 100644
--- a/src/processor/contained_range_map_unittest.cc
+++ b/src/processor/contained_range_map_unittest.cc
@@ -31,7 +31,7 @@
 //
 // Author: Mark Mentovai
 
-#include <cstdio>
+#include <stdio.h>
 
 #include "processor/contained_range_map-inl.h"
 
diff --git a/src/processor/disassembler_x86.cc b/src/processor/disassembler_x86.cc
new file mode 100644
index 0000000..31af24f
--- /dev/null
+++ b/src/processor/disassembler_x86.cc
@@ -0,0 +1,238 @@
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// disassembler_x86.cc: simple x86 disassembler.
+//
+// Provides single step disassembly of x86 bytecode and flags instructions
+// that utilize known bad register values.
+//
+// Author: Cris Neckar
+
+#include "processor/disassembler_x86.h"
+
+#include <string.h>
+#include <unistd.h>
+
+namespace google_breakpad {
+
+DisassemblerX86::DisassemblerX86(const u_int8_t *bytecode,
+                                 u_int32_t size,
+                                 u_int32_t virtual_address) :
+                                     bytecode_(bytecode),
+                                     size_(size),
+                                     virtual_address_(virtual_address),
+                                     current_byte_offset_(0),
+                                     current_inst_offset_(0),
+                                     instr_valid_(false),
+                                     register_valid_(false),
+                                     pushed_bad_value_(false),
+                                     end_of_block_(false),
+                                     flags_(0) {
+  libdis::x86_init(libdis::opt_none, NULL, NULL);
+}
+
+DisassemblerX86::~DisassemblerX86() {
+  libdis::x86_cleanup();
+}
+
+u_int32_t DisassemblerX86::NextInstruction() {
+  if (instr_valid_)
+    libdis::x86_oplist_free(&current_instr_);
+
+  if (current_byte_offset_ >= size_) {
+    instr_valid_ = false;
+    return 0;
+  }
+  u_int32_t instr_size = 0;
+  instr_size = libdis::x86_disasm((unsigned char *)bytecode_, size_,
+                          virtual_address_, current_byte_offset_,
+                          &current_instr_);
+  if (instr_size == 0) {
+    instr_valid_ = false;
+    return 0;
+  }
+
+  current_byte_offset_ += instr_size;
+  current_inst_offset_++;
+  instr_valid_ = libdis::x86_insn_is_valid(&current_instr_);
+  if (!instr_valid_)
+    return 0;
+
+  if (current_instr_.type == libdis::insn_return)
+    end_of_block_ = true;
+  libdis::x86_op_t *src = libdis::x86_get_src_operand(&current_instr_);
+  libdis::x86_op_t *dest = libdis::x86_get_dest_operand(&current_instr_);
+
+  if (register_valid_) {
+    switch (current_instr_.group) {
+      // Flag branches based off of bad registers and calls that occur
+      // after pushing bad values.
+      case libdis::insn_controlflow:
+        switch (current_instr_.type) {
+          case libdis::insn_jmp:
+          case libdis::insn_jcc:
+          case libdis::insn_call:
+          case libdis::insn_callcc:
+            if (dest) {
+              switch (dest->type) {
+                case libdis::op_expression:
+                  if (dest->data.expression.base.id == bad_register_.id)
+                    flags_ |= DISX86_BAD_BRANCH_TARGET;
+                  break;
+                case libdis::op_register:
+                  if (dest->data.reg.id == bad_register_.id)
+                    flags_ |= DISX86_BAD_BRANCH_TARGET;
+                  break;
+                default:
+                  if (pushed_bad_value_ &&
+                      (current_instr_.type == libdis::insn_call ||
+                      current_instr_.type == libdis::insn_callcc))
+                    flags_ |= DISX86_BAD_ARGUMENT_PASSED;
+                  break;
+              }
+            }
+            break;
+          default:
+            break;
+        }
+        break;
+
+      // Flag block data operations that use bad registers for src or dest.
+      case libdis::insn_string:
+        if (dest && dest->type == libdis::op_expression &&
+            dest->data.expression.base.id == bad_register_.id)
+          flags_ |= DISX86_BAD_BLOCK_WRITE;
+        if (src && src->type == libdis::op_expression &&
+            src->data.expression.base.id == bad_register_.id)
+          flags_ |= DISX86_BAD_BLOCK_READ;
+        break;
+
+      // Flag comparisons based on bad data.
+      case libdis::insn_comparison:
+        if ((dest && dest->type == libdis::op_expression &&
+            dest->data.expression.base.id == bad_register_.id) ||
+            (src && src->type == libdis::op_expression &&
+            src->data.expression.base.id == bad_register_.id) ||
+            (dest && dest->type == libdis::op_register &&
+            dest->data.reg.id == bad_register_.id) ||
+            (src && src->type == libdis::op_register &&
+            src->data.reg.id == bad_register_.id))
+          flags_ |= DISX86_BAD_COMPARISON;
+        break;
+
+      // Flag any other instruction which derefs a bad register for
+      // src or dest.
+      default:
+        if (dest && dest->type == libdis::op_expression &&
+            dest->data.expression.base.id == bad_register_.id)
+          flags_ |= DISX86_BAD_WRITE;
+        if (src && src->type == libdis::op_expression &&
+            src->data.expression.base.id == bad_register_.id)
+          flags_ |= DISX86_BAD_READ;
+        break;
+    }
+  }
+
+  // When a register is marked as tainted check if it is pushed.
+  // TODO(cdn): may also want to check for MOVs into EBP offsets.
+  if (register_valid_ && dest && current_instr_.type == libdis::insn_push) {
+    switch (dest->type) {
+      case libdis::op_expression:
+        if (dest->data.expression.base.id == bad_register_.id ||
+            dest->data.expression.index.id == bad_register_.id)
+          pushed_bad_value_ = true;
+        break;
+      case libdis::op_register:
+        if (dest->data.reg.id == bad_register_.id)
+          pushed_bad_value_ = true;
+        break;
+      default:
+        break;
+    }
+  }
+
+  // Check if a tainted register value is clobbered.
+  // For conditional MOVs and XCHGs assume that
+  // there is a hit.
+  if (register_valid_) {
+    switch (current_instr_.type) {
+      case libdis::insn_xor:
+        if (src && src->type == libdis::op_register &&
+            dest->type == libdis::op_register &&
+            src->data.reg.id == bad_register_.id &&
+            src->data.reg.id == dest->data.reg.id)
+          register_valid_ = false;
+        break;
+      case libdis::insn_pop:
+      case libdis::insn_mov:
+      case libdis::insn_movcc:
+        if (dest && dest->type == libdis::op_register &&
+            dest->data.reg.id == bad_register_.id)
+          register_valid_ = false;
+        break;
+      case libdis::insn_popregs:
+        register_valid_ = false;
+        break;
+      case libdis::insn_xchg:
+      case libdis::insn_xchgcc:
+        if (dest && dest->type == libdis::op_register &&
+            src->type == libdis::op_register) {
+          if (dest->data.reg.id == bad_register_.id)
+            memcpy(&bad_register_, &src->data.reg, sizeof(libdis::x86_reg_t));
+          else if (src->data.reg.id == bad_register_.id)
+            memcpy(&bad_register_, &dest->data.reg, sizeof(libdis::x86_reg_t));
+        }
+        break;
+      default:
+        break;
+    }
+  }
+
+  return instr_size;
+}
+
+bool DisassemblerX86::setBadRead() {
+  if (!instr_valid_)
+    return false;
+
+  libdis::x86_op_t *operand = libdis::x86_get_src_operand(&current_instr_);
+  if (operand->type != libdis::op_expression)
+    return false;
+
+  memcpy(&bad_register_, &operand->data.expression.base,
+         sizeof(libdis::x86_reg_t));
+  register_valid_ = true;
+  return true;
+}
+
+bool DisassemblerX86::setBadWrite() {
+  if (!instr_valid_)
+    return false;
+
+  libdis::x86_op_t *operand = libdis::x86_get_dest_operand(&current_instr_);
+  if (operand->type != libdis::op_expression)
+    return false;
+
+  memcpy(&bad_register_, &operand->data.expression.base,
+         sizeof(libdis::x86_reg_t));
+  register_valid_ = true;
+  return true;
+}
+
+}  // namespace google_breakpad
diff --git a/src/processor/disassembler_x86.h b/src/processor/disassembler_x86.h
new file mode 100644
index 0000000..3eea838
--- /dev/null
+++ b/src/processor/disassembler_x86.h
@@ -0,0 +1,118 @@
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// disassembler_x86.h: Basic x86 bytecode disassembler
+//
+// Provides a simple disassembler which wraps libdisasm. This allows simple
+// tests to be run against bytecode to test for various properties.
+//
+// Author: Cris Neckar
+
+#ifndef GOOGLE_BREAKPAD_PROCESSOR_DISASSEMBLER_X86_H_
+#define GOOGLE_BREAKPAD_PROCESSOR_DISASSEMBLER_X86_H_
+
+#include "google_breakpad/common/breakpad_types.h"
+
+namespace libdis {
+#include "third_party/libdisasm/libdis.h"
+}
+
+namespace google_breakpad {
+
+enum {
+  DISX86_NONE =                 0x0,
+  DISX86_BAD_BRANCH_TARGET =    0x1,
+  DISX86_BAD_ARGUMENT_PASSED =  0x2,
+  DISX86_BAD_WRITE =            0x4,
+  DISX86_BAD_BLOCK_WRITE =      0x8,
+  DISX86_BAD_READ =             0x10,
+  DISX86_BAD_BLOCK_READ =       0x20,
+  DISX86_BAD_COMPARISON =       0x40
+};
+
+class DisassemblerX86 {
+  public:
+    // TODO(cdn): Modify this class to take a MemoryRegion instead of just
+    // a raw buffer. This will make it easier to use this on arbitrary
+    // minidumps without first copying out the code segment.
+    DisassemblerX86(const u_int8_t *bytecode, u_int32_t, u_int32_t);
+    ~DisassemblerX86();
+
+    // This walks to the next instruction in the memory region and
+    // sets flags based on the type of instruction and previous state
+    // including any registers marked as bad through setBadRead()
+    // or setBadWrite(). This method can be called in a loop to
+    // disassemble until the end of a region.
+    u_int32_t NextInstruction();
+
+    // Indicates whether the current disassembled instruction was valid.
+    bool currentInstructionValid() { return instr_valid_; }
+
+    // Returns the type of the current instruction as defined in libdis.h.
+    libdis::x86_insn_group currentInstructionGroup() {
+      return current_instr_.group;
+    }
+
+    // Indicates whether a return instruction has been encountered.
+    bool endOfBlock() { return end_of_block_; }
+
+    // The flags set so far for the disassembly.
+    u_int16_t flags() { return flags_; }
+
+    // This sets an indicator that the register used to determine
+    // src or dest for the current instruction is tainted. These can
+    // be used after examining the current instruction to indicate,
+    // for example that a bad read or write occurred and the pointer
+    // stored in the register is currently invalid.
+    bool setBadRead();
+    bool setBadWrite();
+
+  protected:
+    const u_int8_t *bytecode_;
+    u_int32_t size_;
+    u_int32_t virtual_address_;
+    u_int32_t current_byte_offset_;
+    u_int32_t current_inst_offset_;
+
+    bool instr_valid_;
+    libdis::x86_insn_t current_instr_;
+
+    // TODO(cdn): Maybe also track an expression's index register.
+    // ex: mov eax, [ebx + ecx]; ebx is base, ecx is index.
+    bool register_valid_;
+    libdis::x86_reg_t bad_register_;
+
+    bool pushed_bad_value_;
+    bool end_of_block_;
+
+    u_int16_t flags_;
+};
+
+}  // namespace google_breakpad
+
+#endif  // GOOGLE_BREAKPAD_PROCESSOR_DISASSEMBLER_X86_H_
diff --git a/src/processor/disassembler_x86_unittest.cc b/src/processor/disassembler_x86_unittest.cc
new file mode 100644
index 0000000..cc4754b
--- /dev/null
+++ b/src/processor/disassembler_x86_unittest.cc
@@ -0,0 +1,240 @@
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include <unistd.h>
+
+#include "breakpad_googletest_includes.h"
+#include "processor/disassembler_x86.h"
+#include "third_party/libdisasm/libdis.h"
+
+namespace {
+
+using google_breakpad::DisassemblerX86;
+
+unsigned char just_return[] = "\xc3";  // retn
+
+unsigned char invalid_instruction[] = "\x00";  // invalid
+
+unsigned char read_eax_jmp_eax[] =
+    "\x8b\x18"                  // mov ebx, [eax];
+    "\x33\xc9"                  // xor ebx, ebx;
+    "\xff\x20"                  // jmp eax;
+    "\xc3";                     // retn;
+
+unsigned char write_eax_arg_to_call[] =
+    "\x89\xa8\x00\x02\x00\x00"  // mov [eax+200], ebp;
+    "\xc1\xeb\x02"              // shr ebx, 2;
+    "\x50"                      // push eax;
+    "\xe8\xd1\x24\x77\x88"      // call something;
+    "\xc3";                     // retn;
+
+unsigned char read_edi_stosb[] =
+    "\x8b\x07"                  // mov eax, [edi];
+    "\x8b\xc8"                  // mov ecx, eax;
+    "\xf3\xaa"                  // rep stosb;
+    "\xc3";                     // retn;
+
+unsigned char read_clobber_write[] =
+    "\x03\x18"                  // add ebx, [eax];
+    "\x8b\xc1"                  // mov eax, ecx;
+    "\x89\x10"                  // mov [eax], edx;
+    "\xc3";                     // retn;
+
+unsigned char read_xchg_write[] =
+    "\x03\x18"                  // add ebx, [eax];
+    "\x91"                      // xchg eax, ecx;
+    "\x89\x18"                  // mov [eax], ebx;
+    "\x89\x11"                  // mov [ecx], edx;
+    "\xc3";                     // retn;
+
+unsigned char read_cmp[] =
+    "\x03\x18"                  // add ebx, [eax];
+    "\x83\xf8\x00"              // cmp eax, 0;
+    "\x74\x04"                  // je +4;
+    "\xc3";                     // retn;
+
+TEST(DisassemblerX86Test, SimpleReturnInstruction) {
+  DisassemblerX86 dis(just_return, sizeof(just_return)-1, 0);
+  EXPECT_EQ(1, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(true, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_controlflow, dis.currentInstructionGroup());
+  EXPECT_EQ(0, dis.NextInstruction());
+  EXPECT_EQ(false, dis.currentInstructionValid());
+}
+
+TEST(DisassemblerX86Test, SimpleInvalidInstruction) {
+  DisassemblerX86 dis(invalid_instruction, sizeof(invalid_instruction)-1, 0);
+  EXPECT_EQ(0, dis.NextInstruction());
+  EXPECT_EQ(false, dis.currentInstructionValid());
+}
+
+TEST(DisassemblerX86Test, BadReadLeadsToBranch) {
+  DisassemblerX86 dis(read_eax_jmp_eax, sizeof(read_eax_jmp_eax)-1, 0);
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
+  EXPECT_EQ(true, dis.setBadRead());
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_logic, dis.currentInstructionGroup());
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(google_breakpad::DISX86_BAD_BRANCH_TARGET, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_controlflow, dis.currentInstructionGroup());
+}
+
+TEST(DisassemblerX86Test, BadWriteLeadsToPushedArg) {
+  DisassemblerX86 dis(write_eax_arg_to_call,
+                      sizeof(write_eax_arg_to_call)-1, 0);
+  EXPECT_EQ(6, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
+  EXPECT_EQ(true, dis.setBadWrite());
+  EXPECT_EQ(3, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_arithmetic, dis.currentInstructionGroup());
+  EXPECT_EQ(1, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(5, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(google_breakpad::DISX86_BAD_ARGUMENT_PASSED, dis.flags());
+  EXPECT_EQ(libdis::insn_controlflow, dis.currentInstructionGroup());
+  EXPECT_EQ(false, dis.endOfBlock());
+}
+
+
+TEST(DisassemblerX86Test, BadReadLeadsToBlockWrite) {
+  DisassemblerX86 dis(read_edi_stosb, sizeof(read_edi_stosb)-1, 0);
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
+  EXPECT_EQ(true, dis.setBadRead());
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(google_breakpad::DISX86_BAD_BLOCK_WRITE, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_string, dis.currentInstructionGroup());
+}
+
+TEST(DisassemblerX86Test, BadReadClobberThenWrite) {
+  DisassemblerX86 dis(read_clobber_write, sizeof(read_clobber_write)-1, 0);
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_arithmetic, dis.currentInstructionGroup());
+  EXPECT_EQ(true, dis.setBadRead());
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
+}
+
+TEST(DisassemblerX86Test, BadReadXCHGThenWrite) {
+  DisassemblerX86 dis(read_xchg_write, sizeof(read_xchg_write)-1, 0);
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_arithmetic, dis.currentInstructionGroup());
+  EXPECT_EQ(true, dis.setBadRead());
+  EXPECT_EQ(1, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(google_breakpad::DISX86_BAD_WRITE, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_move, dis.currentInstructionGroup());
+}
+
+TEST(DisassemblerX86Test, BadReadThenCMP) {
+  DisassemblerX86 dis(read_cmp, sizeof(read_cmp)-1, 0);
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(0, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_arithmetic, dis.currentInstructionGroup());
+  EXPECT_EQ(true, dis.setBadRead());
+  EXPECT_EQ(3, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(google_breakpad::DISX86_BAD_COMPARISON, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_comparison, dis.currentInstructionGroup());
+  EXPECT_EQ(2, dis.NextInstruction());
+  EXPECT_EQ(true, dis.currentInstructionValid());
+  EXPECT_EQ(google_breakpad::DISX86_BAD_COMPARISON, dis.flags());
+  EXPECT_EQ(false, dis.endOfBlock());
+  EXPECT_EQ(libdis::insn_controlflow, dis.currentInstructionGroup());
+}
+}
+
diff --git a/src/processor/exploitability.cc b/src/processor/exploitability.cc
new file mode 100644
index 0000000..d8821d4
--- /dev/null
+++ b/src/processor/exploitability.cc
@@ -0,0 +1,104 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// exploitability_engine.cc: Generic exploitability engine.
+//
+// See exploitable_engine.h for documentation.
+//
+// Author: Cris Neckar
+
+
+#include <cassert>
+
+#include "google_breakpad/processor/exploitability.h"
+#include "google_breakpad/processor/minidump.h"
+#include "google_breakpad/processor/process_state.h"
+#include "processor/exploitability_win.h"
+#include "processor/logging.h"
+#include "processor/scoped_ptr.h"
+
+namespace google_breakpad {
+
+Exploitability::Exploitability(Minidump *dump,
+                               ProcessState *process_state)
+    : dump_(dump),
+      process_state_(process_state) {}
+
+ExploitabilityRating Exploitability::CheckExploitability() {
+  return CheckPlatformExploitability();
+}
+
+Exploitability *Exploitability::ExploitabilityForPlatform(
+    Minidump *dump,
+    ProcessState *process_state) {
+  Exploitability *platform_exploitability = NULL;
+  MinidumpSystemInfo *minidump_system_info = dump->GetSystemInfo();
+  if (!minidump_system_info)
+    return NULL;
+
+  const MDRawSystemInfo *raw_system_info =
+    minidump_system_info->system_info();
+  if (!raw_system_info)
+    return NULL;
+
+  switch (raw_system_info->platform_id) {
+    case MD_OS_WIN32_NT:
+    case MD_OS_WIN32_WINDOWS: {
+      platform_exploitability = new ExploitabilityWin(dump,
+                                                      process_state);
+      break;
+    }
+    case MD_OS_MAC_OS_X:
+    case MD_OS_LINUX:
+    case MD_OS_UNIX:
+    case MD_OS_SOLARIS:
+    default: {
+      platform_exploitability = NULL;
+      break;
+    }
+  }
+
+  BPLOG_IF(ERROR, !platform_exploitability) <<
+    "No Exploitability module for platform: " <<
+    process_state->system_info()->os;
+  return platform_exploitability;
+}
+
+bool Exploitability::AddressIsAscii(u_int64_t address) {
+  for (int i = 0; i < 8; i++) {
+    u_int8_t byte = (address >> (8*i)) & 0xff;
+    if ((byte >= ' ' && byte <= '~') || byte == 0)
+      continue;
+    return false;
+  }
+  return true;
+}
+
+}  // namespace google_breakpad
+
diff --git a/src/processor/exploitability_unittest.cc b/src/processor/exploitability_unittest.cc
new file mode 100644
index 0000000..4de6f1d
--- /dev/null
+++ b/src/processor/exploitability_unittest.cc
@@ -0,0 +1,255 @@
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <string>
+
+#include "breakpad_googletest_includes.h"
+#include "google_breakpad/processor/basic_source_line_resolver.h"
+#include "google_breakpad/processor/call_stack.h"
+#include "google_breakpad/processor/code_module.h"
+#include "google_breakpad/processor/code_modules.h"
+#include "google_breakpad/processor/minidump.h"
+#include "google_breakpad/processor/minidump_processor.h"
+#include "google_breakpad/processor/process_state.h"
+#include "google_breakpad/processor/stack_frame.h"
+#include "google_breakpad/processor/symbol_supplier.h"
+
+namespace google_breakpad {
+class MockMinidump : public Minidump {
+ public:
+  MockMinidump() : Minidump("") {
+  }
+
+  MOCK_METHOD0(Read, bool());
+  MOCK_CONST_METHOD0(path, string());
+  MOCK_CONST_METHOD0(header, const MDRawHeader*());
+  MOCK_METHOD0(GetThreadList, MinidumpThreadList*());
+};
+}
+
+namespace {
+
+using google_breakpad::BasicSourceLineResolver;
+using google_breakpad::CallStack;
+using google_breakpad::CodeModule;
+using google_breakpad::MinidumpProcessor;
+using google_breakpad::MinidumpThreadList;
+using google_breakpad::MinidumpThread;
+using google_breakpad::MockMinidump;
+using google_breakpad::ProcessState;
+using google_breakpad::SymbolSupplier;
+using google_breakpad::SystemInfo;
+using std::string;
+
+class TestSymbolSupplier : public SymbolSupplier {
+ public:
+  TestSymbolSupplier() : interrupt_(false) {}
+
+  virtual SymbolResult GetSymbolFile(const CodeModule *module,
+                                     const SystemInfo *system_info,
+                                     string *symbol_file);
+
+  virtual SymbolResult GetSymbolFile(const CodeModule *module,
+                                     const SystemInfo *system_info,
+                                     string *symbol_file,
+                                     string *symbol_data);
+
+  virtual SymbolResult GetCStringSymbolData(const CodeModule *module,
+                                            const SystemInfo *system_info,
+                                            string *symbol_file,
+                                            char **symbol_data);
+
+  virtual void FreeSymbolData(const CodeModule *module) { }
+  // When set to true, causes the SymbolSupplier to return INTERRUPT
+  void set_interrupt(bool interrupt) { interrupt_ = interrupt; }
+
+ private:
+  bool interrupt_;
+};
+
+SymbolSupplier::SymbolResult TestSymbolSupplier::GetSymbolFile(
+    const CodeModule *module,
+    const SystemInfo *system_info,
+    string *symbol_file) {
+
+  if (interrupt_) {
+    return INTERRUPT;
+  }
+
+  return NOT_FOUND;
+}
+
+SymbolSupplier::SymbolResult TestSymbolSupplier::GetCStringSymbolData(
+    const CodeModule *module,
+    const SystemInfo *system_info,
+    string *symbol_file,
+    char **symbol_data) {
+  return GetSymbolFile(module, system_info, symbol_file);
+}
+
+SymbolSupplier::SymbolResult TestSymbolSupplier::GetSymbolFile(
+    const CodeModule *module,
+    const SystemInfo *system_info,
+    string *symbol_file,
+    string *symbol_data) {
+  return GetSymbolFile(module, system_info, symbol_file);
+}
+
+TEST(ExploitabilityTest, TestWindowsEngine) {
+  TestSymbolSupplier supplier;
+  BasicSourceLineResolver resolver;
+  MinidumpProcessor processor(&supplier, &resolver, true);
+  ProcessState state;
+
+  string minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/ascii_read_av.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/ascii_read_av_block_write.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/ascii_read_av_clobber_write.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/ascii_read_av_conditional.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/ascii_read_av_then_jmp.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/ascii_read_av_xchg_write.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/ascii_write_av.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/ascii_write_av_arg_to_call.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/null_read_av.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_NONE,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/null_write_av.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_NONE,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/stack_exhaustion.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_NONE,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/exec_av_on_stack.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/write_av_non_null.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABLITY_MEDIUM,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/read_av_non_null.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_LOW,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/read_av_clobber_write.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_LOW,
+            state.exploitability());
+
+  minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+      "/src/processor/testdata/read_av_conditional.dmp";
+  ASSERT_EQ(processor.Process(minidump_file, &state),
+            google_breakpad::PROCESS_OK);
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_LOW,
+            state.exploitability());
+}
+}
diff --git a/src/processor/exploitability_win.cc b/src/processor/exploitability_win.cc
new file mode 100644
index 0000000..443635f
--- /dev/null
+++ b/src/processor/exploitability_win.cc
@@ -0,0 +1,290 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// exploitability_win.cc: Windows specific exploitability engine.
+//
+// Provides a guess at the exploitability of the crash for the Windows
+// platform given a minidump and process_state.
+//
+// Author: Cris Neckar
+
+#include <vector>
+
+#include "processor/exploitability_win.h"
+
+#include "google_breakpad/common/minidump_exception_win32.h"
+#include "google_breakpad/processor/minidump.h"
+#include "processor/disassembler_x86.h"
+#include "processor/logging.h"
+#include "processor/scoped_ptr.h"
+
+#include "third_party/libdisasm/libdis.h"
+
+namespace google_breakpad {
+
+// The cutoff that we use to judge if and address is likely an offset
+// from various interesting addresses.
+static const u_int64_t kProbableNullOffset = 4096;
+static const u_int64_t kProbableStackOffset = 8192;
+
+// The various cutoffs for the different ratings.
+static const size_t kHighCutoff        = 100;
+static const size_t kMediumCutoff      = 80;
+static const size_t kLowCutoff         = 50;
+static const size_t kInterestingCutoff = 25;
+
+// Predefined incremental values for conditional weighting.
+static const size_t kTinyBump          = 5;
+static const size_t kSmallBump         = 20;
+static const size_t kMediumBump        = 50;
+static const size_t kLargeBump         = 70;
+static const size_t kHugeBump          = 90;
+
+// The maximum number of bytes to disassemble past the program counter.
+static const size_t kDisassembleBytesBeyondPC = 2048;
+
+ExploitabilityWin::ExploitabilityWin(Minidump *dump,
+                                     ProcessState *process_state)
+    : Exploitability(dump, process_state) { }
+
+ExploitabilityRating ExploitabilityWin::CheckPlatformExploitability() {
+  MinidumpException *exception = dump_->GetException();
+  if (!exception) {
+    BPLOG(INFO) << "Minidump does not have exception record.";
+    return EXPLOITABILITY_ERR_PROCESSING;
+  }
+
+  const MDRawExceptionStream *raw_exception = exception->exception();
+  if (!raw_exception) {
+    BPLOG(INFO) << "Could not obtain raw exception info.";
+    return EXPLOITABILITY_ERR_PROCESSING;
+  }
+
+  const MinidumpContext *context = exception->GetContext();
+  if (!context) {
+    BPLOG(INFO) << "Could not obtain exception context.";
+    return EXPLOITABILITY_ERR_PROCESSING;
+  }
+
+  MinidumpMemoryList *memory_list = dump_->GetMemoryList();
+  bool memory_available = true;
+  if (!memory_list) {
+    BPLOG(INFO) << "Minidump memory segments not available.";
+    memory_available = false;
+  }
+  u_int64_t address = process_state_->crash_address();
+  u_int32_t exception_code = raw_exception->exception_record.exception_code;
+
+  u_int32_t exploitability_weight = 0;
+
+  u_int64_t stack_ptr = 0;
+  u_int64_t instruction_ptr = 0;
+  u_int64_t this_ptr = 0;
+
+  switch (context->GetContextCPU()) {
+    case MD_CONTEXT_X86:
+      stack_ptr = context->GetContextX86()->esp;
+      instruction_ptr = context->GetContextX86()->eip;
+      this_ptr = context->GetContextX86()->ecx;
+      break;
+    case MD_CONTEXT_AMD64:
+      stack_ptr = context->GetContextAMD64()->rsp;
+      instruction_ptr = context->GetContextAMD64()->rip;
+      this_ptr = context->GetContextAMD64()->rcx;
+      break;
+    default:
+      BPLOG(INFO) << "Unsupported architecture.";
+      return EXPLOITABILITY_ERR_PROCESSING;
+  }
+
+  // Check if we are executing on the stack.
+  if (instruction_ptr <= (stack_ptr + kProbableStackOffset) &&
+      instruction_ptr >= (stack_ptr - kProbableStackOffset))
+    exploitability_weight += kHugeBump;
+
+  switch (exception_code) {
+    // This is almost certainly recursion.
+    case MD_EXCEPTION_CODE_WIN_STACK_OVERFLOW:
+      exploitability_weight += kTinyBump;
+      break;
+
+    // These exceptions tend to be benign and we can generally ignore them.
+    case MD_EXCEPTION_CODE_WIN_INTEGER_DIVIDE_BY_ZERO:
+    case MD_EXCEPTION_CODE_WIN_INTEGER_OVERFLOW:
+    case MD_EXCEPTION_CODE_WIN_FLOAT_DIVIDE_BY_ZERO:
+    case MD_EXCEPTION_CODE_WIN_FLOAT_INEXACT_RESULT:
+    case MD_EXCEPTION_CODE_WIN_FLOAT_OVERFLOW:
+    case MD_EXCEPTION_CODE_WIN_FLOAT_UNDERFLOW:
+    case MD_EXCEPTION_CODE_WIN_IN_PAGE_ERROR:
+      exploitability_weight += kTinyBump;
+      break;
+
+    // These exceptions will typically mean that we have jumped where we
+    // shouldn't.
+    case MD_EXCEPTION_CODE_WIN_ILLEGAL_INSTRUCTION:
+    case MD_EXCEPTION_CODE_WIN_FLOAT_INVALID_OPERATION:
+    case MD_EXCEPTION_CODE_WIN_PRIVILEGED_INSTRUCTION:
+      exploitability_weight += kLargeBump;
+      break;
+
+    // These represent bugs in exception handlers.
+    case MD_EXCEPTION_CODE_WIN_INVALID_DISPOSITION:
+    case MD_EXCEPTION_CODE_WIN_NONCONTINUABLE_EXCEPTION:
+      exploitability_weight += kSmallBump;
+      break;
+
+    case MD_EXCEPTION_CODE_WIN_HEAP_CORRUPTION:
+    case MD_EXCEPTION_CODE_WIN_STACK_BUFFER_OVERRUN:
+      exploitability_weight += kHugeBump;
+      break;
+
+    case MD_EXCEPTION_CODE_WIN_GUARD_PAGE_VIOLATION:
+      exploitability_weight += kLargeBump;
+      break;
+
+    case MD_EXCEPTION_CODE_WIN_ACCESS_VIOLATION:
+      bool near_null = (address <= kProbableNullOffset);
+      bool bad_read = false;
+      bool bad_write = false;
+      if (raw_exception->exception_record.number_parameters >= 1) {
+        MDAccessViolationTypeWin av_type =
+            static_cast<MDAccessViolationTypeWin>
+            (raw_exception->exception_record.exception_information[0]);
+        switch (av_type) {
+          case MD_ACCESS_VIOLATION_WIN_READ:
+            bad_read = true;
+            if (near_null)
+              exploitability_weight += kSmallBump;
+            else
+              exploitability_weight += kMediumBump;
+            break;
+          case MD_ACCESS_VIOLATION_WIN_WRITE:
+            bad_write = true;
+            if (near_null)
+              exploitability_weight += kSmallBump;
+            else
+              exploitability_weight += kHugeBump;
+            break;
+          case MD_ACCESS_VIOLATION_WIN_EXEC:
+            if (near_null)
+              exploitability_weight += kSmallBump;
+            else
+              exploitability_weight += kHugeBump;
+            break;
+          default:
+            BPLOG(INFO) << "Unrecognized access violation type.";
+            return EXPLOITABILITY_ERR_PROCESSING;
+            break;
+        }
+        MinidumpMemoryRegion *instruction_region = 0;
+        if (memory_available) {
+          instruction_region =
+              memory_list->GetMemoryRegionForAddress(instruction_ptr);
+        }
+        if (!near_null && instruction_region &&
+            context->GetContextCPU() == MD_CONTEXT_X86 &&
+            (bad_read || bad_write)) {
+          // Perform checks related to memory around instruction pointer.
+          u_int32_t memory_offset =
+              instruction_ptr - instruction_region->GetBase();
+          u_int32_t available_memory =
+              instruction_region->GetSize() - memory_offset;
+          available_memory = available_memory > kDisassembleBytesBeyondPC ?
+              kDisassembleBytesBeyondPC : available_memory;
+          if (available_memory) {
+            const u_int8_t *raw_memory =
+                instruction_region->GetMemory() + memory_offset;
+            DisassemblerX86 disassembler(raw_memory,
+                                         available_memory,
+                                         instruction_ptr);
+            disassembler.NextInstruction();
+            if (bad_read)
+              disassembler.setBadRead();
+            else
+              disassembler.setBadWrite();
+            if (disassembler.currentInstructionValid()) {
+              // Check if the faulting instruction falls into one of
+              // several interesting groups.
+              switch (disassembler.currentInstructionGroup()) {
+                case libdis::insn_controlflow:
+                  exploitability_weight += kLargeBump;
+                  break;
+                case libdis::insn_string:
+                  exploitability_weight += kHugeBump;
+                  break;
+                default:
+                  break;
+              }
+              // Loop the disassembler through the code and check if it
+              // IDed any interesting conditions in the near future.
+              // Multiple flags may be set so treat each equally.
+              while (disassembler.NextInstruction() &&
+                     disassembler.currentInstructionValid() &&
+                     !disassembler.endOfBlock())
+                continue;
+              if (disassembler.flags() & DISX86_BAD_BRANCH_TARGET)
+                exploitability_weight += kLargeBump;
+              if (disassembler.flags() & DISX86_BAD_ARGUMENT_PASSED)
+                exploitability_weight += kTinyBump;
+              if (disassembler.flags() & DISX86_BAD_WRITE)
+                exploitability_weight += kMediumBump;
+              if (disassembler.flags() & DISX86_BAD_BLOCK_WRITE)
+                exploitability_weight += kMediumBump;
+              if (disassembler.flags() & DISX86_BAD_READ)
+                exploitability_weight += kTinyBump;
+              if (disassembler.flags() & DISX86_BAD_BLOCK_READ)
+                exploitability_weight += kTinyBump;
+              if (disassembler.flags() & DISX86_BAD_COMPARISON)
+                exploitability_weight += kTinyBump;
+            }
+          }
+        }
+        if (!near_null && AddressIsAscii(address))
+          exploitability_weight += kMediumBump;
+      } else {
+        BPLOG(INFO) << "Access violation type parameter missing.";
+        return EXPLOITABILITY_ERR_PROCESSING;
+      }
+  }
+
+  // Based on the calculated weight we return a simplified classification.
+  BPLOG(INFO) << "Calculated exploitability weight: " << exploitability_weight;
+  if (exploitability_weight >= kHighCutoff)
+    return EXPLOITABILITY_HIGH;
+  if (exploitability_weight >= kMediumCutoff)
+    return EXPLOITABLITY_MEDIUM;
+  if (exploitability_weight >= kLowCutoff)
+    return EXPLOITABILITY_LOW;
+  if (exploitability_weight >= kInterestingCutoff)
+    return EXPLOITABILITY_INTERESTING;
+
+  return EXPLOITABILITY_NONE;
+}
+
+}  // namespace google_breakpad
diff --git a/src/client/windows/tests/crash_generation_app/precompile.cc b/src/processor/exploitability_win.h
similarity index 64%
copy from src/client/windows/tests/crash_generation_app/precompile.cc
copy to src/processor/exploitability_win.h
index 9d2173c..4e08aef 100644
--- a/src/client/windows/tests/crash_generation_app/precompile.cc
+++ b/src/processor/exploitability_win.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2008, Google Inc.
+// Copyright (c) 2010 Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -27,11 +27,29 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// precompile.cpp : source file that includes just the standard includes
-// CrashGenerationApp.pch will be the pre-compiled header
-// precompile.obj will contain the pre-compiled type information
+// exploitability_win.h: Windows specific exploitability engine.
+//
+// Provides a guess at the exploitability of the crash for the Windows
+// platform given a minidump and process_state.
+//
+// Author: Cris Neckar
 
-#include "precompile.h"
+#ifndef GOOGLE_BREAKPAD_PROCESSOR_EXPLOITABILITY_WIN_H_
+#define GOOGLE_BREAKPAD_PROCESSOR_EXPLOITABILITY_WIN_H_
 
-// Reference any additional headers you need in PRECOMPILE.H
-// and not in this file.
+#include "google_breakpad/common/breakpad_types.h"
+#include "google_breakpad/processor/exploitability.h"
+
+namespace google_breakpad {
+
+class ExploitabilityWin : public Exploitability {
+  public:
+    ExploitabilityWin(Minidump *dump,
+                      ProcessState *process_state);
+
+    virtual ExploitabilityRating CheckPlatformExploitability();
+};
+
+}  // namespace google_breakpad
+
+#endif  // GOOGLE_BREAKPAD_PROCESSOR_EXPLOITABILITY_WIN_H_
diff --git a/src/processor/fast_source_line_resolver.cc b/src/processor/fast_source_line_resolver.cc
new file mode 100644
index 0000000..45c1f0f
--- /dev/null
+++ b/src/processor/fast_source_line_resolver.cc
@@ -0,0 +1,260 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// fast_source_line_resolver.cc: FastSourceLineResolver is a concrete class that
+// implements SourceLineResolverInterface.  Both FastSourceLineResolver and
+// BasicSourceLineResolver inherit from SourceLineResolverBase class to reduce
+// code redundancy.
+//
+// See fast_source_line_resolver.h and fast_source_line_resolver_types.h
+// for more documentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#include "google_breakpad/processor/fast_source_line_resolver.h"
+#include "processor/fast_source_line_resolver_types.h"
+
+#include <map>
+#include <utility>
+
+#include "processor/module_factory.h"
+#include "processor/scoped_ptr.h"
+
+using std::map;
+using std::make_pair;
+
+namespace google_breakpad {
+
+FastSourceLineResolver::FastSourceLineResolver()
+  : SourceLineResolverBase(new FastModuleFactory) { }
+
+bool FastSourceLineResolver::ShouldDeleteMemoryBufferAfterLoadModule() {
+  return false;
+}
+
+void FastSourceLineResolver::Module::LookupAddress(StackFrame *frame) const {
+  MemAddr address = frame->instruction - frame->module->base_address();
+
+  // First, look for a FUNC record that covers address. Use
+  // RetrieveNearestRange instead of RetrieveRange so that, if there
+  // is no such function, we can use the next function to bound the
+  // extent of the PUBLIC symbol we find, below. This does mean we
+  // need to check that address indeed falls within the function we
+  // find; do the range comparison in an overflow-friendly way.
+  scoped_ptr<Function> func(new Function);
+  const Function* func_ptr = 0;
+  scoped_ptr<PublicSymbol> public_symbol(new PublicSymbol);
+  const PublicSymbol* public_symbol_ptr = 0;
+  MemAddr function_base;
+  MemAddr function_size;
+  MemAddr public_address;
+
+  if (functions_.RetrieveNearestRange(address, func_ptr,
+                                      &function_base, &function_size) &&
+      address >= function_base && address - function_base < function_size) {
+    func.get()->CopyFrom(func_ptr);
+    frame->function_name = func->name;
+    frame->function_base = frame->module->base_address() + function_base;
+
+    scoped_ptr<Line> line(new Line);
+    const Line* line_ptr = 0;
+    MemAddr line_base;
+    if (func->lines.RetrieveRange(address, line_ptr, &line_base, NULL)) {
+      line.get()->CopyFrom(line_ptr);
+      FileMap::iterator it = files_.find(line->source_file_id);
+      if (it != files_.end()) {
+        frame->source_file_name =
+            files_.find(line->source_file_id).GetValuePtr();
+      }
+      frame->source_line = line->line;
+      frame->source_line_base = frame->module->base_address() + line_base;
+    }
+  } else if (public_symbols_.Retrieve(address,
+                                      public_symbol_ptr, &public_address) &&
+             (!func_ptr || public_address > function_base)) {
+    public_symbol.get()->CopyFrom(public_symbol_ptr);
+    frame->function_name = public_symbol->name;
+    frame->function_base = frame->module->base_address() + public_address;
+  }
+}
+
+// WFI: WindowsFrameInfo.
+// Returns a WFI object reading from a raw memory chunk of data
+WindowsFrameInfo FastSourceLineResolver::CopyWFI(const char *raw) {
+  // The first 4Bytes of int data are unused.
+  // They corresponds to "int valid;" data member of WFI.
+  const u_int32_t *para_uint32 = reinterpret_cast<const u_int32_t*>(
+      raw + sizeof(int32_t));
+
+  u_int32_t prolog_size = para_uint32[0];;
+  u_int32_t epilog_size = para_uint32[1];
+  u_int32_t parameter_size = para_uint32[2];
+  u_int32_t saved_register_size = para_uint32[3];
+  u_int32_t local_size = para_uint32[4];
+  u_int32_t max_stack_size = para_uint32[5];
+  const char *boolean = reinterpret_cast<const char*>(para_uint32 + 6);
+  bool allocates_base_pointer = (*boolean != 0);
+  std::string program_string = boolean + 1;
+
+  return WindowsFrameInfo(prolog_size,
+                          epilog_size,
+                          parameter_size,
+                          saved_register_size,
+                          local_size,
+                          max_stack_size,
+                          allocates_base_pointer,
+                          program_string);
+}
+
+// Loads a map from the given buffer in char* type.
+// Does NOT take ownership of mem_buffer.
+// In addition, treat mem_buffer as const char*.
+bool FastSourceLineResolver::Module::LoadMapFromMemory(char *mem_buffer) {
+  if (!mem_buffer) return false;
+
+  const u_int32_t *map_sizes = reinterpret_cast<const u_int32_t*>(mem_buffer);
+
+  unsigned int header_size = kNumberMaps_ * sizeof(unsigned int);
+
+  // offsets[]: an array of offset addresses (with respect to mem_buffer),
+  // for each "Static***Map" component of Module.
+  // "Static***Map": static version of std::map or map wrapper, i.e., StaticMap,
+  // StaticAddressMap, StaticContainedRangeMap, and StaticRangeMap.
+  unsigned int offsets[kNumberMaps_];
+  offsets[0] = header_size;
+  for (int i = 1; i < kNumberMaps_; ++i) {
+    offsets[i] = offsets[i - 1] + map_sizes[i - 1];
+  }
+
+  // Use pointers to construct Static*Map data members in Module:
+  int map_id = 0;
+  files_ = StaticMap<int, char>(mem_buffer + offsets[map_id++]);
+  functions_ =
+      StaticRangeMap<MemAddr, Function>(mem_buffer + offsets[map_id++]);
+  public_symbols_ =
+      StaticAddressMap<MemAddr, PublicSymbol>(mem_buffer + offsets[map_id++]);
+  for (int i = 0; i < WindowsFrameInfo::STACK_INFO_LAST; ++i)
+    windows_frame_info_[i] =
+        StaticContainedRangeMap<MemAddr, char>(mem_buffer + offsets[map_id++]);
+
+  cfi_initial_rules_ =
+      StaticRangeMap<MemAddr, char>(mem_buffer + offsets[map_id++]);
+  cfi_delta_rules_ = StaticMap<MemAddr, char>(mem_buffer + offsets[map_id++]);
+
+  return true;
+}
+
+WindowsFrameInfo *FastSourceLineResolver::Module::FindWindowsFrameInfo(
+    const StackFrame *frame) const {
+  MemAddr address = frame->instruction - frame->module->base_address();
+  scoped_ptr<WindowsFrameInfo> result(new WindowsFrameInfo());
+
+  // We only know about WindowsFrameInfo::STACK_INFO_FRAME_DATA and
+  // WindowsFrameInfo::STACK_INFO_FPO. Prefer them in this order.
+  // WindowsFrameInfo::STACK_INFO_FRAME_DATA is the newer type that
+  // includes its own program string.
+  // WindowsFrameInfo::STACK_INFO_FPO is the older type
+  // corresponding to the FPO_DATA struct. See stackwalker_x86.cc.
+  const char* frame_info_ptr;
+  if ((windows_frame_info_[WindowsFrameInfo::STACK_INFO_FRAME_DATA]
+       .RetrieveRange(address, frame_info_ptr))
+      || (windows_frame_info_[WindowsFrameInfo::STACK_INFO_FPO]
+          .RetrieveRange(address, frame_info_ptr))) {
+    result->CopyFrom(CopyWFI(frame_info_ptr));
+    return result.release();
+  }
+
+  // Even without a relevant STACK line, many functions contain
+  // information about how much space their parameters consume on the
+  // stack. Use RetrieveNearestRange instead of RetrieveRange, so that
+  // we can use the function to bound the extent of the PUBLIC symbol,
+  // below. However, this does mean we need to check that ADDRESS
+  // falls within the retrieved function's range; do the range
+  // comparison in an overflow-friendly way.
+  scoped_ptr<Function> function(new Function);
+  const Function* function_ptr = 0;
+  MemAddr function_base, function_size;
+  if (functions_.RetrieveNearestRange(address, function_ptr,
+                                      &function_base, &function_size) &&
+      address >= function_base && address - function_base < function_size) {
+    function.get()->CopyFrom(function_ptr);
+    result->parameter_size = function->parameter_size;
+    result->valid |= WindowsFrameInfo::VALID_PARAMETER_SIZE;
+    return result.release();
+  }
+
+  // PUBLIC symbols might have a parameter size. Use the function we
+  // found above to limit the range the public symbol covers.
+  scoped_ptr<PublicSymbol> public_symbol(new PublicSymbol);
+  const PublicSymbol* public_symbol_ptr = 0;
+  MemAddr public_address;
+  if (public_symbols_.Retrieve(address, public_symbol_ptr, &public_address) &&
+      (!function_ptr || public_address > function_base)) {
+    public_symbol.get()->CopyFrom(public_symbol_ptr);
+    result->parameter_size = public_symbol->parameter_size;
+  }
+
+  return NULL;
+}
+
+CFIFrameInfo *FastSourceLineResolver::Module::FindCFIFrameInfo(
+    const StackFrame *frame) const {
+  MemAddr address = frame->instruction - frame->module->base_address();
+  MemAddr initial_base, initial_size;
+  const char* initial_rules = NULL;
+
+  // Find the initial rule whose range covers this address. That
+  // provides an initial set of register recovery rules. Then, walk
+  // forward from the initial rule's starting address to frame's
+  // instruction address, applying delta rules.
+  if (!cfi_initial_rules_.RetrieveRange(address, initial_rules,
+                                        &initial_base, &initial_size)) {
+    return NULL;
+  }
+
+  // Create a frame info structure, and populate it with the rules from
+  // the STACK CFI INIT record.
+  scoped_ptr<CFIFrameInfo> rules(new CFIFrameInfo());
+  if (!ParseCFIRuleSet(initial_rules, rules.get()))
+    return NULL;
+
+  // Find the first delta rule that falls within the initial rule's range.
+  StaticMap<MemAddr, char>::iterator delta =
+    cfi_delta_rules_.lower_bound(initial_base);
+
+  // Apply delta rules up to and including the frame's address.
+  while (delta != cfi_delta_rules_.end() && delta.GetKey() <= address) {
+    ParseCFIRuleSet(delta.GetValuePtr(), rules.get());
+    delta++;
+  }
+
+  return rules.release();
+}
+
+}  // namespace google_breakpad
diff --git a/src/processor/fast_source_line_resolver_types.h b/src/processor/fast_source_line_resolver_types.h
new file mode 100644
index 0000000..c4cec60
--- /dev/null
+++ b/src/processor/fast_source_line_resolver_types.h
@@ -0,0 +1,179 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// fast_source_line_resolver_types.h: definition of nested classes/structs in
+// FastSourceLineResolver.  It moves the definitions out of
+// fast_source_line_resolver.cc, so that other classes could have access
+// to these private nested types without including fast_source_line_resolver.cc
+//
+// Author: lambxsy@google.com (Siyang Xie)
+
+#ifndef PROCESSOR_FAST_SOURCE_LINE_RESOLVER_TYPES_H__
+#define PROCESSOR_FAST_SOURCE_LINE_RESOLVER_TYPES_H__
+
+#include "google_breakpad/processor/fast_source_line_resolver.h"
+#include "processor/source_line_resolver_base_types.h"
+
+#include <map>
+#include <string>
+
+#include "google_breakpad/processor/stack_frame.h"
+#include "processor/cfi_frame_info.h"
+#include "processor/static_address_map-inl.h"
+#include "processor/static_contained_range_map-inl.h"
+#include "processor/static_map.h"
+#include "processor/static_range_map-inl.h"
+#include "processor/windows_frame_info.h"
+
+namespace google_breakpad {
+
+struct FastSourceLineResolver::Line : public SourceLineResolverBase::Line {
+  void CopyFrom(const Line *line_ptr) {
+    const char *raw = reinterpret_cast<const char*>(line_ptr);
+    CopyFrom(raw);
+  }
+
+  // De-serialize the memory data of a Line.
+  void CopyFrom(const char *raw) {
+    address = *(reinterpret_cast<const MemAddr*>(raw));
+    size = *(reinterpret_cast<const MemAddr*>(raw + sizeof(address)));
+    source_file_id = *(reinterpret_cast<const int32_t *>(
+        raw + 2 * sizeof(address)));
+    line = *(reinterpret_cast<const int32_t*>(
+        raw + 2 * sizeof(address) + sizeof(source_file_id)));
+  }
+};
+
+struct FastSourceLineResolver::Function :
+public SourceLineResolverBase::Function {
+  void CopyFrom(const Function *func_ptr) {
+    const char *raw = reinterpret_cast<const char*>(func_ptr);
+    CopyFrom(raw);
+  }
+
+  // De-serialize the memory data of a Function.
+  void CopyFrom(const char *raw) {
+    size_t name_size = strlen(raw) + 1;
+    name = raw;
+    address = *(reinterpret_cast<const MemAddr*>(raw + name_size));
+    size = *(reinterpret_cast<const MemAddr*>(
+        raw + name_size + sizeof(MemAddr)));
+    parameter_size = *(reinterpret_cast<const int32_t*>(
+        raw + name_size + 2 * sizeof(MemAddr)));
+    lines = StaticRangeMap<MemAddr, Line>(
+        raw + name_size + 2 * sizeof(MemAddr) + sizeof(int32_t));
+  }
+
+  StaticRangeMap<MemAddr, Line> lines;
+};
+
+struct FastSourceLineResolver::PublicSymbol :
+public SourceLineResolverBase::PublicSymbol {
+  void CopyFrom(const PublicSymbol *public_symbol_ptr) {
+    const char *raw = reinterpret_cast<const char*>(public_symbol_ptr);
+    CopyFrom(raw);
+  }
+
+  // De-serialize the memory data of a PublicSymbol.
+  void CopyFrom(const char *raw) {
+    size_t name_size = strlen(raw) + 1;
+    name = raw;
+    address = *(reinterpret_cast<const MemAddr*>(raw + name_size));
+    parameter_size = *(reinterpret_cast<const int32_t*>(
+        raw + name_size + sizeof(MemAddr)));
+  }
+};
+
+class FastSourceLineResolver::Module: public SourceLineResolverBase::Module {
+ public:
+  explicit Module(const string &name) : name_(name) { }
+  virtual ~Module() { }
+
+  // Looks up the given relative address, and fills the StackFrame struct
+  // with the result.
+  virtual void LookupAddress(StackFrame *frame) const;
+
+  // Loads a map from the given buffer in char* type.
+  virtual bool LoadMapFromMemory(char *memory_buffer);
+
+  // If Windows stack walking information is available covering ADDRESS,
+  // return a WindowsFrameInfo structure describing it. If the information
+  // is not available, returns NULL. A NULL return value does not indicate
+  // an error. The caller takes ownership of any returned WindowsFrameInfo
+  // object.
+  virtual WindowsFrameInfo *FindWindowsFrameInfo(const StackFrame *frame) const;
+
+  // If CFI stack walking information is available covering ADDRESS,
+  // return a CFIFrameInfo structure describing it. If the information
+  // is not available, return NULL. The caller takes ownership of any
+  // returned CFIFrameInfo object.
+  virtual CFIFrameInfo *FindCFIFrameInfo(const StackFrame *frame) const;
+
+  // Number of serialized map components of Module.
+  static const int kNumberMaps_ = 5 + WindowsFrameInfo::STACK_INFO_LAST;
+
+ private:
+  friend class FastSourceLineResolver;
+  friend class ModuleComparer;
+  typedef StaticMap<int, char> FileMap;
+
+  string name_;
+  StaticMap<int, char> files_;
+  StaticRangeMap<MemAddr, Function> functions_;
+  StaticAddressMap<MemAddr, PublicSymbol> public_symbols_;
+
+  // Each element in the array is a ContainedRangeMap for a type
+  // listed in WindowsFrameInfoTypes. These are split by type because
+  // there may be overlaps between maps of different types, but some
+  // information is only available as certain types.
+  StaticContainedRangeMap<MemAddr, char>
+    windows_frame_info_[WindowsFrameInfo::STACK_INFO_LAST];
+
+  // DWARF CFI stack walking data. The Module stores the initial rule sets
+  // and rule deltas as strings, just as they appear in the symbol file:
+  // although the file may contain hundreds of thousands of STACK CFI
+  // records, walking a stack will only ever use a few of them, so it's
+  // best to delay parsing a record until it's actually needed.
+  //
+  // STACK CFI INIT records: for each range, an initial set of register
+  // recovery rules. The RangeMap's itself gives the starting and ending
+  // addresses.
+  StaticRangeMap<MemAddr, char> cfi_initial_rules_;
+
+  // STACK CFI records: at a given address, the changes to the register
+  // recovery rules that take effect at that address. The map key is the
+  // starting address; the ending address is the key of the next entry in
+  // this map, or the end of the range as given by the cfi_initial_rules_
+  // entry (which FindCFIFrameInfo looks up first).
+  StaticMap<MemAddr, char> cfi_delta_rules_;
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_FAST_SOURCE_LINE_RESOLVER_TYPES_H__
diff --git a/src/processor/fast_source_line_resolver_unittest.cc b/src/processor/fast_source_line_resolver_unittest.cc
new file mode 100644
index 0000000..a4a9209
--- /dev/null
+++ b/src/processor/fast_source_line_resolver_unittest.cc
@@ -0,0 +1,477 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// fast_source_line_resolver_unittest.cc: Unit tests for FastSourceLineResolver.
+// Two different approaches for testing fast source line resolver:
+// First, use the same unit test data for basic source line resolver.
+// Second, read data from symbol files, load them as basic modules, and then
+// serialize them and load the serialized data as fast modules.  Then compare
+// modules to assure the fast module contains exactly the same data as
+// basic module.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#include <stdio.h>
+
+#include <sstream>
+#include <string>
+
+#include "breakpad_googletest_includes.h"
+#include "google_breakpad/processor/code_module.h"
+#include "google_breakpad/processor/stack_frame.h"
+#include "google_breakpad/processor/memory_region.h"
+#include "processor/logging.h"
+#include "processor/module_serializer.h"
+#include "processor/module_comparer.h"
+
+namespace {
+
+using std::string;
+using google_breakpad::SourceLineResolverBase;
+using google_breakpad::BasicSourceLineResolver;
+using google_breakpad::FastSourceLineResolver;
+using google_breakpad::ModuleSerializer;
+using google_breakpad::ModuleComparer;
+using google_breakpad::CFIFrameInfo;
+using google_breakpad::CodeModule;
+using google_breakpad::MemoryRegion;
+using google_breakpad::StackFrame;
+using google_breakpad::WindowsFrameInfo;
+using google_breakpad::linked_ptr;
+using google_breakpad::scoped_ptr;
+
+class TestCodeModule : public CodeModule {
+ public:
+  explicit TestCodeModule(string code_file) : code_file_(code_file) {}
+  virtual ~TestCodeModule() {}
+
+  virtual u_int64_t base_address() const { return 0; }
+  virtual u_int64_t size() const { return 0xb000; }
+  virtual string code_file() const { return code_file_; }
+  virtual string code_identifier() const { return ""; }
+  virtual string debug_file() const { return ""; }
+  virtual string debug_identifier() const { return ""; }
+  virtual string version() const { return ""; }
+  virtual const CodeModule* Copy() const {
+    return new TestCodeModule(code_file_);
+  }
+
+ private:
+  string code_file_;
+};
+
+// A mock memory region object, for use by the STACK CFI tests.
+class MockMemoryRegion: public MemoryRegion {
+  u_int64_t GetBase() const { return 0x10000; }
+  u_int32_t GetSize() const { return 0x01000; }
+  bool GetMemoryAtAddress(u_int64_t address, u_int8_t *value) const {
+    *value = address & 0xff;
+    return true;
+  }
+  bool GetMemoryAtAddress(u_int64_t address, u_int16_t *value) const {
+    *value = address & 0xffff;
+    return true;
+  }
+  bool GetMemoryAtAddress(u_int64_t address, u_int32_t *value) const {
+    switch (address) {
+      case 0x10008: *value = 0x98ecadc3; break;  // saved %ebx
+      case 0x1000c: *value = 0x878f7524; break;  // saved %esi
+      case 0x10010: *value = 0x6312f9a5; break;  // saved %edi
+      case 0x10014: *value = 0x10038;    break;  // caller's %ebp
+      case 0x10018: *value = 0xf6438648; break;  // return address
+      default: *value = 0xdeadbeef;      break;  // junk
+    }
+    return true;
+  }
+  bool GetMemoryAtAddress(u_int64_t address, u_int64_t *value) const {
+    *value = address;
+    return true;
+  }
+};
+
+// Verify that, for every association in ACTUAL, EXPECTED has the same
+// association. (That is, ACTUAL's associations should be a subset of
+// EXPECTED's.) Also verify that ACTUAL has associations for ".ra" and
+// ".cfa".
+static bool VerifyRegisters(
+    const char *file, int line,
+    const CFIFrameInfo::RegisterValueMap<u_int32_t> &expected,
+    const CFIFrameInfo::RegisterValueMap<u_int32_t> &actual) {
+  CFIFrameInfo::RegisterValueMap<u_int32_t>::const_iterator a;
+  a = actual.find(".cfa");
+  if (a == actual.end())
+    return false;
+  a = actual.find(".ra");
+  if (a == actual.end())
+    return false;
+  for (a = actual.begin(); a != actual.end(); a++) {
+    CFIFrameInfo::RegisterValueMap<u_int32_t>::const_iterator e =
+      expected.find(a->first);
+    if (e == expected.end()) {
+      fprintf(stderr, "%s:%d: unexpected register '%s' recovered, value 0x%x\n",
+              file, line, a->first.c_str(), a->second);
+      return false;
+    }
+    if (e->second != a->second) {
+      fprintf(stderr,
+              "%s:%d: register '%s' recovered value was 0x%x, expected 0x%x\n",
+              file, line, a->first.c_str(), a->second, e->second);
+      return false;
+    }
+    // Don't complain if this doesn't recover all registers. Although
+    // the DWARF spec says that unmentioned registers are undefined,
+    // GCC uses omission to mean that they are unchanged.
+  }
+  return true;
+}
+
+static bool VerifyEmpty(const StackFrame &frame) {
+  if (frame.function_name.empty() &&
+      frame.source_file_name.empty() &&
+      frame.source_line == 0)
+    return true;
+  return false;
+}
+
+static void ClearSourceLineInfo(StackFrame *frame) {
+  frame->function_name.clear();
+  frame->module = NULL;
+  frame->source_file_name.clear();
+  frame->source_line = 0;
+}
+
+class TestFastSourceLineResolver : public ::testing::Test {
+ public:
+  void SetUp() {
+    testdata_dir = string(getenv("srcdir") ? getenv("srcdir") : ".") +
+                         "/src/processor/testdata";
+  }
+
+  string symbol_file(int file_index) {
+    std::stringstream ss;
+    ss << testdata_dir << "/module" << file_index << ".out";
+    return ss.str();
+  }
+
+  ModuleSerializer serializer;
+  BasicSourceLineResolver basic_resolver;
+  FastSourceLineResolver fast_resolver;
+  ModuleComparer module_comparer;
+
+  string testdata_dir;
+};
+
+// Test adapted from basic_source_line_resolver_unittest.
+TEST_F(TestFastSourceLineResolver, TestLoadAndResolve) {
+  TestCodeModule module1("module1");
+  ASSERT_TRUE(basic_resolver.LoadModule(&module1, symbol_file(1)));
+  ASSERT_TRUE(basic_resolver.HasModule(&module1));
+  // Convert module1 to fast_module:
+  ASSERT_TRUE(serializer.ConvertOneModule(
+      module1.code_file(), &basic_resolver, &fast_resolver));
+  ASSERT_TRUE(fast_resolver.HasModule(&module1));
+
+  TestCodeModule module2("module2");
+  ASSERT_TRUE(basic_resolver.LoadModule(&module2, symbol_file(2)));
+  ASSERT_TRUE(basic_resolver.HasModule(&module2));
+  // Convert module2 to fast_module:
+  ASSERT_TRUE(serializer.ConvertOneModule(
+      module2.code_file(), &basic_resolver, &fast_resolver));
+  ASSERT_TRUE(fast_resolver.HasModule(&module2));
+
+  StackFrame frame;
+  scoped_ptr<WindowsFrameInfo> windows_frame_info;
+  scoped_ptr<CFIFrameInfo> cfi_frame_info;
+  frame.instruction = 0x1000;
+  frame.module = NULL;
+  fast_resolver.FillSourceLineInfo(&frame);
+  ASSERT_FALSE(frame.module);
+  ASSERT_TRUE(frame.function_name.empty());
+  ASSERT_EQ(frame.function_base, 0);
+  ASSERT_TRUE(frame.source_file_name.empty());
+  ASSERT_EQ(frame.source_line, 0);
+  ASSERT_EQ(frame.source_line_base, 0);
+
+  frame.module = &module1;
+  fast_resolver.FillSourceLineInfo(&frame);
+  ASSERT_EQ(frame.function_name, "Function1_1");
+  ASSERT_TRUE(frame.module);
+  ASSERT_EQ(frame.module->code_file(), "module1");
+  ASSERT_EQ(frame.function_base, 0x1000);
+  ASSERT_EQ(frame.source_file_name, "file1_1.cc");
+  ASSERT_EQ(frame.source_line, 44);
+  ASSERT_EQ(frame.source_line_base, 0x1000);
+  windows_frame_info.reset(fast_resolver.FindWindowsFrameInfo(&frame));
+  ASSERT_TRUE(windows_frame_info.get());
+  ASSERT_FALSE(windows_frame_info->allocates_base_pointer);
+  ASSERT_EQ(windows_frame_info->program_string,
+            "$eip 4 + ^ = $esp $ebp 8 + = $ebp $ebp ^ =");
+
+  ClearSourceLineInfo(&frame);
+  frame.instruction = 0x800;
+  frame.module = &module1;
+  fast_resolver.FillSourceLineInfo(&frame);
+  ASSERT_TRUE(VerifyEmpty(frame));
+  windows_frame_info.reset(fast_resolver.FindWindowsFrameInfo(&frame));
+  ASSERT_FALSE(windows_frame_info.get());
+
+  frame.instruction = 0x1280;
+  fast_resolver.FillSourceLineInfo(&frame);
+  ASSERT_EQ(frame.function_name, "Function1_3");
+  ASSERT_TRUE(frame.source_file_name.empty());
+  ASSERT_EQ(frame.source_line, 0);
+  windows_frame_info.reset(fast_resolver.FindWindowsFrameInfo(&frame));
+  ASSERT_TRUE(windows_frame_info.get());
+  ASSERT_FALSE(windows_frame_info->allocates_base_pointer);
+  ASSERT_TRUE(windows_frame_info->program_string.empty());
+
+  frame.instruction = 0x1380;
+  fast_resolver.FillSourceLineInfo(&frame);
+  ASSERT_EQ(frame.function_name, "Function1_4");
+  ASSERT_TRUE(frame.source_file_name.empty());
+  ASSERT_EQ(frame.source_line, 0);
+  windows_frame_info.reset(fast_resolver.FindWindowsFrameInfo(&frame));
+  ASSERT_TRUE(windows_frame_info.get());
+  ASSERT_FALSE(windows_frame_info->allocates_base_pointer);
+  ASSERT_FALSE(windows_frame_info->program_string.empty());
+
+  frame.instruction = 0x2000;
+  windows_frame_info.reset(fast_resolver.FindWindowsFrameInfo(&frame));
+  ASSERT_FALSE(windows_frame_info.get());
+
+  // module1 has STACK CFI records covering 3d40..3def;
+  // module2 has STACK CFI records covering 3df0..3e9f;
+  // check that FindCFIFrameInfo doesn't claim to find any outside those ranges.
+  frame.instruction = 0x3d3f;
+  frame.module = &module1;
+  cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
+  ASSERT_FALSE(cfi_frame_info.get());
+
+  frame.instruction = 0x3e9f;
+  frame.module = &module1;
+  cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
+  ASSERT_FALSE(cfi_frame_info.get());
+
+  CFIFrameInfo::RegisterValueMap<u_int32_t> current_registers;
+  CFIFrameInfo::RegisterValueMap<u_int32_t> caller_registers;
+  CFIFrameInfo::RegisterValueMap<u_int32_t> expected_caller_registers;
+  MockMemoryRegion memory;
+
+  // Regardless of which instruction evaluation takes place at, it
+  // should produce the same values for the caller's registers.
+  expected_caller_registers[".cfa"] = 0x1001c;
+  expected_caller_registers[".ra"]  = 0xf6438648;
+  expected_caller_registers["$ebp"] = 0x10038;
+  expected_caller_registers["$ebx"] = 0x98ecadc3;
+  expected_caller_registers["$esi"] = 0x878f7524;
+  expected_caller_registers["$edi"] = 0x6312f9a5;
+
+  frame.instruction = 0x3d40;
+  frame.module = &module1;
+  current_registers.clear();
+  current_registers["$esp"] = 0x10018;
+  current_registers["$ebp"] = 0x10038;
+  current_registers["$ebx"] = 0x98ecadc3;
+  current_registers["$esi"] = 0x878f7524;
+  current_registers["$edi"] = 0x6312f9a5;
+  cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
+  ASSERT_TRUE(cfi_frame_info.get());
+  ASSERT_TRUE(cfi_frame_info.get()
+              ->FindCallerRegs<u_int32_t>(current_registers, memory,
+                                          &caller_registers));
+  ASSERT_TRUE(VerifyRegisters(__FILE__, __LINE__,
+                              expected_caller_registers, caller_registers));
+
+  frame.instruction = 0x3d41;
+  current_registers["$esp"] = 0x10014;
+  cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
+  ASSERT_TRUE(cfi_frame_info.get());
+  ASSERT_TRUE(cfi_frame_info.get()
+              ->FindCallerRegs<u_int32_t>(current_registers, memory,
+                                          &caller_registers));
+  ASSERT_TRUE(VerifyRegisters(__FILE__, __LINE__,
+                              expected_caller_registers, caller_registers));
+
+  frame.instruction = 0x3d43;
+  current_registers["$ebp"] = 0x10014;
+  cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
+  ASSERT_TRUE(cfi_frame_info.get());
+  ASSERT_TRUE(cfi_frame_info.get()
+              ->FindCallerRegs<u_int32_t>(current_registers, memory,
+                                          &caller_registers));
+  VerifyRegisters(__FILE__, __LINE__,
+                  expected_caller_registers, caller_registers);
+
+  frame.instruction = 0x3d54;
+  current_registers["$ebx"] = 0x6864f054U;
+  cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
+  ASSERT_TRUE(cfi_frame_info.get());
+  ASSERT_TRUE(cfi_frame_info.get()
+              ->FindCallerRegs<u_int32_t>(current_registers, memory,
+                                          &caller_registers));
+  VerifyRegisters(__FILE__, __LINE__,
+                  expected_caller_registers, caller_registers);
+
+  frame.instruction = 0x3d5a;
+  current_registers["$esi"] = 0x6285f79aU;
+  cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
+  ASSERT_TRUE(cfi_frame_info.get());
+  ASSERT_TRUE(cfi_frame_info.get()
+              ->FindCallerRegs<u_int32_t>(current_registers, memory,
+                                          &caller_registers));
+  VerifyRegisters(__FILE__, __LINE__,
+                  expected_caller_registers, caller_registers);
+
+  frame.instruction = 0x3d84;
+  current_registers["$edi"] = 0x64061449U;
+  cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
+  ASSERT_TRUE(cfi_frame_info.get());
+  ASSERT_TRUE(cfi_frame_info.get()
+              ->FindCallerRegs<u_int32_t>(current_registers, memory,
+                                          &caller_registers));
+  VerifyRegisters(__FILE__, __LINE__,
+                  expected_caller_registers, caller_registers);
+
+  frame.instruction = 0x2900;
+  frame.module = &module1;
+  fast_resolver.FillSourceLineInfo(&frame);
+  ASSERT_EQ(frame.function_name, string("PublicSymbol"));
+
+  frame.instruction = 0x4000;
+  frame.module = &module1;
+  fast_resolver.FillSourceLineInfo(&frame);
+  ASSERT_EQ(frame.function_name, string("LargeFunction"));
+
+  frame.instruction = 0x2181;
+  frame.module = &module2;
+  fast_resolver.FillSourceLineInfo(&frame);
+  ASSERT_EQ(frame.function_name, "Function2_2");
+  ASSERT_EQ(frame.function_base, 0x2170);
+  ASSERT_TRUE(frame.module);
+  ASSERT_EQ(frame.module->code_file(), "module2");
+  ASSERT_EQ(frame.source_file_name, "file2_2.cc");
+  ASSERT_EQ(frame.source_line, 21);
+  ASSERT_EQ(frame.source_line_base, 0x2180);
+  windows_frame_info.reset(fast_resolver.FindWindowsFrameInfo(&frame));
+  ASSERT_TRUE(windows_frame_info.get());
+  ASSERT_EQ(windows_frame_info->prolog_size, 1);
+
+  frame.instruction = 0x216f;
+  fast_resolver.FillSourceLineInfo(&frame);
+  ASSERT_EQ(frame.function_name, "Public2_1");
+
+  ClearSourceLineInfo(&frame);
+  frame.instruction = 0x219f;
+  frame.module = &module2;
+  fast_resolver.FillSourceLineInfo(&frame);
+  ASSERT_TRUE(frame.function_name.empty());
+
+  frame.instruction = 0x21a0;
+  frame.module = &module2;
+  fast_resolver.FillSourceLineInfo(&frame);
+  ASSERT_EQ(frame.function_name, "Public2_2");
+}
+
+TEST_F(TestFastSourceLineResolver, TestInvalidLoads) {
+  TestCodeModule module3("module3");
+  ASSERT_FALSE(basic_resolver.LoadModule(&module3,
+                                         testdata_dir + "/module3_bad.out"));
+  ASSERT_FALSE(basic_resolver.HasModule(&module3));
+  // Convert module3 to fast_module:
+  ASSERT_FALSE(serializer.ConvertOneModule(module3.code_file(),
+                                           &basic_resolver,
+                                           &fast_resolver));
+  ASSERT_FALSE(fast_resolver.HasModule(&module3));
+
+  TestCodeModule module4("module4");
+  ASSERT_FALSE(basic_resolver.LoadModule(&module4,
+                                         testdata_dir + "/module4_bad.out"));
+  ASSERT_FALSE(basic_resolver.HasModule(&module4));
+  // Convert module4 to fast_module:
+  ASSERT_FALSE(serializer.ConvertOneModule(module4.code_file(),
+                                           &basic_resolver,
+                                           &fast_resolver));
+  ASSERT_FALSE(fast_resolver.HasModule(&module4));
+
+  TestCodeModule module5("module5");
+  ASSERT_FALSE(fast_resolver.LoadModule(&module5,
+                                         testdata_dir + "/invalid-filename"));
+  ASSERT_FALSE(fast_resolver.HasModule(&module5));
+
+  TestCodeModule invalidmodule("invalid-module");
+  ASSERT_FALSE(fast_resolver.HasModule(&invalidmodule));
+}
+
+TEST_F(TestFastSourceLineResolver, TestUnload) {
+  TestCodeModule module1("module1");
+  ASSERT_FALSE(basic_resolver.HasModule(&module1));
+
+  ASSERT_TRUE(basic_resolver.LoadModule(&module1, symbol_file(1)));
+  ASSERT_TRUE(basic_resolver.HasModule(&module1));
+  // Convert module1 to fast_module.
+  ASSERT_TRUE(serializer.ConvertOneModule(module1.code_file(),
+                                          &basic_resolver,
+                                          &fast_resolver));
+  ASSERT_TRUE(fast_resolver.HasModule(&module1));
+  basic_resolver.UnloadModule(&module1);
+  fast_resolver.UnloadModule(&module1);
+  ASSERT_FALSE(fast_resolver.HasModule(&module1));
+
+  ASSERT_TRUE(basic_resolver.LoadModule(&module1, symbol_file(1)));
+  ASSERT_TRUE(basic_resolver.HasModule(&module1));
+  // Convert module1 to fast_module.
+  ASSERT_TRUE(serializer.ConvertOneModule(module1.code_file(),
+                                          &basic_resolver,
+                                          &fast_resolver));
+  ASSERT_TRUE(fast_resolver.HasModule(&module1));
+}
+
+TEST_F(TestFastSourceLineResolver, CompareModule) {
+  char *symbol_data;
+  string symbol_data_string;
+  string filename;
+
+  for (int module_index = 0; module_index < 3; ++module_index) {
+    std::stringstream ss;
+    ss << testdata_dir << "/module" << module_index << ".out";
+    filename = ss.str();
+    ASSERT_TRUE(SourceLineResolverBase::ReadSymbolFile(
+        &symbol_data, symbol_file(module_index)));
+    symbol_data_string = symbol_data;
+    delete [] symbol_data;
+    ASSERT_TRUE(module_comparer.Compare(symbol_data_string));
+  }
+}
+
+}  // namespace
+
+int main(int argc, char *argv[]) {
+  ::testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}
diff --git a/src/processor/map_serializers-inl.h b/src/processor/map_serializers-inl.h
new file mode 100644
index 0000000..d68e8b9
--- /dev/null
+++ b/src/processor/map_serializers-inl.h
@@ -0,0 +1,266 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// map_serializers_inl.h: implementation for serializing std::map and its
+// wrapper classes.
+//
+// See map_serializers.h for documentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_MAP_SERIALIZERS_INL_H__
+#define PROCESSOR_MAP_SERIALIZERS_INL_H__
+
+#include <map>
+#include <string>
+
+#include "processor/map_serializers.h"
+#include "processor/simple_serializer.h"
+
+#include "processor/address_map-inl.h"
+#include "processor/range_map-inl.h"
+#include "processor/contained_range_map-inl.h"
+
+#include "processor/logging.h"
+
+namespace google_breakpad {
+
+template<typename Key, typename Value>
+size_t StdMapSerializer<Key, Value>::SizeOf(
+    const std::map<Key, Value> &m) const {
+  size_t size = 0;
+  size_t header_size = (1 + m.size()) * sizeof(u_int32_t);
+  size += header_size;
+
+  typename std::map<Key, Value>::const_iterator iter;
+  for (iter = m.begin(); iter != m.end(); ++iter) {
+    size += key_serializer_.SizeOf(iter->first);
+    size += value_serializer_.SizeOf(iter->second);
+  }
+  return size;
+}
+
+template<typename Key, typename Value>
+char *StdMapSerializer<Key, Value>::Write(const std::map<Key, Value> &m,
+                                          char *dest) const {
+  if (!dest) {
+    BPLOG(ERROR) << "StdMapSerializer failed: write to NULL address.";
+    return NULL;
+  }
+  char *start_address = dest;
+
+  // Write header:
+  // Number of nodes.
+  dest = SimpleSerializer<u_int32_t>::Write(m.size(), dest);
+  // Nodes offsets.
+  u_int32_t *offsets = reinterpret_cast<u_int32_t*>(dest);
+  dest += sizeof(u_int32_t) * m.size();
+
+  char *key_address = dest;
+  dest += sizeof(Key) * m.size();
+
+  // Traverse map.
+  typename std::map<Key, Value>::const_iterator iter;
+  int index = 0;
+  for (iter = m.begin(); iter != m.end(); ++iter, ++index) {
+    offsets[index] = static_cast<u_int32_t>(dest - start_address);
+    key_address = key_serializer_.Write(iter->first, key_address);
+    dest = value_serializer_.Write(iter->second, dest);
+  }
+  return dest;
+}
+
+template<typename Key, typename Value>
+char *StdMapSerializer<Key, Value>::Serialize(
+    const std::map<Key, Value> &m, unsigned int *size) const {
+  // Compute size of memory to be allocated.
+  unsigned int size_to_alloc = SizeOf(m);
+  // Allocate memory.
+  char *serialized_data = new char[size_to_alloc];
+  if (!serialized_data) {
+    BPLOG(INFO) << "StdMapSerializer memory allocation failed.";
+    if (size) *size = 0;
+    return NULL;
+  }
+  // Write serialized data into memory.
+  Write(m, serialized_data);
+
+  if (size) *size = size_to_alloc;
+  return serialized_data;
+}
+
+template<typename Address, typename Entry>
+size_t RangeMapSerializer<Address, Entry>::SizeOf(
+    const RangeMap<Address, Entry> &m) const {
+  size_t size = 0;
+  size_t header_size = (1 + m.map_.size()) * sizeof(u_int32_t);
+  size += header_size;
+
+  typename std::map<Address, Range>::const_iterator iter;
+  for (iter = m.map_.begin(); iter != m.map_.end(); ++iter) {
+    // Size of key (high address).
+    size += address_serializer_.SizeOf(iter->first);
+    // Size of base (low address).
+    size += address_serializer_.SizeOf(iter->second.base());
+    // Size of entry.
+    size += entry_serializer_.SizeOf(iter->second.entry());
+  }
+  return size;
+}
+
+template<typename Address, typename Entry>
+char *RangeMapSerializer<Address, Entry>::Write(
+    const RangeMap<Address, Entry> &m, char *dest) const {
+  if (!dest) {
+    BPLOG(ERROR) << "RangeMapSerializer failed: write to NULL address.";
+    return NULL;
+  }
+  char *start_address = dest;
+
+  // Write header:
+  // Number of nodes.
+  dest = SimpleSerializer<u_int32_t>::Write(m.map_.size(), dest);
+  // Nodes offsets.
+  u_int32_t *offsets = reinterpret_cast<u_int32_t*>(dest);
+  dest += sizeof(u_int32_t) * m.map_.size();
+
+  char *key_address = dest;
+  dest += sizeof(Address) * m.map_.size();
+
+  // Traverse map.
+  typename std::map<Address, Range>::const_iterator iter;
+  int index = 0;
+  for (iter = m.map_.begin(); iter != m.map_.end(); ++iter, ++index) {
+    offsets[index] = static_cast<u_int32_t>(dest - start_address);
+    key_address = address_serializer_.Write(iter->first, key_address);
+    dest = address_serializer_.Write(iter->second.base(), dest);
+    dest = entry_serializer_.Write(iter->second.entry(), dest);
+  }
+  return dest;
+}
+
+template<typename Address, typename Entry>
+char *RangeMapSerializer<Address, Entry>::Serialize(
+    const RangeMap<Address, Entry> &m, unsigned int *size) const {
+  // Compute size of memory to be allocated.
+  unsigned int size_to_alloc = SizeOf(m);
+  // Allocate memory.
+  char *serialized_data = new char[size_to_alloc];
+  if (!serialized_data) {
+    BPLOG(INFO) << "RangeMapSerializer memory allocation failed.";
+    if (size) *size = 0;
+    return NULL;
+  }
+
+  // Write serialized data into memory.
+  Write(m, serialized_data);
+
+  if (size) *size = size_to_alloc;
+  return serialized_data;
+}
+
+
+template<class AddrType, class EntryType>
+size_t ContainedRangeMapSerializer<AddrType, EntryType>::SizeOf(
+    const ContainedRangeMap<AddrType, EntryType> *m) const {
+  size_t size = 0;
+  size_t header_size = addr_serializer_.SizeOf(m->base_)
+                       + entry_serializer_.SizeOf(m->entry_)
+                       + sizeof(u_int32_t);
+  size += header_size;
+  // In case m.map_ == NULL, we treat it as an empty map:
+  size += sizeof(u_int32_t);
+  if (m->map_) {
+    size += m->map_->size() * sizeof(u_int32_t);
+    typename Map::const_iterator iter;
+    for (iter = m->map_->begin(); iter != m->map_->end(); ++iter) {
+      size += addr_serializer_.SizeOf(iter->first);
+      // Recursive calculation of size:
+      size += SizeOf(iter->second);
+    }
+  }
+  return size;
+}
+
+template<class AddrType, class EntryType>
+char *ContainedRangeMapSerializer<AddrType, EntryType>::Write(
+    const ContainedRangeMap<AddrType, EntryType> *m, char *dest) const {
+  if (!dest) {
+    BPLOG(ERROR) << "StdMapSerializer failed: write to NULL address.";
+    return NULL;
+  }
+  dest = addr_serializer_.Write(m->base_, dest);
+  dest = SimpleSerializer<u_int32_t>::Write(entry_serializer_.SizeOf(m->entry_),
+                                            dest);
+  dest = entry_serializer_.Write(m->entry_, dest);
+
+  // Write map<<AddrType, ContainedRangeMap*>:
+  char *map_address = dest;
+  if (m->map_ == NULL) {
+    dest = SimpleSerializer<u_int32_t>::Write(0, dest);
+  } else {
+    dest = SimpleSerializer<u_int32_t>::Write(m->map_->size(), dest);
+    u_int32_t *offsets = reinterpret_cast<u_int32_t*>(dest);
+    dest += sizeof(u_int32_t) * m->map_->size();
+
+    char *key_address = dest;
+    dest += sizeof(AddrType) * m->map_->size();
+
+    // Traverse map.
+    typename Map::const_iterator iter;
+    int index = 0;
+    for (iter = m->map_->begin(); iter != m->map_->end(); ++iter, ++index) {
+      offsets[index] = static_cast<u_int32_t>(dest - map_address);
+      key_address = addr_serializer_.Write(iter->first, key_address);
+      // Recursively write.
+      dest = Write(iter->second, dest);
+    }
+  }
+  return dest;
+}
+
+template<class AddrType, class EntryType>
+char *ContainedRangeMapSerializer<AddrType, EntryType>::Serialize(
+    const ContainedRangeMap<AddrType, EntryType> *m, unsigned int *size) const {
+  unsigned int size_to_alloc = SizeOf(m);
+  // Allocating memory.
+  char *serialized_data = new char[size_to_alloc];
+  if (!serialized_data) {
+    BPLOG(INFO) << "ContainedRangeMapSerializer memory allocation failed.";
+    if (size) *size = 0;
+    return NULL;
+  }
+  Write(m, serialized_data);
+  if (size) *size = size_to_alloc;
+  return serialized_data;
+}
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_MAP_SERIALIZERS_INL_H__
diff --git a/src/processor/map_serializers.h b/src/processor/map_serializers.h
new file mode 100644
index 0000000..a0b9d3f
--- /dev/null
+++ b/src/processor/map_serializers.h
@@ -0,0 +1,168 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// map_serializers.h: defines templates for serializing std::map and its
+// wrappers: AddressMap, RangeMap, and ContainedRangeMap.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+
+#ifndef PROCESSOR_MAP_SERIALIZERS_H__
+#define PROCESSOR_MAP_SERIALIZERS_H__
+
+#include <map>
+#include <string>
+
+#include "processor/simple_serializer.h"
+
+#include "processor/address_map-inl.h"
+#include "processor/range_map-inl.h"
+#include "processor/contained_range_map-inl.h"
+
+namespace google_breakpad {
+
+// StdMapSerializer allocates memory and serializes an std::map instance into a
+// chunk of memory data.
+template<typename Key, typename Value>
+class StdMapSerializer {
+ public:
+  // Calculate the memory size of serialized data.
+  size_t SizeOf(const std::map<Key, Value> &m) const;
+
+  // Writes the serialized data to memory with start address = dest,
+  // and returns the "end" of data, i.e., return the address follow the final
+  // byte of data.
+  // NOTE: caller has to allocate enough memory before invoke Write() method.
+  char* Write(const std::map<Key, Value> &m, char* dest) const;
+
+  // Serializes a std::map object into a chunk of memory data with format
+  // described in "StaticMap.h" comment.
+  // Returns a pointer to the serialized data.  If size != NULL, *size is set
+  // to the size of serialized data, i.e., SizeOf(m).
+  // Caller has the ownership of memory allocated as "new char[]".
+  char* Serialize(const std::map<Key, Value> &m, unsigned int *size) const;
+
+ private:
+  SimpleSerializer<Key> key_serializer_;
+  SimpleSerializer<Value> value_serializer_;
+};
+
+// AddressMapSerializer allocates memory and serializes an AddressMap into a
+// chunk of memory data.
+template<typename Addr, typename Entry>
+class AddressMapSerializer {
+ public:
+  // Calculate the memory size of serialized data.
+  size_t SizeOf(const AddressMap<Addr, Entry> &m) const {
+    return std_map_serializer_.SizeOf(m.map_);
+  }
+
+  // Write the serialized data to specified memory location.  Return the "end"
+  // of data, i.e., return the address after the final byte of data.
+  // NOTE: caller has to allocate enough memory before invoke Write() method.
+  char* Write(const AddressMap<Addr, Entry> &m, char *dest) const {
+    return std_map_serializer_.Write(m.map_, dest);
+  }
+
+  // Serializes an AddressMap object into a chunk of memory data.
+  // Returns a pointer to the serialized data.  If size != NULL, *size is set
+  // to the size of serialized data, i.e., SizeOf(m).
+  // Caller has the ownership of memory allocated as "new char[]".
+  char* Serialize(const AddressMap<Addr, Entry> &m, unsigned int *size) const {
+    return std_map_serializer_.Serialize(m.map_, size);
+  }
+
+ private:
+  // AddressMapSerializer is a simple wrapper of StdMapSerializer, just as
+  // AddressMap is a simple wrapper of std::map.
+  StdMapSerializer<Addr, Entry> std_map_serializer_;
+};
+
+// RangeMapSerializer allocates memory and serializes a RangeMap instance into a
+// chunk of memory data.
+template<typename Address, typename Entry>
+class RangeMapSerializer {
+ public:
+  // Calculate the memory size of serialized data.
+  size_t SizeOf(const RangeMap<Address, Entry> &m) const;
+
+  // Write the serialized data to specified memory location.  Return the "end"
+  // of data, i.e., return the address after the final byte of data.
+  // NOTE: caller has to allocate enough memory before invoke Write() method.
+  char* Write(const RangeMap<Address, Entry> &m, char* dest) const;
+
+  // Serializes a RangeMap object into a chunk of memory data.
+  // Returns a pointer to the serialized data.  If size != NULL, *size is set
+  // to the size of serialized data, i.e., SizeOf(m).
+  // Caller has the ownership of memory allocated as "new char[]".
+  char* Serialize(const RangeMap<Address, Entry> &m, unsigned int *size) const;
+
+ private:
+  // Convenient type name for Range.
+  typedef typename RangeMap<Address, Entry>::Range Range;
+
+  // Serializer for RangeMap's key and Range::base_.
+  SimpleSerializer<Address> address_serializer_;
+  // Serializer for RangeMap::Range::entry_.
+  SimpleSerializer<Entry> entry_serializer_;
+};
+
+// ContainedRangeMapSerializer allocates memory and serializes a
+// ContainedRangeMap instance into a chunk of memory data.
+template<class AddrType, class EntryType>
+class ContainedRangeMapSerializer {
+ public:
+  // Calculate the memory size of serialized data.
+  size_t SizeOf(const ContainedRangeMap<AddrType, EntryType> *m) const;
+
+  // Write the serialized data to specified memory location.  Return the "end"
+  // of data, i.e., return the address after the final byte of data.
+  // NOTE: caller has to allocate enough memory before invoke Write() method.
+  char* Write(const ContainedRangeMap<AddrType, EntryType> *m,
+              char* dest) const;
+
+  // Serializes a ContainedRangeMap object into a chunk of memory data.
+  // Returns a pointer to the serialized data.  If size != NULL, *size is set
+  // to the size of serialized data, i.e., SizeOf(m).
+  // Caller has the ownership of memory allocated as "new char[]".
+  char* Serialize(const ContainedRangeMap<AddrType, EntryType> *m,
+                  unsigned int *size) const;
+
+ private:
+  // Convenient type name for the underlying map type.
+  typedef std::map<AddrType, ContainedRangeMap<AddrType, EntryType>*> Map;
+
+  // Serializer for addresses and entries stored in ContainedRangeMap.
+  SimpleSerializer<AddrType> addr_serializer_;
+  SimpleSerializer<EntryType> entry_serializer_;
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_MAP_SERIALIZERS_H__
diff --git a/src/processor/map_serializers_unittest.cc b/src/processor/map_serializers_unittest.cc
new file mode 100644
index 0000000..abaef97
--- /dev/null
+++ b/src/processor/map_serializers_unittest.cc
@@ -0,0 +1,388 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// map_serializers_unittest.cc: Unit tests for std::map serializer and
+// std::map wrapper serializers.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#include <climits>
+#include <map>
+#include <string>
+#include <utility>
+#include <iostream>
+#include <sstream>
+
+#include "breakpad_googletest_includes.h"
+#include "map_serializers-inl.h"
+
+#include "processor/address_map-inl.h"
+#include "processor/range_map-inl.h"
+#include "processor/contained_range_map-inl.h"
+
+typedef int32_t AddrType;
+typedef int32_t EntryType;
+
+const int kSizeOfInt = 4;
+
+class TestStdMapSerializer : public ::testing::Test {
+ protected:
+  void SetUp() {
+    serialized_size_ = 0;
+    serialized_data_ = NULL;
+  }
+
+  void TearDown() {
+    delete [] serialized_data_;
+  }
+
+  std::map<AddrType, EntryType> std_map_;
+  google_breakpad::StdMapSerializer<AddrType, EntryType> serializer_;
+  u_int32_t serialized_size_;
+  char *serialized_data_;
+};
+
+TEST_F(TestStdMapSerializer, EmptyMapTestCase) {
+  const int32_t correct_data[] = { 0 };
+  u_int32_t correct_size = sizeof(correct_data);
+
+  // std_map_ is empty.
+  serialized_data_ = serializer_.Serialize(std_map_, &serialized_size_);
+
+  EXPECT_EQ(correct_size, serialized_size_);
+  EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
+}
+
+TEST_F(TestStdMapSerializer, MapWithTwoElementsTestCase) {
+  const int32_t correct_data[] = {
+      // # of nodes
+      2,
+      // Offsets
+      20, 24,
+      // Keys
+      1, 3,
+      // Values
+      2, 6
+  };
+  u_int32_t correct_size = sizeof(correct_data);
+
+  std_map_.insert(std::make_pair(1, 2));
+  std_map_.insert(std::make_pair(3, 6));
+
+  serialized_data_ = serializer_.Serialize(std_map_, &serialized_size_);
+
+  EXPECT_EQ(correct_size, serialized_size_);
+  EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
+}
+
+TEST_F(TestStdMapSerializer, MapWithFiveElementsTestCase) {
+  const int32_t correct_data[] = {
+      // # of nodes
+      5,
+      // Offsets
+      44, 48, 52, 56, 60,
+      // Keys
+      1, 2, 3, 4, 5,
+      // Values
+      11, 12, 13, 14, 15
+  };
+  u_int32_t correct_size = sizeof(correct_data);
+
+  for (int i = 1; i < 6; ++i)
+    std_map_.insert(std::make_pair(i, 10 + i));
+
+  serialized_data_ = serializer_.Serialize(std_map_, &serialized_size_);
+
+  EXPECT_EQ(correct_size, serialized_size_);
+  EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
+}
+
+class TestAddressMapSerializer : public ::testing::Test {
+ protected:
+  void SetUp() {
+    serialized_size_ = 0;
+    serialized_data_ = 0;
+  }
+
+  void TearDown() {
+    delete [] serialized_data_;
+  }
+
+  google_breakpad::AddressMap<AddrType, EntryType> address_map_;
+  google_breakpad::AddressMapSerializer<AddrType, EntryType> serializer_;
+  u_int32_t serialized_size_;
+  char *serialized_data_;
+};
+
+TEST_F(TestAddressMapSerializer, EmptyMapTestCase) {
+  const int32_t correct_data[] = { 0 };
+  u_int32_t correct_size = sizeof(correct_data);
+
+  // std_map_ is empty.
+  serialized_data_ = serializer_.Serialize(address_map_, &serialized_size_);
+
+  EXPECT_EQ(correct_size, serialized_size_);
+  EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
+}
+
+TEST_F(TestAddressMapSerializer, MapWithTwoElementsTestCase) {
+  const int32_t correct_data[] = {
+      // # of nodes
+      2,
+      // Offsets
+      20, 24,
+      // Keys
+      1, 3,
+      // Values
+      2, 6
+  };
+  u_int32_t correct_size = sizeof(correct_data);
+
+  address_map_.Store(1, 2);
+  address_map_.Store(3, 6);
+
+  serialized_data_ = serializer_.Serialize(address_map_, &serialized_size_);
+
+  EXPECT_EQ(correct_size, serialized_size_);
+  EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
+}
+
+TEST_F(TestAddressMapSerializer, MapWithFourElementsTestCase) {
+  const int32_t correct_data[] = {
+      // # of nodes
+      4,
+      // Offsets
+      36, 40, 44, 48,
+      // Keys
+      -6, -4, 8, 123,
+      // Values
+      2, 3, 5, 8
+  };
+  u_int32_t correct_size = sizeof(correct_data);
+
+  address_map_.Store(-6, 2);
+  address_map_.Store(-4, 3);
+  address_map_.Store(8, 5);
+  address_map_.Store(123, 8);
+
+  serialized_data_ = serializer_.Serialize(address_map_, &serialized_size_);
+
+  EXPECT_EQ(correct_size, serialized_size_);
+  EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
+}
+
+
+class TestRangeMapSerializer : public ::testing::Test {
+ protected:
+  void SetUp() {
+    serialized_size_ = 0;
+    serialized_data_ = 0;
+  }
+
+  void TearDown() {
+    delete [] serialized_data_;
+  }
+
+  google_breakpad::RangeMap<AddrType, EntryType> range_map_;
+  google_breakpad::RangeMapSerializer<AddrType, EntryType> serializer_;
+  u_int32_t serialized_size_;
+  char *serialized_data_;
+};
+
+TEST_F(TestRangeMapSerializer, EmptyMapTestCase) {
+  const int32_t correct_data[] = { 0 };
+  u_int32_t correct_size = sizeof(correct_data);
+
+  // range_map_ is empty.
+  serialized_data_ = serializer_.Serialize(range_map_, &serialized_size_);
+
+  EXPECT_EQ(correct_size, serialized_size_);
+  EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
+}
+
+TEST_F(TestRangeMapSerializer, MapWithOneRangeTestCase) {
+  const int32_t correct_data[] = {
+      // # of nodes
+      1,
+      // Offsets
+      12,
+      // Keys: high address
+      10,
+      // Values: (low address, entry) pairs
+      1, 6
+  };
+  u_int32_t correct_size = sizeof(correct_data);
+
+  range_map_.StoreRange(1, 10, 6);
+
+  serialized_data_ = serializer_.Serialize(range_map_, &serialized_size_);
+
+  EXPECT_EQ(correct_size, serialized_size_);
+  EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
+}
+
+TEST_F(TestRangeMapSerializer, MapWithThreeRangesTestCase) {
+  const int32_t correct_data[] = {
+      // # of nodes
+      3,
+      // Offsets
+      28,    36,    44,
+      // Keys: high address
+      5,     9,     20,
+      // Values: (low address, entry) pairs
+      2, 1,  6, 2,  10, 3
+  };
+  u_int32_t correct_size = sizeof(correct_data);
+
+  ASSERT_TRUE(range_map_.StoreRange(2, 4, 1));
+  ASSERT_TRUE(range_map_.StoreRange(6, 4, 2));
+  ASSERT_TRUE(range_map_.StoreRange(10, 11, 3));
+
+  serialized_data_ = serializer_.Serialize(range_map_, &serialized_size_);
+
+  EXPECT_EQ(correct_size, serialized_size_);
+  EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
+}
+
+
+class TestContainedRangeMapSerializer : public ::testing::Test {
+ protected:
+  void SetUp() {
+    serialized_size_ = 0;
+    serialized_data_ = 0;
+  }
+
+  void TearDown() {
+    delete [] serialized_data_;
+  }
+
+  google_breakpad::ContainedRangeMap<AddrType, EntryType> crm_map_;
+  google_breakpad::ContainedRangeMapSerializer<AddrType, EntryType> serializer_;
+  u_int32_t serialized_size_;
+  char *serialized_data_;
+};
+
+TEST_F(TestContainedRangeMapSerializer, EmptyMapTestCase) {
+  const int32_t correct_data[] = {
+      0,  // base address of root
+      4,  // size of entry
+      0,  // entry stored at root
+      0   // empty map stored at root
+  };
+  u_int32_t correct_size = sizeof(correct_data);
+
+  // crm_map_ is empty.
+  serialized_data_ = serializer_.Serialize(&crm_map_, &serialized_size_);
+
+  EXPECT_EQ(correct_size, serialized_size_);
+  EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
+}
+
+TEST_F(TestContainedRangeMapSerializer, MapWithOneRangeTestCase) {
+  const int32_t correct_data[] = {
+      0,  // base address of root
+      4,  // size of entry
+      0,  // entry stored at root
+      // Map stored at root node:
+      1,  // # of nodes
+      12, // offset
+      9,  // key
+      // value: a child ContainedRangeMap
+      3,  // base address of child CRM
+      4,  // size of entry
+      -1, // entry stored in child CRM
+      0   // empty sub-map stored in child CRM
+  };
+  u_int32_t correct_size = sizeof(correct_data);
+
+  crm_map_.StoreRange(3, 7, -1);
+
+  serialized_data_ = serializer_.Serialize(&crm_map_, &serialized_size_);
+
+  EXPECT_EQ(correct_size, serialized_size_);
+  EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
+}
+
+TEST_F(TestContainedRangeMapSerializer, MapWithTwoLevelsTestCase) {
+  // Tree structure of ranges:
+  //           root              level 0
+  //            |
+  //           map
+  //         /     \             level 1: child1, child2
+  //      2~8      10~20
+  //       |         |
+  //      map       map
+  //     /   \       |
+  //    3~4 6~7    16-20         level 2: grandchild1, grandchild2, grandchild3
+
+  const int32_t correct_data[] = {
+      // root: base, entry_size, entry
+      0, 4, 0,
+      // root's map: # of nodes, offset1, offset2, key1, key2
+      2, 20, 84, 8, 20,
+      // child1: base, entry_size, entry:
+      2, 4, -1,
+      // child1's map: # of nodes, offset1, offset2, key1, key2
+      2, 20, 36, 4, 7,
+        // grandchild1: base, entry_size, entry, empty_map
+        3, 4, -1, 0,
+        // grandchild2: base, entry_size, entry, empty_map
+        6, 4, -1, 0,
+      // child2: base, entry_size, entry:
+      10, 4, -1,
+      // child2's map: # of nodes, offset1, key1
+      1, 12, 20,
+        // grandchild3: base, entry_size, entry, empty_map
+        16, 4, -1, 0
+  };
+  u_int32_t correct_size = sizeof(correct_data);
+
+  // Store child1.
+  ASSERT_TRUE(crm_map_.StoreRange(2, 7, -1));
+  // Store child2.
+  ASSERT_TRUE(crm_map_.StoreRange(10, 11, -1));
+  // Store grandchild1.
+  ASSERT_TRUE(crm_map_.StoreRange(3, 2, -1));
+  // Store grandchild2.
+  ASSERT_TRUE(crm_map_.StoreRange(6, 2, -1));
+  // Store grandchild3.
+  ASSERT_TRUE(crm_map_.StoreRange(16, 5, -1));
+
+  serialized_data_ = serializer_.Serialize(&crm_map_, &serialized_size_);
+
+  EXPECT_EQ(correct_size, serialized_size_);
+  EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
+}
+
+
+int main(int argc, char *argv[]) {
+  ::testing::InitGoogleTest(&argc, argv);
+
+  return RUN_ALL_TESTS();
+}
diff --git a/src/processor/minidump.cc b/src/processor/minidump.cc
index f3fb294..f57001a 100644
--- a/src/processor/minidump.cc
+++ b/src/processor/minidump.cc
@@ -33,7 +33,9 @@
 //
 // Author: Mark Mentovai
 
+#include "google_breakpad/processor/minidump.h"
 
+#include <assert.h>
 #include <fcntl.h>
 #include <stdio.h>
 #include <string.h>
@@ -49,7 +51,6 @@
 #define O_BINARY 0
 #endif  // _WIN32
 
-#include <cassert>
 #include <fstream>
 #include <iostream>
 #include <limits>
@@ -58,7 +59,6 @@
 
 #include "processor/range_map-inl.h"
 
-#include "google_breakpad/processor/minidump.h"
 #include "processor/basic_code_module.h"
 #include "processor/basic_code_modules.h"
 #include "processor/logging.h"
@@ -676,7 +676,7 @@
       }
 
       default: {
-        // Unknown context type - Don't log as an error yet. Let the 
+        // Unknown context type - Don't log as an error yet. Let the
         // caller work that out.
         BPLOG(INFO) << "MinidumpContext unknown context type " <<
           HexString(cpu_type);
@@ -1185,11 +1185,12 @@
     return false;
   }
 
+  // Common failure case
   if (address < descriptor_->start_of_memory_range ||
       sizeof(T) > numeric_limits<u_int64_t>::max() - address ||
       address + sizeof(T) > descriptor_->start_of_memory_range +
                             descriptor_->memory.data_size) {
-    BPLOG(ERROR) << "MinidumpMemoryRegion request out of range: " <<
+    BPLOG(INFO) << "MinidumpMemoryRegion request out of range: " <<
                     HexString(address) << "+" << sizeof(T) << "/" <<
                     HexString(descriptor_->start_of_memory_range) << "+" <<
                     HexString(descriptor_->memory.data_size);
@@ -1482,7 +1483,7 @@
     }
   }
 
-  
+
   if (thread_count > max_threads_) {
     BPLOG(ERROR) << "MinidumpThreadList count " << thread_count <<
                     " exceeds maximum " << max_threads_;
@@ -1839,8 +1840,9 @@
     }
   }
 
-  BPLOG_IF(ERROR, file.empty()) << "MinidumpModule could not determine "
-                                   "debug_file for " << *name_;
+  // Relatively common case
+  BPLOG_IF(INFO, file.empty()) << "MinidumpModule could not determine "
+                                  "debug_file for " << *name_;
 
   return file;
 }
@@ -1907,8 +1909,9 @@
 
   // TODO(mmentovai): on the Mac, provide fallbacks as in code_identifier().
 
-  BPLOG_IF(ERROR, identifier.empty()) << "MinidumpModule could not determine "
-                                         "debug_identifier for " << *name_;
+  // Relatively common case
+  BPLOG_IF(INFO, identifier.empty()) << "MinidumpModule could not determine "
+                                        "debug_identifier for " << *name_;
 
   return identifier;
 }
@@ -2932,7 +2935,8 @@
 
     scoped_ptr<string> new_expression(UTF16ToUTF8(expression_utf16,
                                                   minidump_->swap()));
-    expression_ = *new_expression;
+    if (new_expression.get())
+      expression_ = *new_expression;
   }
   
   // assertion
@@ -2944,7 +2948,8 @@
     memcpy(&function_utf16[0], &assertion_.function[0], byte_length);
     scoped_ptr<string> new_function(UTF16ToUTF8(function_utf16,
                                                 minidump_->swap()));
-    function_ = *new_function;
+    if (new_function.get())
+      function_ = *new_function;
   }
 
   // file
@@ -2956,7 +2961,8 @@
     memcpy(&file_utf16[0], &assertion_.file[0], byte_length);
     scoped_ptr<string> new_file(UTF16ToUTF8(file_utf16,
                                             minidump_->swap()));
-    file_ = *new_file;
+    if (new_file.get())
+      file_ = *new_file;
   }
 
   if (minidump_->swap()) {
diff --git a/src/processor/minidump_dump.cc b/src/processor/minidump_dump.cc
index 82a2e8d..99643bb 100644
--- a/src/processor/minidump_dump.cc
+++ b/src/processor/minidump_dump.cc
@@ -32,8 +32,8 @@
 //
 // Author: Mark Mentovai
 
-#include <cstdio>
-#include <cstring>
+#include <stdio.h>
+#include <string.h>
 
 #include "google_breakpad/processor/minidump.h"
 #include "processor/logging.h"
diff --git a/src/processor/minidump_processor.cc b/src/processor/minidump_processor.cc
index e2b5bd3..a74db32 100644
--- a/src/processor/minidump_processor.cc
+++ b/src/processor/minidump_processor.cc
@@ -27,13 +27,15 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include <cassert>
-#include <cstdio>
-
 #include "google_breakpad/processor/minidump_processor.h"
+
+#include <assert.h>
+#include <stdio.h>
+
 #include "google_breakpad/processor/call_stack.h"
 #include "google_breakpad/processor/minidump.h"
 #include "google_breakpad/processor/process_state.h"
+#include "google_breakpad/processor/exploitability.h"
 #include "processor/logging.h"
 #include "processor/scoped_ptr.h"
 #include "processor/stackwalker_x86.h"
@@ -42,7 +44,15 @@
 
 MinidumpProcessor::MinidumpProcessor(SymbolSupplier *supplier,
                                      SourceLineResolverInterface *resolver)
-    : supplier_(supplier), resolver_(resolver) {
+    : supplier_(supplier), resolver_(resolver),
+      enable_exploitability_(false) {
+}
+
+MinidumpProcessor::MinidumpProcessor(SymbolSupplier *supplier,
+                                     SourceLineResolverInterface *resolver,
+                                     bool enable_exploitability)
+    : supplier_(supplier), resolver_(resolver),
+      enable_exploitability_(enable_exploitability) {
 }
 
 MinidumpProcessor::~MinidumpProcessor() {
@@ -86,8 +96,8 @@
         dump, &process_state->crash_address_);
   }
 
-   // This will just return an empty string if it doesn't exist.
-   process_state->assertion_ = GetAssertion(dump);
+  // This will just return an empty string if it doesn't exist.
+  process_state->assertion_ = GetAssertion(dump);
 
   MinidumpModuleList *module_list = dump->GetModuleList();
 
@@ -229,6 +239,22 @@
     process_state->requesting_thread_ = -1;
   }
 
+  // Exploitability defaults to EXPLOITABILITY_NOT_ANALYZED
+  process_state->exploitability_ = EXPLOITABILITY_NOT_ANALYZED;
+
+  // If an exploitability run was requested we perform the platform specific
+  // rating.
+  if (enable_exploitability_) {
+    scoped_ptr<Exploitability> exploitability(
+        Exploitability::ExploitabilityForPlatform(dump, process_state));
+    // The engine will be null if the platform is not supported
+    if (exploitability != NULL) {
+      process_state->exploitability_ = exploitability->CheckExploitability();
+    } else {
+      process_state->exploitability_ = EXPLOITABILITY_ERR_NOENGINE;
+    }
+  }
+
   BPLOG(INFO) << "Processed " << dump->path();
   return PROCESS_OK;
 }
@@ -241,7 +267,7 @@
   if (!dump.Read()) {
      BPLOG(ERROR) << "Minidump " << dump.path() << " could not be read";
      return PROCESS_ERROR_MINIDUMP_NOT_FOUND;
-   }
+  }
 
   return Process(&dump, process_state);
 }
@@ -703,7 +729,27 @@
           // data.
           // This information is useful in addition to the code address, which
           // will be present in the crash thread's instruction field anyway.
-          reason = "EXCEPTION_ACCESS_VIOLATION";
+          if (raw_exception->exception_record.number_parameters >= 1) {
+            MDAccessViolationTypeWin av_type =
+                static_cast<MDAccessViolationTypeWin>
+                (raw_exception->exception_record.exception_information[0]);
+            switch (av_type) {
+              case MD_ACCESS_VIOLATION_WIN_READ:
+                reason = "EXCEPTION_ACCESS_VIOLATION_READ";
+                break;
+              case MD_ACCESS_VIOLATION_WIN_WRITE:
+                reason = "EXCEPTION_ACCESS_VIOLATION_WRITE";
+                break;
+              case MD_ACCESS_VIOLATION_WIN_EXEC:
+                reason = "EXCEPTION_ACCESS_VIOLATION_EXEC";
+                break;
+              default:
+                reason = "EXCEPTION_ACCESS_VIOLATION";
+                break;
+            }
+          } else {
+            reason = "EXCEPTION_ACCESS_VIOLATION";
+          }
           if (address &&
               raw_exception->exception_record.number_parameters >= 2) {
             *address =
@@ -764,9 +810,15 @@
         case MD_EXCEPTION_CODE_WIN_POSSIBLE_DEADLOCK:
           reason = "EXCEPTION_POSSIBLE_DEADLOCK";
           break;
+        case MD_EXCEPTION_CODE_WIN_STACK_BUFFER_OVERRUN:
+          reason = "EXCEPTION_STACK_BUFFER_OVERRUN";
+          break;
+        case MD_EXCEPTION_CODE_WIN_HEAP_CORRUPTION:
+          reason = "EXCEPTION_HEAP_CORRUPTION";
+          break;
         case MD_EXCEPTION_CODE_WIN_UNHANDLED_CPP_EXCEPTION:
-	  reason = "Unhandled C++ Exception";
-	  break;
+          reason = "Unhandled C++ Exception";
+          break;
         default:
           BPLOG(INFO) << "Unknown exception reason " << reason;
           break;
@@ -1015,8 +1067,7 @@
 }
 
 // static
-string MinidumpProcessor::GetAssertion(Minidump *dump)
-{
+string MinidumpProcessor::GetAssertion(Minidump *dump) {
   MinidumpAssertion *assertion = dump->GetAssertion();
   if (!assertion)
     return "";
diff --git a/src/processor/minidump_processor_unittest.cc b/src/processor/minidump_processor_unittest.cc
index dd4f633..fcac48f 100644
--- a/src/processor/minidump_processor_unittest.cc
+++ b/src/processor/minidump_processor_unittest.cc
@@ -30,11 +30,14 @@
 // Unit test for MinidumpProcessor.  Uses a pre-generated minidump and
 // corresponding symbol file, and checks the stack frames for correctness.
 
-#include <cstdlib>
+#include <stdlib.h>
+
 #include <string>
 #include <iostream>
 #include <fstream>
 #include <map>
+#include <utility>
+
 #include "breakpad_googletest_includes.h"
 #include "google_breakpad/processor/basic_source_line_resolver.h"
 #include "google_breakpad/processor/call_stack.h"
@@ -56,10 +59,10 @@
   MockMinidump() : Minidump("") {
   }
 
-  MOCK_METHOD0(Read,bool());
+  MOCK_METHOD0(Read, bool());
   MOCK_CONST_METHOD0(path, string());
-  MOCK_CONST_METHOD0(header,const MDRawHeader*());
-  MOCK_METHOD0(GetThreadList,MinidumpThreadList*());
+  MOCK_CONST_METHOD0(header, const MDRawHeader*());
+  MOCK_METHOD0(GetThreadList, MinidumpThreadList*());
 };
 }
 
@@ -111,11 +114,19 @@
                                      string *symbol_file,
                                      string *symbol_data);
 
+  virtual SymbolResult GetCStringSymbolData(const CodeModule *module,
+                                            const SystemInfo *system_info,
+                                            string *symbol_file,
+                                            char **symbol_data);
+
+  virtual void FreeSymbolData(const CodeModule *module);
+
   // When set to true, causes the SymbolSupplier to return INTERRUPT
   void set_interrupt(bool interrupt) { interrupt_ = interrupt; }
 
  private:
   bool interrupt_;
+  map<string, char *> memory_buffers_;
 };
 
 SymbolSupplier::SymbolResult TestSymbolSupplier::GetSymbolFile(
@@ -162,6 +173,39 @@
   return s;
 }
 
+SymbolSupplier::SymbolResult TestSymbolSupplier::GetCStringSymbolData(
+    const CodeModule *module,
+    const SystemInfo *system_info,
+    string *symbol_file,
+    char **symbol_data) {
+  string symbol_data_string;
+  SymbolSupplier::SymbolResult s = GetSymbolFile(module,
+                                                 system_info,
+                                                 symbol_file,
+                                                 &symbol_data_string);
+  if (s == FOUND) {
+    unsigned int size = symbol_data_string.size() + 1;
+    *symbol_data = new char[size];
+    if (*symbol_data == NULL) {
+      BPLOG(ERROR) << "Memory allocation failed for module: "
+                   << module->code_file() << " size: " << size;
+      return INTERRUPT;
+    }
+    strcpy(*symbol_data, symbol_data_string.c_str());
+    memory_buffers_.insert(make_pair(module->code_file(), *symbol_data));
+  }
+
+  return s;
+}
+
+void TestSymbolSupplier::FreeSymbolData(const CodeModule *module) {
+  map<string, char *>::iterator it = memory_buffers_.find(module->code_file());
+  if (it != memory_buffers_.end()) {
+    delete [] it->second;
+    memory_buffers_.erase(it);
+  }
+}
+
 // A mock symbol supplier that always returns NOT_FOUND; one current
 // use for testing the processor's caching of symbol lookups.
 class MockSymbolSupplier : public SymbolSupplier {
@@ -174,10 +218,14 @@
                                            const SystemInfo*,
                                            string*,
                                            string*));
+  MOCK_METHOD4(GetCStringSymbolData, SymbolResult(const CodeModule*,
+                                                  const SystemInfo*,
+                                                  string*,
+                                                  char**));
+  MOCK_METHOD1(FreeSymbolData, void(const CodeModule*));
 };
 
 class MinidumpProcessorTest : public ::testing::Test {
-
 };
 
 TEST_F(MinidumpProcessorTest, TestCorruptMinidumps) {
@@ -187,7 +235,7 @@
   MinidumpProcessor processor(&supplier, &resolver);
   ProcessState state;
 
-  EXPECT_EQ(processor.Process("nonexistant minidump", &state),
+  EXPECT_EQ(processor.Process("nonexistent minidump", &state),
             google_breakpad::PROCESS_ERROR_MINIDUMP_NOT_FOUND);
 
   EXPECT_CALL(dump, path()).WillRepeatedly(Return("mock minidump"));
@@ -216,11 +264,11 @@
   string minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") +
                          "/src/processor/testdata/minidump2.dmp";
   ProcessState state;
-  EXPECT_CALL(supplier, GetSymbolFile(
+  EXPECT_CALL(supplier, GetCStringSymbolData(
       Property(&google_breakpad::CodeModule::code_file,
                "c:\\test_app.exe"),
       _, _, _)).WillOnce(Return(SymbolSupplier::NOT_FOUND));
-  EXPECT_CALL(supplier, GetSymbolFile(
+  EXPECT_CALL(supplier, GetCStringSymbolData(
       Property(&google_breakpad::CodeModule::code_file,
                Ne("c:\\test_app.exe")),
       _, _, _)).WillRepeatedly(Return(SymbolSupplier::NOT_FOUND));
@@ -231,11 +279,11 @@
 
   // We need to verify that across minidumps, the processor will refetch
   // symbol files, even with the same symbol supplier.
-  EXPECT_CALL(supplier, GetSymbolFile(
+  EXPECT_CALL(supplier, GetCStringSymbolData(
       Property(&google_breakpad::CodeModule::code_file,
                "c:\\test_app.exe"),
       _, _, _)).WillOnce(Return(SymbolSupplier::NOT_FOUND));
-  EXPECT_CALL(supplier, GetSymbolFile(
+  EXPECT_CALL(supplier, GetCStringSymbolData(
       Property(&google_breakpad::CodeModule::code_file,
                Ne("c:\\test_app.exe")),
       _, _, _)).WillRepeatedly(Return(SymbolSupplier::NOT_FOUND));
@@ -260,7 +308,7 @@
   ASSERT_EQ(state.system_info()->cpu, kSystemInfoCPU);
   ASSERT_EQ(state.system_info()->cpu_info, kSystemInfoCPUInfo);
   ASSERT_TRUE(state.crashed());
-  ASSERT_EQ(state.crash_reason(), "EXCEPTION_ACCESS_VIOLATION");
+  ASSERT_EQ(state.crash_reason(), "EXCEPTION_ACCESS_VIOLATION_WRITE");
   ASSERT_EQ(state.crash_address(), 0x45U);
   ASSERT_EQ(state.threads()->size(), size_t(1));
   ASSERT_EQ(state.requesting_thread(), 0);
@@ -313,12 +361,16 @@
   ASSERT_EQ(state.modules()->GetModuleForAddress(0x77d43210)->version(),
             "5.1.2600.2622");
 
+  // Test that disabled exploitability engine defaults to
+  // EXPLOITABILITY_NOT_ANALYZED.
+  ASSERT_EQ(google_breakpad::EXPLOITABILITY_NOT_ANALYZED,
+            state.exploitability());
+
   // Test that the symbol supplier can interrupt processing
   state.Clear();
   supplier.set_interrupt(true);
   ASSERT_EQ(processor.Process(minidump_file, &state),
-            google_breakpad::PROCESS_SYMBOL_SUPPLIER_INTERRUPTED
-            );
+            google_breakpad::PROCESS_SYMBOL_SUPPLIER_INTERRUPTED);
 }
 }  // namespace
 
diff --git a/src/processor/minidump_stackwalk.cc b/src/processor/minidump_stackwalk.cc
index 2c3ab35..5699ec3 100644
--- a/src/processor/minidump_stackwalk.cc
+++ b/src/processor/minidump_stackwalk.cc
@@ -32,9 +32,10 @@
 //
 // Author: Mark Mentovai
 
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
 #include <string>
 #include <vector>
 
@@ -145,7 +146,7 @@
     int sequence = 0;
     if (cpu == "x86") {
       const StackFrameX86 *frame_x86 =
-          reinterpret_cast<const StackFrameX86*>(frame);
+        reinterpret_cast<const StackFrameX86*>(frame);
 
       if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EIP)
         sequence = PrintRegister("eip", frame_x86->context.eip, sequence);
@@ -165,32 +166,9 @@
         sequence = PrintRegister("edx", frame_x86->context.edx, sequence);
         sequence = PrintRegister("efl", frame_x86->context.eflags, sequence);
       }
-      const char *trust_name;
-      switch (frame_x86->trust) {
-        default:
-        case StackFrameX86::FRAME_TRUST_NONE:
-          trust_name = "unknown";
-          break;
-        case StackFrameX86::FRAME_TRUST_CONTEXT:
-          trust_name = "given as instruction pointer in context";
-          break;
-        case StackFrameX86::FRAME_TRUST_CFI:
-          trust_name = "call frame info";
-          break;
-        case StackFrameX86::FRAME_TRUST_CFI_SCAN:
-          trust_name = "call frame info with scanning";
-          break;
-        case StackFrameX86::FRAME_TRUST_FP:
-          trust_name = "previous frame's frame pointer";
-          break;
-        case StackFrameX86::FRAME_TRUST_SCAN:
-          trust_name = "stack scanning";
-          break;
-      }
-      printf("\n    Found by: %s", trust_name);
     } else if (cpu == "ppc") {
       const StackFramePPC *frame_ppc =
-          reinterpret_cast<const StackFramePPC*>(frame);
+        reinterpret_cast<const StackFramePPC*>(frame);
 
       if (frame_ppc->context_validity & StackFramePPC::CONTEXT_VALID_SRR0)
         sequence = PrintRegister("srr0", frame_ppc->context.srr0, sequence);
@@ -218,7 +196,7 @@
         sequence = PrintRegister("rbp", frame_amd64->context.rbp, sequence);
     } else if (cpu == "sparc") {
       const StackFrameSPARC *frame_sparc =
-          reinterpret_cast<const StackFrameSPARC*>(frame);
+        reinterpret_cast<const StackFrameSPARC*>(frame);
 
       if (frame_sparc->context_validity & StackFrameSPARC::CONTEXT_VALID_SP)
         sequence = PrintRegister("sp", frame_sparc->context.g_r[14], sequence);
@@ -228,7 +206,7 @@
         sequence = PrintRegister("pc", frame_sparc->context.pc, sequence);
     } else if (cpu == "arm") {
       const StackFrameARM *frame_arm =
-          reinterpret_cast<const StackFrameARM*>(frame);
+        reinterpret_cast<const StackFrameARM*>(frame);
 
       // General-purpose callee-saves registers.
       if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R4)
@@ -256,7 +234,7 @@
       if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_PC)
         sequence = PrintRegister("pc", frame_arm->context.iregs[15], sequence);
     }
-    printf("\n");
+    printf("\n    Found by: %s\n", frame->trust_description().c_str());
   }
 }
 
diff --git a/src/processor/minidump_unittest.cc b/src/processor/minidump_unittest.cc
index afbc487..9b459cc 100644
--- a/src/processor/minidump_unittest.cc
+++ b/src/processor/minidump_unittest.cc
@@ -61,8 +61,8 @@
 using google_breakpad::SynthMinidump::String;
 using google_breakpad::SynthMinidump::SystemInfo;
 using google_breakpad::SynthMinidump::Thread;
-using google_breakpad::TestAssembler::kBigEndian;
-using google_breakpad::TestAssembler::kLittleEndian;
+using google_breakpad::test_assembler::kBigEndian;
+using google_breakpad::test_assembler::kLittleEndian;
 using std::ifstream;
 using std::istringstream;
 using std::string;
diff --git a/src/processor/module_comparer.cc b/src/processor/module_comparer.cc
new file mode 100644
index 0000000..837d854
--- /dev/null
+++ b/src/processor/module_comparer.cc
@@ -0,0 +1,297 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// module_comparer.cc: ModuleComparer implementation.
+// See module_comparer.h for documentation.
+//
+// Author: lambxsy@google.com (Siyang Xie)
+
+#include "processor/module_comparer.h"
+
+#include <map>
+#include <string>
+
+#include "processor/basic_code_module.h"
+#include "processor/logging.h"
+#include "processor/scoped_ptr.h"
+
+#define ASSERT_TRUE(condition) \
+  if (!(condition)) { \
+    BPLOG(ERROR) << "FAIL: " << #condition << " @ " \
+                 << __FILE__ << ":" << __LINE__; \
+    return false; \
+  }
+
+#define ASSERT_FALSE(condition) ASSERT_TRUE(!(condition))
+
+namespace google_breakpad {
+
+bool ModuleComparer::Compare(const string &symbol_data) {
+  scoped_ptr<BasicModule> basic_module(new BasicModule("test_module"));
+  scoped_ptr<FastModule> fast_module(new FastModule("test_module"));
+
+  // Load symbol data into basic_module
+  scoped_array<char> buffer(new char[symbol_data.size() + 1]);
+  strcpy(buffer.get(), symbol_data.c_str());
+  ASSERT_TRUE(basic_module->LoadMapFromMemory(buffer.get()));
+  buffer.reset();
+
+  // Serialize BasicSourceLineResolver::Module.
+  unsigned int serialized_size = 0;
+  scoped_array<char> serialized_data(
+      serializer_.Serialize(*(basic_module.get()), &serialized_size));
+  ASSERT_TRUE(serialized_data.get());
+  BPLOG(INFO) << "Serialized size = " << serialized_size << " Bytes";
+
+  // Load FastSourceLineResolver::Module using serialized data.
+  ASSERT_TRUE(fast_module->LoadMapFromMemory(serialized_data.get()));
+
+  // Compare FastSourceLineResolver::Module with
+  // BasicSourceLineResolver::Module.
+  ASSERT_TRUE(CompareModule(basic_module.get(), fast_module.get()));
+
+  return true;
+}
+
+// Traversal the content of module and do comparison
+bool ModuleComparer::CompareModule(const BasicModule *basic_module,
+                                  const FastModule *fast_module) const {
+  // Compare name_.
+  ASSERT_TRUE(basic_module->name_ == fast_module->name_);
+
+  // Compare files_:
+  {
+    BasicModule::FileMap::const_iterator iter1 = basic_module->files_.begin();
+    FastModule::FileMap::iterator iter2 = fast_module->files_.begin();
+    while (iter1 != basic_module->files_.end()
+        && iter2 != fast_module->files_.end()) {
+      ASSERT_TRUE(iter1->first == iter2.GetKey());
+      string tmp(iter2.GetValuePtr());
+      ASSERT_TRUE(iter1->second == tmp);
+      ++iter1;
+      ++iter2;
+    }
+    ASSERT_TRUE(iter1 == basic_module->files_.end());
+    ASSERT_TRUE(iter2 == fast_module->files_.end());
+  }
+
+  // Compare functions_:
+  {
+    RangeMap<MemAddr, linked_ptr<BasicFunc> >::MapConstIterator iter1;
+    StaticRangeMap<MemAddr, FastFunc>::MapConstIterator iter2;
+    iter1 = basic_module->functions_.map_.begin();
+    iter2 = fast_module->functions_.map_.begin();
+    while (iter1 != basic_module->functions_.map_.end()
+        && iter2 != fast_module->functions_.map_.end()) {
+      ASSERT_TRUE(iter1->first == iter2.GetKey());
+      ASSERT_TRUE(iter1->second.base() == iter2.GetValuePtr()->base());
+      ASSERT_TRUE(CompareFunction(
+          iter1->second.entry().get(), iter2.GetValuePtr()->entryptr()));
+      ++iter1;
+      ++iter2;
+    }
+    ASSERT_TRUE(iter1 == basic_module->functions_.map_.end());
+    ASSERT_TRUE(iter2 == fast_module->functions_.map_.end());
+  }
+
+  // Compare public_symbols_:
+  {
+    AddressMap<MemAddr, linked_ptr<BasicPubSymbol> >::MapConstIterator iter1;
+    StaticAddressMap<MemAddr, FastPubSymbol>::MapConstIterator iter2;
+    iter1 = basic_module->public_symbols_.map_.begin();
+    iter2 = fast_module->public_symbols_.map_.begin();
+    while (iter1 != basic_module->public_symbols_.map_.end()
+          && iter2 != fast_module->public_symbols_.map_.end()) {
+      ASSERT_TRUE(iter1->first == iter2.GetKey());
+      ASSERT_TRUE(ComparePubSymbol(
+          iter1->second.get(), iter2.GetValuePtr()));
+      ++iter1;
+      ++iter2;
+    }
+    ASSERT_TRUE(iter1 == basic_module->public_symbols_.map_.end());
+    ASSERT_TRUE(iter2 == fast_module->public_symbols_.map_.end());
+  }
+
+  // Compare windows_frame_info_[]:
+  for (int i = 0; i < WindowsFrameInfo::STACK_INFO_LAST; ++i) {
+    ASSERT_TRUE(CompareCRM(&(basic_module->windows_frame_info_[i]),
+                           &(fast_module->windows_frame_info_[i])));
+  }
+
+  // Compare cfi_initial_rules_:
+  {
+    RangeMap<MemAddr, string>::MapConstIterator iter1;
+    StaticRangeMap<MemAddr, char>::MapConstIterator iter2;
+    iter1 = basic_module->cfi_initial_rules_.map_.begin();
+    iter2 = fast_module->cfi_initial_rules_.map_.begin();
+    while (iter1 != basic_module->cfi_initial_rules_.map_.end()
+        && iter2 != fast_module->cfi_initial_rules_.map_.end()) {
+      ASSERT_TRUE(iter1->first == iter2.GetKey());
+      ASSERT_TRUE(iter1->second.base() == iter2.GetValuePtr()->base());
+      string tmp(iter2.GetValuePtr()->entryptr());
+      ASSERT_TRUE(iter1->second.entry() == tmp);
+      ++iter1;
+      ++iter2;
+    }
+    ASSERT_TRUE(iter1 == basic_module->cfi_initial_rules_.map_.end());
+    ASSERT_TRUE(iter2 == fast_module->cfi_initial_rules_.map_.end());
+  }
+
+  // Compare cfi_delta_rules_:
+  {
+    map<MemAddr, string>::const_iterator iter1;
+    StaticMap<MemAddr, char>::iterator iter2;
+    iter1 = basic_module->cfi_delta_rules_.begin();
+    iter2 = fast_module->cfi_delta_rules_.begin();
+    while (iter1 != basic_module->cfi_delta_rules_.end()
+        && iter2 != fast_module->cfi_delta_rules_.end()) {
+      ASSERT_TRUE(iter1->first == iter2.GetKey());
+      string tmp(iter2.GetValuePtr());
+      ASSERT_TRUE(iter1->second == tmp);
+      ++iter1;
+      ++iter2;
+    }
+    ASSERT_TRUE(iter1 == basic_module->cfi_delta_rules_.end());
+    ASSERT_TRUE(iter2 == fast_module->cfi_delta_rules_.end());
+  }
+
+  return true;
+}
+
+bool ModuleComparer::CompareFunction(const BasicFunc *basic_func,
+                                    const FastFunc *fast_func_raw) const {
+  FastFunc* fast_func = new FastFunc();
+  fast_func->CopyFrom(fast_func_raw);
+  ASSERT_TRUE(basic_func->name == fast_func->name);
+  ASSERT_TRUE(basic_func->address == fast_func->address);
+  ASSERT_TRUE(basic_func->size == fast_func->size);
+
+  // compare range map of lines:
+  RangeMap<MemAddr, linked_ptr<BasicLine> >::MapConstIterator iter1;
+  StaticRangeMap<MemAddr, FastLine>::MapConstIterator iter2;
+  iter1 = basic_func->lines.map_.begin();
+  iter2 = fast_func->lines.map_.begin();
+  while (iter1 != basic_func->lines.map_.end()
+      && iter2 != fast_func->lines.map_.end()) {
+    ASSERT_TRUE(iter1->first == iter2.GetKey());
+    ASSERT_TRUE(iter1->second.base() == iter2.GetValuePtr()->base());
+    ASSERT_TRUE(CompareLine(iter1->second.entry().get(),
+                            iter2.GetValuePtr()->entryptr()));
+    ++iter1;
+    ++iter2;
+  }
+  ASSERT_TRUE(iter1 == basic_func->lines.map_.end());
+  ASSERT_TRUE(iter2 == fast_func->lines.map_.end());
+
+  delete fast_func;
+  return true;
+}
+
+bool ModuleComparer::CompareLine(const BasicLine *basic_line,
+                                const FastLine *fast_line_raw) const {
+  FastLine *fast_line = new FastLine;
+  fast_line->CopyFrom(fast_line_raw);
+
+  ASSERT_TRUE(basic_line->address == fast_line->address);
+  ASSERT_TRUE(basic_line->size == fast_line->size);
+  ASSERT_TRUE(basic_line->source_file_id == fast_line->source_file_id);
+  ASSERT_TRUE(basic_line->line == fast_line->line);
+
+  delete fast_line;
+  return true;
+}
+
+bool ModuleComparer::ComparePubSymbol(const BasicPubSymbol* basic_ps,
+                                     const FastPubSymbol* fastps_raw) const {
+  FastPubSymbol *fast_ps = new FastPubSymbol;
+  fast_ps->CopyFrom(fastps_raw);
+  ASSERT_TRUE(basic_ps->name == fast_ps->name);
+  ASSERT_TRUE(basic_ps->address == fast_ps->address);
+  ASSERT_TRUE(basic_ps->parameter_size == fast_ps->parameter_size);
+  delete fast_ps;
+  return true;
+}
+
+bool ModuleComparer::CompareWFI(const WindowsFrameInfo& wfi1,
+                               const WindowsFrameInfo& wfi2) const {
+  ASSERT_TRUE(wfi1.valid == wfi2.valid);
+  ASSERT_TRUE(wfi1.prolog_size == wfi2.prolog_size);
+  ASSERT_TRUE(wfi1.epilog_size == wfi2.epilog_size);
+  ASSERT_TRUE(wfi1.parameter_size == wfi2.parameter_size);
+  ASSERT_TRUE(wfi1.saved_register_size == wfi2.saved_register_size);
+  ASSERT_TRUE(wfi1.local_size == wfi2.local_size);
+  ASSERT_TRUE(wfi1.max_stack_size == wfi2.max_stack_size);
+  ASSERT_TRUE(wfi1.allocates_base_pointer == wfi2.allocates_base_pointer);
+  ASSERT_TRUE(wfi1.program_string == wfi2.program_string);
+  return true;
+}
+
+// Compare ContainedRangeMap
+bool ModuleComparer::CompareCRM(
+    const ContainedRangeMap<MemAddr, linked_ptr<WFI> >* basic_crm,
+    const StaticContainedRangeMap<MemAddr, char>* fast_crm) const {
+  ASSERT_TRUE(basic_crm->base_ == fast_crm->base_);
+
+  if (!basic_crm->entry_.get() || !fast_crm->entry_ptr_) {
+    // empty entry:
+    ASSERT_TRUE(!basic_crm->entry_.get() && !fast_crm->entry_ptr_);
+  } else {
+    WFI newwfi;
+    newwfi.CopyFrom(fast_resolver_->CopyWFI(fast_crm->entry_ptr_));
+    ASSERT_TRUE(CompareWFI(*(basic_crm->entry_.get()), newwfi));
+  }
+
+  if ((!basic_crm->map_ || basic_crm->map_->empty())
+      || fast_crm->map_.empty()) {
+    ASSERT_TRUE((!basic_crm->map_ || basic_crm->map_->empty())
+               && fast_crm->map_.empty());
+  } else {
+    ContainedRangeMap<MemAddr, linked_ptr<WFI> >::MapConstIterator iter1;
+    StaticContainedRangeMap<MemAddr, char>::MapConstIterator iter2;
+    iter1 = basic_crm->map_->begin();
+    iter2 = fast_crm->map_.begin();
+    while (iter1 != basic_crm->map_->end()
+        && iter2 != fast_crm->map_.end()) {
+      ASSERT_TRUE(iter1->first == iter2.GetKey());
+      StaticContainedRangeMap<MemAddr, char> *child =
+          new StaticContainedRangeMap<MemAddr, char>(
+              reinterpret_cast<const char*>(iter2.GetValuePtr()));
+      ASSERT_TRUE(CompareCRM(iter1->second, child));
+      delete child;
+      ++iter1;
+      ++iter2;
+    }
+    ASSERT_TRUE(iter1 == basic_crm->map_->end());
+    ASSERT_TRUE(iter2 == fast_crm->map_.end());
+  }
+
+  return true;
+}
+
+}  // namespace google_breakpad
diff --git a/src/processor/module_comparer.h b/src/processor/module_comparer.h
new file mode 100644
index 0000000..fcbd517
--- /dev/null
+++ b/src/processor/module_comparer.h
@@ -0,0 +1,98 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// module_comparer.h: ModuleComparer reads a string format of symbol file, and
+// loads the symbol into both BasicSourceLineResolver::Module and
+// FastSourceLineResolve::Module.  It then traverses both Modules and compare
+// the content of data to verify the correctness of new fast module.
+// ModuleCompare class is a tool to verify correctness of a loaded
+// FastSourceLineResolver::Module instance, i.e., in-memory representation of
+// parsed symbol.  ModuleComparer class should be used for testing purpose only,
+// e.g., in fast_source_line_resolver_unittest.
+//
+// Author: lambxsy@google.com (Siyang Xie)
+
+#ifndef PROCESSOR_MODULE_COMPARER_H__
+#define PROCESSOR_MODULE_COMPARER_H__
+
+#include <string>
+
+#include "processor/basic_source_line_resolver_types.h"
+#include "processor/fast_source_line_resolver_types.h"
+#include "processor/module_serializer.h"
+#include "processor/windows_frame_info.h"
+
+namespace google_breakpad {
+
+class ModuleComparer {
+ public:
+  ModuleComparer(): fast_resolver_(new FastSourceLineResolver),
+                   basic_resolver_(new BasicSourceLineResolver) { }
+  ~ModuleComparer() {
+    delete fast_resolver_;
+    delete basic_resolver_;
+  }
+
+  // BasicSourceLineResolver loads its module using the symbol data,
+  // ModuleSerializer serialize the loaded module into a memory chunk,
+  // FastSourceLineResolver loads its module using the serialized memory chunk,
+  // Then, traverse both modules together and compare underlying data
+  // return true if both modules contain exactly same data.
+  bool Compare(const string &symbol_data);
+
+ private:
+  typedef BasicSourceLineResolver::Module BasicModule;
+  typedef FastSourceLineResolver::Module FastModule;
+  typedef BasicSourceLineResolver::Function BasicFunc;
+  typedef FastSourceLineResolver::Function FastFunc;
+  typedef BasicSourceLineResolver::Line BasicLine;
+  typedef FastSourceLineResolver::Line FastLine;
+  typedef BasicSourceLineResolver::PublicSymbol BasicPubSymbol;
+  typedef FastSourceLineResolver::PublicSymbol FastPubSymbol;
+  typedef WindowsFrameInfo WFI;
+
+  bool CompareModule(const BasicModule *oldmodule,
+                     const FastModule *newmodule) const;
+  bool CompareFunction(const BasicFunc *oldfunc, const FastFunc *newfunc) const;
+  bool CompareLine(const BasicLine *oldline, const FastLine *newline) const;
+  bool ComparePubSymbol(const BasicPubSymbol*, const FastPubSymbol*) const;
+  bool CompareWFI(const WindowsFrameInfo&, const WindowsFrameInfo&) const;
+
+  // Compare ContainedRangeMap
+  bool CompareCRM(const ContainedRangeMap<MemAddr, linked_ptr<WFI> >*,
+                  const StaticContainedRangeMap<MemAddr, char>*) const;
+
+  FastSourceLineResolver *fast_resolver_;
+  BasicSourceLineResolver *basic_resolver_;
+  ModuleSerializer serializer_;
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_MODULE_COMPARER_H__
diff --git a/src/processor/module_factory.h b/src/processor/module_factory.h
new file mode 100644
index 0000000..7aa7caa
--- /dev/null
+++ b/src/processor/module_factory.h
@@ -0,0 +1,72 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// module_factory.h: ModuleFactory a factory that provides
+// an interface for creating a Module and deferring instantiation to subclasses
+// BasicModuleFactory and FastModuleFactory.
+
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_MODULE_FACTORY_H__
+#define PROCESSOR_MODULE_FACTORY_H__
+
+#include "processor/basic_source_line_resolver_types.h"
+#include "processor/fast_source_line_resolver_types.h"
+#include "processor/source_line_resolver_base_types.h"
+
+namespace google_breakpad {
+
+class ModuleFactory {
+ public:
+  virtual ~ModuleFactory() { };
+  virtual SourceLineResolverBase::Module* CreateModule(
+      const string &name) const = 0;
+};
+
+class BasicModuleFactory : public ModuleFactory {
+ public:
+  virtual ~BasicModuleFactory() { }
+  virtual BasicSourceLineResolver::Module* CreateModule(
+      const string &name) const {
+    return new BasicSourceLineResolver::Module(name);
+  }
+};
+
+class FastModuleFactory : public ModuleFactory {
+ public:
+  virtual ~FastModuleFactory() { }
+  virtual FastSourceLineResolver::Module* CreateModule(
+      const string &name) const {
+    return new FastSourceLineResolver::Module(name);
+  }
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_MODULE_FACTORY_H__
diff --git a/src/processor/module_serializer.cc b/src/processor/module_serializer.cc
new file mode 100644
index 0000000..5c5ff77
--- /dev/null
+++ b/src/processor/module_serializer.cc
@@ -0,0 +1,200 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// module_serializer.cc: ModuleSerializer implementation.
+//
+// See module_serializer.h for documentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#include "processor/module_serializer.h"
+
+#include <map>
+#include <string>
+
+#include "processor/basic_code_module.h"
+#include "processor/logging.h"
+
+namespace google_breakpad {
+
+// Definition of static member variable in SimplerSerializer<Funcion>, which
+// is declared in file "simple_serializer-inl.h"
+RangeMapSerializer< MemAddr, linked_ptr<BasicSourceLineResolver::Line> >
+SimpleSerializer<BasicSourceLineResolver::Function>::range_map_serializer_;
+
+size_t ModuleSerializer::SizeOf(const BasicSourceLineResolver::Module &module) {
+  size_t total_size_alloc_ = 0;
+
+  // Compute memory size for each map component in Module class.
+  int map_index = 0;
+  map_sizes_[map_index++] = files_serializer_.SizeOf(module.files_);
+  map_sizes_[map_index++] = functions_serializer_.SizeOf(module.functions_);
+  map_sizes_[map_index++] = pubsym_serializer_.SizeOf(module.public_symbols_);
+  for (int i = 0; i < WindowsFrameInfo::STACK_INFO_LAST; ++i)
+   map_sizes_[map_index++] =
+       wfi_serializer_.SizeOf(&(module.windows_frame_info_[i]));
+  map_sizes_[map_index++] = cfi_init_rules_serializer_.SizeOf(
+     module.cfi_initial_rules_);
+  map_sizes_[map_index++] = cfi_delta_rules_serializer_.SizeOf(
+     module.cfi_delta_rules_);
+
+  // Header size.
+  total_size_alloc_ = kNumberMaps_ * sizeof(u_int32_t);
+
+  for (int i = 0; i < kNumberMaps_; ++i)
+   total_size_alloc_ += map_sizes_[i];
+
+  // Extra one byte for null terminator for C-string copy safety.
+  ++total_size_alloc_;
+
+  return total_size_alloc_;
+}
+
+char *ModuleSerializer::Write(const BasicSourceLineResolver::Module &module,
+                              char *dest) {
+  // Write header.
+  memcpy(dest, map_sizes_, kNumberMaps_ * sizeof(u_int32_t));
+  dest += kNumberMaps_ * sizeof(u_int32_t);
+  // Write each map.
+  dest = files_serializer_.Write(module.files_, dest);
+  dest = functions_serializer_.Write(module.functions_, dest);
+  dest = pubsym_serializer_.Write(module.public_symbols_, dest);
+  for (int i = 0; i < WindowsFrameInfo::STACK_INFO_LAST; ++i)
+    dest = wfi_serializer_.Write(&(module.windows_frame_info_[i]), dest);
+  dest = cfi_init_rules_serializer_.Write(module.cfi_initial_rules_, dest);
+  dest = cfi_delta_rules_serializer_.Write(module.cfi_delta_rules_, dest);
+  // Write a null terminator.
+  dest = SimpleSerializer<char>::Write(0, dest);
+  return dest;
+}
+
+char* ModuleSerializer::Serialize(
+    const BasicSourceLineResolver::Module &module, unsigned int *size) {
+  // Compute size of memory to allocate.
+  unsigned int size_to_alloc = SizeOf(module);
+
+  // Allocate memory for serialized data.
+  char *serialized_data = new char[size_to_alloc];
+  if (!serialized_data) {
+    BPLOG(ERROR) << "ModuleSerializer: memory allocation failed, "
+                 << "size to alloc: " << size_to_alloc;
+    if (size) *size = 0;
+    return NULL;
+  }
+
+  // Write serialized data to allocated memory chunk.
+  char *end_address = Write(module, serialized_data);
+  // Verify the allocated memory size is equal to the size of data been written.
+  unsigned int size_written =
+      static_cast<unsigned int>(end_address - serialized_data);
+  if (size_to_alloc != size_written) {
+    BPLOG(ERROR) << "size_to_alloc differs from size_written: "
+                   << size_to_alloc << " vs " << size_written;
+  }
+
+  // Set size and return the start address of memory chunk.
+  if (size)
+    *size = size_to_alloc;
+  return serialized_data;
+}
+
+bool ModuleSerializer::SerializeModuleAndLoadIntoFastResolver(
+    const BasicSourceLineResolver::ModuleMap::const_iterator &iter,
+    FastSourceLineResolver *fast_resolver) {
+  BPLOG(INFO) << "Converting symbol " << iter->first.c_str();
+
+  // Cast SourceLineResolverBase::Module* to BasicSourceLineResolver::Module*.
+  BasicSourceLineResolver::Module* basic_module =
+      dynamic_cast<BasicSourceLineResolver::Module*>(iter->second);
+
+  unsigned int size = 0;
+  scoped_array<char> symbol_data(Serialize(*basic_module, &size));
+  if (!symbol_data.get()) {
+    BPLOG(ERROR) << "Serialization failed for module: " << basic_module->name_;
+    return false;
+  }
+  BPLOG(INFO) << "Serialized Symbol Size " << size;
+
+  // Copy the data into string.
+  // Must pass string to LoadModuleUsingMapBuffer(), instead of passing char* to
+  // LoadModuleUsingMemoryBuffer(), becaused of data ownership/lifetime issue.
+  string symbol_data_string(symbol_data.get(), size);
+  symbol_data.reset();
+
+  scoped_ptr<CodeModule> code_module(
+      new BasicCodeModule(0, 0, iter->first, "", "", "", ""));
+
+  return fast_resolver->LoadModuleUsingMapBuffer(code_module.get(),
+                                                 symbol_data_string);
+}
+
+void ModuleSerializer::ConvertAllModules(
+    const BasicSourceLineResolver *basic_resolver,
+    FastSourceLineResolver *fast_resolver) {
+  // Check for NULL pointer.
+  if (!basic_resolver || !fast_resolver)
+    return;
+
+  // Traverse module list in basic resolver.
+  BasicSourceLineResolver::ModuleMap::const_iterator iter;
+  iter = basic_resolver->modules_->begin();
+  for (; iter != basic_resolver->modules_->end(); ++iter)
+    SerializeModuleAndLoadIntoFastResolver(iter, fast_resolver);
+}
+
+bool ModuleSerializer::ConvertOneModule(
+    const string &moduleid,
+    const BasicSourceLineResolver *basic_resolver,
+    FastSourceLineResolver *fast_resolver) {
+  // Check for NULL pointer.
+  if (!basic_resolver || !fast_resolver)
+    return false;
+
+  BasicSourceLineResolver::ModuleMap::const_iterator iter;
+  iter = basic_resolver->modules_->find(moduleid);
+  if (iter == basic_resolver->modules_->end())
+    return false;
+
+  return SerializeModuleAndLoadIntoFastResolver(iter, fast_resolver);
+}
+
+char* ModuleSerializer::SerializeSymbolFileData(
+    const string &symbol_data, unsigned int *size) {
+  scoped_ptr<BasicSourceLineResolver::Module> module(
+      new BasicSourceLineResolver::Module("no name"));
+  scoped_array<char> buffer(new char[symbol_data.size() + 1]);
+  strcpy(buffer.get(), symbol_data.c_str());
+  if (!module->LoadMapFromMemory(buffer.get())) {
+    return NULL;
+  }
+  buffer.reset(NULL);
+  return Serialize(*(module.get()), size);
+}
+
+}  // namespace google_breakpad
diff --git a/src/processor/module_serializer.h b/src/processor/module_serializer.h
new file mode 100644
index 0000000..3b440a6
--- /dev/null
+++ b/src/processor/module_serializer.h
@@ -0,0 +1,127 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// module_serializer.h: ModuleSerializer serializes a loaded symbol,
+// i.e., a loaded BasicSouceLineResolver::Module instance, into a memory
+// chunk of data. The serialized data can be read and loaded by
+// FastSourceLineResolver without CPU & memory-intensive parsing.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_MODULE_SERIALIZER_H__
+#define PROCESSOR_MODULE_SERIALIZER_H__
+
+#include <map>
+#include <string>
+
+#include "google_breakpad/processor/basic_source_line_resolver.h"
+#include "google_breakpad/processor/fast_source_line_resolver.h"
+#include "processor/basic_source_line_resolver_types.h"
+#include "processor/fast_source_line_resolver_types.h"
+#include "processor/linked_ptr.h"
+#include "processor/map_serializers-inl.h"
+#include "processor/simple_serializer-inl.h"
+#include "processor/windows_frame_info.h"
+
+namespace google_breakpad {
+
+// ModuleSerializer serializes a loaded BasicSourceLineResolver::Module into a
+// chunk of memory data. ModuleSerializer also provides interface to compute
+// memory size of the serialized data, write serialized data directly into
+// memory, convert ASCII format symbol data into serialized binary data, and
+// convert loaded BasicSourceLineResolver::Module into
+// FastSourceLineResolver::Module.
+class ModuleSerializer {
+ public:
+  // Compute the size of memory required to serialize a module.  Return the
+  // total size needed for serialization.
+  size_t SizeOf(const BasicSourceLineResolver::Module &module);
+
+  // Write a module into an allocated memory chunk with required size.
+  // Return the "end" of data, i.e., the address after the final byte of data.
+  char* Write(const BasicSourceLineResolver::Module &module, char *dest);
+
+  // Serializes a loaded Module object into a chunk of memory data and returns
+  // the address of memory chunk.  If size != NULL, *size is set to the memory
+  // size allocated for the serialized data.
+  // Caller takes the ownership of the memory chunk (allocated on heap), and
+  // owner should call delete [] to free the memory after use.
+  char* Serialize(const BasicSourceLineResolver::Module &module,
+                  unsigned int *size = NULL);
+
+  // Given the string format symbol_data, produces a chunk of serialized data.
+  // Caller takes ownership of the serialized data (on heap), and owner should
+  // call delete [] to free the memory after use.
+  char* SerializeSymbolFileData(const string &symbol_data,
+                                unsigned int *size = NULL);
+
+  // Serializes one loaded module with given moduleid in the basic source line
+  // resolver, and loads the serialized data into the fast source line resolver.
+  // Return false if the basic source line doesn't have a module with the given
+  // moduleid.
+  bool ConvertOneModule(const string &moduleid,
+                        const BasicSourceLineResolver *basic_resolver,
+                        FastSourceLineResolver *fast_resolver);
+
+  // Serializes all the loaded modules in a basic source line resolver, and
+  // loads the serialized data into a fast source line resolver.
+  void ConvertAllModules(const BasicSourceLineResolver *basic_resolver,
+                         FastSourceLineResolver *fast_resolver);
+
+ private:
+  // Convenient type names.
+  typedef BasicSourceLineResolver::Line Line;
+  typedef BasicSourceLineResolver::Function Function;
+  typedef BasicSourceLineResolver::PublicSymbol PublicSymbol;
+
+  // Internal implementation for ConvertOneModule and ConvertAllModules methods.
+  bool SerializeModuleAndLoadIntoFastResolver(
+      const BasicSourceLineResolver::ModuleMap::const_iterator &iter,
+      FastSourceLineResolver *fast_resolver);
+
+  // Number of Maps that Module class contains.
+  static const u_int32_t kNumberMaps_ =
+      FastSourceLineResolver::Module::kNumberMaps_;
+
+  // Memory sizes required to serialize map components in Module.
+  u_int32_t map_sizes_[kNumberMaps_];
+
+  // Serializers for each individual map component in Module class.
+  StdMapSerializer<int, string> files_serializer_;
+  RangeMapSerializer<MemAddr, linked_ptr<Function> > functions_serializer_;
+  AddressMapSerializer<MemAddr, linked_ptr<PublicSymbol> > pubsym_serializer_;
+  ContainedRangeMapSerializer<MemAddr,
+                              linked_ptr<WindowsFrameInfo> > wfi_serializer_;
+  RangeMapSerializer<MemAddr, string> cfi_init_rules_serializer_;
+  StdMapSerializer<MemAddr, string> cfi_delta_rules_serializer_;
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_MODULE_SERIALIZER_H__
diff --git a/src/processor/network_source_line_resolver.cc b/src/processor/network_source_line_resolver.cc
index 5fc5b1e..86c939f 100644
--- a/src/processor/network_source_line_resolver.cc
+++ b/src/processor/network_source_line_resolver.cc
@@ -27,14 +27,15 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+#include "google_breakpad/processor/network_source_line_resolver.h"
+
+#include <assert.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include <cassert>
 #include <sstream>
 #include <vector>
 
-#include "google_breakpad/processor/network_source_line_resolver.h"
 #include "google_breakpad/processor/stack_frame.h"
 #include "processor/binarystream.h"
 #include "processor/cfi_frame_info.h"
@@ -96,6 +97,13 @@
   return true;
 }
 
+bool NetworkSourceLineResolver::LoadModuleUsingMemoryBuffer(
+    const CodeModule *module,
+    char *memory_buffer) {
+  // see above
+  return true;
+}
+
 void NetworkSourceLineResolver::UnloadModule(const CodeModule *module) {
   // no-op
 }
@@ -330,6 +338,18 @@
   return GetSymbolFile(module, system_info, symbol_file);
 }
 
+SymbolSupplier::SymbolResult
+NetworkSourceLineResolver::GetCStringSymbolData(
+    const CodeModule *module,
+    const SystemInfo *system_info,
+    string *symbol_file,
+    char **symbol_data) {
+  if (symbol_data)
+    delete *symbol_data;
+
+  return GetSymbolFile(module, system_info, symbol_file);
+}
+
 bool NetworkSourceLineResolver::SendMessageGetResponse(
     const binarystream &message,
     binarystream &response) {
diff --git a/src/processor/network_source_line_resolver_server_unittest.cc b/src/processor/network_source_line_resolver_server_unittest.cc
index 916cbd0..63558b4 100644
--- a/src/processor/network_source_line_resolver_server_unittest.cc
+++ b/src/processor/network_source_line_resolver_server_unittest.cc
@@ -141,7 +141,7 @@
   ASSERT_EQ(state.system_info()->cpu, kSystemInfoCPU);
   ASSERT_EQ(state.system_info()->cpu_info, kSystemInfoCPUInfo);
   ASSERT_TRUE(state.crashed());
-  ASSERT_EQ(state.crash_reason(), "EXCEPTION_ACCESS_VIOLATION");
+  ASSERT_EQ(state.crash_reason(), "EXCEPTION_ACCESS_VIOLATION_WRITE");
   ASSERT_EQ(state.crash_address(), 0x45U);
   ASSERT_EQ(state.threads()->size(), size_t(1));
   ASSERT_EQ(state.requesting_thread(), 0);
diff --git a/src/processor/network_source_line_server_unittest.cc b/src/processor/network_source_line_server_unittest.cc
index 5e969cc..c45f19c 100644
--- a/src/processor/network_source_line_server_unittest.cc
+++ b/src/processor/network_source_line_server_unittest.cc
@@ -89,6 +89,11 @@
                                            const SystemInfo *system_info,
                                            string *symbol_file,
                                            string *symbol_data));
+  MOCK_METHOD4(GetCStringSymbolData, SymbolResult(const CodeModule *module,
+                                                  const SystemInfo *system_info,
+                                                  string *symbol_file,
+                                                  char **symbol_data));
+  MOCK_METHOD1(FreeSymbolData, void(const CodeModule *module));
 };
 
 class MockSourceLineResolver : public SourceLineResolverInterface {
@@ -100,6 +105,9 @@
                                 const string &map_file));
   MOCK_METHOD2(LoadModuleUsingMapBuffer, bool(const CodeModule *module,
                                               const string &map_buffer));
+  MOCK_METHOD2(LoadModuleUsingMemoryBuffer, bool(const CodeModule *module,
+                                                 char *memory_buffer));
+  MOCK_METHOD0(ShouldDeleteMemoryBufferAfterLoadModule, bool());
   MOCK_METHOD1(UnloadModule, void(const CodeModule *module));
   MOCK_METHOD1(HasModule, bool(const CodeModule *module));
   MOCK_METHOD1(FillSourceLineInfo, void(StackFrame *frame));
diff --git a/src/processor/pathname_stripper_unittest.cc b/src/processor/pathname_stripper_unittest.cc
index 54f04b7..1bff4cb 100644
--- a/src/processor/pathname_stripper_unittest.cc
+++ b/src/processor/pathname_stripper_unittest.cc
@@ -27,7 +27,7 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include <cstdio>
+#include <stdio.h>
 
 #include "processor/pathname_stripper.h"
 #include "processor/logging.h"
diff --git a/src/processor/postfix_evaluator-inl.h b/src/processor/postfix_evaluator-inl.h
index b1252f6..b24f092 100644
--- a/src/processor/postfix_evaluator-inl.h
+++ b/src/processor/postfix_evaluator-inl.h
@@ -39,11 +39,12 @@
 #ifndef PROCESSOR_POSTFIX_EVALUATOR_INL_H__
 #define PROCESSOR_POSTFIX_EVALUATOR_INL_H__
 
+#include "processor/postfix_evaluator.h"
 
-#include <cstdio>
+#include <stdio.h>
+
 #include <sstream>
 
-#include "processor/postfix_evaluator.h"
 #include "google_breakpad/processor/memory_region.h"
 #include "processor/logging.h"
 
@@ -99,7 +100,8 @@
 
     if (operation != BINARY_OP_NONE) {
       // Get the operands.
-      ValueType operand1, operand2;
+      ValueType operand1 = ValueType();
+      ValueType operand2 = ValueType();
       if (!PopValues(&operand1, &operand2)) {
         BPLOG(ERROR) << "Could not PopValues to get two values for binary "
                         "operation " << token << ": " << expression;
@@ -161,8 +163,8 @@
       // = for assignment.
       ValueType value;
       if (!PopValue(&value)) {
-        BPLOG(ERROR) << "Could not PopValue to get value to assign: " <<
-                        expression;
+        BPLOG(INFO) << "Could not PopValue to get value to assign: " <<
+                       expression;
         return false;
       }
 
@@ -211,7 +213,7 @@
   // and successful.
   if (stack_.empty())
     return true;
-    
+
   BPLOG(ERROR) << "Incomplete execution: " << expression;
   return false;
 }
@@ -230,7 +232,7 @@
     BPLOG(ERROR) << "Expression yielded bad number of results: "
                  << "'" << expression << "'";
     return false;
-  } 
+  }
 
   return PopValue(result);
 }
@@ -256,7 +258,7 @@
   // '-' sign (6.0.13); others do not (6.0.9). Since we require it, we
   // handle it explicitly here.
   istringstream token_stream(token);
-  ValueType literal;
+  ValueType literal = ValueType();
   bool negative;
   if (token_stream.peek() == '-') {
     negative = true;
@@ -282,7 +284,7 @@
 
 template<typename ValueType>
 bool PostfixEvaluator<ValueType>::PopValue(ValueType *value) {
-  ValueType literal;
+  ValueType literal = ValueType();
   string token;
   PopResult result;
   if ((result = PopValueOrIdentifier(&literal, &token)) == POP_RESULT_FAIL) {
@@ -298,7 +300,7 @@
     if (iterator == dictionary_->end()) {
       // The identifier wasn't found in the dictionary.  Don't imply any
       // default value, just fail.
-      BPLOG(ERROR) << "Identifier " << token << " not in dictionary";
+      BPLOG(INFO) << "Identifier " << token << " not in dictionary";
       return false;
     }
 
diff --git a/src/processor/postfix_evaluator_unittest.cc b/src/processor/postfix_evaluator_unittest.cc
index e20a2b8..0c2d8ec 100644
--- a/src/processor/postfix_evaluator_unittest.cc
+++ b/src/processor/postfix_evaluator_unittest.cc
@@ -31,7 +31,8 @@
 //
 // Author: Mark Mentovai
 
-#include <cstdio>
+#include <stdio.h>
+
 #include <map>
 #include <string>
 
diff --git a/src/processor/proto/README b/src/processor/proto/README
new file mode 100644
index 0000000..df37b6f
--- /dev/null
+++ b/src/processor/proto/README
@@ -0,0 +1,20 @@
+If you wish to use these protobufs, you must generate their source files
+using  protoc from the protobuf project (http://code.google.com/p/protobuf/).
+
+-----
+Troubleshooting for Protobuf:
+
+Install:
+If you are getting permission errors install, make sure you are not trying to
+install from an NFS.
+
+
+Running protoc:
+protoc: error while loading shared libraries: libprotobuf.so.0: cannot open
+shared object file: No such file or directory
+
+The issue is that Ubuntu 8.04 doesn't include /usr/local/lib in
+library paths. 
+
+To fix it for your current terminal session, just type in
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 
diff --git a/src/processor/proto/process_state.proto b/src/processor/proto/process_state.proto
new file mode 100644
index 0000000..5ff6194
--- /dev/null
+++ b/src/processor/proto/process_state.proto
@@ -0,0 +1,207 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// process_state_proto.proto: A client proto representation of a process,
+// in a fully-digested state.
+//
+// Derived from earlier struct and class based models of a client-side
+// processed minidump found under src/google_breakpad/processor.  The
+// file process_state.h  holds the top level representation of this model,
+// supported by additional classes.  We've added a proto representation
+// to ease serialization and parsing for server-side storage of crash
+// reports processed on the client.
+//
+// Author: Jess Gray
+
+syntax = "proto2";
+
+package google_breakpad;
+
+// A proto representation of a process, in a fully-digested state.
+// See src/google_breakpad/processor/process_state.h
+message ProcessStateProto {
+  // Next value: 13
+
+  // The time-date stamp of the original minidump (time_t format)
+  optional int64 time_date_stamp = 1;
+
+  message Crash {
+    // The type of crash.  OS- and possibly CPU- specific.  For example,
+    // "EXCEPTION_ACCESS_VIOLATION" (Windows), "EXC_BAD_ACCESS /
+    // KERN_INVALID_ADDRESS" (Mac OS X), "SIGSEGV" (other Unix).
+    required string reason = 1;
+
+    // If crash_reason implicates memory, the memory address that caused the
+    // crash.  For data access errors, this will be the data address that
+    // caused the fault.  For code errors, this will be the address of the
+    // instruction that caused the fault.
+    required int64 address = 2;
+  }
+  optional Crash crash = 2;
+
+
+  // If there was an assertion that was hit, a textual representation
+  // of that assertion, possibly including the file and line at which
+  // it occurred.
+  optional string assertion = 3;
+
+  // The index of the thread that requested a dump be written in the
+  // threads vector.  If a dump was produced as a result of a crash, this
+  // will point to the thread that crashed.  If the dump was produced as
+  // by user code without crashing, and the dump contains extended Breakpad
+  // information, this will point to the thread that requested the dump.
+  optional int32 requesting_thread = 4;
+
+  message Thread {
+    // Stack for the given thread
+    repeated StackFrame frames = 1;
+  }
+
+  // Stacks for each thread (except possibly the exception handler
+  // thread) at the time of the crash.
+  repeated Thread threads = 5;
+
+  // The modules that were loaded into the process represented by the
+  // ProcessState.
+  repeated CodeModule modules = 6;
+
+  // System Info: OS and CPU
+
+  // A string identifying the operating system, such as "Windows NT",
+  // "Mac OS X", or "Linux".  If the information is present in the dump but
+  // its value is unknown, this field will contain a numeric value.  If
+  // the information is not present in the dump, this field will be empty.
+  optional string os = 7;
+
+   // A short form of the os string, using lowercase letters and no spaces,
+  // suitable for use in a filesystem.  Possible values are "windows",
+  // "mac", and "linux".  Empty if the information is not present in the dump
+  // or if the OS given by the dump is unknown.  The values stored in this
+  // field should match those used by MinidumpSystemInfo::GetOS.
+  optional string os_short = 8;
+
+  // A string identifying the version of the operating system, such as
+  // "5.1.2600 Service Pack 2" or "10.4.8 8L2127".  If the dump does not
+  // contain this information, this field will be empty.
+  optional string os_version = 9;
+
+  // A string identifying the basic CPU family, such as "x86" or "ppc".
+  // If this information is present in the dump but its value is unknown,
+  // this field will contain a numeric value.  If the information is not
+  // present in the dump, this field will be empty.  The values stored in
+  // this field should match those used by MinidumpSystemInfo::GetCPU.
+  optional string cpu = 10;
+
+  // A string further identifying the specific CPU, such as
+  // "GenuineIntel level 6 model 13 stepping 8".  If the information is not
+  // present in the dump, or additional identifying information is not
+  // defined for the CPU family, this field will be empty.
+  optional string cpu_info = 11;
+
+  // The number of processors in the system.  Will be greater than one for
+  // multi-core systems.
+  optional int32 cpu_count = 12;
+
+  // Leave the ability to add the raw minidump to this representation
+}
+
+
+// Represents a single frame in a stack  
+// See src/google_breakpad/processor/code_module.h
+message StackFrame {
+  // Next value: 8
+
+  // The program counter location as an absolute virtual address.  For the
+  // innermost called frame in a stack, this will be an exact program counter
+  // or instruction pointer value.  For all other frames, this will be within
+  // the instruction that caused execution to branch to a called function,
+  // but may not necessarily point to the exact beginning of that instruction.
+  required int64 instruction = 1;
+
+  // The module in which the instruction resides.
+  optional CodeModule module = 2;
+
+  // The function name, may be omitted if debug symbols are not available.
+  optional string function_name = 3;
+
+  // The start address of the function, may be omitted if debug symbols
+  // are not available.
+  optional int64 function_base = 4;
+
+  // The source file name, may be omitted if debug symbols are not available.
+  optional string source_file_name = 5;
+
+  // The (1-based) source line number, may be omitted if debug symbols are
+  // not available.
+  optional int32 source_line = 6;
+
+  // The start address of the source line, may be omitted if debug symbols
+  // are not available.
+  optional int64 source_line_base = 7;
+}
+
+
+// Carries information about code modules that are loaded into a process.
+// See src/google_breakpad/processor/code_module.h
+message CodeModule {
+  // Next value: 8
+
+  // The base address of this code module as it was loaded by the process.
+  optional int64 base_address = 1;
+
+  // The size of the code module.
+  optional int64 size = 2;
+
+  // The path or file name that the code module was loaded from.
+  optional string code_file = 3;
+
+  // An identifying string used to discriminate between multiple versions and
+  // builds of the same code module.  This may contain a uuid, timestamp,
+  // version number, or any combination of this or other information, in an
+  // implementation-defined format.
+  optional string code_identifier = 4;
+
+  // The filename containing debugging information associated with the code
+  // module.  If debugging information is stored in a file separate from the
+  // code module itself (as is the case when .pdb or .dSYM files are used),
+  // this will be different from code_file.  If debugging information is
+  // stored in the code module itself (possibly prior to stripping), this
+  // will be the same as code_file.
+  optional string debug_file = 5;
+
+  // An identifying string similar to code_identifier, but identifies a
+  // specific version and build of the associated debug file.  This may be
+  // the same as code_identifier when the debug_file and code_file are
+  // identical or when the same identifier is used to identify distinct
+  // debug and code files.
+  optional string debug_identifier = 6;
+
+  // A human-readable representation of the code module's version.
+  optional string version = 7;
+}
diff --git a/src/processor/range_map-inl.h b/src/processor/range_map-inl.h
index 7176191..3aa2603 100644
--- a/src/processor/range_map-inl.h
+++ b/src/processor/range_map-inl.h
@@ -37,7 +37,7 @@
 #define PROCESSOR_RANGE_MAP_INL_H__
 
 
-#include <cassert>
+#include <assert.h>
 
 #include "processor/range_map.h"
 #include "processor/logging.h"
@@ -184,7 +184,7 @@
 
   *entry = iterator->second.entry();
   if (entry_base)
-    *entry_base = iterator->first;
+    *entry_base = iterator->second.base();
   if (entry_size)
     *entry_size = iterator->first - iterator->second.base() + 1;
 
diff --git a/src/processor/range_map.h b/src/processor/range_map.h
index a7b6741..2572e49 100644
--- a/src/processor/range_map.h
+++ b/src/processor/range_map.h
@@ -46,6 +46,8 @@
 
 namespace google_breakpad {
 
+// Forward declarations (for later friend declarations of specialized template).
+template<class, class> class RangeMapSerializer;
 
 template<typename AddressType, typename EntryType>
 class RangeMap {
@@ -93,6 +95,10 @@
   void Clear();
 
  private:
+  // Friend declarations.
+  friend class ModuleComparer;
+  friend class RangeMapSerializer<AddressType, EntryType>;
+
   class Range {
    public:
     Range(const AddressType &base, const EntryType &entry)
diff --git a/src/processor/range_map_unittest.cc b/src/processor/range_map_unittest.cc
index bcf87ce..996ae6d 100644
--- a/src/processor/range_map_unittest.cc
+++ b/src/processor/range_map_unittest.cc
@@ -32,8 +32,8 @@
 // Author: Mark Mentovai
 
 
-#include <climits>
-#include <cstdio>
+#include <limits.h>
+#include <stdio.h>
 
 #include "processor/range_map-inl.h"
 
@@ -165,8 +165,8 @@
       }
 
       linked_ptr<CountedObject> object;
-      AddressType retrieved_base;
-      AddressType retrieved_size;
+      AddressType retrieved_base = AddressType();
+      AddressType retrieved_size = AddressType();
       bool retrieved = range_map->RetrieveRange(address, &object,
                                                 &retrieved_base,
                                                 &retrieved_size);
@@ -209,8 +209,8 @@
         expected_nearest = false;
 
       linked_ptr<CountedObject> nearest_object;
-      AddressType nearest_base;
-      AddressType nearest_size;
+      AddressType nearest_base = AddressType();
+      AddressType nearest_size = AddressType();
       bool retrieved_nearest = range_map->RetrieveNearestRange(address,
                                                                &nearest_object,
                                                                &nearest_base,
@@ -325,6 +325,43 @@
   return true;
 }
 
+// Additional RetriveAtIndex test to expose the bug in RetrieveRangeAtIndex().
+// Bug info: RetrieveRangeAtIndex() previously retrieves the high address of
+// entry, however, it is supposed to retrieve the base address of entry as
+// stated in the comment in range_map.h.
+static bool RetriveAtIndexTest2() {
+  scoped_ptr<TestMap> range_map(new TestMap());
+
+  // Store ranges with base address = 2 * object_id:
+  const int range_size = 2;
+  for (int object_id = 0; object_id < 100; ++object_id) {
+    linked_ptr<CountedObject> object(new CountedObject(object_id));
+    int base_address = 2 * object_id;
+    range_map->StoreRange(base_address, range_size, object);
+  }
+
+  linked_ptr<CountedObject> object;
+  int object_count = range_map->GetCount();
+  for (int object_index = 0; object_index < object_count; ++object_index) {
+    AddressType base;
+    if (!range_map->RetrieveRangeAtIndex(object_index, &object, &base, NULL)) {
+      fprintf(stderr, "FAILED: RetrieveAtIndexTest2 index %d, "
+              "expected success, observed failure\n", object_index);
+      return false;
+    }
+
+    int expected_base = 2 * object->id();
+    if (base != expected_base) {
+      fprintf(stderr, "FAILED: RetriveAtIndexTest2 index %d, "
+              "expected base %d, observed base %d",
+              object_index, expected_base, base);
+      return false;
+    }
+  }
+
+  return true;
+}
+
 
 // RunTests runs a series of test sets.
 static bool RunTests() {
@@ -497,6 +534,11 @@
     }
   }
 
+  if (!RetriveAtIndexTest2()) {
+    fprintf(stderr, "FAILED: did not pass RetrieveAtIndexTest2()\n");
+    return false;
+  }
+
   return true;
 }
 
diff --git a/src/processor/simple_serializer-inl.h b/src/processor/simple_serializer-inl.h
new file mode 100644
index 0000000..a6f5496
--- /dev/null
+++ b/src/processor/simple_serializer-inl.h
@@ -0,0 +1,252 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// simple_serializer-inl.h: template specializations for following types:
+// bool, const char *(C-string), string,
+// Line, Function, PublicSymbol, WindowsFrameInfo and their linked pointers.
+//
+// See simple_serializer.h for moredocumentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_SIMPLE_SERIALIZER_INL_H__
+#define PROCESSOR_SIMPLE_SERIALIZER_INL_H__
+
+#include <string>
+
+#include "processor/simple_serializer.h"
+#include "map_serializers-inl.h"
+
+#include "google_breakpad/processor/basic_source_line_resolver.h"
+#include "processor/basic_source_line_resolver_types.h"
+#include "processor/linked_ptr.h"
+#include "processor/windows_frame_info.h"
+
+namespace google_breakpad {
+
+// Specializations of SimpleSerializer: bool
+template<>
+class SimpleSerializer<bool> {
+ public:
+  static size_t SizeOf(bool boolean) { return 1; }
+
+  static char *Write(bool boolean, char *dest) {
+    *dest = static_cast<char>(boolean? 255 : 0);
+    return ++dest;
+  }
+};
+
+// Specializations of SimpleSerializer: string
+template<>
+class SimpleSerializer<string> {
+ public:
+  static size_t SizeOf(const string &str) { return str.size() + 1; }
+
+  static char *Write(const string &str, char *dest) {
+    strcpy(dest, str.c_str());
+    return dest + SizeOf(str);
+  }
+};
+
+// Specializations of SimpleSerializer: C-string
+template<>
+class SimpleSerializer<const char*> {
+ public:
+  static size_t SizeOf(const char *cstring) {
+    return strlen(cstring) + 1;
+  }
+
+  static char *Write(const char *cstring, char *dest) {
+    strcpy(dest, cstring);
+    return dest + SizeOf(cstring);
+  }
+};
+
+// Specializations of SimpleSerializer: Line
+template<>
+class SimpleSerializer<BasicSourceLineResolver::Line> {
+  typedef BasicSourceLineResolver::Line Line;
+ public:
+  static size_t SizeOf(const Line &line) {
+    return SimpleSerializer<MemAddr>::SizeOf(line.address)
+         + SimpleSerializer<MemAddr>::SizeOf(line.size)
+         + SimpleSerializer<int32_t>::SizeOf(line.source_file_id)
+         + SimpleSerializer<int32_t>::SizeOf(line.line);
+  }
+  static char *Write(const Line &line, char *dest) {
+    dest = SimpleSerializer<MemAddr>::Write(line.address, dest);
+    dest = SimpleSerializer<MemAddr>::Write(line.size, dest);
+    dest = SimpleSerializer<int32_t>::Write(line.source_file_id, dest);
+    dest = SimpleSerializer<int32_t>::Write(line.line, dest);
+    return dest;
+  }
+};
+
+// Specializations of SimpleSerializer: PublicSymbol
+template<>
+class SimpleSerializer<BasicSourceLineResolver::PublicSymbol> {
+  typedef BasicSourceLineResolver::PublicSymbol PublicSymbol;
+ public:
+  static size_t SizeOf(const PublicSymbol &pubsymbol) {
+    return SimpleSerializer<string>::SizeOf(pubsymbol.name)
+         + SimpleSerializer<MemAddr>::SizeOf(pubsymbol.address)
+         + SimpleSerializer<int32_t>::SizeOf(pubsymbol.parameter_size);
+  }
+  static char *Write(const PublicSymbol &pubsymbol, char *dest) {
+    dest = SimpleSerializer<string>::Write(pubsymbol.name, dest);
+    dest = SimpleSerializer<MemAddr>::Write(pubsymbol.address, dest);
+    dest = SimpleSerializer<int32_t>::Write(pubsymbol.parameter_size, dest);
+    return dest;
+  }
+};
+
+// Specializations of SimpleSerializer: WindowsFrameInfo
+template<>
+class SimpleSerializer<WindowsFrameInfo> {
+ public:
+  static size_t SizeOf(const WindowsFrameInfo &wfi) {
+    unsigned int size = 0;
+    size += SimpleSerializer<int32_t>::SizeOf(wfi.valid);
+    size += SimpleSerializer<u_int32_t>::SizeOf(wfi.prolog_size);
+    size += SimpleSerializer<u_int32_t>::SizeOf(wfi.epilog_size);
+    size += SimpleSerializer<u_int32_t>::SizeOf(wfi.parameter_size);
+    size += SimpleSerializer<u_int32_t>::SizeOf(wfi.saved_register_size);
+    size += SimpleSerializer<u_int32_t>::SizeOf(wfi.local_size);
+    size += SimpleSerializer<u_int32_t>::SizeOf(wfi.max_stack_size);
+    size += SimpleSerializer<bool>::SizeOf(wfi.allocates_base_pointer);
+    size += SimpleSerializer<string>::SizeOf(wfi.program_string);
+    return size;
+  }
+  static char *Write(const WindowsFrameInfo &wfi, char *dest) {
+    dest = SimpleSerializer<int32_t>::Write(wfi.valid, dest);
+    dest = SimpleSerializer<u_int32_t>::Write(wfi.prolog_size, dest);
+    dest = SimpleSerializer<u_int32_t>::Write(wfi.epilog_size, dest);
+    dest = SimpleSerializer<u_int32_t>::Write(wfi.parameter_size, dest);
+    dest = SimpleSerializer<u_int32_t>::Write(wfi.saved_register_size, dest);
+    dest = SimpleSerializer<u_int32_t>::Write(wfi.local_size, dest);
+    dest = SimpleSerializer<u_int32_t>::Write(wfi.max_stack_size, dest);
+    dest = SimpleSerializer<bool>::Write(wfi.allocates_base_pointer, dest);
+    return SimpleSerializer<string>::Write(wfi.program_string, dest);
+  }
+};
+
+// Specializations of SimpleSerializer: Linked_ptr version of
+// Line, Function, PublicSymbol, WindowsFrameInfo.
+template<>
+class SimpleSerializer< linked_ptr<BasicSourceLineResolver::Line> > {
+  typedef BasicSourceLineResolver::Line Line;
+ public:
+  static size_t SizeOf(const linked_ptr<Line> &lineptr) {
+    if (lineptr.get() == NULL) return 0;
+    return SimpleSerializer<Line>::SizeOf(*(lineptr.get()));
+  }
+  static char *Write(const linked_ptr<Line> &lineptr, char *dest) {
+    if (lineptr.get())
+      dest = SimpleSerializer<Line>::Write(*(lineptr.get()), dest);
+    return dest;
+  }
+};
+
+template<>
+class SimpleSerializer<BasicSourceLineResolver::Function> {
+  // Convenient type names.
+  typedef BasicSourceLineResolver::Function Function;
+  typedef BasicSourceLineResolver::Line Line;
+ public:
+  static size_t SizeOf(const Function &func) {
+    unsigned int size = 0;
+    size += SimpleSerializer<string>::SizeOf(func.name);
+    size += SimpleSerializer<MemAddr>::SizeOf(func.address);
+    size += SimpleSerializer<MemAddr>::SizeOf(func.size);
+    size += SimpleSerializer<int32_t>::SizeOf(func.parameter_size);
+    size += range_map_serializer_.SizeOf(func.lines);
+    return size;
+  }
+
+  static char *Write(const Function &func, char *dest) {
+    dest = SimpleSerializer<string>::Write(func.name, dest);
+    dest = SimpleSerializer<MemAddr>::Write(func.address, dest);
+    dest = SimpleSerializer<MemAddr>::Write(func.size, dest);
+    dest = SimpleSerializer<int32_t>::Write(func.parameter_size, dest);
+    dest = range_map_serializer_.Write(func.lines, dest);
+    return dest;
+  }
+ private:
+  // This static member is defined in module_serializer.cc.
+  static RangeMapSerializer< MemAddr, linked_ptr<Line> > range_map_serializer_;
+};
+
+template<>
+class SimpleSerializer< linked_ptr<BasicSourceLineResolver::Function> > {
+  typedef BasicSourceLineResolver::Function Function;
+ public:
+  static size_t SizeOf(const linked_ptr<Function> &func) {
+    if (!func.get()) return 0;
+    return SimpleSerializer<Function>::SizeOf(*(func.get()));
+  }
+
+  static char *Write(const linked_ptr<Function> &func, char *dest) {
+    if (func.get())
+      dest = SimpleSerializer<Function>::Write(*(func.get()), dest);
+    return dest;
+  }
+};
+
+template<>
+class SimpleSerializer< linked_ptr<BasicSourceLineResolver::PublicSymbol> > {
+  typedef BasicSourceLineResolver::PublicSymbol PublicSymbol;
+ public:
+  static size_t SizeOf(const linked_ptr<PublicSymbol> &pubsymbol) {
+    if (pubsymbol.get() == NULL) return 0;
+    return SimpleSerializer<PublicSymbol>::SizeOf(*(pubsymbol.get()));
+  }
+  static char *Write(const linked_ptr<PublicSymbol> &pubsymbol, char *dest) {
+    if (pubsymbol.get())
+      dest = SimpleSerializer<PublicSymbol>::Write(*(pubsymbol.get()), dest);
+    return dest;
+  }
+};
+
+template<>
+class SimpleSerializer< linked_ptr<WindowsFrameInfo> > {
+ public:
+  static size_t SizeOf(const linked_ptr<WindowsFrameInfo> &wfi) {
+    if (wfi.get() == NULL) return 0;
+    return SimpleSerializer<WindowsFrameInfo>::SizeOf(*(wfi.get()));
+  }
+  static char *Write(const linked_ptr<WindowsFrameInfo> &wfi, char *dest) {
+    if (wfi.get())
+      dest = SimpleSerializer<WindowsFrameInfo>::Write(*(wfi.get()), dest);
+    return dest;
+  }
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_SIMPLE_SERIALIZER_INL_H__
diff --git a/src/processor/simple_serializer.h b/src/processor/simple_serializer.h
new file mode 100644
index 0000000..a1ca4f3
--- /dev/null
+++ b/src/processor/simple_serializer.h
@@ -0,0 +1,63 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// simple_serializer.h: SimpleSerializer is a template for calculating size and
+// writing to specific memory location for objects of primitive types, C-style
+// string, string, breakpad types/structs etc.
+// All specializations of SimpleSerializer template are defined in the
+// "simple_serializer-inl.h" file.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_SIMPLE_SERIALIZER_H__
+#define PROCESSOR_SIMPLE_SERIALIZER_H__
+
+#include <sys/types.h>
+
+namespace google_breakpad {
+
+typedef u_int64_t MemAddr;
+
+// Default implementation of SimpleSerializer template.
+// Specializations are defined in "simple_serializer-inl.h".
+template<class Type> class SimpleSerializer {
+ public:
+  // Calculate and return the size of the 'item'.
+  static size_t SizeOf(const Type &item) { return sizeof(item); }
+  // Write 'item' to memory location 'dest', and return to the "end" address of
+  // data written, i.e., the address after the final byte written.
+  static char *Write(const Type &item, char *dest) {
+    new (dest) Type(item);
+    return dest + SizeOf(item);
+  }
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_SIMPLE_SERIALIZER_H__
diff --git a/src/processor/simple_symbol_supplier.cc b/src/processor/simple_symbol_supplier.cc
index c593e95..76820e1 100644
--- a/src/processor/simple_symbol_supplier.cc
+++ b/src/processor/simple_symbol_supplier.cc
@@ -33,15 +33,17 @@
 //
 // Author: Mark Mentovai
 
+#include "processor/simple_symbol_supplier.h"
+
+#include <assert.h>
+#include <string.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 
 #include <algorithm>
-#include <cassert>
 #include <iostream>
 #include <fstream>
 
-#include "processor/simple_symbol_supplier.h"
 #include "google_breakpad/processor/code_module.h"
 #include "google_breakpad/processor/system_info.h"
 #include "processor/logging.h"
@@ -92,6 +94,47 @@
   return s;
 }
 
+SymbolSupplier::SymbolResult SimpleSymbolSupplier::GetCStringSymbolData(
+    const CodeModule *module,
+    const SystemInfo *system_info,
+    string *symbol_file,
+    char **symbol_data) {
+  assert(symbol_data);
+
+  string symbol_data_string;
+  SymbolSupplier::SymbolResult s =
+      GetSymbolFile(module, system_info, symbol_file, &symbol_data_string);
+
+  if (s == FOUND) {
+    unsigned int size = symbol_data_string.size() + 1;
+    *symbol_data = new char[size];
+    if (*symbol_data == NULL) {
+      BPLOG(ERROR) << "Memory allocation for size " << size << " failed";
+      return INTERRUPT;
+    }
+    memcpy(*symbol_data, symbol_data_string.c_str(), size - 1);
+    (*symbol_data)[size - 1] = '\0';
+    memory_buffers_.insert(make_pair(module->code_file(), *symbol_data));
+  }
+  return s;
+}
+
+void SimpleSymbolSupplier::FreeSymbolData(const CodeModule *module) {
+  if (!module) {
+    BPLOG(INFO) << "Cannot free symbol data buffer for NULL module";
+    return;
+  }
+
+  map<string, char *>::iterator it = memory_buffers_.find(module->code_file());
+  if (it == memory_buffers_.end()) {
+    BPLOG(INFO) << "Cannot find symbol data buffer for module "
+                << module->code_file();
+    return;
+  }
+  delete [] it->second;
+  memory_buffers_.erase(it);
+}
+
 SymbolSupplier::SymbolResult SimpleSymbolSupplier::GetSymbolFileAtPathFromRoot(
     const CodeModule *module, const SystemInfo *system_info,
     const string &root_path, string *symbol_file) {
diff --git a/src/processor/simple_symbol_supplier.h b/src/processor/simple_symbol_supplier.h
index dff6a51..e1c1619 100644
--- a/src/processor/simple_symbol_supplier.h
+++ b/src/processor/simple_symbol_supplier.h
@@ -76,6 +76,7 @@
 #ifndef PROCESSOR_SIMPLE_SYMBOL_SUPPLIER_H__
 #define PROCESSOR_SIMPLE_SYMBOL_SUPPLIER_H__
 
+#include <map>
 #include <string>
 #include <vector>
 
@@ -83,6 +84,7 @@
 
 namespace google_breakpad {
 
+using std::map;
 using std::string;
 using std::vector;
 
@@ -110,6 +112,17 @@
                                      const SystemInfo *system_info,
                                      string *symbol_file,
                                      string *symbol_data);
+
+  // Allocates data buffer on heap and writes symbol data into buffer.
+  // Symbol supplier ALWAYS takes ownership of the data buffer.
+  virtual SymbolResult GetCStringSymbolData(const CodeModule *module,
+                                            const SystemInfo *system_info,
+                                            string *symbol_file,
+                                            char **symbol_data);
+
+  // Free the data buffer allocated in the above GetCStringSymbolData();
+  virtual void FreeSymbolData(const CodeModule *module);
+
  protected:
   SymbolResult GetSymbolFileAtPathFromRoot(const CodeModule *module,
                                            const SystemInfo *system_info,
@@ -117,6 +130,7 @@
                                            string *symbol_file);
 
  private:
+  map<string, char *> memory_buffers_;
   vector<string> paths_;
 };
 
diff --git a/src/processor/source_line_resolver_base.cc b/src/processor/source_line_resolver_base.cc
new file mode 100644
index 0000000..b8362dc
--- /dev/null
+++ b/src/processor/source_line_resolver_base.cc
@@ -0,0 +1,311 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// source_line_resolver_base.cc: Implementation of SourceLineResolverBase.
+//
+// See source_line_resolver_base.h and source_line_resolver_base_types.h for
+// more documentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include <map>
+#include <utility>
+
+#include "google_breakpad/processor/source_line_resolver_base.h"
+#include "processor/source_line_resolver_base_types.h"
+#include "processor/module_factory.h"
+
+using std::map;
+using std::make_pair;
+
+namespace google_breakpad {
+
+SourceLineResolverBase::SourceLineResolverBase(
+    ModuleFactory *module_factory)
+  : modules_(new ModuleMap),
+    memory_buffers_(new MemoryMap),
+    module_factory_(module_factory) {
+}
+
+SourceLineResolverBase::~SourceLineResolverBase() {
+  ModuleMap::iterator it;
+  // Iterate through ModuleMap and delete all loaded modules.
+  for (it = modules_->begin(); it != modules_->end(); ++it) {
+    // Delete individual module.
+    delete it->second;
+  }
+  // Delete the map of modules.
+  delete modules_;
+
+  MemoryMap::iterator iter = memory_buffers_->begin();
+  for (; iter != memory_buffers_->end(); ++iter) {
+    delete [] iter->second;
+  }
+  // Delete the map of memory buffers.
+  delete memory_buffers_;
+
+  delete module_factory_;
+}
+
+bool SourceLineResolverBase::ReadSymbolFile(char **symbol_data,
+                                            const string &map_file) {
+  if (symbol_data == NULL) {
+    BPLOG(ERROR) << "Could not Read file into Null memory pointer";
+    return false;
+  }
+
+  struct stat buf;
+  int error_code = stat(map_file.c_str(), &buf);
+  if (error_code == -1) {
+    string error_string;
+    int error_code = ErrnoString(&error_string);
+    BPLOG(ERROR) << "Could not open " << map_file <<
+        ", error " << error_code << ": " << error_string;
+    return false;
+  }
+
+  off_t file_size = buf.st_size;
+
+  // Allocate memory for file contents, plus a null terminator
+  // since we may use strtok() on the contents.
+  *symbol_data = new char[file_size + 1];
+
+  if (*symbol_data == NULL) {
+    BPLOG(ERROR) << "Could not allocate memory for " << map_file;
+    return false;
+  }
+
+  BPLOG(INFO) << "Opening " << map_file;
+
+  FILE *f = fopen(map_file.c_str(), "rt");
+  if (!f) {
+    string error_string;
+    int error_code = ErrnoString(&error_string);
+    BPLOG(ERROR) << "Could not open " << map_file <<
+        ", error " << error_code << ": " << error_string;
+    delete [] (*symbol_data);
+    *symbol_data = NULL;
+    return false;
+  }
+
+  AutoFileCloser closer(f);
+
+  int items_read = 0;
+
+  items_read = fread(*symbol_data, 1, file_size, f);
+
+  if (items_read != file_size) {
+    string error_string;
+    int error_code = ErrnoString(&error_string);
+    BPLOG(ERROR) << "Could not slurp " << map_file <<
+        ", error " << error_code << ": " << error_string;
+    delete [] (*symbol_data);
+    *symbol_data = NULL;
+    return false;
+  }
+
+  (*symbol_data)[file_size] = '\0';
+  return true;
+}
+
+bool SourceLineResolverBase::LoadModule(const CodeModule *module,
+                                        const string &map_file) {
+  if (module == NULL)
+    return false;
+
+  // Make sure we don't already have a module with the given name.
+  if (modules_->find(module->code_file()) != modules_->end()) {
+    BPLOG(INFO) << "Symbols for module " << module->code_file()
+                << " already loaded";
+    return false;
+  }
+
+  BPLOG(INFO) << "Loading symbols for module " << module->code_file()
+              << " from " << map_file;
+
+  char *memory_buffer;
+  if (!ReadSymbolFile(&memory_buffer, map_file))
+    return false;
+
+  BPLOG(INFO) << "Read symbol file " << map_file << " succeeded";
+
+  bool load_result = LoadModuleUsingMemoryBuffer(module, memory_buffer);
+
+  if (load_result && !ShouldDeleteMemoryBufferAfterLoadModule()) {
+    // memory_buffer has to stay alive as long as the module.
+    memory_buffers_->insert(make_pair(module->code_file(), memory_buffer));
+  } else {
+    delete [] memory_buffer;
+  }
+
+  return load_result;
+}
+
+bool SourceLineResolverBase::LoadModuleUsingMapBuffer(
+    const CodeModule *module, const string &map_buffer) {
+  if (module == NULL)
+    return false;
+
+  // Make sure we don't already have a module with the given name.
+  if (modules_->find(module->code_file()) != modules_->end()) {
+    BPLOG(INFO) << "Symbols for module " << module->code_file()
+                << " already loaded";
+    return false;
+  }
+
+  char *memory_buffer = new char[map_buffer.size() + 1];
+  if (memory_buffer == NULL) {
+    BPLOG(ERROR) << "Could not allocate memory for " << module->code_file();
+    return false;
+  }
+
+  // Can't use strcpy, as the data may contain '\0's before the end.
+  memcpy(memory_buffer, map_buffer.c_str(), map_buffer.size());
+  memory_buffer[map_buffer.size()] = '\0';
+
+  bool load_result = LoadModuleUsingMemoryBuffer(module, memory_buffer);
+
+  if (load_result && !ShouldDeleteMemoryBufferAfterLoadModule()) {
+    // memory_buffer has to stay alive as long as the module.
+    memory_buffers_->insert(make_pair(module->code_file(), memory_buffer));
+  } else {
+    delete [] memory_buffer;
+  }
+
+  return load_result;
+}
+
+bool SourceLineResolverBase::LoadModuleUsingMemoryBuffer(
+    const CodeModule *module, char *memory_buffer) {
+  if (!module)
+    return false;
+
+  // Make sure we don't already have a module with the given name.
+  if (modules_->find(module->code_file()) != modules_->end()) {
+    BPLOG(INFO) << "Symbols for module " << module->code_file()
+                << " already loaded";
+    return false;
+  }
+
+  BPLOG(INFO) << "Loading symbols for module " << module->code_file()
+             << " from memory buffer";
+
+  Module *basic_module = module_factory_->CreateModule(module->code_file());
+
+  // Ownership of memory is NOT transfered to Module::LoadMapFromMemory().
+  if (!basic_module->LoadMapFromMemory(memory_buffer)) {
+    delete basic_module;
+    return false;
+  }
+
+  modules_->insert(make_pair(module->code_file(), basic_module));
+  return true;
+}
+
+bool SourceLineResolverBase::ShouldDeleteMemoryBufferAfterLoadModule() {
+  return true;
+}
+
+void SourceLineResolverBase::UnloadModule(const CodeModule *code_module) {
+  if (!code_module)
+    return;
+
+  ModuleMap::iterator iter = modules_->find(code_module->code_file());
+  if (iter != modules_->end()) {
+    Module *symbol_module = iter->second;
+    delete symbol_module;
+    modules_->erase(iter);
+  }
+
+  if (ShouldDeleteMemoryBufferAfterLoadModule()) {
+    // No-op.  Because we never store any memory buffers.
+  } else {
+    // There may be a buffer stored locally, we need to find and delete it.
+    MemoryMap::iterator iter = memory_buffers_->find(code_module->code_file());
+    if (iter != memory_buffers_->end()) {
+      delete [] iter->second;
+      memory_buffers_->erase(iter);
+    }
+  }
+}
+
+bool SourceLineResolverBase::HasModule(const CodeModule *module) {
+  if (!module)
+    return false;
+  return modules_->find(module->code_file()) != modules_->end();
+}
+
+void SourceLineResolverBase::FillSourceLineInfo(StackFrame *frame) {
+  if (frame->module) {
+    ModuleMap::const_iterator it = modules_->find(frame->module->code_file());
+    if (it != modules_->end()) {
+      it->second->LookupAddress(frame);
+    }
+  }
+}
+
+WindowsFrameInfo *SourceLineResolverBase::FindWindowsFrameInfo(
+    const StackFrame *frame) {
+  if (frame->module) {
+    ModuleMap::const_iterator it = modules_->find(frame->module->code_file());
+    if (it != modules_->end()) {
+      return it->second->FindWindowsFrameInfo(frame);
+    }
+  }
+  return NULL;
+}
+
+CFIFrameInfo *SourceLineResolverBase::FindCFIFrameInfo(
+    const StackFrame *frame) {
+  if (frame->module) {
+    ModuleMap::const_iterator it = modules_->find(frame->module->code_file());
+    if (it != modules_->end()) {
+      return it->second->FindCFIFrameInfo(frame);
+    }
+  }
+  return NULL;
+}
+
+bool SourceLineResolverBase::CompareString::operator()(
+    const string &s1, const string &s2) const {
+  return strcmp(s1.c_str(), s2.c_str()) < 0;
+}
+
+bool SourceLineResolverBase::Module::ParseCFIRuleSet(
+    const string &rule_set, CFIFrameInfo *frame_info) const {
+  CFIFrameInfoParseHandler handler(frame_info);
+  CFIRuleParser parser(&handler);
+  return parser.Parse(rule_set);
+}
+
+}  // namespace google_breakpad
diff --git a/src/processor/source_line_resolver_base_types.h b/src/processor/source_line_resolver_base_types.h
new file mode 100644
index 0000000..5b099f1
--- /dev/null
+++ b/src/processor/source_line_resolver_base_types.h
@@ -0,0 +1,149 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// source_line_resolver_base_types.h: definition of nested classes/structs in
+// SourceLineResolverBase.  It moves the definitions out of
+// source_line_resolver_base.cc, so that other classes may have access
+// to these private nested types without including source_line_resolver_base.cc
+// In addition, Module is defined as a pure abstract class to be implemented by
+// each concrete source line resolver class.
+//
+// See source_line_resolver_base.h for more documentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#include <stdio.h>
+
+#include <map>
+#include <string>
+
+#include "google_breakpad/processor/source_line_resolver_base.h"
+#include "google_breakpad/processor/stack_frame.h"
+#include "processor/cfi_frame_info.h"
+#include "processor/windows_frame_info.h"
+
+#ifndef PROCESSOR_SOURCE_LINE_RESOLVER_BASE_TYPES_H__
+#define PROCESSOR_SOURCE_LINE_RESOLVER_BASE_TYPES_H__
+
+namespace google_breakpad {
+
+class SourceLineResolverBase::AutoFileCloser {
+ public:
+  explicit AutoFileCloser(FILE *file) : file_(file) {}
+  ~AutoFileCloser() {
+    if (file_)
+      fclose(file_);
+  }
+
+ private:
+  FILE *file_;
+};
+
+struct SourceLineResolverBase::Line {
+  Line() { }
+  Line(MemAddr addr, MemAddr code_size, int file_id, int source_line)
+      : address(addr)
+      , size(code_size)
+      , source_file_id(file_id)
+      , line(source_line) { }
+
+  MemAddr address;
+  MemAddr size;
+  int32_t source_file_id;
+  int32_t line;
+};
+
+struct SourceLineResolverBase::Function {
+  Function() { }
+  Function(const string &function_name,
+           MemAddr function_address,
+           MemAddr code_size,
+           int set_parameter_size)
+      : name(function_name), address(function_address), size(code_size),
+        parameter_size(set_parameter_size) { }
+
+  string name;
+  MemAddr address;
+  MemAddr size;
+
+  // The size of parameters passed to this function on the stack.
+  int32_t parameter_size;
+};
+
+struct SourceLineResolverBase::PublicSymbol {
+  PublicSymbol() { }
+  PublicSymbol(const string& set_name,
+               MemAddr set_address,
+               int set_parameter_size)
+      : name(set_name),
+        address(set_address),
+        parameter_size(set_parameter_size) {}
+
+  string name;
+  MemAddr address;
+
+  // If the public symbol is used as a function entry point, parameter_size
+  // is set to the size of the parameters passed to the funciton on the
+  // stack, if known.
+  int32_t parameter_size;
+};
+
+class SourceLineResolverBase::Module {
+ public:
+  virtual ~Module() { };
+  // Loads a map from the given buffer in char* type.
+  // Does NOT take ownership of memory_buffer (the caller, source line resolver,
+  // is the owner of memory_buffer).
+  virtual bool LoadMapFromMemory(char *memory_buffer) = 0;
+
+  // Looks up the given relative address, and fills the StackFrame struct
+  // with the result.
+  virtual void LookupAddress(StackFrame *frame) const = 0;
+
+  // If Windows stack walking information is available covering ADDRESS,
+  // return a WindowsFrameInfo structure describing it. If the information
+  // is not available, returns NULL. A NULL return value does not indicate
+  // an error. The caller takes ownership of any returned WindowsFrameInfo
+  // object.
+  virtual WindowsFrameInfo *
+  FindWindowsFrameInfo(const StackFrame *frame) const = 0;
+
+  // If CFI stack walking information is available covering ADDRESS,
+  // return a CFIFrameInfo structure describing it. If the information
+  // is not available, return NULL. The caller takes ownership of any
+  // returned CFIFrameInfo object.
+  virtual CFIFrameInfo *FindCFIFrameInfo(const StackFrame *frame) const = 0;
+ protected:
+  virtual bool ParseCFIRuleSet(const string &rule_set,
+                               CFIFrameInfo *frame_info) const;
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_SOURCE_LINE_RESOLVER_BASE_TYPES_H__
diff --git a/src/processor/stackwalker.cc b/src/processor/stackwalker.cc
index a45407d..b0f0c4b 100644
--- a/src/processor/stackwalker.cc
+++ b/src/processor/stackwalker.cc
@@ -33,10 +33,10 @@
 //
 // Author: Mark Mentovai
 
-
-#include <cassert>
-
 #include "google_breakpad/processor/stackwalker.h"
+
+#include <assert.h>
+
 #include "google_breakpad/processor/call_stack.h"
 #include "google_breakpad/processor/code_module.h"
 #include "google_breakpad/processor/code_modules.h"
@@ -55,6 +55,7 @@
 
 namespace google_breakpad {
 
+u_int32_t Stackwalker::max_frames_ = 1024;
 
 Stackwalker::Stackwalker(const SystemInfo *system_info,
                          MemoryRegion *memory,
@@ -96,15 +97,18 @@
             no_symbol_modules_.find(
                 module->code_file()) == no_symbol_modules_.end() &&
             supplier_) {
-          string symbol_data, symbol_file;
+          string symbol_file;
+          char *symbol_data = NULL;
           SymbolSupplier::SymbolResult symbol_result =
-              supplier_->GetSymbolFile(module, system_info_,
-                                       &symbol_file, &symbol_data);
+              supplier_->GetCStringSymbolData(module,
+                                              system_info_,
+                                              &symbol_file,
+                                              &symbol_data);
 
           switch (symbol_result) {
             case SymbolSupplier::FOUND:
-              resolver_->LoadModuleUsingMapBuffer(frame->module,
-                                                  symbol_data);
+              resolver_->LoadModuleUsingMemoryBuffer(frame->module,
+                                                     symbol_data);
               break;
             case SymbolSupplier::NOT_FOUND:
               no_symbol_modules_.insert(module->code_file());
@@ -112,6 +116,9 @@
             case SymbolSupplier::INTERRUPT:
               return false;
           }
+          // Inform symbol supplier to free the unused data memory buffer.
+          if (resolver_->ShouldDeleteMemoryBufferAfterLoadModule())
+            supplier_->FreeSymbolData(module);
         }
         resolver_->FillSourceLineInfo(frame.get());
       }
@@ -120,6 +127,10 @@
     // Add the frame to the call stack.  Relinquish the ownership claim
     // over the frame, because the stack now owns it.
     stack->frames_.push_back(frame.release());
+    if (stack->frames_.size() > max_frames_) {
+      BPLOG(ERROR) << "The stack is over " << max_frames_ << " frames.";
+      break;
+    }
 
     // Get the next frame and take ownership.
     frame.reset(GetCallerFrame(stack));
@@ -166,7 +177,7 @@
                                              memory, modules, supplier,
                                              resolver);
       break;
-  
+
     case MD_CONTEXT_SPARC:
       cpu_stackwalker = new StackwalkerSPARC(system_info,
                                              context->GetContextSPARC(),
@@ -202,13 +213,14 @@
   }
 
   if (!resolver_->HasModule(module)) {
-    string symbol_data, symbol_file;
+    string symbol_file;
+    char *symbol_data = NULL;
     SymbolSupplier::SymbolResult symbol_result =
-      supplier_->GetSymbolFile(module, system_info_,
-                               &symbol_file, &symbol_data);
+      supplier_->GetCStringSymbolData(module, system_info_,
+                                      &symbol_file, &symbol_data);
 
     if (symbol_result != SymbolSupplier::FOUND ||
-        !resolver_->LoadModuleUsingMapBuffer(module,
+        !resolver_->LoadModuleUsingMemoryBuffer(module,
                                              symbol_data)) {
       // we don't have symbols, but we're inside a loaded module
       return true;
diff --git a/src/processor/stackwalker_amd64.cc b/src/processor/stackwalker_amd64.cc
index 38d8fb6..c142e2a 100644
--- a/src/processor/stackwalker_amd64.cc
+++ b/src/processor/stackwalker_amd64.cc
@@ -114,6 +114,7 @@
   // straight out of the CPU context structure.
   frame->context = *context_;
   frame->context_validity = StackFrameAMD64::CONTEXT_VALID_ALL;
+  frame->trust = StackFrame::FRAME_TRUST_CONTEXT;
   frame->instruction = frame->context.rip;
 
   return frame;
@@ -130,16 +131,47 @@
                            last_frame->context, last_frame->context_validity,
                            &frame->context, &frame->context_validity))
     return NULL;
-  
+
   // Make sure we recovered all the essentials.
   static const int essentials = (StackFrameAMD64::CONTEXT_VALID_RIP
                                  | StackFrameAMD64::CONTEXT_VALID_RSP);
   if ((frame->context_validity & essentials) != essentials)
     return NULL;
 
+  frame->trust = StackFrame::FRAME_TRUST_CFI;
   return frame.release();
 }
 
+StackFrameAMD64 *StackwalkerAMD64::GetCallerByStackScan(
+    const vector<StackFrame *> &frames) {
+  StackFrameAMD64 *last_frame = static_cast<StackFrameAMD64 *>(frames.back());
+  u_int64_t last_rsp = last_frame->context.rsp;
+  u_int64_t caller_rsp, caller_rip;
+  
+  if (!ScanForReturnAddress(last_rsp, &caller_rsp, &caller_rip)) {
+    // No plausible return address was found.
+    return NULL;
+  }
+
+  // ScanForReturnAddress found a reasonable return address. Advance
+  // %rsp to the location above the one where the return address was
+  // found.
+  caller_rsp += 8;
+
+  // Create a new stack frame (ownership will be transferred to the caller)
+  // and fill it in.
+  StackFrameAMD64 *frame = new StackFrameAMD64();
+
+  frame->trust = StackFrame::FRAME_TRUST_SCAN;
+  frame->context = last_frame->context;
+  frame->context.rip = caller_rip;
+  frame->context.rsp = caller_rsp;
+  frame->context_validity = StackFrameAMD64::CONTEXT_VALID_RIP |
+                            StackFrameAMD64::CONTEXT_VALID_RSP;
+
+  return frame;
+}
+
 StackFrame* StackwalkerAMD64::GetCallerFrame(const CallStack *stack) {
   if (!memory_ || !stack) {
     BPLOG(ERROR) << "Can't get caller frame without memory or stack";
@@ -151,17 +183,21 @@
   scoped_ptr<StackFrameAMD64> new_frame;
 
   // If we have DWARF CFI information, use it.
+  scoped_ptr<CFIFrameInfo> cfi_frame_info(
+      resolver_->FindCFIFrameInfo(last_frame));
+  if (cfi_frame_info.get())
+    new_frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get()));
+
+  // If CFI failed, or there wasn't CFI available, fall back
+  // to stack scanning.
   if (!new_frame.get()) {
-    scoped_ptr<CFIFrameInfo> cfi_frame_info(resolver_
-                                            ->FindCFIFrameInfo(last_frame));
-    if (cfi_frame_info.get())
-      new_frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get()));
+    new_frame.reset(GetCallerByStackScan(frames));
   }
 
   // If nothing worked, tell the caller.
   if (!new_frame.get())
     return NULL;
-  
+
   // Treat an instruction address of 0 as end-of-stack.
   if (new_frame->context.rip == 0)
     return NULL;
@@ -185,5 +221,4 @@
   return new_frame.release();
 }
 
-
 }  // namespace google_breakpad
diff --git a/src/processor/stackwalker_amd64.h b/src/processor/stackwalker_amd64.h
index 9e61fcf..cde9520 100644
--- a/src/processor/stackwalker_amd64.h
+++ b/src/processor/stackwalker_amd64.h
@@ -77,6 +77,10 @@
   StackFrameAMD64 *GetCallerByCFIFrameInfo(const vector<StackFrame *> &frames,
                                            CFIFrameInfo *cfi_frame_info);
 
+  // Scan the stack for plausible return addresses. The caller takes ownership
+  // of the returned frame. Return NULL on failure. 
+  StackFrameAMD64 *GetCallerByStackScan(const vector<StackFrame *> &frames);
+
   // Stores the CPU context corresponding to the innermost stack frame to
   // be returned by GetContextFrame.
   const MDRawContextAMD64 *context_;
diff --git a/src/processor/stackwalker_amd64_unittest.cc b/src/processor/stackwalker_amd64_unittest.cc
index 6db04ff..758c06d 100644
--- a/src/processor/stackwalker_amd64_unittest.cc
+++ b/src/processor/stackwalker_amd64_unittest.cc
@@ -51,9 +51,9 @@
 using google_breakpad::StackFrameAMD64;
 using google_breakpad::StackwalkerAMD64;
 using google_breakpad::SystemInfo;
-using google_breakpad::TestAssembler::kLittleEndian;
-using google_breakpad::TestAssembler::Label;
-using google_breakpad::TestAssembler::Section;
+using google_breakpad::test_assembler::kLittleEndian;
+using google_breakpad::test_assembler::Label;
+using google_breakpad::test_assembler::Section;
 using std::string;
 using std::vector;
 using testing::_;
@@ -85,15 +85,18 @@
 
     // By default, none of the modules have symbol info; call
     // SetModuleSymbols to override this.
-    EXPECT_CALL(supplier, GetSymbolFile(_, _, _, _))
+    EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _))
       .WillRepeatedly(Return(MockSymbolSupplier::NOT_FOUND));
   }
 
   // Set the Breakpad symbol information that supplier should return for
   // MODULE to INFO.
   void SetModuleSymbols(MockCodeModule *module, const string &info) {
-    EXPECT_CALL(supplier, GetSymbolFile(module, &system_info, _, _))
-      .WillRepeatedly(DoAll(SetArgumentPointee<3>(info),
+    unsigned int buffer_size = info.size() + 1;
+    char *buffer = reinterpret_cast<char*>(operator new(buffer_size));
+    strcpy(buffer, info.c_str());
+    EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _))
+      .WillRepeatedly(DoAll(SetArgumentPointee<3>(buffer),
                             Return(MockSymbolSupplier::FOUND)));
   }
 
@@ -146,6 +149,129 @@
   EXPECT_TRUE(memcmp(&raw_context, &frame->context, sizeof(raw_context)) == 0);
 }
 
+class GetCallerFrame: public StackwalkerAMD64Fixture, public Test { };
+
+TEST_F(GetCallerFrame, ScanWithoutSymbols) {
+  // When the stack walker resorts to scanning the stack,
+  // only addresses located within loaded modules are
+  // considered valid return addresses.
+  // Force scanning through three frames to ensure that the
+  // stack pointer is set properly in scan-recovered frames.
+  stack_section.start() = 0x8000000080000000ULL;
+  u_int64_t return_address1 = 0x50000000b0000100ULL;
+  u_int64_t return_address2 = 0x50000000b0000900ULL;
+  Label frame1_sp, frame2_sp;
+  stack_section
+    // frame 0
+    .Append(16, 0)                      // space
+
+    .D64(0x40000000b0000000ULL)         // junk that's not
+    .D64(0x50000000d0000000ULL)         // a return address
+
+    .D64(return_address1)               // actual return address
+    // frame 1
+    .Mark(&frame1_sp)
+    .Append(16, 0)                      // space
+
+    .D64(0x40000000b0000000ULL)         // more junk
+    .D64(0x50000000d0000000ULL)
+
+    .D64(return_address2)               // actual return address
+    // frame 2
+    .Mark(&frame2_sp)
+    .Append(32, 0);                     // end of stack
+
+  RegionFromSection();
+    
+  raw_context.rip = 0x40000000c0000200ULL;
+  raw_context.rsp = stack_section.start().Value();
+
+  StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules,
+                          &supplier, &resolver);
+  ASSERT_TRUE(walker.Walk(&call_stack));
+  frames = call_stack.frames();
+  ASSERT_EQ(3U, frames->size());
+
+  StackFrameAMD64 *frame0 = static_cast<StackFrameAMD64 *>(frames->at(0));
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
+  ASSERT_EQ(StackFrameAMD64::CONTEXT_VALID_ALL, frame0->context_validity);
+  EXPECT_TRUE(memcmp(&raw_context, &frame0->context, sizeof(raw_context)) == 0);
+
+  StackFrameAMD64 *frame1 = static_cast<StackFrameAMD64 *>(frames->at(1));
+  EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust);
+  ASSERT_EQ((StackFrameAMD64::CONTEXT_VALID_RIP |
+             StackFrameAMD64::CONTEXT_VALID_RSP),
+            frame1->context_validity);
+  EXPECT_EQ(return_address1, frame1->context.rip);
+  EXPECT_EQ(frame1_sp.Value(), frame1->context.rsp);
+
+  StackFrameAMD64 *frame2 = static_cast<StackFrameAMD64 *>(frames->at(2));
+  EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame2->trust);
+  ASSERT_EQ((StackFrameAMD64::CONTEXT_VALID_RIP |
+             StackFrameAMD64::CONTEXT_VALID_RSP),
+            frame2->context_validity);
+  EXPECT_EQ(return_address2, frame2->context.rip);
+  EXPECT_EQ(frame2_sp.Value(), frame2->context.rsp);
+}
+
+TEST_F(GetCallerFrame, ScanWithFunctionSymbols) {
+  // During stack scanning, if a potential return address
+  // is located within a loaded module that has symbols,
+  // it is only considered a valid return address if it
+  // lies within a function's bounds.
+  stack_section.start() = 0x8000000080000000ULL;
+  u_int64_t return_address = 0x50000000b0000110ULL;
+  Label frame1_sp;
+
+  stack_section
+    // frame 0
+    .Append(16, 0)                      // space
+
+    .D64(0x40000000b0000000ULL)         // junk that's not
+    .D64(0x50000000b0000000ULL)         // a return address
+
+    .D64(0x40000000c0001000ULL)         // a couple of plausible addresses
+    .D64(0x50000000b000aaaaULL)         // that are not within functions
+
+    .D64(return_address)                // actual return address
+    // frame 1
+    .Mark(&frame1_sp)
+    .Append(32, 0);                     // end of stack
+  RegionFromSection();
+    
+  raw_context.rip = 0x40000000c0000200ULL;
+  raw_context.rsp = stack_section.start().Value();
+
+  SetModuleSymbols(&module1,
+                   // The youngest frame's function.
+                   "FUNC 100 400 10 platypus\n");
+  SetModuleSymbols(&module2,
+                   // The calling frame's function.
+                   "FUNC 100 400 10 echidna\n");
+
+  StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules,
+                          &supplier, &resolver);
+  ASSERT_TRUE(walker.Walk(&call_stack));
+  frames = call_stack.frames();
+  ASSERT_EQ(2U, frames->size());
+
+  StackFrameAMD64 *frame0 = static_cast<StackFrameAMD64 *>(frames->at(0));
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
+  ASSERT_EQ(StackFrameAMD64::CONTEXT_VALID_ALL, frame0->context_validity);
+  EXPECT_EQ("platypus", frame0->function_name);
+  EXPECT_EQ(0x40000000c0000100ULL, frame0->function_base);
+
+  StackFrameAMD64 *frame1 = static_cast<StackFrameAMD64 *>(frames->at(1));
+  EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust);
+  ASSERT_EQ((StackFrameAMD64::CONTEXT_VALID_RIP |
+             StackFrameAMD64::CONTEXT_VALID_RSP),
+            frame1->context_validity);
+  EXPECT_EQ(return_address, frame1->context.rip);
+  EXPECT_EQ(frame1_sp.Value(), frame1->context.rsp);
+  EXPECT_EQ("echidna", frame1->function_name);
+  EXPECT_EQ(0x50000000b0000100ULL, frame1->function_base);
+}
+
 struct CFIFixture: public StackwalkerAMD64Fixture {
   CFIFixture() {
     // Provide a bunch of STACK CFI records; we'll walk to the caller
@@ -202,11 +328,13 @@
     ASSERT_EQ(2U, frames->size());
 
     StackFrameAMD64 *frame0 = static_cast<StackFrameAMD64 *>(frames->at(0));
+    EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
     ASSERT_EQ(StackFrameAMD64::CONTEXT_VALID_ALL, frame0->context_validity);
     EXPECT_EQ("enchiridion", frame0->function_name);
     EXPECT_EQ(0x40000000c0004000ULL, frame0->function_base);
 
     StackFrameAMD64 *frame1 = static_cast<StackFrameAMD64 *>(frames->at(1));
+    EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame1->trust);
     ASSERT_EQ((StackFrameAMD64::CONTEXT_VALID_RIP |
                StackFrameAMD64::CONTEXT_VALID_RSP |
                StackFrameAMD64::CONTEXT_VALID_RBP |
diff --git a/src/processor/stackwalker_arm.cc b/src/processor/stackwalker_arm.cc
index 0af27a3..239f89d 100644
--- a/src/processor/stackwalker_arm.cc
+++ b/src/processor/stackwalker_arm.cc
@@ -69,29 +69,17 @@
   // straight out of the CPU context structure.
   frame->context = *context_;
   frame->context_validity = context_frame_validity_;
+  frame->trust = StackFrame::FRAME_TRUST_CONTEXT;
   frame->instruction = frame->context.iregs[15];
 
   return frame;
 }
 
-
-StackFrame* StackwalkerARM::GetCallerFrame(const CallStack *stack) {
-  if (!memory_ || !stack) {
-    BPLOG(ERROR) << "Can't get caller frame without memory or stack";
-    return NULL;
-  }
-
-  const vector<StackFrame *> &frames = *stack->frames();
+StackFrameARM *StackwalkerARM::GetCallerByCFIFrameInfo(
+    const vector<StackFrame *> &frames,
+    CFIFrameInfo *cfi_frame_info) {
   StackFrameARM *last_frame = static_cast<StackFrameARM *>(frames.back());
 
-  // See if we have DWARF call frame information covering this address.
-  scoped_ptr<CFIFrameInfo> cfi_frame_info(resolver_
-                                          ->FindCFIFrameInfo(last_frame));
-  if (cfi_frame_info == NULL)
-    // Unfortunately, CFI is our only option on the ARM for now. If we
-    // add a second strategy, we should put each one in its own function.
-    return NULL;
-
   static const char *register_names[] = {
     "r0",  "r1",  "r2",  "r3",  "r4",  "r5",  "r6",  "r7",
     "r8",  "r9",  "r10", "r11", "r12", "sp",  "lr",  "pc",
@@ -157,6 +145,67 @@
   if ((frame->context_validity & essentials) != essentials)
     return NULL;
 
+  frame->trust = StackFrame::FRAME_TRUST_CFI;
+  return frame.release();
+}
+
+StackFrameARM *StackwalkerARM::GetCallerByStackScan(
+    const vector<StackFrame *> &frames) {
+  StackFrameARM *last_frame = static_cast<StackFrameARM *>(frames.back());
+  u_int32_t last_sp = last_frame->context.iregs[MD_CONTEXT_ARM_REG_SP];
+  u_int32_t caller_sp, caller_pc;
+  
+  if (!ScanForReturnAddress(last_sp, &caller_sp, &caller_pc)) {
+    // No plausible return address was found.
+    return NULL;
+  }
+
+  // ScanForReturnAddress found a reasonable return address. Advance
+  // %sp to the location above the one where the return address was
+  // found.
+  caller_sp += 4;
+
+  // Create a new stack frame (ownership will be transferred to the caller)
+  // and fill it in.
+  StackFrameARM *frame = new StackFrameARM();
+
+  frame->trust = StackFrame::FRAME_TRUST_SCAN;
+  frame->context = last_frame->context;
+  frame->context.iregs[MD_CONTEXT_ARM_REG_PC] = caller_pc;
+  frame->context.iregs[MD_CONTEXT_ARM_REG_SP] = caller_sp;
+  frame->context_validity = StackFrameARM::CONTEXT_VALID_PC |
+                            StackFrameARM::CONTEXT_VALID_SP;
+
+  return frame;
+}
+
+StackFrame* StackwalkerARM::GetCallerFrame(const CallStack *stack) {
+  if (!memory_ || !stack) {
+    BPLOG(ERROR) << "Can't get caller frame without memory or stack";
+    return NULL;
+  }
+
+  const vector<StackFrame *> &frames = *stack->frames();
+  StackFrameARM *last_frame = static_cast<StackFrameARM *>(frames.back());
+  scoped_ptr<StackFrameARM> frame;
+
+  // See if there is DWARF call frame information covering this address.
+  scoped_ptr<CFIFrameInfo> cfi_frame_info(resolver_
+                                          ->FindCFIFrameInfo(last_frame));
+  if (cfi_frame_info.get())
+    frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get()));
+
+  // If CFI failed, or there wasn't CFI available, fall back
+  // to stack scanning.
+  if (!frame.get()) {
+    frame.reset(GetCallerByStackScan(frames));
+  }
+
+  // If nothing worked, tell the caller.
+  if (!frame.get())
+    return NULL;
+
+
   // An instruction address of zero marks the end of the stack.
   if (frame->context.iregs[MD_CONTEXT_ARM_REG_PC] == 0)
     return NULL;
diff --git a/src/processor/stackwalker_arm.h b/src/processor/stackwalker_arm.h
index 3768cc2..830579b 100644
--- a/src/processor/stackwalker_arm.h
+++ b/src/processor/stackwalker_arm.h
@@ -69,10 +69,19 @@
 
  private:
   // Implementation of Stackwalker, using arm context and stack conventions.
-  // TODO: currently stubbed out, needs CFI symbol dumper support
   virtual StackFrame* GetContextFrame();
   virtual StackFrame* GetCallerFrame(const CallStack *stack);
 
+  // Use cfi_frame_info (derived from STACK CFI records) to construct
+  // the frame that called frames.back(). The caller takes ownership
+  // of the returned frame. Return NULL on failure.
+  StackFrameARM *GetCallerByCFIFrameInfo(const vector<StackFrame *> &frames,
+                                         CFIFrameInfo *cfi_frame_info);
+
+  // Scan the stack for plausible return addresses. The caller takes ownership
+  // of the returned frame. Return NULL on failure. 
+  StackFrameARM *GetCallerByStackScan(const vector<StackFrame *> &frames);
+
   // Stores the CPU context corresponding to the youngest stack frame, to
   // be returned by GetContextFrame.
   const MDRawContextARM *context_;
diff --git a/src/processor/stackwalker_arm_unittest.cc b/src/processor/stackwalker_arm_unittest.cc
index 036b322..637435b 100644
--- a/src/processor/stackwalker_arm_unittest.cc
+++ b/src/processor/stackwalker_arm_unittest.cc
@@ -53,9 +53,9 @@
 using google_breakpad::StackwalkerARM;
 using google_breakpad::SystemInfo;
 using google_breakpad::WindowsFrameInfo;
-using google_breakpad::TestAssembler::kLittleEndian;
-using google_breakpad::TestAssembler::Label;
-using google_breakpad::TestAssembler::Section;
+using google_breakpad::test_assembler::kLittleEndian;
+using google_breakpad::test_assembler::Label;
+using google_breakpad::test_assembler::Section;
 using std::string;
 using std::vector;
 using testing::_;
@@ -87,15 +87,18 @@
 
     // By default, none of the modules have symbol info; call
     // SetModuleSymbols to override this.
-    EXPECT_CALL(supplier, GetSymbolFile(_, _, _, _))
+    EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _))
       .WillRepeatedly(Return(MockSymbolSupplier::NOT_FOUND));
   }
 
   // Set the Breakpad symbol information that supplier should return for
   // MODULE to INFO.
   void SetModuleSymbols(MockCodeModule *module, const string &info) {
-    EXPECT_CALL(supplier, GetSymbolFile(module, &system_info, _, _))
-      .WillRepeatedly(DoAll(SetArgumentPointee<3>(info),
+    unsigned int buffer_size = info.size() + 1;
+    char *buffer = reinterpret_cast<char*>(operator new(buffer_size));
+    strcpy(buffer, info.c_str());
+    EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _))
+      .WillRepeatedly(DoAll(SetArgumentPointee<3>(buffer),
                             Return(MockSymbolSupplier::FOUND)));
   }
 
@@ -144,6 +147,129 @@
   EXPECT_TRUE(memcmp(&raw_context, &frame->context, sizeof(raw_context)) == 0);
 }
 
+class GetCallerFrame: public StackwalkerARMFixture, public Test { };
+
+TEST_F(GetCallerFrame, ScanWithoutSymbols) {
+  // When the stack walker resorts to scanning the stack,
+  // only addresses located within loaded modules are
+  // considered valid return addresses.
+  // Force scanning through three frames to ensure that the
+  // stack pointer is set properly in scan-recovered frames.
+  stack_section.start() = 0x80000000;
+  u_int32_t return_address1 = 0x50000100;
+  u_int32_t return_address2 = 0x50000900;
+  Label frame1_sp, frame2_sp;
+  stack_section
+    // frame 0
+    .Append(16, 0)                      // space
+
+    .D32(0x40090000)                    // junk that's not
+    .D32(0x60000000)                    // a return address
+
+    .D32(return_address1)               // actual return address
+    // frame 1
+    .Mark(&frame1_sp)
+    .Append(16, 0)                      // space
+
+    .D32(0xF0000000)                    // more junk
+    .D32(0x0000000D)
+
+    .D32(return_address2)               // actual return address
+    // frame 2
+    .Mark(&frame2_sp)
+    .Append(32, 0);                     // end of stack
+  RegionFromSection();
+
+  raw_context.iregs[MD_CONTEXT_ARM_REG_PC] = 0x40005510;
+  raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = stack_section.start().Value();
+
+  StackwalkerARM walker(&system_info, &raw_context, &stack_region, &modules,
+                        &supplier, &resolver);
+  ASSERT_TRUE(walker.Walk(&call_stack));
+  frames = call_stack.frames();
+  ASSERT_EQ(3U, frames->size());
+
+  StackFrameARM *frame0 = static_cast<StackFrameARM *>(frames->at(0));
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
+  ASSERT_EQ(StackFrameARM::CONTEXT_VALID_ALL, frame0->context_validity);
+  EXPECT_TRUE(memcmp(&raw_context, &frame0->context, sizeof(raw_context)) == 0);
+
+  StackFrameARM *frame1 = static_cast<StackFrameARM *>(frames->at(1));
+  EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust);
+  ASSERT_EQ((StackFrameARM::CONTEXT_VALID_PC |
+             StackFrameARM::CONTEXT_VALID_SP),
+            frame1->context_validity);
+  EXPECT_EQ(return_address1, frame1->context.iregs[MD_CONTEXT_ARM_REG_PC]);
+  EXPECT_EQ(frame1_sp.Value(), frame1->context.iregs[MD_CONTEXT_ARM_REG_SP]);
+
+  StackFrameARM *frame2 = static_cast<StackFrameARM *>(frames->at(2));
+  EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame2->trust);
+  ASSERT_EQ((StackFrameARM::CONTEXT_VALID_PC |
+             StackFrameARM::CONTEXT_VALID_SP),
+            frame2->context_validity);
+  EXPECT_EQ(return_address2, frame2->context.iregs[MD_CONTEXT_ARM_REG_PC]);
+  EXPECT_EQ(frame2_sp.Value(), frame2->context.iregs[MD_CONTEXT_ARM_REG_SP]);
+}
+
+TEST_F(GetCallerFrame, ScanWithFunctionSymbols) {
+  // During stack scanning, if a potential return address
+  // is located within a loaded module that has symbols,
+  // it is only considered a valid return address if it
+  // lies within a function's bounds.
+  stack_section.start() = 0x80000000;
+  u_int32_t return_address = 0x50000200;
+  Label frame1_sp;
+
+  stack_section
+    // frame 0
+    .Append(16, 0)                      // space
+
+    .D32(0x40090000)                    // junk that's not
+    .D32(0x60000000)                    // a return address
+
+    .D32(0x40001000)                    // a couple of plausible addresses
+    .D32(0x5000F000)                    // that are not within functions
+
+    .D32(return_address)                // actual return address
+    // frame 1
+    .Mark(&frame1_sp)
+    .Append(32, 0);                     // end of stack
+  RegionFromSection();
+
+  raw_context.iregs[MD_CONTEXT_ARM_REG_PC] = 0x40000200;
+  raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = stack_section.start().Value();
+
+  SetModuleSymbols(&module1,
+                   // The youngest frame's function.
+                   "FUNC 100 400 10 monotreme\n");
+  SetModuleSymbols(&module2,
+                   // The calling frame's function.
+                   "FUNC 100 400 10 marsupial\n");
+
+  StackwalkerARM walker(&system_info, &raw_context, &stack_region, &modules,
+                        &supplier, &resolver);
+  ASSERT_TRUE(walker.Walk(&call_stack));
+  frames = call_stack.frames();
+  ASSERT_EQ(2U, frames->size());
+
+  StackFrameARM *frame0 = static_cast<StackFrameARM *>(frames->at(0));
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
+  ASSERT_EQ(StackFrameARM::CONTEXT_VALID_ALL, frame0->context_validity);
+  EXPECT_TRUE(memcmp(&raw_context, &frame0->context, sizeof(raw_context)) == 0);
+  EXPECT_EQ("monotreme", frame0->function_name);
+  EXPECT_EQ(0x40000100, frame0->function_base);
+
+  StackFrameARM *frame1 = static_cast<StackFrameARM *>(frames->at(1));
+  EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust);
+  ASSERT_EQ((StackFrameARM::CONTEXT_VALID_PC |
+             StackFrameARM::CONTEXT_VALID_SP),
+            frame1->context_validity);
+  EXPECT_EQ(return_address, frame1->context.iregs[MD_CONTEXT_ARM_REG_PC]);
+  EXPECT_EQ(frame1_sp.Value(), frame1->context.iregs[MD_CONTEXT_ARM_REG_SP]);
+  EXPECT_EQ("marsupial", frame1->function_name);
+  EXPECT_EQ(0x50000100, frame1->function_base);
+}
+
 struct CFIFixture: public StackwalkerARMFixture {
   CFIFixture() {
     // Provide a bunch of STACK CFI records; we'll walk to the caller
@@ -238,11 +364,13 @@
     ASSERT_EQ(2U, frames->size());
 
     StackFrameARM *frame0 = static_cast<StackFrameARM *>(frames->at(0));
+    EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
     ASSERT_EQ(context_frame_validity, frame0->context_validity);
     EXPECT_EQ("enchiridion", frame0->function_name);
     EXPECT_EQ(0x40004000U, frame0->function_base);
 
     StackFrameARM *frame1 = static_cast<StackFrameARM *>(frames->at(1));
+    EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame1->trust);
     ASSERT_EQ(expected_validity, frame1->context_validity);
     if (expected_validity & StackFrameARM::CONTEXT_VALID_R1)
       EXPECT_EQ(expected.iregs[1], frame1->context.iregs[1]);
diff --git a/src/processor/stackwalker_ppc.cc b/src/processor/stackwalker_ppc.cc
index 834e38a..4d9a628 100644
--- a/src/processor/stackwalker_ppc.cc
+++ b/src/processor/stackwalker_ppc.cc
@@ -75,6 +75,7 @@
   // straight out of the CPU context structure.
   frame->context = *context_;
   frame->context_validity = StackFramePPC::CONTEXT_VALID_ALL;
+  frame->trust = StackFrame::FRAME_TRUST_CONTEXT;
   frame->instruction = frame->context.srr0;
 
   return frame;
@@ -127,6 +128,7 @@
   frame->context.gpr[1] = stack_pointer;
   frame->context_validity = StackFramePPC::CONTEXT_VALID_SRR0 |
                             StackFramePPC::CONTEXT_VALID_GPR1;
+  frame->trust = StackFrame::FRAME_TRUST_FP;
 
   // frame->context.srr0 is the return address, which is one instruction
   // past the branch that caused us to arrive at the callee.  Set
diff --git a/src/processor/stackwalker_selftest.cc b/src/processor/stackwalker_selftest.cc
index 6b71a6a..fdd1527 100644
--- a/src/processor/stackwalker_selftest.cc
+++ b/src/processor/stackwalker_selftest.cc
@@ -62,7 +62,7 @@
     (defined(__i386__) || defined(__ppc__) || defined(__sparc__))
 
 
-#include <cstdio>
+#include <stdio.h>
 
 #include "google_breakpad/common/breakpad_types.h"
 #include "google_breakpad/common/minidump_format.h"
diff --git a/src/processor/stackwalker_sparc.cc b/src/processor/stackwalker_sparc.cc
index f1eac7c..2e819a6 100644
--- a/src/processor/stackwalker_sparc.cc
+++ b/src/processor/stackwalker_sparc.cc
@@ -66,6 +66,7 @@
   // straight out of the CPU context structure.
   frame->context = *context_;
   frame->context_validity = StackFrameSPARC::CONTEXT_VALID_ALL;
+  frame->trust = StackFrame::FRAME_TRUST_CONTEXT;
   frame->instruction = frame->context.pc;
 
   return frame;
@@ -93,7 +94,7 @@
   // A caller frame must reside higher in memory than its callee frames.
   // Anything else is an error, or an indication that we've reached the
   // end of the stack.
-  u_int32_t stack_pointer = last_frame->context.g_r[30];
+  u_int64_t stack_pointer = last_frame->context.g_r[30];
   if (stack_pointer <= last_frame->context.g_r[14]) {
     return NULL;
   }
@@ -129,6 +130,7 @@
   frame->context_validity = StackFrameSPARC::CONTEXT_VALID_PC |
                             StackFrameSPARC::CONTEXT_VALID_SP |
                             StackFrameSPARC::CONTEXT_VALID_FP;
+  frame->trust = StackFrame::FRAME_TRUST_FP;
                             
   return frame;
 }
diff --git a/src/processor/stackwalker_unittest_utils.h b/src/processor/stackwalker_unittest_utils.h
index a7bff3e..d2e29f7 100644
--- a/src/processor/stackwalker_unittest_utils.h
+++ b/src/processor/stackwalker_unittest_utils.h
@@ -170,6 +170,11 @@
                                            const SystemInfo *system_info,
                                            std::string *symbol_file,
                                            std::string *symbol_data));
+  MOCK_METHOD4(GetCStringSymbolData, SymbolResult(const CodeModule *module,
+                                                  const SystemInfo *system_info,
+                                                  std::string *symbol_file,
+                                                  char **symbol_data));
+  MOCK_METHOD1(FreeSymbolData, void(const CodeModule *module));
 };
 
 #endif // PROCESSOR_STACKWALKER_UNITTEST_UTILS_H_
diff --git a/src/processor/stackwalker_x86.cc b/src/processor/stackwalker_x86.cc
index 8160903..9440f1d 100644
--- a/src/processor/stackwalker_x86.cc
+++ b/src/processor/stackwalker_x86.cc
@@ -118,7 +118,7 @@
   // straight out of the CPU context structure.
   frame->context = *context_;
   frame->context_validity = StackFrameX86::CONTEXT_VALID_ALL;
-  frame->trust = StackFrameX86::FRAME_TRUST_CONTEXT;
+  frame->trust = StackFrame::FRAME_TRUST_CONTEXT;
   frame->instruction = frame->context.eip;
 
   return frame;
@@ -127,7 +127,7 @@
 StackFrameX86 *StackwalkerX86::GetCallerByWindowsFrameInfo(
     const vector<StackFrame *> &frames,
     WindowsFrameInfo *last_frame_info) {
-  StackFrameX86::FrameTrust trust = StackFrameX86::FRAME_TRUST_NONE;
+  StackFrame::FrameTrust trust = StackFrame::FRAME_TRUST_NONE;
 
   StackFrameX86 *last_frame = static_cast<StackFrameX86 *>(frames.back());
 
@@ -219,7 +219,7 @@
   string program_string;
   bool recover_ebp = true;
 
-  trust = StackFrameX86::FRAME_TRUST_CFI;
+  trust = StackFrame::FRAME_TRUST_CFI;
   if (!last_frame_info->program_string.empty()) {
     // The FPO data has its own program string, which will tell us how to
     // get to the caller frame, and may even fill in the values of
@@ -318,7 +318,7 @@
     // one where the return address was found.
     dictionary["$eip"] = eip;
     dictionary["$esp"] = location + 4;
-    trust = StackFrameX86::FRAME_TRUST_SCAN;
+    trust = StackFrame::FRAME_TRUST_SCAN;
   }
 
   // Since this stack frame did not use %ebp in a traditional way,
@@ -356,7 +356,7 @@
         dictionary["$eip"] = eip;
         dictionary["$esp"] = location + 4;
         offset = location - location_start;
-        trust = StackFrameX86::FRAME_TRUST_CFI_SCAN;
+        trust = StackFrame::FRAME_TRUST_CFI_SCAN;
       }
     }
 
@@ -441,14 +441,14 @@
   if ((frame->context_validity & essentials) != essentials)
     return NULL;
 
-  frame->trust = StackFrameX86::FRAME_TRUST_CFI;
+  frame->trust = StackFrame::FRAME_TRUST_CFI;
 
   return frame.release();
 }
 
 StackFrameX86 *StackwalkerX86::GetCallerByEBPAtBase(
     const vector<StackFrame *> &frames) {
-  StackFrameX86::FrameTrust trust;
+  StackFrame::FrameTrust trust;
   StackFrameX86 *last_frame = static_cast<StackFrameX86 *>(frames.back());
   u_int32_t last_esp = last_frame->context.esp;
   u_int32_t last_ebp = last_frame->context.ebp;
@@ -481,7 +481,7 @@
   if (memory_->GetMemoryAtAddress(last_ebp + 4, &caller_eip) &&
       memory_->GetMemoryAtAddress(last_ebp, &caller_ebp)) {
     caller_esp = last_ebp + 8;
-    trust = StackFrameX86::FRAME_TRUST_FP;
+    trust = StackFrame::FRAME_TRUST_FP;
   } else {
     // We couldn't read the memory %ebp refers to. It may be that %ebp
     // is pointing to non-stack memory. We'll scan the stack for a
@@ -491,7 +491,7 @@
     if (!ScanForReturnAddress(last_esp, &caller_esp, &caller_eip)) {
       // if we can't find an instruction pointer even with stack scanning,
       // give up.
-      return false;
+      return NULL;
     }
 
     // ScanForReturnAddress found a reasonable return address. Advance
@@ -500,7 +500,7 @@
     caller_esp += 4;
     caller_ebp = last_ebp;
 
-    trust = StackFrameX86::FRAME_TRUST_SCAN;
+    trust = StackFrame::FRAME_TRUST_SCAN;
   }
 
   // Create a new stack frame (ownership will be transferred to the caller)
@@ -573,27 +573,4 @@
   return new_frame.release();
 }
 
-bool StackwalkerX86::ScanForReturnAddress(u_int32_t location_start,
-                                          u_int32_t *location_found,
-                                          u_int32_t *eip_found) {
-  const int kRASearchWords = 15;
-  for (u_int32_t location = location_start;
-       location <= location_start + kRASearchWords * 4;
-       location += 4) {
-    u_int32_t eip;
-    if (!memory_->GetMemoryAtAddress(location, &eip))
-      break;
-
-    if (modules_ && modules_->GetModuleForAddress(eip) &&
-        InstructionAddressSeemsValid(eip)) {
-
-      *eip_found = eip;
-      *location_found = location;
-      return true;
-    }
-  }
-  // nothing found
-  return false;
-}
-
 }  // namespace google_breakpad
diff --git a/src/processor/stackwalker_x86.h b/src/processor/stackwalker_x86.h
index 0b2a783..9c56ae8 100644
--- a/src/processor/stackwalker_x86.h
+++ b/src/processor/stackwalker_x86.h
@@ -96,19 +96,6 @@
   // Return NULL on failure.
   StackFrameX86 *GetCallerByEBPAtBase(const vector<StackFrame*> &frames);
 
-  // Scan the stack starting at location_start, looking for an address
-  // that looks like a valid instruction pointer. Addresses must
-  // 1) be contained in the current stack memory
-  // 2) pass the checks in Stackwalker::InstructionAddressSeemsValid
-  //
-  // Returns true if a valid-looking instruction pointer was found.
-  // When returning true, sets location_found to the address at which
-  // the value was found, and eip_found to the value contained at that
-  // location in memory.
-  bool ScanForReturnAddress(u_int32_t location_start,
-                            u_int32_t *location_found,
-                            u_int32_t *eip_found);
-
   // Stores the CPU context corresponding to the innermost stack frame to
   // be returned by GetContextFrame.
   const MDRawContextX86 *context_;
diff --git a/src/processor/stackwalker_x86_unittest.cc b/src/processor/stackwalker_x86_unittest.cc
index 5af516d..aece489 100644
--- a/src/processor/stackwalker_x86_unittest.cc
+++ b/src/processor/stackwalker_x86_unittest.cc
@@ -52,9 +52,9 @@
 using google_breakpad::StackwalkerX86;
 using google_breakpad::SystemInfo;
 using google_breakpad::WindowsFrameInfo;
-using google_breakpad::TestAssembler::kLittleEndian;
-using google_breakpad::TestAssembler::Label;
-using google_breakpad::TestAssembler::Section;
+using google_breakpad::test_assembler::kLittleEndian;
+using google_breakpad::test_assembler::Label;
+using google_breakpad::test_assembler::Section;
 using std::string;
 using std::vector;
 using testing::_;
@@ -86,15 +86,18 @@
 
     // By default, none of the modules have symbol info; call
     // SetModuleSymbols to override this.
-    EXPECT_CALL(supplier, GetSymbolFile(_, _, _, _))
+    EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _))
       .WillRepeatedly(Return(MockSymbolSupplier::NOT_FOUND));
   }
 
   // Set the Breakpad symbol information that supplier should return for
   // MODULE to INFO.
   void SetModuleSymbols(MockCodeModule *module, const string &info) {
-    EXPECT_CALL(supplier, GetSymbolFile(module, &system_info, _, _))
-      .WillRepeatedly(DoAll(SetArgumentPointee<3>(info),
+    unsigned int buffer_size = info.size() + 1;
+    char *buffer = reinterpret_cast<char*>(operator new(buffer_size));
+    strcpy(buffer, info.c_str());
+    EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _))
+      .WillRepeatedly(DoAll(SetArgumentPointee<3>(buffer),
                             Return(MockSymbolSupplier::FOUND)));
   }
 
@@ -174,7 +177,7 @@
   ASSERT_EQ(2U, frames->size());
 
   StackFrameX86 *frame0 = static_cast<StackFrameX86 *>(frames->at(0));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CONTEXT, frame0->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
   EXPECT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity);
   EXPECT_EQ(0x4000c7a5U, frame0->instruction);
   EXPECT_EQ(0x4000c7a5U, frame0->context.eip);
@@ -182,7 +185,7 @@
   EXPECT_EQ(NULL, frame0->windows_frame_info);
 
   StackFrameX86 *frame1 = static_cast<StackFrameX86 *>(frames->at(1));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_FP, frame1->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_FP, frame1->trust);
   ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP
              | StackFrameX86::CONTEXT_VALID_ESP
              | StackFrameX86::CONTEXT_VALID_EBP),
@@ -225,7 +228,7 @@
   ASSERT_EQ(2U, frames->size());
 
   StackFrameX86 *frame0 = static_cast<StackFrameX86 *>(frames->at(0));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CONTEXT, frame0->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
   ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity);
   EXPECT_EQ(0x4000f49dU, frame0->instruction);
   EXPECT_EQ(0x4000f49dU, frame0->context.eip);
@@ -234,7 +237,7 @@
   EXPECT_EQ(NULL, frame0->windows_frame_info);
 
   StackFrameX86 *frame1 = static_cast<StackFrameX86 *>(frames->at(1));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_SCAN, frame1->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust);
   // I'd argue that CONTEXT_VALID_EBP shouldn't be here, since the
   // walker does not actually fetch the EBP after a scan (forcing the
   // next frame to be scanned as well). But let's grandfather the existing
@@ -250,6 +253,63 @@
   EXPECT_EQ(NULL, frame1->windows_frame_info);
 }
 
+// Force scanning for a return address a long way down the stack
+TEST_F(GetCallerFrame, TraditionalScanLongWay) {
+  stack_section.start() = 0x80000000;
+  Label frame1_ebp;
+  stack_section
+    // frame 0
+    .D32(0xf065dc76)    // locals area:
+    .D32(0x46ee2167)    // garbage that doesn't look like
+    .D32(0xbab023ec)    // a return address
+    .Append(20 * 4, 0)  // a bunch of space
+    .D32(frame1_ebp)    // saved %ebp (%ebp fails to point here, forcing scan)
+    .D32(0x4000129d)    // return address
+    // frame 1
+    .Append(8, 0)       // space
+    .Mark(&frame1_ebp)  // %ebp points here
+    .D32(0)             // saved %ebp (stack end)
+    .D32(0);            // return address (stack end)
+
+  RegionFromSection();
+  raw_context.eip = 0x4000f49d;
+  raw_context.esp = stack_section.start().Value();
+  // Make the frame pointer bogus, to make the stackwalker scan the stack
+  // for something that looks like a return address.
+  raw_context.ebp = 0xd43eed6e;
+
+  StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
+                        &supplier, &resolver);
+  ASSERT_TRUE(walker.Walk(&call_stack));
+  frames = call_stack.frames();
+  ASSERT_EQ(2U, frames->size());
+
+  StackFrameX86 *frame0 = static_cast<StackFrameX86 *>(frames->at(0));
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
+  ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity);
+  EXPECT_EQ(0x4000f49dU, frame0->instruction);
+  EXPECT_EQ(0x4000f49dU, frame0->context.eip);
+  EXPECT_EQ(stack_section.start().Value(), frame0->context.esp);
+  EXPECT_EQ(0xd43eed6eU, frame0->context.ebp);
+  EXPECT_EQ(NULL, frame0->windows_frame_info);
+
+  StackFrameX86 *frame1 = static_cast<StackFrameX86 *>(frames->at(1));
+  EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust);
+  // I'd argue that CONTEXT_VALID_EBP shouldn't be here, since the
+  // walker does not actually fetch the EBP after a scan (forcing the
+  // next frame to be scanned as well). But let's grandfather the existing
+  // behavior in for now.
+  ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP
+             | StackFrameX86::CONTEXT_VALID_ESP
+             | StackFrameX86::CONTEXT_VALID_EBP),
+            frame1->context_validity);
+  EXPECT_EQ(0x4000129dU, frame1->instruction + 1);
+  EXPECT_EQ(0x4000129dU, frame1->context.eip);
+  EXPECT_EQ(0x80000064U, frame1->context.esp);
+  EXPECT_EQ(0xd43eed6eU, frame1->context.ebp);
+  EXPECT_EQ(NULL, frame1->windows_frame_info);
+}
+
 // Use Windows frame data (a "STACK WIN 4" record, from a
 // FrameTypeFrameData DIA record) to walk a stack frame.
 TEST_F(GetCallerFrame, WindowsFrameData) {
@@ -292,7 +352,7 @@
   ASSERT_EQ(2U, frames->size());
 
   StackFrameX86 *frame0 = static_cast<StackFrameX86 *>(frames->at(0));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CONTEXT, frame0->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
   ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity);
   EXPECT_EQ(0x4000aa85U, frame0->instruction);
   EXPECT_EQ(0x4000aa85U, frame0->context.eip);
@@ -301,7 +361,7 @@
   EXPECT_TRUE(frame0->windows_frame_info != NULL);
 
   StackFrameX86 *frame1 = static_cast<StackFrameX86 *>(frames->at(1));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CFI, frame1->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame1->trust);
   ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP
              | StackFrameX86::CONTEXT_VALID_ESP
              | StackFrameX86::CONTEXT_VALID_EBP
@@ -376,7 +436,7 @@
   ASSERT_EQ(3U, frames->size());
 
   StackFrameX86 *frame0 = static_cast<StackFrameX86 *>(frames->at(0));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CONTEXT, frame0->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
   ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity);
   EXPECT_EQ(0x40001004U, frame0->instruction);
   EXPECT_EQ(0x40001004U, frame0->context.eip);
@@ -393,7 +453,7 @@
   EXPECT_EQ(12U, frame0->windows_frame_info->parameter_size);
 
   StackFrameX86 *frame1 = static_cast<StackFrameX86 *>(frames->at(1));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_FP, frame1->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_FP, frame1->trust);
   ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP
              | StackFrameX86::CONTEXT_VALID_ESP
              | StackFrameX86::CONTEXT_VALID_EBP),
@@ -412,7 +472,7 @@
   EXPECT_EQ(4U, frame1->windows_frame_info->parameter_size);
 
   StackFrameX86 *frame2 = static_cast<StackFrameX86 *>(frames->at(2));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CFI, frame2->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame2->trust);
   ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP
              | StackFrameX86::CONTEXT_VALID_ESP
              | StackFrameX86::CONTEXT_VALID_EBP
@@ -460,7 +520,7 @@
   ASSERT_EQ(2U, frames->size());
 
   StackFrameX86 *frame0 = static_cast<StackFrameX86 *>(frames->at(0));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CONTEXT, frame0->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
   ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity);
   EXPECT_EQ(0x40000c9cU, frame0->instruction);
   EXPECT_EQ(0x40000c9cU, frame0->context.eip);
@@ -469,7 +529,7 @@
   EXPECT_TRUE(frame0->windows_frame_info != NULL);
 
   StackFrameX86 *frame1 = static_cast<StackFrameX86 *>(frames->at(1));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_SCAN, frame1->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust);
   // I'd argue that CONTEXT_VALID_EBP shouldn't be here, since the walker
   // does not actually fetch the EBP after a scan (forcing the next frame
   // to be scanned as well). But let's grandfather the existing behavior in
@@ -539,7 +599,7 @@
   ASSERT_EQ(2U, frames->size());
 
   StackFrameX86 *frame0 = static_cast<StackFrameX86 *>(frames->at(0));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CONTEXT, frame0->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
   ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity);
   EXPECT_EQ(0x40000700U, frame0->instruction);
   EXPECT_EQ(0x40000700U, frame0->context.eip);
@@ -548,7 +608,7 @@
   EXPECT_TRUE(frame0->windows_frame_info != NULL);
 
   StackFrameX86 *frame1 = static_cast<StackFrameX86 *>(frames->at(1));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CFI_SCAN, frame1->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CFI_SCAN, frame1->trust);
   // I'd argue that CONTEXT_VALID_EBP shouldn't be here, since the
   // walker does not actually fetch the EBP after a scan (forcing the
   // next frame to be scanned as well). But let's grandfather the existing
@@ -602,7 +662,7 @@
   ASSERT_EQ(2U, frames->size());
 
   StackFrameX86 *frame0 = static_cast<StackFrameX86 *>(frames->at(0));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CONTEXT, frame0->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
   ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity);
   EXPECT_EQ(0x4000e8b8U, frame0->instruction);
   EXPECT_EQ(0x4000e8b8U, frame0->context.eip);
@@ -618,7 +678,7 @@
   EXPECT_EQ(0x10U, frame0->windows_frame_info->local_size);
 
   StackFrameX86 *frame1 = static_cast<StackFrameX86 *>(frames->at(1));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CFI, frame1->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame1->trust);
   ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP
              | StackFrameX86::CONTEXT_VALID_ESP
              | StackFrameX86::CONTEXT_VALID_EBP),
@@ -672,7 +732,7 @@
   ASSERT_EQ(2U, frames->size());
 
   StackFrameX86 *frame0 = static_cast<StackFrameX86 *>(frames->at(0));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CONTEXT, frame0->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
   ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity);
   EXPECT_EQ(0x40009ab8U, frame0->instruction);
   EXPECT_EQ(0x40009ab8U, frame0->context.eip);
@@ -689,7 +749,7 @@
   EXPECT_TRUE(frame0->windows_frame_info->allocates_base_pointer);
 
   StackFrameX86 *frame1 = static_cast<StackFrameX86 *>(frames->at(1));
-  EXPECT_EQ(StackFrameX86::FRAME_TRUST_CFI, frame1->trust);
+  EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame1->trust);
   ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP
              | StackFrameX86::CONTEXT_VALID_ESP
              | StackFrameX86::CONTEXT_VALID_EBP),
@@ -757,7 +817,7 @@
     ASSERT_EQ(2U, frames->size());
 
     StackFrameX86 *frame0 = static_cast<StackFrameX86 *>(frames->at(0));
-    EXPECT_EQ(StackFrameX86::FRAME_TRUST_CONTEXT, frame0->trust);
+    EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust);
     ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity);
     EXPECT_EQ("enchiridion", frame0->function_name);
     EXPECT_EQ(0x40004000U, frame0->function_base);
@@ -767,7 +827,7 @@
     ASSERT_TRUE(frame0->cfi_frame_info != NULL);
 
     StackFrameX86 *frame1 = static_cast<StackFrameX86 *>(frames->at(1));
-    EXPECT_EQ(StackFrameX86::FRAME_TRUST_CFI, frame1->trust);
+    EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame1->trust);
     ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP |
                StackFrameX86::CONTEXT_VALID_ESP |
                StackFrameX86::CONTEXT_VALID_EBP |
diff --git a/src/processor/static_address_map-inl.h b/src/processor/static_address_map-inl.h
new file mode 100644
index 0000000..67e0797
--- /dev/null
+++ b/src/processor/static_address_map-inl.h
@@ -0,0 +1,71 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_address_map-inl.h: StaticAddressMap implementation.
+//
+// See static_address_map.h for documentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_STATIC_ADDRESS_MAP_INL_H__
+#define PROCESSOR_STATIC_ADDRESS_MAP_INL_H__
+
+#include "processor/static_address_map.h"
+
+#include "processor/logging.h"
+
+namespace google_breakpad {
+
+template<typename AddressType, typename EntryType>
+bool StaticAddressMap<AddressType, EntryType>::Retrieve(
+    const AddressType &address,
+    const EntryType *&entry, AddressType *entry_address) const {
+
+  // upper_bound gives the first element whose key is greater than address,
+  // but we want the first element whose key is less than or equal to address.
+  // Decrement the iterator to get there, but not if the upper_bound already
+  // points to the beginning of the map - in that case, address is lower than
+  // the lowest stored key, so return false.
+
+  MapConstIterator iterator = map_.upper_bound(address);
+  if (iterator == map_.begin())
+    return false;
+  --iterator;
+
+  entry = iterator.GetValuePtr();
+  // Make sure AddressType is a copyable basic type
+  if (entry_address)
+    *entry_address = iterator.GetKey();
+
+  return true;
+}
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_STATIC_ADDRESS_MAP_INL_H__
diff --git a/src/processor/static_address_map.h b/src/processor/static_address_map.h
new file mode 100644
index 0000000..6bafc66
--- /dev/null
+++ b/src/processor/static_address_map.h
@@ -0,0 +1,78 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_address_map.h: StaticAddressMap.
+//
+// StaticAddressMap is a wrapper class of StaticMap, just as AddressMap wraps
+// std::map.  StaticAddressMap provides read-only Retrieve() operation, similar
+// as AddressMap.  However, the difference between StaticAddressMap and
+// AddressMap is that StaticAddressMap does not support dynamic operation
+// Store() due to the static nature of the underlying StaticMap.
+//
+// See address_map.h for reference.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_STATIC_ADDRESS_MAP_H__
+#define PROCESSOR_STATIC_ADDRESS_MAP_H__
+
+#include "processor/static_map-inl.h"
+
+namespace google_breakpad {
+
+// AddressType MUST be a basic type, e.g.: integer types etc
+// EntryType could be a complex type, so we retrieve its pointer instead.
+template<typename AddressType, typename EntryType>
+class StaticAddressMap {
+ public:
+  StaticAddressMap(): map_() { }
+  explicit StaticAddressMap(const char *map_data): map_(map_data) { }
+
+  // Locates the entry stored at the highest address less than or equal to
+  // the address argument.  If there is no such range, returns false.  The
+  // entry is returned in entry, which is a required argument.  If
+  // entry_address is not NULL, it will be set to the address that the entry
+  // was stored at.
+  bool Retrieve(const AddressType &address,
+                const EntryType *&entry, AddressType *entry_address) const;
+
+ private:
+  friend class ModuleComparer;
+  // Convenience types.
+  typedef StaticAddressMap* SelfPtr;
+  typedef StaticMap<AddressType, EntryType> AddressToEntryMap;
+  typedef typename AddressToEntryMap::const_iterator MapConstIterator;
+
+  AddressToEntryMap map_;
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_STATIC_ADDRESS_MAP_H__
+
diff --git a/src/processor/static_address_map_unittest.cc b/src/processor/static_address_map_unittest.cc
new file mode 100644
index 0000000..5ef0345
--- /dev/null
+++ b/src/processor/static_address_map_unittest.cc
@@ -0,0 +1,235 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_address_map_unittest.cc: Unit tests for StaticAddressMap.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#include <climits>
+#include <cstdlib>
+#include <ctime>
+#include <string>
+#include <iostream>
+#include <sstream>
+
+#include "breakpad_googletest_includes.h"
+#include "processor/address_map-inl.h"
+#include "processor/static_address_map-inl.h"
+#include "processor/simple_serializer-inl.h"
+#include "map_serializers-inl.h"
+
+typedef google_breakpad::StaticAddressMap<int, char> TestMap;
+typedef google_breakpad::AddressMap<int, std::string> AddrMap;
+
+class TestStaticAddressMap : public ::testing::Test {
+ protected:
+  void SetUp() {
+    for (int testcase = 0; testcase < kNumberTestCases; ++testcase) {
+      testdata[testcase] = new int[testsize[testcase]];
+    }
+
+    // Test data set0: NULL (empty map)
+
+    // Test data set1: single element.
+    testdata[1][0] = 10;
+
+    // Test data set2: six elements.
+    const int tempdata[] = {5, 10, 14, 15, 16, 20};
+    for (int i = 0; i < testsize[2]; ++i)
+      testdata[2][i] = tempdata[i];
+
+    // Test data set3:
+    srand(time(NULL));
+    for (int i = 0; i < testsize[3]; ++i)
+      testdata[3][i] = rand();
+
+    // Setup maps.
+    std::stringstream sstream;
+    for (int testcase = 0; testcase < kNumberTestCases; ++testcase) {
+      for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
+        sstream.clear();
+        sstream << "test " << testdata[testcase][data_item];
+        addr_map[testcase].Store(testdata[testcase][data_item], sstream.str());
+      }
+      map_data[testcase] = serializer.Serialize(addr_map[testcase], NULL);
+      test_map[testcase] = TestMap(map_data[testcase]);
+    }
+  }
+
+  void TearDown() {
+    for (int i = 0; i < kNumberTestCases; ++i) {
+      delete [] map_data[i];
+      delete [] testdata[i];
+    }
+  }
+
+  void CompareRetrieveResult(int testcase, int target) {
+    int address;
+    int address_test;
+    std::string entry;
+    std::string entry_test;
+    const char *entry_cstring = NULL;
+    bool found;
+    bool found_test;
+
+    found = addr_map[testcase].Retrieve(target, &entry, &address);
+    found_test =
+        test_map[testcase].Retrieve(target, entry_cstring, &address_test);
+
+    ASSERT_EQ(found, found_test);
+
+    if (found && found_test) {
+      ASSERT_EQ(address, address_test);
+      entry_test = entry_cstring;
+      ASSERT_EQ(entry, entry_test);
+    }
+  }
+
+  void RetrieveTester(int testcase) {
+    int target;
+    target = INT_MIN;
+    CompareRetrieveResult(testcase, target);
+    target = INT_MAX;
+    CompareRetrieveResult(testcase, target);
+
+    srand(time(0));
+    for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
+      // Retrive (aka, search) for target address and compare results from
+      // AddressMap and StaticAddressMap.
+
+      // First, assign the search target to be one of original testdata that is
+      // known to exist in the map.
+      target = testdata[testcase][data_item];
+      CompareRetrieveResult(testcase, target);
+      // Then, add +2 / -1 bias to target value, in order to test searching for
+      // a target address not stored in the map.
+      target -= 1;
+      CompareRetrieveResult(testcase, target);
+      target += 3;
+      CompareRetrieveResult(testcase, target);
+      // Repeatedly test searching for random target addresses.
+      target = rand();
+      CompareRetrieveResult(testcase, target);
+    }
+  }
+
+  // Test data sets:
+  static const int kNumberTestCases = 4;
+  static const int testsize[];
+  int *testdata[kNumberTestCases];
+
+  AddrMap addr_map[kNumberTestCases];
+  TestMap test_map[kNumberTestCases];
+  char *map_data[kNumberTestCases];
+  google_breakpad::AddressMapSerializer<int, std::string> serializer;
+};
+
+const int TestStaticAddressMap::testsize[] = {0, 1, 6, 1000};
+
+TEST_F(TestStaticAddressMap, TestEmptyMap) {
+  int testcase = 0;
+  int target;
+  target = INT_MIN;
+  CompareRetrieveResult(testcase, target);
+  target = INT_MAX;
+  CompareRetrieveResult(testcase, target);
+  for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
+    target = testdata[testcase][data_item];
+    CompareRetrieveResult(testcase, target);
+    target -= 1;
+    CompareRetrieveResult(testcase, target);
+    target += 3;
+    CompareRetrieveResult(testcase, target);
+    target = rand();
+    CompareRetrieveResult(testcase, target);
+  }
+}
+
+TEST_F(TestStaticAddressMap, TestOneElementMap) {
+  int testcase = 1;
+  int target;
+  target = INT_MIN;
+  CompareRetrieveResult(testcase, target);
+  target = INT_MAX;
+  CompareRetrieveResult(testcase, target);
+  for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
+    target = testdata[testcase][data_item];
+    CompareRetrieveResult(testcase, target);
+    target -= 1;
+    CompareRetrieveResult(testcase, target);
+    target += 3;
+    CompareRetrieveResult(testcase, target);
+    target = rand();
+    CompareRetrieveResult(testcase, target);
+  }
+}
+
+TEST_F(TestStaticAddressMap, TestSixElementsMap) {
+  int testcase = 2;
+  int target;
+  target = INT_MIN;
+  CompareRetrieveResult(testcase, target);
+  target = INT_MAX;
+  CompareRetrieveResult(testcase, target);
+  for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
+    target = testdata[testcase][data_item];
+    CompareRetrieveResult(testcase, target);
+    target -= 1;
+    CompareRetrieveResult(testcase, target);
+    target += 3;
+    CompareRetrieveResult(testcase, target);
+    target = rand();
+    CompareRetrieveResult(testcase, target);
+  }
+}
+
+TEST_F(TestStaticAddressMap, Test1000RandomElementsMap) {
+  int testcase = 3;
+  int target;
+  target = INT_MIN;
+  CompareRetrieveResult(testcase, target);
+  target = INT_MAX;
+  CompareRetrieveResult(testcase, target);
+  for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
+    target = testdata[testcase][data_item];
+    CompareRetrieveResult(testcase, target);
+    target -= 1;
+    CompareRetrieveResult(testcase, target);
+    target += 3;
+    CompareRetrieveResult(testcase, target);
+    target = rand();
+    CompareRetrieveResult(testcase, target);
+  }
+}
+
+int main(int argc, char *argv[]) {
+  ::testing::InitGoogleTest(&argc, argv);
+
+  return RUN_ALL_TESTS();
+}
diff --git a/src/processor/static_contained_range_map-inl.h b/src/processor/static_contained_range_map-inl.h
new file mode 100644
index 0000000..46f9bbb
--- /dev/null
+++ b/src/processor/static_contained_range_map-inl.h
@@ -0,0 +1,92 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_contained_range_map-inl.h: Hierarchically-organized range map,
+// i.e., StaticContainedRangeMap implementation.
+//
+// See static_contained_range_map.h for documentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_STATIC_CONTAINED_RANGE_MAP_INL_H__
+#define PROCESSOR_STATIC_CONTAINED_RANGE_MAP_INL_H__
+
+#include "processor/static_contained_range_map.h"
+#include "processor/logging.h"
+
+namespace google_breakpad {
+
+template<typename AddressType, typename EntryType>
+StaticContainedRangeMap<AddressType, EntryType>::StaticContainedRangeMap(
+    const char *base)
+    : base_(*(reinterpret_cast<const AddressType*>(base))),
+      entry_size_(*(reinterpret_cast<const u_int32_t*>(base + sizeof(base_)))),
+      entry_ptr_(reinterpret_cast<const EntryType *>(
+          base + sizeof(base_) + sizeof(entry_size_))),
+      map_(base + sizeof(base_) + sizeof(entry_size_) + entry_size_) {
+  if (entry_size_ == 0)
+    entry_ptr_ = NULL;
+}
+
+
+template<typename AddressType, typename EntryType>
+bool StaticContainedRangeMap<AddressType, EntryType>::RetrieveRange(
+    const AddressType &address, const EntryType *&entry) const {
+
+  // Get an iterator to the child range whose high address is equal to or
+  // greater than the supplied address.  If the supplied address is higher
+  // than all of the high addresses in the range, then this range does not
+  // contain a child at address, so return false.  If the supplied address
+  // is lower than the base address of the child range, then it is not within
+  // the child range, so return false.
+  MapConstIterator iterator = map_.lower_bound(address);
+
+  if (iterator == map_.end())
+    return false;
+
+  const char *memory_child =
+      reinterpret_cast<const char*>(iterator.GetValuePtr());
+
+  StaticContainedRangeMap child_map(memory_child);
+
+  if (address < child_map.base_)
+    return false;
+
+  // The child in iterator->second contains the specified address.  Find out
+  // if it has a more-specific descendant that also contains it.  If it does,
+  // it will set |entry| appropriately.  If not, set |entry| to the child.
+  if (!child_map.RetrieveRange(address, entry))
+    entry = child_map.entry_ptr_;
+
+  return true;
+}
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_STATIC_CONTAINED_RANGE_MAP_INL_H__
diff --git a/src/processor/static_contained_range_map.h b/src/processor/static_contained_range_map.h
new file mode 100644
index 0000000..4d26e63
--- /dev/null
+++ b/src/processor/static_contained_range_map.h
@@ -0,0 +1,96 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_contained_range_map.h: StaticContainedRangeMap.
+//
+// StaticContainedRangeMap is similar to ContainedRangeMap.  However,
+// StaticContainedRangeMap wraps a StaticMap instead of std::map, and does not
+// support dynamic operations like StoreRange(...).
+// StaticContainedRangeMap provides same RetrieveRange(...) interfaces as
+// ContainedRangeMap.
+//
+// Please see contained_range_map.h for more documentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_STATIC_CONTAINED_RANGE_MAP_H__
+#define PROCESSOR_STATIC_CONTAINED_RANGE_MAP_H__
+
+#include "processor/static_map-inl.h"
+
+namespace google_breakpad {
+
+template<typename AddressType, typename EntryType>
+class StaticContainedRangeMap {
+ public:
+  StaticContainedRangeMap(): base_(), entry_size_(), entry_ptr_(), map_() { }
+  explicit StaticContainedRangeMap(const char *base);
+
+  // Retrieves the most specific (smallest) descendant range encompassing
+  // the specified address.  This method will only return entries held by
+  // child ranges, and not the entry contained by |this|.  This is necessary
+  // to support a sparsely-populated root range.  If no descendant range
+  // encompasses the address, returns false.
+  bool RetrieveRange(const AddressType &address, const EntryType *&entry) const;
+
+ private:
+  friend class ModuleComparer;
+  // AddressToRangeMap stores pointers.  This makes reparenting simpler in
+  // StoreRange, because it doesn't need to copy entire objects.
+  typedef StaticContainedRangeMap* SelfPtr;
+  typedef
+  StaticMap<AddressType, StaticContainedRangeMap> AddressToRangeMap;
+  typedef typename AddressToRangeMap::const_iterator MapConstIterator;
+
+  // The base address of this range.  The high address does not need to
+  // be stored, because it is used as the key to an object in its parent's
+  // map, and all ContainedRangeMaps except for the root range are contained
+  // within maps.  The root range does not actually contain an entry, so its
+  // base_ field is meaningless, and the fact that it has no parent and thus
+  // no key is unimportant.  For this reason, the base_ field should only be
+  // is accessed on child ContainedRangeMap objects, and never on |this|.
+  AddressType base_;
+
+  // The entry corresponding to this range.  The root range does not
+  // actually contain an entry, so its entry_ field is meaningless.  For
+  // this reason, the entry_ field should only be accessed on child
+  // ContainedRangeMap objects, and never on |this|.
+  u_int32_t entry_size_;
+  const EntryType *entry_ptr_;
+
+  // The map containing child ranges, keyed by each child range's high
+  // address.  This is a pointer to avoid allocating map structures for
+  // leaf nodes, where they are not needed.
+  AddressToRangeMap map_;
+};
+
+}  // namespace google_breakpad
+
+
+#endif  // PROCESSOR_STATIC_CONTAINED_RANGE_MAP_H__
diff --git a/src/processor/static_contained_range_map_unittest.cc b/src/processor/static_contained_range_map_unittest.cc
new file mode 100644
index 0000000..4c0c72d
--- /dev/null
+++ b/src/processor/static_contained_range_map_unittest.cc
@@ -0,0 +1,321 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_contained_range_map_unittest.cc: Unit tests for
+// StaticContainedRangeMap.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#include "breakpad_googletest_includes.h"
+#include "processor/contained_range_map-inl.h"
+#include "processor/static_contained_range_map-inl.h"
+#include "processor/simple_serializer-inl.h"
+#include "processor/map_serializers-inl.h"
+
+#include "processor/scoped_ptr.h"
+#include "processor/logging.h"
+
+namespace {
+
+typedef google_breakpad::ContainedRangeMap<unsigned int, int> CRMMap;
+typedef google_breakpad::StaticContainedRangeMap<unsigned int, int> TestMap;
+
+// Each element in test_data contains the expected result when calling
+// RetrieveRange on an address.
+const int test_data[] = {
+  0,   // 0
+  0,   // 1
+  0,   // 2
+  0,   // 3
+  0,   // 4
+  0,   // 5
+  0,   // 6
+  0,   // 7
+  9,   // 8
+  7,   // 9
+  1,   // 10
+  5,   // 11
+  6,   // 12
+  6,   // 13
+  6,   // 14
+  6,   // 15
+  6,   // 16
+  6,   // 17
+  6,   // 18
+  5,   // 19
+  7,   // 20
+  8,   // 21
+  0,   // 22
+  0,   // 23
+  0,   // 24
+  0,   // 25
+  0,   // 26
+  0,   // 27
+  0,   // 28
+  0,   // 29
+  10,  // 30
+  10,  // 31
+  10,  // 32
+  11,  // 33
+  11,  // 34
+  11,  // 35
+  0,   // 36
+  0,   // 37
+  0,   // 38
+  0,   // 39
+  14,  // 40
+  14,  // 41
+  14,  // 42
+  14,  // 43
+  15,  // 44
+  15,  // 45
+  15,  // 46
+  15,  // 47
+  0,   // 48
+  0,   // 49
+  19,  // 50
+  18,  // 51
+  18,  // 52
+  18,  // 53
+  18,  // 54
+  18,  // 55
+  18,  // 56
+  18,  // 57
+  18,  // 58
+  20,  // 59
+  21,  // 60
+  25,  // 61
+  26,  // 62
+  26,  // 63
+  26,  // 64
+  26,  // 65
+  26,  // 66
+  26,  // 67
+  24,  // 68
+  22,  // 69
+  30,  // 70
+  30,  // 71
+  30,  // 72
+  30,  // 73
+  31,  // 74
+  31,  // 75
+  30,  // 76
+  32,  // 77
+  32,  // 78
+  30,  // 79
+  34,  // 80
+  35,  // 81
+  36,  // 82
+  39,  // 83
+  38,  // 84
+  37,  // 85
+  43,  // 86
+  44,  // 87
+  41,  // 88
+  45,  // 89
+  42,  // 90
+  0,   // 91
+  0,   // 92
+  0,   // 93
+  0,   // 94
+  0,   // 95
+  0,   // 96
+  0,   // 97
+  0,   // 98
+  0    // 99
+};
+
+}  // namespace
+
+namespace google_breakpad {
+
+class TestStaticCRMMap : public ::testing::Test {
+ protected:
+  void SetUp();
+
+  // A referrence map for testing StaticCRMMap.
+  google_breakpad::ContainedRangeMap<unsigned int, int> crm_map_;
+
+  // Static version of crm_map using serialized data of crm_map.
+  // The goal of testing is to make sure TestMap provides same results for
+  // lookup operation(s) as CRMMap does.
+  google_breakpad::StaticContainedRangeMap<unsigned int, int> test_map_;
+
+  google_breakpad::ContainedRangeMapSerializer<unsigned int, int> serializer_;
+
+  scoped_array<char> serialized_data_;
+};
+
+void TestStaticCRMMap::SetUp() {
+  // First, do the StoreRange tests.  This validates the containment
+  // rules.
+  // We confirm the referrence map correctly stores data during setup.
+  ASSERT_TRUE (crm_map_.StoreRange(10, 10,  1));
+  ASSERT_FALSE(crm_map_.StoreRange(10, 10,  2));  // exactly equal to 1
+  ASSERT_FALSE(crm_map_.StoreRange(11, 10,  3));  // begins inside 1 and extends up
+  ASSERT_FALSE(crm_map_.StoreRange( 9, 10,  4));  // begins below 1 and ends inside
+  ASSERT_TRUE (crm_map_.StoreRange(11,  9,  5));  // contained by existing
+  ASSERT_TRUE (crm_map_.StoreRange(12,  7,  6));
+  ASSERT_TRUE (crm_map_.StoreRange( 9, 12,  7));  // contains existing
+  ASSERT_TRUE (crm_map_.StoreRange( 9, 13,  8));
+  ASSERT_TRUE (crm_map_.StoreRange( 8, 14,  9));
+  ASSERT_TRUE (crm_map_.StoreRange(30,  3, 10));
+  ASSERT_TRUE (crm_map_.StoreRange(33,  3, 11));
+  ASSERT_TRUE (crm_map_.StoreRange(30,  6, 12));  // storable but totally masked
+  ASSERT_TRUE (crm_map_.StoreRange(40,  8, 13));  // will be totally masked
+  ASSERT_TRUE (crm_map_.StoreRange(40,  4, 14));
+  ASSERT_TRUE (crm_map_.StoreRange(44,  4, 15));
+  ASSERT_FALSE(crm_map_.StoreRange(32, 10, 16));  // begins in #10, ends in #14
+  ASSERT_FALSE(crm_map_.StoreRange(50,  0, 17));  // zero length
+  ASSERT_TRUE (crm_map_.StoreRange(50, 10, 18));
+  ASSERT_TRUE (crm_map_.StoreRange(50,  1, 19));
+  ASSERT_TRUE (crm_map_.StoreRange(59,  1, 20));
+  ASSERT_TRUE (crm_map_.StoreRange(60,  1, 21));
+  ASSERT_TRUE (crm_map_.StoreRange(69,  1, 22));
+  ASSERT_TRUE (crm_map_.StoreRange(60, 10, 23));
+  ASSERT_TRUE (crm_map_.StoreRange(68,  1, 24));
+  ASSERT_TRUE (crm_map_.StoreRange(61,  1, 25));
+  ASSERT_TRUE (crm_map_.StoreRange(61,  8, 26));
+  ASSERT_FALSE(crm_map_.StoreRange(59,  9, 27));
+  ASSERT_FALSE(crm_map_.StoreRange(59, 10, 28));
+  ASSERT_FALSE(crm_map_.StoreRange(59, 11, 29));
+  ASSERT_TRUE (crm_map_.StoreRange(70, 10, 30));
+  ASSERT_TRUE (crm_map_.StoreRange(74,  2, 31));
+  ASSERT_TRUE (crm_map_.StoreRange(77,  2, 32));
+  ASSERT_FALSE(crm_map_.StoreRange(72,  6, 33));
+  ASSERT_TRUE (crm_map_.StoreRange(80,  3, 34));
+  ASSERT_TRUE (crm_map_.StoreRange(81,  1, 35));
+  ASSERT_TRUE (crm_map_.StoreRange(82,  1, 36));
+  ASSERT_TRUE (crm_map_.StoreRange(83,  3, 37));
+  ASSERT_TRUE (crm_map_.StoreRange(84,  1, 38));
+  ASSERT_TRUE (crm_map_.StoreRange(83,  1, 39));
+  ASSERT_TRUE (crm_map_.StoreRange(86,  5, 40));
+  ASSERT_TRUE (crm_map_.StoreRange(88,  1, 41));
+  ASSERT_TRUE (crm_map_.StoreRange(90,  1, 42));
+  ASSERT_TRUE (crm_map_.StoreRange(86,  1, 43));
+  ASSERT_TRUE (crm_map_.StoreRange(87,  1, 44));
+  ASSERT_TRUE (crm_map_.StoreRange(89,  1, 45));
+  ASSERT_TRUE (crm_map_.StoreRange(87,  4, 46));
+  ASSERT_TRUE (crm_map_.StoreRange(87,  3, 47));
+  ASSERT_FALSE(crm_map_.StoreRange(86,  2, 48));
+
+  // Serialize crm_map to generate serialized data.
+  unsigned int size;
+  serialized_data_.reset(serializer_.Serialize(&crm_map_, &size));
+  BPLOG(INFO) << "Serialized data size: " << size << " Bytes.";
+
+  // Construct test_map_ from serialized data.
+  test_map_ = TestMap(serialized_data_.get());
+}
+
+TEST_F(TestStaticCRMMap, TestEmptyMap) {
+  CRMMap empty_crm_map;
+
+  unsigned int size;
+  scoped_array<char> serialized_data;
+  serialized_data.reset(serializer_.Serialize(&empty_crm_map, &size));
+  scoped_ptr<TestMap> test_map(new TestMap(serialized_data.get()));
+
+  const unsigned int kCorrectSizeForEmptyMap = 16;
+  ASSERT_EQ(kCorrectSizeForEmptyMap, size);
+
+  const int *entry_test;
+  ASSERT_FALSE(test_map->RetrieveRange(-1, entry_test));
+  ASSERT_FALSE(test_map->RetrieveRange(0, entry_test));
+  ASSERT_FALSE(test_map->RetrieveRange(10, entry_test));
+}
+
+TEST_F(TestStaticCRMMap, TestSingleElementMap) {
+  CRMMap crm_map;
+  // Test on one element:
+  int entry = 1;
+  crm_map.StoreRange(10, 10,  entry);
+
+  unsigned int size;
+  scoped_array<char> serialized_data;
+  serialized_data.reset(serializer_.Serialize(&crm_map, &size));
+  scoped_ptr<TestMap> test_map(new TestMap(serialized_data.get()));
+
+  const unsigned int kCorrectSizeForSingleElementMap = 40;
+  ASSERT_EQ(kCorrectSizeForSingleElementMap, size);
+
+  const int *entry_test;
+  ASSERT_FALSE(test_map->RetrieveRange(-1, entry_test));
+  ASSERT_FALSE(test_map->RetrieveRange(0, entry_test));
+  ASSERT_TRUE(test_map->RetrieveRange(10, entry_test));
+  ASSERT_EQ(*entry_test, entry);
+  ASSERT_TRUE(test_map->RetrieveRange(13, entry_test));
+  ASSERT_EQ(*entry_test, entry);
+}
+
+TEST_F(TestStaticCRMMap, RunTestData) {
+  unsigned int test_high = sizeof(test_data) / sizeof(test_data[0]);
+
+  // Now, do the RetrieveRange tests.  This further validates that the
+  // objects were stored properly and that retrieval returns the correct
+  // object.
+  // If GENERATE_TEST_DATA is defined, instead of the retrieval tests, a
+  // new test_data array will be printed.  Exercise caution when doing this.
+  // Be sure to verify the results manually!
+#ifdef GENERATE_TEST_DATA
+  printf("  const int test_data[] = {\n");
+#endif  // GENERATE_TEST_DATA
+
+  for (unsigned int address = 0; address < test_high; ++address) {
+    const int *entryptr;
+    int value = 0;
+    if (test_map_.RetrieveRange(address, entryptr))
+      value = *entryptr;
+
+#ifndef GENERATE_TEST_DATA
+    // Don't use ASSERT inside the loop because it won't show the failed
+    // |address|, and the line number will always be the same.  That makes
+    // it difficult to figure out which test failed.
+    EXPECT_EQ(value, test_data[address]) << "FAIL: retrieve address "
+                                         << address;
+#else  // !GENERATE_TEST_DATA
+    printf("    %d%c%s  // %d\n", value,
+                                  address == test_high - 1 ? ' ' : ',',
+                                  value < 10 ? " " : "",
+                                  address);
+#endif  // !GENERATE_TEST_DATA
+  }
+
+#ifdef GENERATE_TEST_DATA
+  printf("  };\n");
+#endif  // GENERATE_TEST_DATA
+}
+
+}  // namespace google_breakpad
+
+int main(int argc, char *argv[]) {
+  ::testing::InitGoogleTest(&argc, argv);
+
+  return RUN_ALL_TESTS();
+}
diff --git a/src/processor/static_map-inl.h b/src/processor/static_map-inl.h
new file mode 100644
index 0000000..7727052
--- /dev/null
+++ b/src/processor/static_map-inl.h
@@ -0,0 +1,176 @@
+// Copyright 2010 Google Inc. All Rights Reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_map-inl.h: StaticMap implementation.
+//
+// See static_map.h for documentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+
+#ifndef PROCESSOR_STATIC_MAP_INL_H__
+#define PROCESSOR_STATIC_MAP_INL_H__
+
+#include "processor/static_map.h"
+#include "processor/static_map_iterator-inl.h"
+#include "processor/logging.h"
+
+namespace google_breakpad {
+
+template<typename Key, typename Value, typename Compare>
+StaticMap<Key, Value, Compare>::StaticMap(const char* raw_data)
+    : raw_data_(raw_data),
+      compare_() {
+  // First 4 Bytes store the number of nodes.
+  num_nodes_ = *(reinterpret_cast<const u_int32_t*>(raw_data_));
+
+  offsets_ = reinterpret_cast<const u_int32_t*>(
+      raw_data_ + sizeof(num_nodes_));
+
+  keys_ = reinterpret_cast<const Key*>(
+      raw_data_ + (1 + num_nodes_) * sizeof(u_int32_t));
+}
+
+// find(), lower_bound() and upper_bound() implement binary search algorithm.
+template<typename Key, typename Value, typename Compare>
+StaticMapIterator<Key, Value, Compare>
+StaticMap<Key, Value, Compare>::find(const Key &key) const {
+  int begin = 0;
+  int end = num_nodes_;
+  int middle;
+  int compare_result;
+  while (begin < end) {
+    middle = begin + (end - begin) / 2;
+    compare_result = compare_(key, GetKeyAtIndex(middle));
+    if (compare_result == 0)
+      return IteratorAtIndex(middle);
+    if (compare_result < 0) {
+      end = middle;
+    } else {
+      begin = middle + 1;
+    }
+  }
+  return this->end();
+}
+
+template<typename Key, typename Value, typename Compare>
+StaticMapIterator<Key, Value, Compare>
+StaticMap<Key, Value, Compare>::lower_bound(const Key &key) const {
+  int begin = 0;
+  int end = num_nodes_;
+  int middle;
+  int comp_result;
+  while (begin < end) {
+    middle = begin + (end - begin) / 2;
+    comp_result = compare_(key, GetKeyAtIndex(middle));
+    if (comp_result == 0)
+      return IteratorAtIndex(middle);
+    if (comp_result < 0) {
+      end = middle;
+    } else {
+      begin = middle + 1;
+    }
+  }
+  return IteratorAtIndex(begin);
+}
+
+template<typename Key, typename Value, typename Compare>
+StaticMapIterator<Key, Value, Compare>
+StaticMap<Key, Value, Compare>::upper_bound(const Key &key) const {
+  int begin = 0;
+  int end = num_nodes_;
+  int middle;
+  int compare_result;
+  while (begin < end) {
+    middle = begin + (end - begin) / 2;
+    compare_result = compare_(key, GetKeyAtIndex(middle));
+    if (compare_result == 0)
+      return IteratorAtIndex(middle + 1);
+    if (compare_result < 0) {
+      end = middle;
+    } else {
+      begin = middle + 1;
+    }
+  }
+  return IteratorAtIndex(begin);
+}
+
+template<typename Key, typename Value, typename Compare>
+bool StaticMap<Key, Value, Compare>::ValidateInMemoryStructure() const {
+  // check the number of nodes is non-negative:
+  if (!raw_data_) return false;
+  int32_t num_nodes = *(reinterpret_cast<const int32_t*>(raw_data_));
+  if (num_nodes < 0) {
+    BPLOG(INFO) << "StaticMap check failed: negative number of nodes";
+    return false;
+  }
+
+  int node_index = 0;
+  if (num_nodes_) {
+    u_int64_t first_offset = sizeof(int32_t) * (num_nodes_ + 1)
+                           + sizeof(Key) * num_nodes_;
+    // Num_nodes_ is too large.
+    if (first_offset > 0xffffffffUL) {
+      BPLOG(INFO) << "StaticMap check failed: size exceeds limit";
+      return false;
+    }
+    if (offsets_[node_index] != static_cast<u_int32_t>(first_offset)) {
+      BPLOG(INFO) << "StaticMap check failed: first node offset is incorrect";
+      return false;
+    }
+  }
+
+  for (node_index = 1; node_index < num_nodes_; ++node_index) {
+    // Check offsets[i] is strictly increasing:
+    if (offsets_[node_index] <= offsets_[node_index - 1]) {
+      BPLOG(INFO) << "StaticMap check failed: node offsets non-increasing";
+      return false;
+    }
+    // Check Key[i] is strictly increasing as no duplicate keys are allowed.
+    if (compare_(GetKeyAtIndex(node_index),
+                 GetKeyAtIndex(node_index - 1)) <= 0) {
+      BPLOG(INFO) << "StaticMap check failed: node keys non-increasing";
+      return false;
+    }
+  }
+  return true;
+}
+
+template<typename Key, typename Value, typename Compare>
+const Key StaticMap<Key, Value, Compare>::GetKeyAtIndex(int index) const {
+  if (index < 0 || index >= num_nodes_) {
+    BPLOG(ERROR) << "Key index out of range error";
+    // Key type is required to be primitive type.  Return 0 if index is invalid.
+    return 0;
+  }
+  return keys_[index];
+}
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_STATIC_MAP_INL_H__
diff --git a/src/processor/static_map.h b/src/processor/static_map.h
new file mode 100644
index 0000000..023ab3a
--- /dev/null
+++ b/src/processor/static_map.h
@@ -0,0 +1,144 @@
+// Copyright 2010 Google Inc. All Rights Reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_map.h: StaticMap.
+//
+// StaticMap provides lookup interfaces and iterators similar as stl::map's.
+// These lookup operations are purely Read-Only, thus memory
+// allocation & deallocation is mostly avoided (intentionally).
+//
+// The chunk of memory should contain data with pre-defined pattern:
+// **************** header ***************
+// uint32 (4 bytes): number of nodes
+// uint32 (4 bytes): address offset of node1's mapped_value
+// uint32 (4 bytes): address offset of node2's mapped_value
+// ...
+// uint32 (4 bytes): address offset of nodeN's mapped_value
+//
+// ************* Key array ************
+// (X bytes): node1's key
+// (X bytes): node2's key
+// ...
+// (X bytes): nodeN's key
+//
+// ************* Value array **********
+// (? bytes): node1's mapped_value
+// (? bytes): node2's mapped_value
+// ...
+// (? bytes): nodeN's mapped_value
+//
+// REQUIREMENT: Key type MUST be primitive type or pointers so that:
+// X = sizeof(typename Key);
+//
+// Note: since address offset is stored as uint32, user should keep in mind that
+// StaticMap only supports up to 4GB size of memory data.
+
+// Author: Siyang Xie (lambxsy@google.com)
+
+
+#ifndef PROCESSOR_STATIC_MAP_H__
+#define PROCESSOR_STATIC_MAP_H__
+
+#include "processor/static_map_iterator-inl.h"
+
+namespace google_breakpad {
+
+// Default functor to compare keys.
+template<typename Key>
+class DefaultCompare {
+ public:
+  int operator()(const Key &k1, const Key &k2) const {
+    if (k1 < k2) return -1;
+    if (k1 == k2) return 0;
+    return 1;
+  }
+};
+
+template<typename Key, typename Value, typename Compare = DefaultCompare<Key> >
+class StaticMap {
+ public:
+  typedef StaticMapIterator<Key, Value, Compare> iterator;
+  typedef StaticMapIterator<Key, Value, Compare> const_iterator;
+
+  StaticMap() : raw_data_(0),
+                num_nodes_(0),
+                offsets_(0),
+                compare_() { }
+
+  explicit StaticMap(const char* raw_data);
+
+  inline bool empty() const { return num_nodes_ == 0; }
+  inline unsigned int size() const { return num_nodes_; }
+
+  // Return iterators.
+  inline iterator begin() const { return IteratorAtIndex(0); }
+  inline iterator last() const { return IteratorAtIndex(num_nodes_ - 1); }
+  inline iterator end() const { return IteratorAtIndex(num_nodes_); }
+  inline iterator IteratorAtIndex(int index) const {
+    return iterator(raw_data_, index);
+  }
+
+  // Lookup operations.
+  iterator find(const Key &k) const;
+
+  // lower_bound(k) searches in a sorted range for the first element that has a
+  // key not less than the argument k.
+  iterator lower_bound(const Key &k) const;
+
+  // upper_bound(k) searches in a sorted range for the first element that has a
+  // key greater than the argument k.
+  iterator upper_bound(const Key &k) const;
+
+  // Checks if the underlying memory data conforms to the predefined pattern:
+  // first check the number of nodes is non-negative,
+  // then check both offsets and keys are strictly increasing (sorted).
+  bool ValidateInMemoryStructure() const;
+
+ private:
+  const Key GetKeyAtIndex(int i) const;
+
+  // Start address of a raw memory chunk with serialized data.
+  const char* raw_data_;
+
+  // Number of nodes in the static map.
+  u_int32_t num_nodes_;
+
+  // Array of offset addresses for stored values.
+  // For example:
+  // address_of_i-th_node_value = raw_data_ + offsets_[i]
+  const u_int32_t* offsets_;
+
+  // keys_[i] = key of i_th node
+  const Key* keys_;
+
+  Compare compare_;
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_STATIC_MAP_H__
diff --git a/src/processor/static_map_iterator-inl.h b/src/processor/static_map_iterator-inl.h
new file mode 100644
index 0000000..325046c
--- /dev/null
+++ b/src/processor/static_map_iterator-inl.h
@@ -0,0 +1,147 @@
+// Copyright 2010 Google Inc. All Rights Reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_map_iterator-inl.h: StaticMapIterator implementation.
+//
+// See static_map_iterator.h for documentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_STATIC_MAP_ITERATOR_INL_H__
+#define PROCESSOR_STATIC_MAP_ITERATOR_INL_H__
+
+#include "processor/static_map_iterator.h"
+
+#include "processor/logging.h"
+
+namespace google_breakpad {
+
+template<typename Key, typename Value, typename Compare>
+StaticMapIterator<Key, Value, Compare>::StaticMapIterator(const char* base,
+                                                            const int &index):
+      index_(index), base_(base) {
+  // See static_map.h for documentation on
+  // bytes format of serialized StaticMap data.
+  num_nodes_ = *(reinterpret_cast<const int32_t*>(base_));
+  offsets_ = reinterpret_cast<const u_int32_t*>(base_ + sizeof(num_nodes_));
+  keys_ = reinterpret_cast<const Key*>(
+      base_ + (1 + num_nodes_) * sizeof(num_nodes_));
+}
+
+// Increment & Decrement operators:
+template<typename Key, typename Value, typename Compare>
+StaticMapIterator<Key, Value, Compare>&
+StaticMapIterator<Key, Value, Compare>::operator++() {
+  if (!IsValid()) {
+    BPLOG(ERROR) << "operator++ on invalid iterator";
+    return *this;
+  }
+  if (++index_ > num_nodes_) index_ = num_nodes_;
+  return *this;
+}
+
+template<typename Key, typename Value, typename Compare>
+StaticMapIterator<Key, Value, Compare>
+StaticMapIterator<Key, Value, Compare>::operator++(int postfix_operator) {
+  if (!IsValid()) {
+    BPLOG(ERROR) << "operator++ on invalid iterator";
+    return *this;
+  }
+  StaticMapIterator<Key, Value, Compare> tmp = *this;
+  if (++index_ > num_nodes_) index_ = num_nodes_;
+  return tmp;
+}
+
+template<typename Key, typename Value, typename Compare>
+StaticMapIterator<Key, Value, Compare>&
+StaticMapIterator<Key, Value, Compare>::operator--() {
+  if (!IsValid()) {
+    BPLOG(ERROR) << "operator++ on invalid iterator";
+    return *this;
+  }
+
+  if (--index_ < 0) index_ = 0;
+  return *this;
+}
+
+template<typename Key, typename Value, typename Compare>
+StaticMapIterator<Key, Value, Compare>
+StaticMapIterator<Key, Value, Compare>::operator--(int postfix_operator) {
+  if (!IsValid()) {
+    BPLOG(ERROR) << "operator++ on invalid iterator";
+    return *this;
+  }
+  StaticMapIterator<Key, Value, Compare> tmp = *this;
+
+  if (--index_ < 0) index_ = 0;
+  return tmp;
+}
+
+template<typename Key, typename Value, typename Compare>
+const Key* StaticMapIterator<Key, Value, Compare>::GetKeyPtr() const {
+  if (!IsValid()) {
+    BPLOG(ERROR) << "call GetKeyPtr() on invalid iterator";
+    return NULL;
+  }
+  return &(keys_[index_]);
+}
+
+template<typename Key, typename Value, typename Compare>
+const char* StaticMapIterator<Key, Value, Compare>::GetValueRawPtr() const {
+  if (!IsValid()) {
+    BPLOG(ERROR) << "call GetValuePtr() on invalid iterator";
+    return NULL;
+  }
+  return base_ + offsets_[index_];
+}
+
+template<typename Key, typename Value, typename Compare>
+bool StaticMapIterator<Key, Value, Compare>::operator==(
+    const StaticMapIterator<Key, Value, Compare>& x) const {
+  return base_ == x.base_ && index_ == x.index_;
+}
+
+template<typename Key, typename Value, typename Compare>
+bool StaticMapIterator<Key, Value, Compare>::operator!=(
+    const StaticMapIterator<Key, Value, Compare>& x) const {
+  // Only need to compare base_ and index_.
+  // Other data members are auxiliary.
+  return base_ != x.base_ || index_ != x.index_;
+}
+
+template<typename Key, typename Value, typename Compare>
+bool StaticMapIterator<Key, Value, Compare>::IsValid() const {
+  if (!base_ || index_ < 0 || index_ > num_nodes_)
+    return false;
+
+  return true;
+}
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_STATIC_MAP_ITERATOR_INL_H__
diff --git a/src/processor/static_map_iterator.h b/src/processor/static_map_iterator.h
new file mode 100644
index 0000000..8127667
--- /dev/null
+++ b/src/processor/static_map_iterator.h
@@ -0,0 +1,112 @@
+// Copyright 2010 Google Inc. All Rights Reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_map_iterator.h: StaticMapIterator template class declaration.
+//
+// StaticMapIterator provides increment and decrement operators to iterate
+// through a StaticMap map.  It does not provide *, -> operators, user should
+// use GetKeyPtr(), GetKey(), GetValuePtr() interfaces to retrieve data or
+// pointer to data.  StaticMapIterator is essentially a const_iterator.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+
+#ifndef PROCESSOR_STATIC_MAP_ITERATOR_H__
+#define PROCESSOR_STATIC_MAP_ITERATOR_H__
+
+#include <sys/types.h>
+
+namespace google_breakpad {
+
+// Forward declaration.
+template<typename Key, typename Value, typename Compare> class StaticMap;
+
+// StaticMapIterator does not support operator*() or operator->(),
+// User should use GetKey(), GetKeyPtr(), GetValuePtr() instead;
+template<typename Key, typename Value, typename Compare>
+class StaticMapIterator {
+ public:
+  // Constructors.
+  StaticMapIterator(): index_(-1), base_(NULL) { }
+
+  // Increment & Decrement operators:
+  StaticMapIterator& operator++();
+  StaticMapIterator operator++(int post_fix_operator);
+
+  StaticMapIterator& operator--();
+  StaticMapIterator operator--(int post_fix_operator);
+
+  // Interface for retrieving data / pointer to data.
+  const Key* GetKeyPtr() const;
+
+  // Run time error will occur if GetKey() is called on an invalid iterator.
+  inline const Key GetKey() const { return *GetKeyPtr(); }
+
+  // return a raw memory pointer that points to the start address of value.
+  const char* GetValueRawPtr() const;
+
+  // return a reinterpret-casted pointer to the value.
+  inline const Value* GetValuePtr() const {
+    return reinterpret_cast<const Value*>(GetValueRawPtr());
+  }
+
+  bool operator==(const StaticMapIterator& x) const;
+  bool operator!=(const StaticMapIterator& x) const;
+
+  // Check if this iterator is valid.
+  // If iterator is invalid, user is forbidden to use ++/-- operator
+  // or interfaces for retrieving data / pointer to data.
+  bool IsValid() const;
+
+ private:
+  friend class StaticMap<Key, Value, Compare>;
+
+  // Only StaticMap can call this constructor.
+  explicit StaticMapIterator(const char* base, const int32_t &index);
+
+  // Index of node that the iterator is pointing to.
+  int32_t index_;
+
+  // Beginning address of the serialized map data.
+  const char* base_;
+
+  // Number of nodes in the map.  Use it to identify end() iterator.
+  int32_t num_nodes_;
+
+  // offsets_ is an array of offset addresses of mapped values.
+  // For example:
+  // address_of_i-th_node_value = base_ + offsets_[i]
+  const u_int32_t* offsets_;
+
+  // keys_[i] = key of i_th node.
+  const Key* keys_;
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_STATIC_MAP_ITERATOR_H__
diff --git a/src/processor/static_map_unittest.cc b/src/processor/static_map_unittest.cc
new file mode 100644
index 0000000..eb1e135
--- /dev/null
+++ b/src/processor/static_map_unittest.cc
@@ -0,0 +1,386 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_map_unittest.cc: Unit tests for StaticMap.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#include <climits>
+#include <map>
+
+#include "breakpad_googletest_includes.h"
+#include "processor/static_map-inl.h"
+
+
+typedef int ValueType;
+typedef int KeyType;
+typedef google_breakpad::StaticMap< KeyType, ValueType > TestMap;
+typedef std::map< KeyType, ValueType > StdMap;
+
+template<typename Key, typename Value>
+class SimpleMapSerializer {
+ public:
+  static char* Serialize(const std::map<Key, Value> &stdmap,
+                   unsigned int* size = NULL) {
+    unsigned int size_per_node =
+        sizeof(u_int32_t) + sizeof(Key) + sizeof(Value);
+    unsigned int memsize = sizeof(int32_t) + size_per_node * stdmap.size();
+    if (size) *size = memsize;
+
+    // Allocate memory for serialized data:
+    char* mem = reinterpret_cast<char*>(operator new(memsize));
+    char* address = mem;
+
+    // Writer the number of nodes:
+    new (address) u_int32_t(static_cast<u_int32_t>(stdmap.size()));
+    address += sizeof(u_int32_t);
+
+    // Nodes' offset:
+    u_int32_t* offsets = reinterpret_cast<u_int32_t*>(address);
+    address += sizeof(u_int32_t) * stdmap.size();
+
+    // Keys:
+    Key* keys = reinterpret_cast<Key*>(address);
+    address += sizeof(Key) * stdmap.size();
+
+    // Traversing map:
+    typename std::map<Key, Value>::const_iterator iter = stdmap.begin();
+    for (int index = 0; iter != stdmap.end(); ++iter, ++index) {
+      offsets[index] = static_cast<unsigned int>(address - mem);
+      keys[index] = iter->first;
+      new (address) Value(iter->second);
+      address += sizeof(Value);
+    }
+    return mem;
+  }
+};
+
+
+class TestInvalidMap : public ::testing::Test {
+ protected:
+  void SetUp() {
+    memset(data, 0, kMemorySize);
+  }
+
+  // 40 Bytes memory can hold a StaticMap with up to 3 nodes.
+  static const int kMemorySize = 40;
+  char data[kMemorySize];
+  TestMap test_map;
+};
+
+TEST_F(TestInvalidMap, TestNegativeNumberNodes) {
+  memset(data, 0xff, sizeof(u_int32_t));  // Set the number of nodes = -1
+  test_map = TestMap(data);
+  ASSERT_FALSE(test_map.ValidateInMemoryStructure());
+}
+
+TEST_F(TestInvalidMap, TestWrongOffsets) {
+  u_int32_t* header = reinterpret_cast<u_int32_t*>(data);
+  const u_int32_t kNumNodes = 2;
+  const u_int32_t kHeaderOffset =
+        sizeof(u_int32_t) + kNumNodes * (sizeof(u_int32_t) + sizeof(KeyType));
+
+  header[0] = kNumNodes;
+  header[1] = kHeaderOffset + 3;   // Wrong offset for first node
+  test_map = TestMap(data);
+  ASSERT_FALSE(test_map.ValidateInMemoryStructure());
+
+  header[1] = kHeaderOffset;       // Correct offset for first node
+  header[2] = kHeaderOffset - 1;   // Wrong offset for second node
+  test_map = TestMap(data);
+  ASSERT_FALSE(test_map.ValidateInMemoryStructure());
+}
+
+TEST_F(TestInvalidMap, TestUnSortedKeys) {
+  u_int32_t* header = reinterpret_cast<u_int32_t*>(data);
+  const u_int32_t kNumNodes = 2;
+  const u_int32_t kHeaderOffset =
+      sizeof(u_int32_t) + kNumNodes * (sizeof(u_int32_t) + sizeof(KeyType));
+  header[0] = kNumNodes;
+  header[1] = kHeaderOffset;
+  header[2] = kHeaderOffset + sizeof(ValueType);
+
+  KeyType* keys = reinterpret_cast<KeyType*>(
+      data + (kNumNodes + 1) * sizeof(u_int32_t));
+  // Set keys in non-increasing order.
+  keys[0] = 10;
+  keys[1] = 7;
+  test_map = TestMap(data);
+  ASSERT_FALSE(test_map.ValidateInMemoryStructure());
+}
+
+
+class TestValidMap : public ::testing::Test {
+ protected:
+  void SetUp() {
+    int testcase = 0;
+
+    // Empty map.
+    map_data[testcase] =
+        serializer.Serialize(std_map[testcase], &size[testcase]);
+    test_map[testcase] = TestMap(map_data[testcase]);
+    ++testcase;
+
+    // Single element.
+    std_map[testcase].insert(std::make_pair(2, 8));
+    map_data[testcase] =
+        serializer.Serialize(std_map[testcase], &size[testcase]);
+    test_map[testcase] = TestMap(map_data[testcase]);
+    ++testcase;
+
+    // 100 elements.
+    for (int i = 0; i < 100; ++i)
+          std_map[testcase].insert(std::make_pair(i, 2 * i));
+    map_data[testcase] =
+        serializer.Serialize(std_map[testcase], &size[testcase]);
+    test_map[testcase] = TestMap(map_data[testcase]);
+    ++testcase;
+
+    // 1000 random elements.
+    for (int i = 0; i < 1000; ++i)
+      std_map[testcase].insert(std::make_pair(rand(), rand()));
+    map_data[testcase] =
+        serializer.Serialize(std_map[testcase], &size[testcase]);
+    test_map[testcase] = TestMap(map_data[testcase]);
+
+    // Set correct size of memory allocation for each test case.
+    unsigned int size_per_node =
+        sizeof(u_int32_t) + sizeof(KeyType) + sizeof(ValueType);
+    for (testcase = 0; testcase < kNumberTestCases; ++testcase) {
+      correct_size[testcase] =
+          sizeof(u_int32_t) + std_map[testcase].size() * size_per_node;
+    }
+  }
+
+  void TearDown() {
+    for (int i = 0;i < kNumberTestCases; ++i)
+      delete map_data[i];
+  }
+
+
+  void IteratorTester(int test_case) {
+    // scan through:
+    iter_test = test_map[test_case].begin();
+    iter_std = std_map[test_case].begin();
+
+    for (; iter_test != test_map[test_case].end() &&
+           iter_std != std_map[test_case].end();
+         ++iter_test, ++iter_std) {
+      ASSERT_EQ(iter_test.GetKey(), iter_std->first);
+      ASSERT_EQ(*(iter_test.GetValuePtr()), iter_std->second);
+    }
+    ASSERT_TRUE(iter_test == test_map[test_case].end()
+             && iter_std == std_map[test_case].end());
+
+    // Boundary testcase.
+    if (!std_map[test_case].empty()) {
+      // rear boundary case:
+      iter_test = test_map[test_case].end();
+      iter_std = std_map[test_case].end();
+      --iter_std;
+      --iter_test;
+      ASSERT_EQ(iter_test.GetKey(), iter_std->first);
+      ASSERT_EQ(*(iter_test.GetValuePtr()), iter_std->second);
+
+      ++iter_test;
+      ++iter_std;
+      ASSERT_TRUE(iter_test == test_map[test_case].end());
+
+      --iter_test;
+      --iter_std;
+      ASSERT_TRUE(iter_test != test_map[test_case].end());
+      ASSERT_TRUE(iter_test == test_map[test_case].last());
+      ASSERT_EQ(iter_test.GetKey(), iter_std->first);
+      ASSERT_EQ(*(iter_test.GetValuePtr()), iter_std->second);
+
+      // front boundary case:
+      iter_test = test_map[test_case].begin();
+      --iter_test;
+      ASSERT_TRUE(iter_test == test_map[test_case].begin());
+    }
+  }
+
+  void CompareLookupResult(int test_case) {
+    bool found1 = (iter_test != test_map[test_case].end());
+    bool found2 = (iter_std != std_map[test_case].end());
+    ASSERT_EQ(found1, found2);
+
+    if (found1 && found2) {
+      ASSERT_EQ(iter_test.GetKey(), iter_std->first);
+      ASSERT_EQ(*(iter_test.GetValuePtr()), iter_std->second);
+    }
+  }
+
+  void FindTester(int test_case, const KeyType &key) {
+    iter_test = test_map[test_case].find(key);
+    iter_std = std_map[test_case].find(key);
+    CompareLookupResult(test_case);
+  }
+
+  void LowerBoundTester(int test_case, const KeyType &key) {
+    iter_test = test_map[test_case].lower_bound(key);
+    iter_std = std_map[test_case].lower_bound(key);
+    CompareLookupResult(test_case);
+  }
+
+  void UpperBoundTester(int test_case, const KeyType &key) {
+    iter_test = test_map[test_case].upper_bound(key);
+    iter_std = std_map[test_case].upper_bound(key);
+    CompareLookupResult(test_case);
+  }
+
+  void LookupTester(int test_case) {
+    StdMap::const_iterator iter;
+    // Test find():
+    for (iter = std_map[test_case].begin();
+        iter != std_map[test_case].end();
+        ++iter) {
+      FindTester(test_case, iter->first);
+      FindTester(test_case, iter->first + 1);
+      FindTester(test_case, iter->first - 1);
+    }
+    FindTester(test_case, INT_MIN);
+    FindTester(test_case, INT_MAX);
+    // random test:
+    for (int i = 0; i < rand()%5000 + 5000; ++i)
+      FindTester(test_case, rand());
+
+    // Test lower_bound():
+    for (iter = std_map[test_case].begin();
+        iter != std_map[test_case].end();
+        ++iter) {
+      LowerBoundTester(test_case, iter->first);
+      LowerBoundTester(test_case, iter->first + 1);
+      LowerBoundTester(test_case, iter->first - 1);
+    }
+    LowerBoundTester(test_case, INT_MIN);
+    LowerBoundTester(test_case, INT_MAX);
+    // random test:
+    for (int i = 0; i < rand()%5000 + 5000; ++i)
+      LowerBoundTester(test_case, rand());
+
+    // Test upper_bound():
+    for (iter = std_map[test_case].begin();
+        iter != std_map[test_case].end();
+        ++iter) {
+      UpperBoundTester(test_case, iter->first);
+      UpperBoundTester(test_case, iter->first + 1);
+      UpperBoundTester(test_case, iter->first - 1);
+    }
+    UpperBoundTester(test_case, INT_MIN);
+    UpperBoundTester(test_case, INT_MAX);
+    // random test:
+    for (int i = 0; i < rand()%5000 + 5000; ++i)
+      UpperBoundTester(test_case, rand());
+  }
+
+  static const int kNumberTestCases = 4;
+  StdMap std_map[kNumberTestCases];
+  TestMap test_map[kNumberTestCases];
+  TestMap::const_iterator iter_test;
+  StdMap::const_iterator iter_std;
+  char* map_data[kNumberTestCases];
+  unsigned int size[kNumberTestCases];
+  unsigned int correct_size[kNumberTestCases];
+  SimpleMapSerializer<KeyType, ValueType> serializer;
+};
+
+TEST_F(TestValidMap, TestEmptyMap) {
+  int test_case = 0;
+  // Assert memory size allocated during serialization is correct.
+  ASSERT_EQ(correct_size[test_case], size[test_case]);
+
+  // Sanity check of serialized data:
+  ASSERT_TRUE(test_map[test_case].ValidateInMemoryStructure());
+  ASSERT_EQ(std_map[test_case].empty(), test_map[test_case].empty());
+  ASSERT_EQ(std_map[test_case].size(), test_map[test_case].size());
+
+  // Test Iterator.
+  IteratorTester(test_case);
+
+  // Test lookup operations.
+  LookupTester(test_case);
+}
+
+TEST_F(TestValidMap, TestSingleElement) {
+  int test_case = 1;
+  // Assert memory size allocated during serialization is correct.
+  ASSERT_EQ(correct_size[test_case], size[test_case]);
+
+  // Sanity check of serialized data:
+  ASSERT_TRUE(test_map[test_case].ValidateInMemoryStructure());
+  ASSERT_EQ(std_map[test_case].empty(), test_map[test_case].empty());
+  ASSERT_EQ(std_map[test_case].size(), test_map[test_case].size());
+
+  // Test Iterator.
+  IteratorTester(test_case);
+
+  // Test lookup operations.
+  LookupTester(test_case);
+}
+
+TEST_F(TestValidMap, Test100Elements) {
+  int test_case = 2;
+  // Assert memory size allocated during serialization is correct.
+  ASSERT_EQ(correct_size[test_case], size[test_case]);
+
+  // Sanity check of serialized data:
+  ASSERT_TRUE(test_map[test_case].ValidateInMemoryStructure());
+  ASSERT_EQ(std_map[test_case].empty(), test_map[test_case].empty());
+  ASSERT_EQ(std_map[test_case].size(), test_map[test_case].size());
+
+  // Test Iterator.
+  IteratorTester(test_case);
+
+  // Test lookup operations.
+  LookupTester(test_case);
+}
+
+TEST_F(TestValidMap, Test1000RandomElements) {
+  int test_case = 3;
+  // Assert memory size allocated during serialization is correct.
+  ASSERT_EQ(correct_size[test_case], size[test_case]);
+
+  // Sanity check of serialized data:
+  ASSERT_TRUE(test_map[test_case].ValidateInMemoryStructure());
+  ASSERT_EQ(std_map[test_case].empty(), test_map[test_case].empty());
+  ASSERT_EQ(std_map[test_case].size(), test_map[test_case].size());
+
+  // Test Iterator.
+  IteratorTester(test_case);
+
+  // Test lookup operations.
+  LookupTester(test_case);
+}
+
+int main(int argc, char *argv[]) {
+  ::testing::InitGoogleTest(&argc, argv);
+
+  return RUN_ALL_TESTS();
+}
diff --git a/src/processor/static_range_map-inl.h b/src/processor/static_range_map-inl.h
new file mode 100644
index 0000000..f6cef1a
--- /dev/null
+++ b/src/processor/static_range_map-inl.h
@@ -0,0 +1,130 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_range_map-inl.h: StaticRangeMap implementation.
+//
+// See static_range_map.h for documentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_STATIC_RANGE_MAP_INL_H__
+#define PROCESSOR_STATIC_RANGE_MAP_INL_H__
+
+#include "processor/static_range_map.h"
+#include "processor/logging.h"
+
+namespace google_breakpad {
+
+template<typename AddressType, typename EntryType>
+bool StaticRangeMap<AddressType, EntryType>::RetrieveRange(
+    const AddressType &address, const EntryType *&entry,
+    AddressType *entry_base, AddressType *entry_size) const {
+  MapConstIterator iterator = map_.lower_bound(address);
+  if (iterator == map_.end())
+    return false;
+
+  // The map is keyed by the high address of each range, so |address| is
+  // guaranteed to be lower than the range's high address.  If |range| is
+  // not directly preceded by another range, it's possible for address to
+  // be below the range's low address, though.  When that happens, address
+  // references something not within any range, so return false.
+
+  const Range *range = iterator.GetValuePtr();
+
+  // Make sure AddressType and EntryType are copyable basic types
+  // e.g.: integer types, pointers etc
+  if (address < range->base())
+    return false;
+
+  entry = range->entryptr();
+  if (entry_base)
+    *entry_base = range->base();
+  if (entry_size)
+    *entry_size = iterator.GetKey() - range->base() + 1;
+
+  return true;
+}
+
+
+template<typename AddressType, typename EntryType>
+bool StaticRangeMap<AddressType, EntryType>::RetrieveNearestRange(
+    const AddressType &address, const EntryType *&entry,
+    AddressType *entry_base, AddressType *entry_size) const {
+  // If address is within a range, RetrieveRange can handle it.
+  if (RetrieveRange(address, entry, entry_base, entry_size))
+    return true;
+
+  // upper_bound gives the first element whose key is greater than address,
+  // but we want the first element whose key is less than or equal to address.
+  // Decrement the iterator to get there, but not if the upper_bound already
+  // points to the beginning of the map - in that case, address is lower than
+  // the lowest stored key, so return false.
+
+  MapConstIterator iterator = map_.upper_bound(address);
+  if (iterator == map_.begin())
+    return false;
+  --iterator;
+
+  const Range *range = iterator.GetValuePtr();
+  entry = range->entryptr();
+  if (entry_base)
+    *entry_base = range->base();
+  if (entry_size)
+    *entry_size = iterator.GetKey() - range->base() + 1;
+
+  return true;
+}
+
+template<typename AddressType, typename EntryType>
+bool StaticRangeMap<AddressType, EntryType>::RetrieveRangeAtIndex(
+    int index, const EntryType *&entry,
+    AddressType *entry_base, AddressType *entry_size) const {
+
+  if (index >= GetCount()) {
+    BPLOG(ERROR) << "Index out of range: " << index << "/" << GetCount();
+    return false;
+  }
+
+  MapConstIterator iterator = map_.IteratorAtIndex(index);
+
+  const Range *range = iterator.GetValuePtr();
+
+  entry = range->entryptr();
+  if (entry_base)
+    *entry_base = range->base();
+  if (entry_size)
+    *entry_size = iterator.GetKey() - range->base() + 1;
+
+  return true;
+}
+
+}  // namespace google_breakpad
+
+
+#endif  // PROCESSOR_STATIC_RANGE_MAP_INL_H__
diff --git a/src/processor/static_range_map.h b/src/processor/static_range_map.h
new file mode 100644
index 0000000..096bbbb
--- /dev/null
+++ b/src/processor/static_range_map.h
@@ -0,0 +1,106 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// static_range_map.h: StaticRangeMap.
+//
+// StaticRangeMap is similar as RangeMap.  However, StaticRangeMap wraps a
+// StaticMap instead of std::map, and does not support dynamic operations like
+// StoreRange(...).  StaticRangeMap provides same Retrieve*() interfaces as
+// RangeMap.  Please see range_map.h for more documentation.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#ifndef PROCESSOR_STATIC_RANGE_MAP_H__
+#define PROCESSOR_STATIC_RANGE_MAP_H__
+
+
+#include "processor/static_map-inl.h"
+
+namespace google_breakpad {
+
+// AddressType is basic type, e.g.: integer types, pointers etc
+// EntryType could be a complex type, so we retrieve its pointer instead.
+template<typename AddressType, typename EntryType>
+class StaticRangeMap {
+ public:
+  StaticRangeMap(): map_() { }
+  explicit StaticRangeMap(const char *memory): map_(memory) { }
+
+  // Locates the range encompassing the supplied address.  If there is
+  // no such range, returns false.  entry_base and entry_size, if non-NULL,
+  // are set to the base and size of the entry's range.
+  bool RetrieveRange(const AddressType &address, const EntryType *&entry,
+                     AddressType *entry_base, AddressType *entry_size) const;
+
+  // Locates the range encompassing the supplied address, if one exists.
+  // If no range encompasses the supplied address, locates the nearest range
+  // to the supplied address that is lower than the address.  Returns false
+  // if no range meets these criteria.  entry_base and entry_size, if
+  // non-NULL, are set to the base and size of the entry's range.
+  bool RetrieveNearestRange(const AddressType &address, const EntryType *&entry,
+                            AddressType *entry_base, AddressType *entry_size)
+                            const;
+
+  // Treating all ranges as a list ordered by the address spaces that they
+  // occupy, locates the range at the index specified by index.  Returns
+  // false if index is larger than the number of ranges stored.  entry_base
+  // and entry_size, if non-NULL, are set to the base and size of the entry's
+  // range.
+  //
+  // RetrieveRangeAtIndex is not optimized for speedy operation.
+  bool RetrieveRangeAtIndex(int index, const EntryType *&entry,
+                            AddressType *entry_base, AddressType *entry_size)
+                            const;
+
+  // Returns the number of ranges stored in the RangeMap.
+  inline unsigned int GetCount() const { return map_.size(); }
+
+ private:
+  friend class ModuleComparer;
+  class Range {
+   public:
+    AddressType base() const {
+      return *(reinterpret_cast<const AddressType*>(this));
+    }
+    const EntryType* entryptr() const {
+      return reinterpret_cast<const EntryType*>(this + sizeof(AddressType));
+    }
+  };
+
+  // Convenience types.
+  typedef StaticRangeMap* SelfPtr;
+  typedef StaticMap<AddressType, Range> AddressToRangeMap;
+  typedef typename AddressToRangeMap::const_iterator MapConstIterator;
+
+  AddressToRangeMap map_;
+};
+
+}  // namespace google_breakpad
+
+#endif  // PROCESSOR_STATIC_RANGE_MAP_H__
diff --git a/src/processor/static_range_map_unittest.cc b/src/processor/static_range_map_unittest.cc
new file mode 100644
index 0000000..82b2623
--- /dev/null
+++ b/src/processor/static_range_map_unittest.cc
@@ -0,0 +1,421 @@
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// static_range_map_unittest.cc: Unit tests for StaticRangeMap.
+//
+// Author: Siyang Xie (lambxsy@google.com)
+
+#include "breakpad_googletest_includes.h"
+#include "processor/range_map-inl.h"
+#include "processor/static_range_map-inl.h"
+#include "processor/simple_serializer-inl.h"
+#include "processor/map_serializers-inl.h"
+
+#include "processor/logging.h"
+#include "processor/scoped_ptr.h"
+
+namespace {
+// Types used for testing.
+typedef int AddressType;
+typedef int EntryType;
+typedef google_breakpad::StaticRangeMap< AddressType, EntryType > TestMap;
+typedef google_breakpad::RangeMap< AddressType, EntryType > RMap;
+
+// RangeTest contains data to use for store and retrieve tests.  See
+// RunTests for descriptions of the tests.
+struct RangeTest {
+  // Base address to use for test
+  AddressType address;
+
+  // Size of range to use for test
+  AddressType size;
+
+  // Unique ID of range - unstorable ranges must have unique IDs too
+  EntryType id;
+
+  // Whether this range is expected to be stored successfully or not
+  bool expect_storable;
+};
+
+// A RangeTestSet encompasses multiple RangeTests, which are run in
+// sequence on the same RangeMap.
+struct RangeTestSet {
+  // An array of RangeTests
+  const RangeTest* range_tests;
+
+  // The number of tests in the set
+  unsigned int range_test_count;
+};
+
+// These tests will be run sequentially.  The first set of tests exercises
+// most functions of RangeTest, and verifies all of the bounds-checking.
+const RangeTest range_tests_0[] = {
+  { INT_MIN,     16,      1,  true },   // lowest possible range
+  { -2,          5,       2,  true },   // a range through zero
+  { INT_MAX - 9, 11,      3,  false },  // tests anti-overflow
+  { INT_MAX - 9, 10,      4,  true },   // highest possible range
+  { 5,           0,       5,  false },  // tests anti-zero-size
+  { 5,           1,       6,  true },   // smallest possible range
+  { -20,         15,      7,  true },   // entirely negative
+
+  { 10,          10,      10, true },   // causes the following tests to fail
+  { 9,           10,      11, false },  // one-less base, one-less high
+  { 9,           11,      12, false },  // one-less base, identical high
+  { 9,           12,      13, false },  // completely contains existing
+  { 10,          9,       14, false },  // identical base, one-less high
+  { 10,          10,      15, false },  // exactly identical to existing range
+  { 10,          11,      16, false },  // identical base, one-greater high
+  { 11,          8,       17, false },  // contained completely within
+  { 11,          9,       18, false },  // one-greater base, identical high
+  { 11,          10,      19, false },  // one-greater base, one-greater high
+  { 9,           2,       20, false },  // overlaps bottom by one
+  { 10,          1,       21, false },  // overlaps bottom by one, contained
+  { 19,          1,       22, false },  // overlaps top by one, contained
+  { 19,          2,       23, false },  // overlaps top by one
+
+  { 9,           1,       24, true },   // directly below without overlap
+  { 20,          1,       25, true },   // directly above without overlap
+
+  { 6,           3,       26, true },   // exactly between two ranges, gapless
+  { 7,           3,       27, false },  // tries to span two ranges
+  { 7,           5,       28, false },  // tries to span three ranges
+  { 4,           20,      29, false },  // tries to contain several ranges
+
+  { 30,          50,      30, true },
+  { 90,          25,      31, true },
+  { 35,          65,      32, false },  // tries to span two noncontiguous
+  { 120,         10000,   33, true },   // > 8-bit
+  { 20000,       20000,   34, true },   // > 8-bit
+  { 0x10001,     0x10001, 35, true },   // > 16-bit
+
+  { 27,          -1,      36, false }   // tests high < base
+};
+
+// Attempt to fill the entire space.  The entire space must be filled with
+// three stores because AddressType is signed for these tests, so RangeMap
+// treats the size as signed and rejects sizes that appear to be negative.
+// Even if these tests were run as unsigned, two stores would be needed
+// to fill the space because the entire size of the space could only be
+// described by using one more bit than would be present in AddressType.
+const RangeTest range_tests_1[] = {
+  { INT_MIN, INT_MAX, 50, true },   // From INT_MIN to -2, inclusive
+  { -1,      2,       51, true },   // From -1 to 0, inclusive
+  { 1,       INT_MAX, 52, true },   // From 1 to INT_MAX, inclusive
+  { INT_MIN, INT_MAX, 53, false },  // Can't fill the space twice
+  { -1,      2,       54, false },
+  { 1,       INT_MAX, 55, false },
+  { -3,      6,       56, false },  // -3 to 2, inclusive - spans 3 ranges
+};
+
+// A light round of testing to verify that RetrieveRange does the right
+// the right thing at the extremities of the range when nothing is stored
+// there.  Checks are forced without storing anything at the extremities
+// by setting size = 0.
+const RangeTest range_tests_2[] = {
+  { INT_MIN, 0, 100, false },  // makes RetrieveRange check low end
+  { -1,      3, 101, true },
+  { INT_MAX, 0, 102, false },  // makes RetrieveRange check high end
+};
+
+// Similar to the previous test set, but with a couple of ranges closer
+// to the extremities.
+const RangeTest range_tests_3[] = {
+  { INT_MIN + 1, 1, 110, true },
+  { INT_MAX - 1, 1, 111, true },
+  { INT_MIN,     0, 112, false },  // makes RetrieveRange check low end
+  { INT_MAX,     0, 113, false }   // makes RetrieveRange check high end
+};
+
+// The range map is cleared between sets of tests listed here.
+const RangeTestSet range_test_sets[] = {
+  { range_tests_0, sizeof(range_tests_0) / sizeof(RangeTest) },
+  { range_tests_1, sizeof(range_tests_1) / sizeof(RangeTest) },
+  { range_tests_2, sizeof(range_tests_2) / sizeof(RangeTest) },
+  { range_tests_3, sizeof(range_tests_3) / sizeof(RangeTest) },
+  { range_tests_0, sizeof(range_tests_0) / sizeof(RangeTest) }   // Run again
+};
+
+}  // namespace
+
+namespace google_breakpad {
+class TestStaticRangeMap : public ::testing::Test {
+ protected:
+  void SetUp() {
+    kTestCasesCount_ = sizeof(range_test_sets) / sizeof(RangeTestSet);
+  }
+
+  // StoreTest uses the data in a RangeTest and calls StoreRange on the
+  // test RangeMap.  It returns true if the expected result occurred, and
+  // false if something else happened.
+  void StoreTest(RMap* range_map, const RangeTest* range_test);
+
+  // RetrieveTest uses the data in RangeTest and calls RetrieveRange on the
+  // test RangeMap.  If it retrieves the expected value (which can be no
+  // map entry at the specified range,) it returns true, otherwise, it returns
+  // false.  RetrieveTest will check the values around the base address and
+  // the high address of a range to guard against off-by-one errors.
+  void RetrieveTest(TestMap* range_map, const RangeTest* range_test);
+
+  // Test RetrieveRangeAtIndex, which is supposed to return objects in order
+  // according to their addresses.  This test is performed by looping through
+  // the map, calling RetrieveRangeAtIndex for all possible indices in sequence,
+  // and verifying that each call returns a different object than the previous
+  // call, and that ranges are returned with increasing base addresses.  Returns
+  // false if the test fails.
+  void RetrieveIndexTest(const TestMap* range_map, int set);
+
+  void RunTestCase(int test_case);
+
+  unsigned int kTestCasesCount_;
+  RangeMapSerializer<AddressType, EntryType> serializer_;
+};
+
+void TestStaticRangeMap::StoreTest(RMap* range_map,
+                                   const RangeTest* range_test) {
+  bool stored = range_map->StoreRange(range_test->address,
+                                      range_test->size,
+                                      range_test->id);
+  EXPECT_EQ(stored, range_test->expect_storable)
+      << "StoreRange id " << range_test->id << "FAILED";
+}
+
+void TestStaticRangeMap::RetrieveTest(TestMap* range_map,
+                                      const RangeTest* range_test) {
+  for (unsigned int side = 0; side <= 1; ++side) {
+    // When side == 0, check the low side (base address) of each range.
+    // When side == 1, check the high side (base + size) of each range.
+
+    // Check one-less and one-greater than the target address in addition
+    // to the target address itself.
+
+    // If the size of the range is only 1, don't check one greater than
+    // the base or one less than the high - for a successfully stored
+    // range, these tests would erroneously fail because the range is too
+    // small.
+    AddressType low_offset = -1;
+    AddressType high_offset = 1;
+    if (range_test->size == 1) {
+      if (!side)          // When checking the low side,
+        high_offset = 0;  // don't check one over the target.
+      else                // When checking the high side,
+        low_offset = 0;   // don't check one under the target.
+    }
+
+    for (AddressType offset = low_offset; offset <= high_offset; ++offset) {
+      AddressType address =
+          offset +
+          (!side ? range_test->address :
+                   range_test->address + range_test->size - 1);
+
+      bool expected_result = false;  // This is correct for tests not stored.
+      if (range_test->expect_storable) {
+        if (offset == 0)             // When checking the target address,
+          expected_result = true;    // test should always succeed.
+        else if (offset == -1)       // When checking one below the target,
+          expected_result = side;    // should fail low and succeed high.
+        else                         // When checking one above the target,
+          expected_result = !side;   // should succeed low and fail high.
+      }
+
+      const EntryType* id;
+      AddressType retrieved_base;
+      AddressType retrieved_size;
+      bool retrieved = range_map->RetrieveRange(address, id,
+                                                &retrieved_base,
+                                                &retrieved_size);
+
+      bool observed_result = retrieved && *id == range_test->id;
+      EXPECT_EQ(observed_result, expected_result)
+          << "RetrieveRange id " << range_test->id
+          << ", side " << side << ", offset " << offset << " FAILED.";
+
+      // If a range was successfully retrieved, check that the returned
+      // bounds match the range as stored.
+      if (observed_result == true) {
+        EXPECT_EQ(retrieved_base, range_test->address)
+            << "RetrieveRange id " << range_test->id
+            << ", side " << side << ", offset " << offset << " FAILED.";
+        EXPECT_EQ(retrieved_size, range_test->size)
+            << "RetrieveRange id " << range_test->id
+            << ", side " << side << ", offset " << offset << " FAILED.";
+      }
+
+      // Now, check RetrieveNearestRange.  The nearest range is always
+      // expected to be different from the test range when checking one
+      // less than the low side.
+      bool expected_nearest = range_test->expect_storable;
+      if (!side && offset < 0)
+        expected_nearest = false;
+
+      AddressType nearest_base;
+      AddressType nearest_size;
+      bool retrieved_nearest = range_map->RetrieveNearestRange(address,
+                                                               id,
+                                                               &nearest_base,
+                                                               &nearest_size);
+
+      // When checking one greater than the high side, RetrieveNearestRange
+      // should usually return the test range.  When a different range begins
+      // at that address, though, then RetrieveNearestRange should return the
+      // range at the address instead of the test range.
+      if (side && offset > 0 && nearest_base == address) {
+        expected_nearest = false;
+      }
+
+      bool observed_nearest = retrieved_nearest &&
+                              *id == range_test->id;
+
+      EXPECT_EQ(observed_nearest, expected_nearest)
+          << "RetrieveRange id " << range_test->id
+          << ", side " << side << ", offset " << offset << " FAILED.";
+
+      // If a range was successfully retrieved, check that the returned
+      // bounds match the range as stored.
+      if (expected_nearest ==true) {
+        EXPECT_EQ(nearest_base, range_test->address)
+            << "RetrieveRange id " << range_test->id
+            << ", side " << side << ", offset " << offset << " FAILED.";
+        EXPECT_EQ(nearest_size, range_test->size)
+            << "RetrieveRange id " << range_test->id
+            << ", side " << side << ", offset " << offset << " FAILED.";
+      }
+    }
+  }
+}
+
+void TestStaticRangeMap::RetrieveIndexTest(const TestMap* range_map, int set) {
+  AddressType last_base = 0;
+  const EntryType* last_entry = 0;
+  const EntryType* entry;
+  int object_count = range_map->GetCount();
+  for (int object_index = 0; object_index < object_count; ++object_index) {
+    AddressType base;
+    ASSERT_TRUE(range_map->RetrieveRangeAtIndex(object_index,
+                                                entry,
+                                                &base,
+                                                NULL))
+        << "FAILED: RetrieveRangeAtIndex set " << set
+        << " index " << object_index;
+
+    ASSERT_TRUE(entry) << "FAILED: RetrieveRangeAtIndex set " << set
+                           << " index " << object_index;
+
+    // It's impossible to do these comparisons unless there's a previous
+    // object to compare against.
+    if (last_entry) {
+      // The object must be different from the last_entry one.
+      EXPECT_NE(*entry, *last_entry) << "FAILED: RetrieveRangeAtIndex set "
+                                     << set << " index " << object_index;
+      // Each object must have a base greater than the previous object's base.
+      EXPECT_GT(base, last_base) << "FAILED: RetrieveRangeAtIndex set " << set
+                                 << " index " << object_index;
+    }
+    last_entry = entry;
+    last_base = base;
+  }
+
+  // Make sure that RetrieveRangeAtIndex doesn't allow lookups at indices that
+  // are too high.
+  ASSERT_FALSE(range_map->RetrieveRangeAtIndex(
+      object_count, entry, NULL, NULL)) << "FAILED: RetrieveRangeAtIndex set "
+                                        << set << " index " << object_count
+                                        << " (too large)";
+}
+
+// RunTests runs a series of test sets.
+void TestStaticRangeMap::RunTestCase(int test_case) {
+  // Maintain the range map in a pointer so that deletion can be meaningfully
+  // tested.
+  scoped_ptr<RMap> rmap(new RMap());
+
+  const RangeTest* range_tests = range_test_sets[test_case].range_tests;
+  unsigned int range_test_count = range_test_sets[test_case].range_test_count;
+
+  // Run the StoreRange test, which validates StoreRange and initializes
+  // the RangeMap with data for the RetrieveRange test.
+  int stored_count = 0;  // The number of ranges successfully stored
+  for (unsigned int range_test_index = 0;
+       range_test_index < range_test_count;
+       ++range_test_index) {
+    const RangeTest* range_test = &range_tests[range_test_index];
+    StoreTest(rmap.get(), range_test);
+
+    if (range_test->expect_storable)
+      ++stored_count;
+  }
+
+  scoped_array<char> memaddr(serializer_.Serialize(*rmap, NULL));
+  scoped_ptr<TestMap> static_range_map(new TestMap(memaddr.get()));
+
+  // The RangeMap's own count of objects should also match.
+  EXPECT_EQ(static_range_map->GetCount(), stored_count);
+
+  // Run the RetrieveRange test
+  for (unsigned int range_test_index = 0;
+       range_test_index < range_test_count;
+       ++range_test_index) {
+    const RangeTest* range_test = &range_tests[range_test_index];
+    RetrieveTest(static_range_map.get(), range_test);
+  }
+
+  RetrieveIndexTest(static_range_map.get(), test_case);
+}
+
+TEST_F(TestStaticRangeMap, TestCase0) {
+  int test_case = 0;
+  RunTestCase(test_case);
+}
+
+TEST_F(TestStaticRangeMap, TestCase1) {
+  int test_case = 1;
+  RunTestCase(test_case);
+}
+
+TEST_F(TestStaticRangeMap, TestCase2) {
+  int test_case = 2;
+  RunTestCase(test_case);
+}
+
+TEST_F(TestStaticRangeMap, TestCase3) {
+  int test_case = 3;
+  RunTestCase(test_case);
+}
+
+TEST_F(TestStaticRangeMap, RunTestCase0Again) {
+  int test_case = 0;
+  RunTestCase(test_case);
+}
+
+}  // namespace google_breakpad
+
+int main(int argc, char *argv[]) {
+  ::testing::InitGoogleTest(&argc, argv);
+
+  return RUN_ALL_TESTS();
+}
diff --git a/src/processor/synth_minidump.cc b/src/processor/synth_minidump.cc
index c25d421..cebc0a6 100644
--- a/src/processor/synth_minidump.cc
+++ b/src/processor/synth_minidump.cc
@@ -38,16 +38,16 @@
 namespace SynthMinidump {
 
 Section::Section(const Dump &dump)
-  : TestAssembler::Section(dump.endianness()) { }
+  : test_assembler::Section(dump.endianness()) { }
 
-void Section::CiteLocationIn(TestAssembler::Section *section) const {
+void Section::CiteLocationIn(test_assembler::Section *section) const {
   if (this)
     (*section).D32(size_).D32(file_offset_);
   else
     (*section).D32(0).D32(0);
 }
 
-void Stream::CiteStreamIn(TestAssembler::Section *section) const {
+void Stream::CiteStreamIn(test_assembler::Section *section) const {
   section->D32(type_);
   CiteLocationIn(section);
 }
@@ -114,11 +114,11 @@
     D16(*i);
 }
 
-void String::CiteStringIn(TestAssembler::Section *section) const {
+void String::CiteStringIn(test_assembler::Section *section) const {
   section->D32(file_offset_);
 }
 
-void Memory::CiteMemoryIn(TestAssembler::Section *section) const {
+void Memory::CiteMemoryIn(test_assembler::Section *section) const {
   section->D64(address_);
   CiteLocationIn(section);
 }
@@ -237,7 +237,7 @@
            Endianness endianness,
            u_int32_t version,
            u_int32_t date_time_stamp)
-    : TestAssembler::Section(endianness),
+    : test_assembler::Section(endianness),
       file_start_(0),
       stream_directory_(*this),
       stream_count_(0),
@@ -301,7 +301,7 @@
   // has the stream count and MDRVA.
   stream_count_label_ = stream_count_;
   stream_directory_rva_ = file_start_ + Size();
-  Append(static_cast<TestAssembler::Section &>(stream_directory_));
+  Append(static_cast<test_assembler::Section &>(stream_directory_));
 }
 
 } // namespace SynthMinidump
diff --git a/src/processor/synth_minidump.h b/src/processor/synth_minidump.h
index 690ec39..f09a68f 100644
--- a/src/processor/synth_minidump.h
+++ b/src/processor/synth_minidump.h
@@ -34,13 +34,13 @@
 // synth_minidump.h: Interface to SynthMinidump: fake minidump generator.
 //
 // We treat a minidump file as the concatenation of a bunch of
-// TestAssembler::Sections. The file header, stream directory,
+// test_assembler::Sections. The file header, stream directory,
 // streams, memory regions, strings, and so on --- each is a Section
 // that eventually gets appended to the minidump. Dump, Memory,
-// Context, Thread, and so on all inherit from TestAssembler::Section.
+// Context, Thread, and so on all inherit from test_assembler::Section.
 // For example:
 //
-//    using google_breakpad::TestAssembler::kLittleEndian;
+//    using google_breakpad::test_assembler::kLittleEndian;
 //    using google_breakpad::SynthMinidump::Context;
 //    using google_breakpad::SynthMinidump::Dump;
 //    using google_breakpad::SynthMinidump::Memory;
@@ -49,7 +49,7 @@
 //    Dump minidump(MD_NORMAL, kLittleEndian);
 //    
 //    Memory stack1(minidump, 0x569eb0a9);
-//    ... build contents of stack1 with TestAssembler::Section functions ...
+//    ... build contents of stack1 with test_assembler::Section functions ...
 //    
 //    MDRawContextX86 x86_context1;
 //    x86_context1.context_flags = MD_CONTEXT_X86;
@@ -69,7 +69,7 @@
 //    EXPECT_TRUE(minidump.GetContents(&contents));
 //    // contents now holds the bytes of a minidump file
 //
-// Because the TestAssembler classes let us write Label references to
+// Because the test_assembler classes let us write Label references to
 // sections before the Labels' values are known, this gives us
 // flexibility in how we put the dump together: minidump pieces can
 // hold the file offsets of other minidump pieces before the
@@ -103,12 +103,13 @@
 // memory list stream.
 //
 // If you forget to Add some Section, the Dump::GetContents call will
-// fail, as the TestAssembler::Labels used to cite the Section's
+// fail, as the test_assembler::Labels used to cite the Section's
 // contents from elsewhere will still be undefined.
 #ifndef PROCESSOR_SYNTH_MINIDUMP_H_
 #define PROCESSOR_SYNTH_MINIDUMP_H_
 
-#include <cassert>
+#include <assert.h>
+
 #include <iostream>
 #include <string>
 
@@ -121,18 +122,18 @@
 namespace SynthMinidump {
 
 using std::string;
-using TestAssembler::Endianness;
-using TestAssembler::kBigEndian;
-using TestAssembler::kLittleEndian;
-using TestAssembler::kUnsetEndian;
-using TestAssembler::Label;
+using test_assembler::Endianness;
+using test_assembler::kBigEndian;
+using test_assembler::kLittleEndian;
+using test_assembler::kUnsetEndian;
+using test_assembler::Label;
 
 class Dump;
 class Memory;
 class String;
 
-// A TestAssembler::Section which will be appended to a minidump.
-class Section: public TestAssembler::Section {
+// A test_assembler::Section which will be appended to a minidump.
+class Section: public test_assembler::Section {
  public:
   explicit Section(const Dump &dump);
 
@@ -144,7 +145,7 @@
   // bad, if such language exists. Having this function handle NULL
   // 'this' is convenient, but if it causes trouble, it's not hard to
   // do differently.)
-  void CiteLocationIn(TestAssembler::Section *section) const;
+  void CiteLocationIn(test_assembler::Section *section) const;
 
   // Note that this section's contents are complete, and that it has
   // been placed in the minidump file at OFFSET. The 'Add' member
@@ -164,11 +165,11 @@
 class Stream: public Section {
  public:
   // Create a stream of type TYPE.  You can append whatever contents
-  // you like to this stream using the TestAssembler::Section methods.
+  // you like to this stream using the test_assembler::Section methods.
   Stream(const Dump &dump, u_int32_t type) : Section(dump), type_(type) { }
 
   // Append an MDRawDirectory referring to this stream to SECTION.
-  void CiteStreamIn(TestAssembler::Section *section) const;
+  void CiteStreamIn(test_assembler::Section *section) const;
 
  private:
   // The type of this stream.
@@ -201,7 +202,7 @@
   String(const Dump &dump, const string &value);
 
   // Append an MDRVA referring to this string to SECTION.
-  void CiteStringIn(TestAssembler::Section *section) const;
+  void CiteStringIn(test_assembler::Section *section) const;
 };
 
 // A range of memory contents. 'Add'ing a memory range to a minidump
@@ -214,7 +215,7 @@
       : Section(dump), address_(address) { start() = address; }
 
   // Append an MDMemoryDescriptor referring to this memory range to SECTION.
-  void CiteMemoryIn(TestAssembler::Section *section) const;
+  void CiteMemoryIn(test_assembler::Section *section) const;
 
  private:
   // The process address from which these memory contents were taken.
@@ -296,10 +297,10 @@
   Label count_label_;
 };
 
-class Dump: public TestAssembler::Section {
+class Dump: public test_assembler::Section {
  public:
 
-  // Create a TestAssembler::Section containing a minidump file whose
+  // Create a test_assembler::Section containing a minidump file whose
   // header uses the given values. ENDIANNESS determines the
   // endianness of the signature; we set this section's default
   // endianness by this.
diff --git a/src/processor/synth_minidump_unittest.cc b/src/processor/synth_minidump_unittest.cc
index 888053b..adad4ae 100644
--- a/src/processor/synth_minidump_unittest.cc
+++ b/src/processor/synth_minidump_unittest.cc
@@ -50,9 +50,9 @@
 using google_breakpad::SynthMinidump::String;
 using google_breakpad::SynthMinidump::SystemInfo;
 using google_breakpad::SynthMinidump::Thread;
-using google_breakpad::TestAssembler::kBigEndian;
-using google_breakpad::TestAssembler::kLittleEndian;
-using google_breakpad::TestAssembler::Label;
+using google_breakpad::test_assembler::kBigEndian;
+using google_breakpad::test_assembler::kLittleEndian;
+using google_breakpad::test_assembler::Label;
 using std::string;
 
 TEST(Section, Simple) {
diff --git a/src/processor/testdata/ascii_read_av.dmp b/src/processor/testdata/ascii_read_av.dmp
new file mode 100755
index 0000000..3d2429a
--- /dev/null
+++ b/src/processor/testdata/ascii_read_av.dmp
Binary files differ
diff --git a/src/processor/testdata/ascii_read_av_block_write.dmp b/src/processor/testdata/ascii_read_av_block_write.dmp
new file mode 100755
index 0000000..265e2b7
--- /dev/null
+++ b/src/processor/testdata/ascii_read_av_block_write.dmp
Binary files differ
diff --git a/src/processor/testdata/ascii_read_av_clobber_write.dmp b/src/processor/testdata/ascii_read_av_clobber_write.dmp
new file mode 100755
index 0000000..f536c72
--- /dev/null
+++ b/src/processor/testdata/ascii_read_av_clobber_write.dmp
Binary files differ
diff --git a/src/processor/testdata/ascii_read_av_conditional.dmp b/src/processor/testdata/ascii_read_av_conditional.dmp
new file mode 100755
index 0000000..eba8f9e
--- /dev/null
+++ b/src/processor/testdata/ascii_read_av_conditional.dmp
Binary files differ
diff --git a/src/processor/testdata/ascii_read_av_then_jmp.dmp b/src/processor/testdata/ascii_read_av_then_jmp.dmp
new file mode 100755
index 0000000..1124f40
--- /dev/null
+++ b/src/processor/testdata/ascii_read_av_then_jmp.dmp
Binary files differ
diff --git a/src/processor/testdata/ascii_read_av_xchg_write.dmp b/src/processor/testdata/ascii_read_av_xchg_write.dmp
new file mode 100755
index 0000000..066ebf1
--- /dev/null
+++ b/src/processor/testdata/ascii_read_av_xchg_write.dmp
Binary files differ
diff --git a/src/processor/testdata/ascii_write_av.dmp b/src/processor/testdata/ascii_write_av.dmp
new file mode 100755
index 0000000..6f3e3bc
--- /dev/null
+++ b/src/processor/testdata/ascii_write_av.dmp
Binary files differ
diff --git a/src/processor/testdata/ascii_write_av_arg_to_call.dmp b/src/processor/testdata/ascii_write_av_arg_to_call.dmp
new file mode 100755
index 0000000..9c0a21c
--- /dev/null
+++ b/src/processor/testdata/ascii_write_av_arg_to_call.dmp
Binary files differ
diff --git a/src/processor/testdata/exec_av_on_stack.dmp b/src/processor/testdata/exec_av_on_stack.dmp
new file mode 100755
index 0000000..b783c43
--- /dev/null
+++ b/src/processor/testdata/exec_av_on_stack.dmp
Binary files differ
diff --git a/src/processor/testdata/linux_test_app.cc b/src/processor/testdata/linux_test_app.cc
index 9a6a194..18f0f62 100644
--- a/src/processor/testdata/linux_test_app.cc
+++ b/src/processor/testdata/linux_test_app.cc
@@ -39,13 +39,14 @@
 // generate an executable with STABS symbols (needs -m32), or -gdwarf-2 for one
 // with DWARF symbols (32- or 64-bit)
 
+#include <stdio.h>
 #include <sys/types.h>
 #include <unistd.h>
-#include <cstdio>
+
 #include <string>
 
-#include "common/linux/linux_syscall_support.h"
 #include "client/linux/handler/exception_handler.h"
+#include "third_party/lss/linux_syscall_support.h"
 
 namespace {
 
diff --git a/src/processor/testdata/minidump2.stackwalk.machine_readable.out b/src/processor/testdata/minidump2.stackwalk.machine_readable.out
index e158953..2f3b0f5 100644
--- a/src/processor/testdata/minidump2.stackwalk.machine_readable.out
+++ b/src/processor/testdata/minidump2.stackwalk.machine_readable.out
@@ -1,6 +1,6 @@
 OS|Windows NT|5.1.2600 Service Pack 2
 CPU|x86|GenuineIntel family 6 model 13 stepping 8|1
-Crash|EXCEPTION_ACCESS_VIOLATION|0x45|0
+Crash|EXCEPTION_ACCESS_VIOLATION_WRITE|0x45|0
 Module|test_app.exe||test_app.pdb|5A9832E5287241C1838ED98914E9B7FF1|0x00400000|0x0042cfff|1
 Module|dbghelp.dll|5.1.2600.2180|dbghelp.pdb|39559573E21B46F28E286923BE9E6A761|0x59a60000|0x59b00fff|0
 Module|imm32.dll|5.1.2600.2180|imm32.pdb|2C17A49C251B4C8EB9E2AD13D7D9EA162|0x76390000|0x763acfff|0
diff --git a/src/processor/testdata/minidump2.stackwalk.out b/src/processor/testdata/minidump2.stackwalk.out
index be081f4..5b98867 100644
--- a/src/processor/testdata/minidump2.stackwalk.out
+++ b/src/processor/testdata/minidump2.stackwalk.out
@@ -4,7 +4,7 @@
      GenuineIntel family 6 model 13 stepping 8
      1 CPU
 
-Crash reason:  EXCEPTION_ACCESS_VIOLATION
+Crash reason:  EXCEPTION_ACCESS_VIOLATION_WRITE
 Crash address: 0x45
 
 Thread 0 (crashed)
diff --git a/src/processor/testdata/module0.out b/src/processor/testdata/module0.out
new file mode 100644
index 0000000..72fb4da
--- /dev/null
+++ b/src/processor/testdata/module0.out
@@ -0,0 +1,22151 @@
+MODULE windows x86 5A9832E5287241C1838ED98914E9B7FF1 test_app.pdb
+FILE 1 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h
+FILE 2 c:\program files\microsoft visual studio 8\vc\include\typeinfo
+FILE 3 c:\breakpad\trunk\src\common\windows\guid_string.h
+FILE 4 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcdce.h
+FILE 5 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winreg.h
+FILE 6 c:\program files\microsoft visual studio 8\vc\platformsdk\include\objidl.h
+FILE 7 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wtypes.h
+FILE 8 c:\program files\microsoft visual studio 8\vc\platformsdk\include\tvout.h
+FILE 9 c:\program files\microsoft visual studio 8\vc\include\malloc.h
+FILE 10 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack2.h
+FILE 11 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winuser.h
+FILE 12 c:\breakpad\trunk\src\client\windows\handler\exception_handler.cc
+FILE 13 c:\program files\microsoft visual studio 8\vc\platformsdk\include\urlmon.h
+FILE 14 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wincon.h
+FILE 15 c:\program files\microsoft visual studio 8\vc\platformsdk\include\imm.h
+FILE 16 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcdcep.h
+FILE 17 c:\program files\microsoft visual studio 8\vc\include\xstring
+FILE 18 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winver.h
+FILE 19 c:\program files\microsoft visual studio 8\vc\include\xmemory
+FILE 20 c:\program files\microsoft visual studio 8\vc\include\new
+FILE 21 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack4.h
+FILE 22 c:\program files\microsoft visual studio 8\vc\platformsdk\include\reason.h
+FILE 23 c:\program files\microsoft visual studio 8\vc\include\vector
+FILE 24 c:\program files\microsoft visual studio 8\vc\include\memory
+FILE 25 c:\program files\microsoft visual studio 8\vc\include\wtime.inl
+FILE 26 c:\program files\microsoft visual studio 8\vc\include\iterator
+FILE 27 c:\program files\microsoft visual studio 8\vc\platformsdk\include\propidl.h
+FILE 28 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack1.h
+FILE 29 c:\program files\microsoft visual studio 8\vc\platformsdk\include\specstrings.h
+FILE 30 c:\program files\microsoft visual studio 8\vc\platformsdk\include\basetsd.h
+FILE 31 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winerror.h
+FILE 32 c:\program files\microsoft visual studio 8\vc\include\assert.h
+FILE 33 c:\program files\microsoft visual studio 8\vc\platformsdk\include\poppack.h
+FILE 34 c:\program files\microsoft visual studio 8\vc\include\cstdio
+FILE 35 c:\program files\microsoft visual studio 8\vc\include\stdio.h
+FILE 36 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnterr.h
+FILE 37 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcasync.h
+FILE 38 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnsi.h
+FILE 39 c:\program files\microsoft visual studio 8\vc\include\stdlib.h
+FILE 40 c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h
+FILE 41 c:\program files\microsoft visual studio 8\vc\include\limits.h
+FILE 42 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcndr.h
+FILE 43 c:\breakpad\trunk\src\client\windows\handler\exception_handler.h
+FILE 44 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnsip.h
+FILE 45 c:\program files\microsoft visual studio 8\vc\platformsdk\include\dbghelp.h
+FILE 46 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnetwk.h
+FILE 47 c:\program files\microsoft visual studio 8\vc\include\share.h
+FILE 48 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack8.h
+FILE 49 c:\program files\microsoft visual studio 8\vc\platformsdk\include\stralign.h
+FILE 50 c:\breakpad\trunk\src\google_breakpad\common\minidump_format.h
+FILE 51 c:\breakpad\trunk\src\google_breakpad\common\breakpad_types.h
+FILE 52 c:\program files\microsoft visual studio 8\vc\include\xdebug
+FILE 53 c:\program files\microsoft visual studio 8\vc\include\stdarg.h
+FILE 54 c:\program files\microsoft visual studio 8\vc\platformsdk\include\windef.h
+FILE 55 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsvc.h
+FILE 56 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wingdi.h
+FILE 57 c:\program files\microsoft visual studio 8\vc\include\xlocinfo
+FILE 58 c:\program files\microsoft visual studio 8\vc\include\xlocinfo.h
+FILE 59 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oleidl.h
+FILE 60 c:\program files\microsoft visual studio 8\vc\include\locale.h
+FILE 61 c:\program files\microsoft visual studio 8\vc\include\string
+FILE 62 c:\program files\microsoft visual studio 8\vc\include\istream
+FILE 63 c:\breakpad\trunk\src\common\windows\string_utils-inl.h
+FILE 64 c:\program files\microsoft visual studio 8\vc\include\ostream
+FILE 65 c:\program files\microsoft visual studio 8\vc\include\xutility
+FILE 66 c:\program files\microsoft visual studio 8\vc\include\wchar.h
+FILE 67 c:\program files\microsoft visual studio 8\vc\include\utility
+FILE 68 c:\program files\microsoft visual studio 8\vc\include\ios
+FILE 69 c:\program files\microsoft visual studio 8\vc\include\xlocnum
+FILE 70 c:\program files\microsoft visual studio 8\vc\include\iosfwd
+FILE 71 c:\program files\microsoft visual studio 8\vc\include\swprintf.inl
+FILE 72 c:\program files\microsoft visual studio 8\vc\platformsdk\include\guiddef.h
+FILE 73 c:\program files\microsoft visual studio 8\vc\include\cwchar
+FILE 74 c:\program files\microsoft visual studio 8\vc\include\climits
+FILE 75 c:\program files\microsoft visual studio 8\vc\include\crtdbg.h
+FILE 76 c:\program files\microsoft visual studio 8\vc\include\cstdlib
+FILE 77 c:\program files\microsoft visual studio 8\vc\include\streambuf
+FILE 78 c:\program files\microsoft visual studio 8\vc\include\xiosbase
+FILE 79 c:\program files\microsoft visual studio 8\vc\include\xlocale
+FILE 80 c:\program files\microsoft visual studio 8\vc\include\cstring
+FILE 81 c:\program files\microsoft visual studio 8\vc\platformsdk\include\mcx.h
+FILE 82 c:\program files\microsoft visual studio 8\vc\include\stdexcept
+FILE 83 c:\program files\microsoft visual studio 8\vc\include\exception
+FILE 84 c:\program files\microsoft visual studio 8\vc\include\xstddef
+FILE 85 c:\program files\microsoft visual studio 8\vc\platformsdk\include\objbase.h
+FILE 86 c:\program files\microsoft visual studio 8\vc\include\cstddef
+FILE 87 c:\program files\microsoft visual studio 8\vc\platformsdk\include\unknwn.h
+FILE 88 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpc.h
+FILE 89 c:\program files\microsoft visual studio 8\vc\include\stddef.h
+FILE 90 c:\program files\microsoft visual studio 8\vc\include\cassert
+FILE 91 c:\program files\microsoft visual studio 8\vc\platformsdk\include\ole2.h
+FILE 92 c:\program files\microsoft visual studio 8\vc\platformsdk\include\windows.h
+FILE 93 c:\program files\microsoft visual studio 8\vc\include\yvals.h
+FILE 94 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oleauto.h
+FILE 95 c:\program files\microsoft visual studio 8\vc\include\excpt.h
+FILE 96 c:\program files\microsoft visual studio 8\vc\include\use_ansi.h
+FILE 97 c:\program files\microsoft visual studio 8\vc\platformsdk\include\cguid.h
+FILE 98 c:\program files\microsoft visual studio 8\vc\include\crtdefs.h
+FILE 99 c:\program files\microsoft visual studio 8\vc\platformsdk\include\msxml.h
+FILE 100 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oaidl.h
+FILE 101 c:\program files\microsoft visual studio 8\vc\include\sal.h
+FILE 102 c:\program files\microsoft visual studio 8\vc\include\vadefs.h
+FILE 103 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h
+FILE 104 c:\program files\microsoft visual studio 8\vc\include\ctype.h
+FILE 105 c:\program files\microsoft visual studio 8\vc\include\eh.h
+FILE 106 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnls.h
+FILE 107 c:\program files\microsoft visual studio 8\vc\include\string.h
+FILE 108 c:\program files\microsoft visual studio 8\vc\include\ctype.h
+FILE 109 c:\program files\microsoft visual studio 8\vc\include\xutility
+FILE 110 c:\program files\microsoft visual studio 8\vc\include\utility
+FILE 111 c:\program files\microsoft visual studio 8\vc\include\iosfwd
+FILE 112 c:\program files\microsoft visual studio 8\vc\include\cwchar
+FILE 113 c:\program files\microsoft visual studio 8\vc\include\crtdbg.h
+FILE 114 c:\program files\microsoft visual studio 8\vc\include\stdexcept
+FILE 115 c:\program files\microsoft visual studio 8\vc\include\exception
+FILE 116 c:\program files\microsoft visual studio 8\vc\include\xstddef
+FILE 117 c:\program files\microsoft visual studio 8\vc\include\cstddef
+FILE 118 c:\program files\microsoft visual studio 8\vc\include\stddef.h
+FILE 119 c:\program files\microsoft visual studio 8\vc\include\eh.h
+FILE 120 c:\program files\microsoft visual studio 8\vc\include\streambuf
+FILE 121 c:\program files\microsoft visual studio 8\vc\include\xiosbase
+FILE 122 c:\program files\microsoft visual studio 8\vc\include\xlocale
+FILE 123 c:\program files\microsoft visual studio 8\vc\include\cstring
+FILE 124 c:\program files\microsoft visual studio 8\vc\include\string.h
+FILE 125 c:\program files\microsoft visual studio 8\vc\include\typeinfo
+FILE 126 c:\breakpad\trunk\src\common\windows\guid_string.cc
+FILE 127 c:\breakpad\trunk\src\common\windows\string_utils-inl.h
+FILE 128 c:\program files\microsoft visual studio 8\vc\include\stdarg.h
+FILE 129 c:\program files\microsoft visual studio 8\vc\include\string
+FILE 130 c:\program files\microsoft visual studio 8\vc\include\istream
+FILE 131 c:\program files\microsoft visual studio 8\vc\include\ostream
+FILE 132 c:\program files\microsoft visual studio 8\vc\include\ios
+FILE 133 c:\program files\microsoft visual studio 8\vc\include\xlocnum
+FILE 134 c:\program files\microsoft visual studio 8\vc\include\climits
+FILE 135 c:\program files\microsoft visual studio 8\vc\include\yvals.h
+FILE 136 c:\program files\microsoft visual studio 8\vc\include\use_ansi.h
+FILE 137 c:\program files\microsoft visual studio 8\vc\include\cstdlib
+FILE 138 c:\program files\microsoft visual studio 8\vc\include\stdlib.h
+FILE 139 c:\program files\microsoft visual studio 8\vc\include\malloc.h
+FILE 140 c:\breakpad\trunk\src\common\windows\guid_string.h
+FILE 141 c:\program files\microsoft visual studio 8\vc\platformsdk\include\guiddef.h
+FILE 142 c:\program files\microsoft visual studio 8\vc\include\share.h
+FILE 143 c:\program files\microsoft visual studio 8\vc\include\xstring
+FILE 144 c:\program files\microsoft visual studio 8\vc\include\xmemory
+FILE 145 c:\program files\microsoft visual studio 8\vc\include\new
+FILE 146 c:\program files\microsoft visual studio 8\vc\include\locale.h
+FILE 147 c:\program files\microsoft visual studio 8\vc\include\swprintf.inl
+FILE 148 c:\program files\microsoft visual studio 8\vc\include\limits.h
+FILE 149 c:\program files\microsoft visual studio 8\vc\include\wchar.h
+FILE 150 c:\program files\microsoft visual studio 8\vc\include\cstdio
+FILE 151 c:\program files\microsoft visual studio 8\vc\include\crtdefs.h
+FILE 152 c:\program files\microsoft visual studio 8\vc\include\stdio.h
+FILE 153 c:\program files\microsoft visual studio 8\vc\include\wtime.inl
+FILE 154 c:\program files\microsoft visual studio 8\vc\include\sal.h
+FILE 155 c:\program files\microsoft visual studio 8\vc\include\xdebug
+FILE 156 c:\program files\microsoft visual studio 8\vc\include\vadefs.h
+FILE 157 c:\program files\microsoft visual studio 8\vc\include\xlocinfo
+FILE 158 c:\program files\microsoft visual studio 8\vc\include\xlocinfo.h
+FILE 159 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnetwk.h
+FILE 160 c:\program files\microsoft visual studio 8\vc\platformsdk\include\urlmon.h
+FILE 161 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack8.h
+FILE 162 c:\program files\microsoft visual studio 8\vc\platformsdk\include\cderr.h
+FILE 163 c:\program files\microsoft visual studio 8\vc\platformsdk\include\shellapi.h
+FILE 164 c:\program files\microsoft visual studio 8\vc\platformsdk\include\dde.h
+FILE 165 c:\program files\microsoft visual studio 8\vc\include\vector
+FILE 166 c:\program files\microsoft visual studio 8\vc\include\stdio.h
+FILE 167 c:\program files\microsoft visual studio 8\vc\include\memory
+FILE 168 c:\program files\microsoft visual studio 8\vc\include\iterator
+FILE 169 c:\program files\microsoft visual studio 8\vc\include\malloc.h
+FILE 170 c:\program files\microsoft visual studio 8\vc\include\stdarg.h
+FILE 171 c:\program files\microsoft visual studio 8\vc\platformsdk\include\windef.h
+FILE 172 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wingdi.h
+FILE 173 c:\program files\microsoft visual studio 8\vc\platformsdk\include\imm.h
+FILE 174 c:\program files\microsoft visual studio 8\vc\platformsdk\include\mmsystem.h
+FILE 175 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winioctl.h
+FILE 176 c:\program files\microsoft visual studio 8\vc\platformsdk\include\guiddef.h
+FILE 177 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsmcrd.h
+FILE 178 c:\test_app.cc
+FILE 179 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oaidl.h
+FILE 180 c:\program files\microsoft visual studio 8\vc\platformsdk\include\nb30.h
+FILE 181 c:\program files\microsoft visual studio 8\vc\include\xstring
+FILE 182 c:\program files\microsoft visual studio 8\vc\include\xmemory
+FILE 183 c:\program files\microsoft visual studio 8\vc\include\new
+FILE 184 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oleidl.h
+FILE 185 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnls.h
+FILE 186 c:\breakpad\trunk\src\google_breakpad\common\minidump_format.h
+FILE 187 c:\program files\microsoft visual studio 8\vc\include\string.h
+FILE 188 c:\breakpad\trunk\src\google_breakpad\common\breakpad_types.h
+FILE 189 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h
+FILE 190 c:\program files\microsoft visual studio 8\vc\include\ctype.h
+FILE 191 c:\program files\microsoft visual studio 8\vc\include\wtime.inl
+FILE 192 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h
+FILE 193 c:\program files\microsoft visual studio 8\vc\platformsdk\include\propidl.h
+FILE 194 c:\breakpad\trunk\src\client\windows\handler\exception_handler.h
+FILE 195 c:\program files\microsoft visual studio 8\vc\include\stdlib.h
+FILE 196 c:\program files\microsoft visual studio 8\vc\include\swprintf.inl
+FILE 197 c:\program files\microsoft visual studio 8\vc\include\limits.h
+FILE 198 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winreg.h
+FILE 199 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpc.h
+FILE 200 c:\program files\microsoft visual studio 8\vc\platformsdk\include\ole2.h
+FILE 201 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winscard.h
+FILE 202 c:\program files\microsoft visual studio 8\vc\platformsdk\include\objbase.h
+FILE 203 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wtypes.h
+FILE 204 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcndr.h
+FILE 205 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcdce.h
+FILE 206 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnsip.h
+FILE 207 c:\program files\microsoft visual studio 8\vc\include\share.h
+FILE 208 c:\program files\microsoft visual studio 8\vc\platformsdk\include\tvout.h
+FILE 209 c:\program files\microsoft visual studio 8\vc\include\use_ansi.h
+FILE 210 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winefs.h
+FILE 211 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack2.h
+FILE 212 c:\program files\microsoft visual studio 8\vc\platformsdk\include\commdlg.h
+FILE 213 c:\program files\microsoft visual studio 8\vc\platformsdk\include\unknwn.h
+FILE 214 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsock.h
+FILE 215 c:\program files\microsoft visual studio 8\vc\platformsdk\include\stralign.h
+FILE 216 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winuser.h
+FILE 217 c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h
+FILE 218 c:\program files\microsoft visual studio 8\vc\include\xdebug
+FILE 219 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsvc.h
+FILE 220 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wincon.h
+FILE 221 c:\program files\microsoft visual studio 8\vc\include\xlocinfo
+FILE 222 c:\program files\microsoft visual studio 8\vc\include\xlocinfo.h
+FILE 223 c:\program files\microsoft visual studio 8\vc\include\locale.h
+FILE 224 c:\program files\microsoft visual studio 8\vc\platformsdk\include\cguid.h
+FILE 225 c:\program files\microsoft visual studio 8\vc\include\string
+FILE 226 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winver.h
+FILE 227 c:\program files\microsoft visual studio 8\vc\include\istream
+FILE 228 c:\program files\microsoft visual studio 8\vc\include\ostream
+FILE 229 c:\program files\microsoft visual studio 8\vc\include\xutility
+FILE 230 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winperf.h
+FILE 231 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack4.h
+FILE 232 c:\program files\microsoft visual studio 8\vc\include\utility
+FILE 233 c:\program files\microsoft visual studio 8\vc\include\ios
+FILE 234 c:\program files\microsoft visual studio 8\vc\include\xlocnum
+FILE 235 c:\program files\microsoft visual studio 8\vc\include\crtdbg.h
+FILE 236 c:\program files\microsoft visual studio 8\vc\include\iosfwd
+FILE 237 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcdcep.h
+FILE 238 c:\program files\microsoft visual studio 8\vc\include\cwchar
+FILE 239 c:\program files\microsoft visual studio 8\vc\include\climits
+FILE 240 c:\program files\microsoft visual studio 8\vc\include\wchar.h
+FILE 241 c:\program files\microsoft visual studio 8\vc\include\cstdlib
+FILE 242 c:\program files\microsoft visual studio 8\vc\platformsdk\include\mcx.h
+FILE 243 c:\program files\microsoft visual studio 8\vc\include\streambuf
+FILE 244 c:\program files\microsoft visual studio 8\vc\include\xiosbase
+FILE 245 c:\program files\microsoft visual studio 8\vc\platformsdk\include\reason.h
+FILE 246 c:\program files\microsoft visual studio 8\vc\include\xlocale
+FILE 247 c:\program files\microsoft visual studio 8\vc\platformsdk\include\dlgs.h
+FILE 248 c:\program files\microsoft visual studio 8\vc\include\cstring
+FILE 249 c:\program files\microsoft visual studio 8\vc\include\stdexcept
+FILE 250 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack1.h
+FILE 251 c:\program files\microsoft visual studio 8\vc\include\exception
+FILE 252 c:\program files\microsoft visual studio 8\vc\include\xstddef
+FILE 253 c:\program files\microsoft visual studio 8\vc\platformsdk\include\specstrings.h
+FILE 254 c:\program files\microsoft visual studio 8\vc\include\cstddef
+FILE 255 c:\program files\microsoft visual studio 8\vc\platformsdk\include\basetsd.h
+FILE 256 c:\program files\microsoft visual studio 8\vc\include\stddef.h
+FILE 257 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winerror.h
+FILE 258 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wincrypt.h
+FILE 259 c:\program files\microsoft visual studio 8\vc\platformsdk\include\poppack.h
+FILE 260 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winspool.h
+FILE 261 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oleauto.h
+FILE 262 c:\program files\microsoft visual studio 8\vc\platformsdk\include\prsht.h
+FILE 263 c:\program files\microsoft visual studio 8\vc\platformsdk\include\objidl.h
+FILE 264 c:\program files\microsoft visual studio 8\vc\include\cstdio
+FILE 265 c:\program files\microsoft visual studio 8\vc\include\yvals.h
+FILE 266 c:\program files\microsoft visual studio 8\vc\include\eh.h
+FILE 267 c:\program files\microsoft visual studio 8\vc\platformsdk\include\lzexpand.h
+FILE 268 c:\program files\microsoft visual studio 8\vc\platformsdk\include\ddeml.h
+FILE 269 c:\program files\microsoft visual studio 8\vc\include\crtdefs.h
+FILE 270 c:\program files\microsoft visual studio 8\vc\include\sal.h
+FILE 271 c:\program files\microsoft visual studio 8\vc\include\vadefs.h
+FILE 272 c:\program files\microsoft visual studio 8\vc\platformsdk\include\dbghelp.h
+FILE 273 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnterr.h
+FILE 274 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcasync.h
+FILE 275 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnsi.h
+FILE 276 c:\program files\microsoft visual studio 8\vc\include\typeinfo
+FILE 277 c:\program files\microsoft visual studio 8\vc\platformsdk\include\windows.h
+FILE 278 c:\program files\microsoft visual studio 8\vc\include\excpt.h
+FILE 279 c:\program files\microsoft visual studio 8\vc\platformsdk\include\msxml.h
+FILE 280 f:\sp\vctools\crt_bld\self_x86\crt\src\xdebug
+FILE 281 f:\sp\vctools\crt_bld\self_x86\crt\src\streambuf
+FILE 282 f:\sp\vctools\crt_bld\self_x86\crt\src\xiosbase
+FILE 283 f:\sp\vctools\crt_bld\self_x86\crt\src\xlocale
+FILE 284 f:\sp\vctools\crt_bld\self_x86\crt\src\cstring
+FILE 285 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 286 f:\sp\vctools\crt_bld\self_x86\crt\src\xlocinfo
+FILE 287 f:\sp\vctools\crt_bld\self_x86\crt\src\xlocinfo.h
+FILE 288 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 289 f:\sp\vctools\crt_bld\self_x86\crt\src\share.h
+FILE 290 f:\sp\vctools\crt_bld\self_x86\crt\src\use_ansi.h
+FILE 291 f:\sp\vctools\crt_bld\self_x86\crt\src\string.cpp
+FILE 292 f:\sp\vctools\crt_bld\self_x86\crt\src\typeinfo
+FILE 293 f:\sp\vctools\crt_bld\self_x86\crt\src\xutility
+FILE 294 f:\sp\vctools\crt_bld\self_x86\crt\src\utility
+FILE 295 f:\sp\vctools\crt_bld\self_x86\crt\src\iosfwd
+FILE 296 f:\sp\vctools\crt_bld\self_x86\crt\src\cwchar
+FILE 297 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 298 f:\sp\vctools\crt_bld\self_x86\crt\src\stdexcept
+FILE 299 f:\sp\vctools\crt_bld\self_x86\crt\src\exception
+FILE 300 f:\sp\vctools\crt_bld\self_x86\crt\src\xstddef
+FILE 301 f:\sp\vctools\crt_bld\self_x86\crt\src\cstddef
+FILE 302 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 303 f:\sp\vctools\crt_bld\self_x86\crt\src\istream
+FILE 304 f:\sp\vctools\crt_bld\self_x86\crt\src\ostream
+FILE 305 f:\sp\vctools\crt_bld\self_x86\crt\src\ios
+FILE 306 f:\sp\vctools\crt_bld\self_x86\crt\src\xlocnum
+FILE 307 f:\sp\vctools\crt_bld\self_x86\crt\src\eh.h
+FILE 308 f:\sp\vctools\crt_bld\self_x86\crt\src\cstdlib
+FILE 309 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 310 f:\sp\vctools\crt_bld\self_x86\crt\src\climits
+FILE 311 f:\sp\vctools\crt_bld\self_x86\crt\src\yvals.h
+FILE 312 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 313 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 314 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 315 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 316 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 317 f:\sp\vctools\crt_bld\self_x86\crt\src\cstdio
+FILE 318 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 319 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 320 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 321 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 322 f:\sp\public\sdk\inc\ddbanned.h
+FILE 323 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 324 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 325 f:\sp\vctools\crt_bld\self_x86\crt\src\xstring
+FILE 326 f:\sp\vctools\crt_bld\self_x86\crt\src\xmemory
+FILE 327 f:\sp\vctools\crt_bld\self_x86\crt\src\new
+FILE 328 f:\sp\public\sdk\inc\reason.h
+FILE 329 f:\sp\public\sdk\inc\wincon.h
+FILE 330 f:\sp\public\sdk\inc\pshpack2.h
+FILE 331 f:\sp\public\sdk\inc\mcx.h
+FILE 332 f:\sp\public\sdk\inc\winuser.h
+FILE 333 f:\sp\public\sdk\inc\winnls.h
+FILE 334 f:\sp\public\sdk\inc\guiddef.h
+FILE 335 f:\sp\public\sdk\inc\specstrings.h
+FILE 336 f:\sp\public\sdk\inc\basetsd.h
+FILE 337 f:\sp\public\sdk\inc\stralign.h
+FILE 338 f:\sp\public\sdk\inc\tvout.h
+FILE 339 f:\sp\public\sdk\inc\winsvc.h
+FILE 340 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 341 f:\sp\public\sdk\inc\wingdi.h
+FILE 342 f:\sp\public\sdk\inc\pshpack4.h
+FILE 343 f:\sp\public\sdk\inc\poppack.h
+FILE 344 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h
+FILE 345 f:\sp\public\sdk\inc\winnetwk.h
+FILE 346 f:\sp\public\sdk\inc\imm.h
+FILE 347 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 348 f:\sp\public\sdk\inc\windef.h
+FILE 349 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h
+FILE 350 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\tran\i386\cpu_disp.c
+FILE 351 f:\sp\public\sdk\inc\pshpack1.h
+FILE 352 f:\sp\public\sdk\inc\winver.h
+FILE 353 f:\sp\public\sdk\inc\windows.h
+FILE 354 f:\sp\public\sdk\inc\winnt.h
+FILE 355 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 356 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 357 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 358 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 359 f:\sp\public\sdk\inc\ddbanned.h
+FILE 360 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 361 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 362 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h
+FILE 363 f:\sp\public\sdk\inc\winreg.h
+FILE 364 f:\sp\public\sdk\inc\winbase.h
+FILE 365 f:\sp\public\sdk\inc\winerror.h
+FILE 366 f:\sp\public\sdk\inc\pshpack8.h
+FILE 367 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h
+FILE 368 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h
+FILE 369 f:\sp\public\sdk\inc\reason.h
+FILE 370 f:\sp\public\sdk\inc\wincon.h
+FILE 371 f:\sp\public\sdk\inc\pshpack2.h
+FILE 372 f:\sp\public\sdk\inc\mcx.h
+FILE 373 f:\sp\public\sdk\inc\winuser.h
+FILE 374 f:\sp\public\sdk\inc\winnls.h
+FILE 375 f:\sp\public\sdk\inc\guiddef.h
+FILE 376 f:\sp\public\sdk\inc\specstrings.h
+FILE 377 f:\sp\public\sdk\inc\basetsd.h
+FILE 378 f:\sp\public\sdk\inc\stralign.h
+FILE 379 f:\sp\public\sdk\inc\tvout.h
+FILE 380 f:\sp\public\sdk\inc\winsvc.h
+FILE 381 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 382 f:\sp\public\sdk\inc\wingdi.h
+FILE 383 f:\sp\public\sdk\inc\pshpack4.h
+FILE 384 f:\sp\public\sdk\inc\poppack.h
+FILE 385 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h
+FILE 386 f:\sp\public\sdk\inc\winnetwk.h
+FILE 387 f:\sp\public\sdk\inc\imm.h
+FILE 388 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 389 f:\sp\public\sdk\inc\windef.h
+FILE 390 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h
+FILE 391 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\tran\i386\mathfcns.c
+FILE 392 f:\sp\public\sdk\inc\pshpack1.h
+FILE 393 f:\sp\public\sdk\inc\winver.h
+FILE 394 f:\sp\public\sdk\inc\windows.h
+FILE 395 f:\sp\public\sdk\inc\winnt.h
+FILE 396 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 397 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 398 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 399 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 400 f:\sp\public\sdk\inc\ddbanned.h
+FILE 401 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 402 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 403 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h
+FILE 404 f:\sp\public\sdk\inc\winreg.h
+FILE 405 f:\sp\public\sdk\inc\winbase.h
+FILE 406 f:\sp\public\sdk\inc\winerror.h
+FILE 407 f:\sp\public\sdk\inc\pshpack8.h
+FILE 408 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h
+FILE 409 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h
+FILE 410 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 411 f:\sp\public\sdk\inc\winreg.h
+FILE 412 f:\sp\public\sdk\inc\winbase.h
+FILE 413 f:\sp\public\sdk\inc\winerror.h
+FILE 414 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 415 f:\sp\public\sdk\inc\windef.h
+FILE 416 f:\sp\vctools\crt_bld\self_x86\crt\src\ctime.h
+FILE 417 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 418 f:\sp\vctools\crt_bld\self_x86\crt\src\time.h
+FILE 419 f:\sp\public\sdk\inc\pshpack8.h
+FILE 420 f:\sp\public\sdk\inc\reason.h
+FILE 421 f:\sp\public\sdk\inc\wincon.h
+FILE 422 f:\sp\vctools\crt_bld\self_x86\crt\src\time.inl
+FILE 423 f:\sp\public\sdk\inc\pshpack2.h
+FILE 424 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 425 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 426 f:\sp\public\sdk\inc\mcx.h
+FILE 427 f:\sp\public\sdk\inc\winuser.h
+FILE 428 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 429 f:\sp\public\sdk\inc\winnls.h
+FILE 430 f:\sp\public\sdk\inc\guiddef.h
+FILE 431 f:\sp\public\sdk\inc\stralign.h
+FILE 432 f:\sp\public\sdk\inc\winnt.h
+FILE 433 f:\sp\public\sdk\inc\specstrings.h
+FILE 434 f:\sp\public\sdk\inc\basetsd.h
+FILE 435 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 436 f:\sp\public\sdk\inc\tvout.h
+FILE 437 f:\sp\public\sdk\inc\winsvc.h
+FILE 438 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 439 f:\sp\public\sdk\inc\wingdi.h
+FILE 440 f:\sp\vctools\crt_bld\self_x86\crt\src\tzset.c
+FILE 441 f:\sp\public\sdk\inc\pshpack4.h
+FILE 442 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 443 f:\sp\public\sdk\inc\poppack.h
+FILE 444 f:\sp\public\sdk\inc\winnetwk.h
+FILE 445 f:\sp\public\sdk\inc\imm.h
+FILE 446 f:\sp\public\sdk\inc\ddbanned.h
+FILE 447 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 448 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 449 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 450 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 451 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 452 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 453 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 454 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 455 f:\sp\public\sdk\inc\windows.h
+FILE 456 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 457 f:\sp\public\sdk\inc\pshpack1.h
+FILE 458 f:\sp\public\sdk\inc\winver.h
+FILE 459 f:\sp\vctools\crt_bld\self_x86\crt\src\time.inl
+FILE 460 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 461 f:\sp\public\sdk\inc\winnt.h
+FILE 462 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 463 f:\sp\public\sdk\inc\winreg.h
+FILE 464 f:\sp\public\sdk\inc\winbase.h
+FILE 465 f:\sp\public\sdk\inc\winerror.h
+FILE 466 f:\sp\public\sdk\inc\pshpack8.h
+FILE 467 f:\sp\public\sdk\inc\reason.h
+FILE 468 f:\sp\public\sdk\inc\wincon.h
+FILE 469 f:\sp\public\sdk\inc\pshpack2.h
+FILE 470 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 471 f:\sp\public\sdk\inc\mcx.h
+FILE 472 f:\sp\public\sdk\inc\winuser.h
+FILE 473 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 474 f:\sp\public\sdk\inc\winnls.h
+FILE 475 f:\sp\public\sdk\inc\guiddef.h
+FILE 476 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 477 f:\sp\public\sdk\inc\stralign.h
+FILE 478 f:\sp\public\sdk\inc\specstrings.h
+FILE 479 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 480 f:\sp\public\sdk\inc\basetsd.h
+FILE 481 f:\sp\public\sdk\inc\windows.h
+FILE 482 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 483 f:\sp\public\sdk\inc\tvout.h
+FILE 484 f:\sp\public\sdk\inc\winsvc.h
+FILE 485 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 486 f:\sp\public\sdk\inc\wingdi.h
+FILE 487 f:\sp\vctools\crt_bld\self_x86\crt\src\timeset.c
+FILE 488 f:\sp\public\sdk\inc\pshpack4.h
+FILE 489 f:\sp\public\sdk\inc\poppack.h
+FILE 490 f:\sp\public\sdk\inc\winnetwk.h
+FILE 491 f:\sp\public\sdk\inc\imm.h
+FILE 492 f:\sp\public\sdk\inc\ddbanned.h
+FILE 493 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 494 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 495 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 496 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 497 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 498 f:\sp\public\sdk\inc\windef.h
+FILE 499 f:\sp\public\sdk\inc\pshpack1.h
+FILE 500 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 501 f:\sp\vctools\crt_bld\self_x86\crt\src\time.h
+FILE 502 f:\sp\public\sdk\inc\winver.h
+FILE 503 f:\sp\public\sdk\inc\wincon.h
+FILE 504 f:\sp\vctools\crt_bld\self_x86\crt\src\time.h
+FILE 505 f:\sp\public\sdk\inc\imm.h
+FILE 506 f:\sp\public\sdk\inc\winbase.h
+FILE 507 f:\sp\public\sdk\inc\wingdi.h
+FILE 508 f:\sp\public\sdk\inc\winver.h
+FILE 509 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 510 f:\sp\public\sdk\inc\windows.h
+FILE 511 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 512 f:\sp\public\sdk\inc\pshpack2.h
+FILE 513 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 514 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 515 f:\sp\public\sdk\inc\reason.h
+FILE 516 f:\sp\vctools\crt_bld\self_x86\crt\src\strftime.c
+FILE 517 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 518 f:\sp\public\sdk\inc\specstrings.h
+FILE 519 f:\sp\public\sdk\inc\basetsd.h
+FILE 520 f:\sp\public\sdk\inc\pshpack4.h
+FILE 521 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 522 f:\sp\public\sdk\inc\winnetwk.h
+FILE 523 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 524 f:\sp\public\sdk\inc\stralign.h
+FILE 525 f:\sp\vctools\crt_bld\self_x86\crt\src\time.inl
+FILE 526 f:\sp\public\sdk\inc\poppack.h
+FILE 527 f:\sp\public\sdk\inc\winsvc.h
+FILE 528 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 529 f:\sp\public\sdk\inc\windef.h
+FILE 530 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 531 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 532 f:\sp\public\sdk\inc\winuser.h
+FILE 533 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 534 f:\sp\public\sdk\inc\mcx.h
+FILE 535 f:\sp\public\sdk\inc\pshpack8.h
+FILE 536 f:\sp\public\sdk\inc\guiddef.h
+FILE 537 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 538 f:\sp\public\sdk\inc\winnt.h
+FILE 539 f:\sp\public\sdk\inc\winnls.h
+FILE 540 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 541 f:\sp\public\sdk\inc\pshpack1.h
+FILE 542 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 543 f:\sp\public\sdk\inc\winerror.h
+FILE 544 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 545 f:\sp\public\sdk\inc\winreg.h
+FILE 546 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 547 f:\sp\public\sdk\inc\ddbanned.h
+FILE 548 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 549 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 550 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 551 f:\sp\public\sdk\inc\tvout.h
+FILE 552 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 553 f:\sp\public\sdk\inc\poppack.h
+FILE 554 f:\sp\public\sdk\inc\winnetwk.h
+FILE 555 f:\sp\public\sdk\inc\imm.h
+FILE 556 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 557 f:\sp\public\sdk\inc\windef.h
+FILE 558 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 559 f:\sp\public\sdk\inc\pshpack1.h
+FILE 560 f:\sp\public\sdk\inc\winver.h
+FILE 561 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 562 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 563 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 564 f:\sp\public\sdk\inc\winnt.h
+FILE 565 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 566 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 567 f:\sp\public\sdk\inc\winreg.h
+FILE 568 f:\sp\vctools\crt_bld\self_x86\crt\src\days.c
+FILE 569 f:\sp\public\sdk\inc\winbase.h
+FILE 570 f:\sp\public\sdk\inc\winerror.h
+FILE 571 f:\sp\public\sdk\inc\pshpack8.h
+FILE 572 f:\sp\public\sdk\inc\reason.h
+FILE 573 f:\sp\public\sdk\inc\wincon.h
+FILE 574 f:\sp\public\sdk\inc\ddbanned.h
+FILE 575 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 576 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 577 f:\sp\public\sdk\inc\pshpack2.h
+FILE 578 f:\sp\public\sdk\inc\mcx.h
+FILE 579 f:\sp\public\sdk\inc\winuser.h
+FILE 580 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 581 f:\sp\public\sdk\inc\winnls.h
+FILE 582 f:\sp\public\sdk\inc\guiddef.h
+FILE 583 f:\sp\public\sdk\inc\windows.h
+FILE 584 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 585 f:\sp\public\sdk\inc\specstrings.h
+FILE 586 f:\sp\public\sdk\inc\basetsd.h
+FILE 587 f:\sp\public\sdk\inc\stralign.h
+FILE 588 f:\sp\public\sdk\inc\tvout.h
+FILE 589 f:\sp\public\sdk\inc\winsvc.h
+FILE 590 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 591 f:\sp\public\sdk\inc\wingdi.h
+FILE 592 f:\sp\public\sdk\inc\pshpack4.h
+FILE 593 f:\sp\public\sdk\inc\wincon.h
+FILE 594 f:\sp\public\sdk\inc\imm.h
+FILE 595 f:\sp\public\sdk\inc\winbase.h
+FILE 596 f:\sp\public\sdk\inc\wingdi.h
+FILE 597 f:\sp\public\sdk\inc\winver.h
+FILE 598 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 599 f:\sp\public\sdk\inc\windows.h
+FILE 600 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 601 f:\sp\public\sdk\inc\pshpack2.h
+FILE 602 f:\sp\public\sdk\inc\reason.h
+FILE 603 f:\sp\vctools\crt_bld\self_x86\crt\src\strnicol.c
+FILE 604 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 605 f:\sp\public\sdk\inc\specstrings.h
+FILE 606 f:\sp\public\sdk\inc\basetsd.h
+FILE 607 f:\sp\public\sdk\inc\pshpack4.h
+FILE 608 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 609 f:\sp\public\sdk\inc\winnetwk.h
+FILE 610 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 611 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 612 f:\sp\public\sdk\inc\stralign.h
+FILE 613 f:\sp\public\sdk\inc\poppack.h
+FILE 614 f:\sp\public\sdk\inc\winsvc.h
+FILE 615 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 616 f:\sp\public\sdk\inc\windef.h
+FILE 617 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 618 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 619 f:\sp\public\sdk\inc\winuser.h
+FILE 620 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 621 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 622 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 623 f:\sp\public\sdk\inc\mcx.h
+FILE 624 f:\sp\public\sdk\inc\pshpack8.h
+FILE 625 f:\sp\public\sdk\inc\guiddef.h
+FILE 626 f:\sp\public\sdk\inc\winnt.h
+FILE 627 f:\sp\public\sdk\inc\winnls.h
+FILE 628 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 629 f:\sp\public\sdk\inc\pshpack1.h
+FILE 630 f:\sp\public\sdk\inc\winerror.h
+FILE 631 f:\sp\public\sdk\inc\winreg.h
+FILE 632 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 633 f:\sp\public\sdk\inc\ddbanned.h
+FILE 634 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 635 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 636 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 637 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 638 f:\sp\public\sdk\inc\tvout.h
+FILE 639 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 640 f:\sp\public\sdk\inc\mcx.h
+FILE 641 f:\sp\public\sdk\inc\pshpack8.h
+FILE 642 f:\sp\public\sdk\inc\winnt.h
+FILE 643 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 644 f:\sp\public\sdk\inc\specstrings.h
+FILE 645 f:\sp\public\sdk\inc\basetsd.h
+FILE 646 f:\sp\public\sdk\inc\winnls.h
+FILE 647 f:\sp\public\sdk\inc\pshpack1.h
+FILE 648 f:\sp\public\sdk\inc\winerror.h
+FILE 649 f:\sp\public\sdk\inc\winreg.h
+FILE 650 f:\sp\vctools\crt_bld\self_x86\crt\src\strnicmp.c
+FILE 651 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 652 f:\sp\public\sdk\inc\tvout.h
+FILE 653 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 654 f:\sp\public\sdk\inc\wincon.h
+FILE 655 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 656 f:\sp\public\sdk\inc\imm.h
+FILE 657 f:\sp\public\sdk\inc\guiddef.h
+FILE 658 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 659 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 660 f:\sp\public\sdk\inc\winbase.h
+FILE 661 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 662 f:\sp\public\sdk\inc\wingdi.h
+FILE 663 f:\sp\public\sdk\inc\windows.h
+FILE 664 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 665 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 666 f:\sp\public\sdk\inc\winver.h
+FILE 667 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 668 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 669 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 670 f:\sp\public\sdk\inc\pshpack2.h
+FILE 671 f:\sp\public\sdk\inc\reason.h
+FILE 672 f:\sp\public\sdk\inc\pshpack4.h
+FILE 673 f:\sp\public\sdk\inc\winnetwk.h
+FILE 674 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 675 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 676 f:\sp\public\sdk\inc\stralign.h
+FILE 677 f:\sp\public\sdk\inc\windef.h
+FILE 678 f:\sp\public\sdk\inc\poppack.h
+FILE 679 f:\sp\public\sdk\inc\winsvc.h
+FILE 680 f:\sp\public\sdk\inc\ddbanned.h
+FILE 681 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 682 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 683 f:\sp\public\sdk\inc\winuser.h
+FILE 684 f:\sp\public\sdk\inc\mcx.h
+FILE 685 f:\sp\public\sdk\inc\pshpack8.h
+FILE 686 f:\sp\public\sdk\inc\winnt.h
+FILE 687 f:\sp\public\sdk\inc\specstrings.h
+FILE 688 f:\sp\public\sdk\inc\basetsd.h
+FILE 689 f:\sp\public\sdk\inc\winnls.h
+FILE 690 f:\sp\public\sdk\inc\pshpack1.h
+FILE 691 f:\sp\public\sdk\inc\winerror.h
+FILE 692 f:\sp\public\sdk\inc\winreg.h
+FILE 693 f:\sp\vctools\crt_bld\self_x86\crt\src\stricmp.c
+FILE 694 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 695 f:\sp\public\sdk\inc\tvout.h
+FILE 696 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 697 f:\sp\public\sdk\inc\wincon.h
+FILE 698 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 699 f:\sp\public\sdk\inc\imm.h
+FILE 700 f:\sp\public\sdk\inc\guiddef.h
+FILE 701 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 702 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 703 f:\sp\public\sdk\inc\winbase.h
+FILE 704 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 705 f:\sp\public\sdk\inc\wingdi.h
+FILE 706 f:\sp\public\sdk\inc\windows.h
+FILE 707 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 708 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 709 f:\sp\public\sdk\inc\winver.h
+FILE 710 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 711 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 712 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 713 f:\sp\public\sdk\inc\pshpack2.h
+FILE 714 f:\sp\public\sdk\inc\reason.h
+FILE 715 f:\sp\public\sdk\inc\pshpack4.h
+FILE 716 f:\sp\public\sdk\inc\winnetwk.h
+FILE 717 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 718 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 719 f:\sp\public\sdk\inc\stralign.h
+FILE 720 f:\sp\public\sdk\inc\windef.h
+FILE 721 f:\sp\public\sdk\inc\poppack.h
+FILE 722 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 723 f:\sp\public\sdk\inc\winsvc.h
+FILE 724 f:\sp\public\sdk\inc\ddbanned.h
+FILE 725 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 726 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 727 f:\sp\public\sdk\inc\winuser.h
+FILE 728 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 729 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 730 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 731 f:\sp\vctools\crt_bld\self_x86\crt\src\wcslen.c
+FILE 732 f:\sp\public\sdk\inc\ddbanned.h
+FILE 733 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 734 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 735 f:\sp\public\sdk\inc\winnt.h
+FILE 736 f:\sp\public\sdk\inc\pshpack4.h
+FILE 737 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 738 f:\sp\public\sdk\inc\poppack.h
+FILE 739 f:\sp\vctools\crt_bld\self_x86\crt\src\tcsncpy_s.inl
+FILE 740 f:\sp\public\sdk\inc\winnetwk.h
+FILE 741 f:\sp\public\sdk\inc\imm.h
+FILE 742 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 743 f:\sp\public\sdk\inc\pshpack1.h
+FILE 744 f:\sp\public\sdk\inc\winver.h
+FILE 745 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h
+FILE 746 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 747 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 748 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 749 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 750 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 751 f:\sp\public\sdk\inc\guiddef.h
+FILE 752 f:\sp\public\sdk\inc\windows.h
+FILE 753 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 754 f:\sp\public\sdk\inc\specstrings.h
+FILE 755 f:\sp\public\sdk\inc\basetsd.h
+FILE 756 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 757 f:\sp\public\sdk\inc\winreg.h
+FILE 758 f:\sp\vctools\crt_bld\self_x86\crt\src\strncpy_s.c
+FILE 759 f:\sp\public\sdk\inc\winbase.h
+FILE 760 f:\sp\public\sdk\inc\winerror.h
+FILE 761 f:\sp\public\sdk\inc\pshpack8.h
+FILE 762 f:\sp\public\sdk\inc\reason.h
+FILE 763 f:\sp\public\sdk\inc\wincon.h
+FILE 764 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 765 f:\sp\public\sdk\inc\ddbanned.h
+FILE 766 f:\sp\public\sdk\inc\windef.h
+FILE 767 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 768 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 769 f:\sp\public\sdk\inc\pshpack2.h
+FILE 770 f:\sp\public\sdk\inc\mcx.h
+FILE 771 f:\sp\public\sdk\inc\winuser.h
+FILE 772 f:\sp\public\sdk\inc\winnls.h
+FILE 773 f:\sp\public\sdk\inc\stralign.h
+FILE 774 f:\sp\public\sdk\inc\tvout.h
+FILE 775 f:\sp\public\sdk\inc\winsvc.h
+FILE 776 f:\sp\public\sdk\inc\wingdi.h
+FILE 777 f:\sp\public\sdk\inc\winnt.h
+FILE 778 f:\sp\public\sdk\inc\pshpack4.h
+FILE 779 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 780 f:\sp\public\sdk\inc\poppack.h
+FILE 781 f:\sp\vctools\crt_bld\self_x86\crt\src\tcscpy_s.inl
+FILE 782 f:\sp\public\sdk\inc\winnetwk.h
+FILE 783 f:\sp\public\sdk\inc\imm.h
+FILE 784 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 785 f:\sp\public\sdk\inc\pshpack1.h
+FILE 786 f:\sp\public\sdk\inc\winver.h
+FILE 787 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h
+FILE 788 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 789 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 790 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 791 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 792 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 793 f:\sp\public\sdk\inc\guiddef.h
+FILE 794 f:\sp\public\sdk\inc\windows.h
+FILE 795 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 796 f:\sp\public\sdk\inc\specstrings.h
+FILE 797 f:\sp\public\sdk\inc\basetsd.h
+FILE 798 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 799 f:\sp\public\sdk\inc\winreg.h
+FILE 800 f:\sp\vctools\crt_bld\self_x86\crt\src\strcpy_s.c
+FILE 801 f:\sp\public\sdk\inc\winbase.h
+FILE 802 f:\sp\public\sdk\inc\winerror.h
+FILE 803 f:\sp\public\sdk\inc\pshpack8.h
+FILE 804 f:\sp\public\sdk\inc\reason.h
+FILE 805 f:\sp\public\sdk\inc\wincon.h
+FILE 806 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 807 f:\sp\public\sdk\inc\ddbanned.h
+FILE 808 f:\sp\public\sdk\inc\windef.h
+FILE 809 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 810 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 811 f:\sp\public\sdk\inc\pshpack2.h
+FILE 812 f:\sp\public\sdk\inc\mcx.h
+FILE 813 f:\sp\public\sdk\inc\winuser.h
+FILE 814 f:\sp\public\sdk\inc\winnls.h
+FILE 815 f:\sp\public\sdk\inc\stralign.h
+FILE 816 f:\sp\public\sdk\inc\tvout.h
+FILE 817 f:\sp\public\sdk\inc\winsvc.h
+FILE 818 f:\sp\public\sdk\inc\wingdi.h
+FILE 819 f:\sp\public\sdk\inc\winnt.h
+FILE 820 f:\sp\public\sdk\inc\pshpack4.h
+FILE 821 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 822 f:\sp\public\sdk\inc\poppack.h
+FILE 823 f:\sp\vctools\crt_bld\self_x86\crt\src\tcscat_s.inl
+FILE 824 f:\sp\public\sdk\inc\winnetwk.h
+FILE 825 f:\sp\public\sdk\inc\imm.h
+FILE 826 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 827 f:\sp\public\sdk\inc\pshpack1.h
+FILE 828 f:\sp\public\sdk\inc\winver.h
+FILE 829 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h
+FILE 830 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 831 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 832 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 833 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 834 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 835 f:\sp\public\sdk\inc\guiddef.h
+FILE 836 f:\sp\public\sdk\inc\windows.h
+FILE 837 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 838 f:\sp\public\sdk\inc\specstrings.h
+FILE 839 f:\sp\public\sdk\inc\basetsd.h
+FILE 840 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 841 f:\sp\public\sdk\inc\winreg.h
+FILE 842 f:\sp\vctools\crt_bld\self_x86\crt\src\strcat_s.c
+FILE 843 f:\sp\public\sdk\inc\winbase.h
+FILE 844 f:\sp\public\sdk\inc\winerror.h
+FILE 845 f:\sp\public\sdk\inc\pshpack8.h
+FILE 846 f:\sp\public\sdk\inc\reason.h
+FILE 847 f:\sp\public\sdk\inc\wincon.h
+FILE 848 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 849 f:\sp\public\sdk\inc\ddbanned.h
+FILE 850 f:\sp\public\sdk\inc\windef.h
+FILE 851 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 852 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 853 f:\sp\public\sdk\inc\pshpack2.h
+FILE 854 f:\sp\public\sdk\inc\mcx.h
+FILE 855 f:\sp\public\sdk\inc\winuser.h
+FILE 856 f:\sp\public\sdk\inc\winnls.h
+FILE 857 f:\sp\public\sdk\inc\stralign.h
+FILE 858 f:\sp\public\sdk\inc\tvout.h
+FILE 859 f:\sp\public\sdk\inc\winsvc.h
+FILE 860 f:\sp\public\sdk\inc\wingdi.h
+FILE 861 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 862 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 863 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 864 f:\sp\vctools\crt_bld\self_x86\crt\src\strlen_s.c
+FILE 865 f:\sp\public\sdk\inc\ddbanned.h
+FILE 866 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 867 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 868 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strpbrk.asm
+FILE 869 F:\SP\vctools\crt_bld\SELF_X86\crt\src\Intel\STRSPN.ASM
+FILE 870 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 871 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\_strnicm.asm
+FILE 872 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 873 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 874 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 875 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 876 f:\sp\vctools\crt_bld\self_x86\crt\src\intel\strncmp.c
+FILE 877 f:\sp\public\sdk\inc\ddbanned.h
+FILE 878 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 879 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 880 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strlen.asm
+FILE 881 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 882 f:\sp\public\sdk\inc\pshpack2.h
+FILE 883 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 884 f:\sp\public\sdk\inc\mcx.h
+FILE 885 f:\sp\public\sdk\inc\winuser.h
+FILE 886 f:\sp\public\sdk\inc\winnls.h
+FILE 887 f:\sp\public\sdk\inc\stralign.h
+FILE 888 f:\sp\public\sdk\inc\tvout.h
+FILE 889 f:\sp\public\sdk\inc\winsvc.h
+FILE 890 f:\sp\public\sdk\inc\wingdi.h
+FILE 891 f:\sp\public\sdk\inc\winnt.h
+FILE 892 f:\sp\public\sdk\inc\pshpack4.h
+FILE 893 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 894 f:\sp\public\sdk\inc\poppack.h
+FILE 895 f:\sp\public\sdk\inc\winnetwk.h
+FILE 896 f:\sp\public\sdk\inc\imm.h
+FILE 897 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 898 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 899 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 900 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 901 f:\sp\vctools\crt_bld\self_x86\crt\src\strdup.c
+FILE 902 f:\sp\public\sdk\inc\pshpack1.h
+FILE 903 f:\sp\public\sdk\inc\winver.h
+FILE 904 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 905 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 906 f:\sp\public\sdk\inc\guiddef.h
+FILE 907 f:\sp\public\sdk\inc\windows.h
+FILE 908 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 909 f:\sp\public\sdk\inc\specstrings.h
+FILE 910 f:\sp\public\sdk\inc\basetsd.h
+FILE 911 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 912 f:\sp\public\sdk\inc\winreg.h
+FILE 913 f:\sp\public\sdk\inc\ddbanned.h
+FILE 914 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 915 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 916 f:\sp\public\sdk\inc\winbase.h
+FILE 917 f:\sp\public\sdk\inc\winerror.h
+FILE 918 f:\sp\public\sdk\inc\pshpack8.h
+FILE 919 f:\sp\public\sdk\inc\reason.h
+FILE 920 f:\sp\public\sdk\inc\wincon.h
+FILE 921 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 922 f:\sp\public\sdk\inc\windef.h
+FILE 923 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strcspn.asm
+FILE 924 F:\SP\vctools\crt_bld\SELF_X86\crt\src\Intel\STRSPN.ASM
+FILE 925 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 926 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strcmp.asm
+FILE 927 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 928 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strchr.asm
+FILE 929 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 930 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memset.c
+FILE 931 f:\sp\public\sdk\inc\ddbanned.h
+FILE 932 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 933 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 934 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\memset.asm
+FILE 935 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 936 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 937 f:\sp\public\sdk\inc\poppack.h
+FILE 938 f:\sp\public\sdk\inc\winnetwk.h
+FILE 939 f:\sp\public\sdk\inc\imm.h
+FILE 940 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 941 f:\sp\public\sdk\inc\pshpack1.h
+FILE 942 f:\sp\public\sdk\inc\winver.h
+FILE 943 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 944 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 945 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 946 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 947 f:\sp\public\sdk\inc\guiddef.h
+FILE 948 f:\sp\public\sdk\inc\windows.h
+FILE 949 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 950 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 951 f:\sp\public\sdk\inc\specstrings.h
+FILE 952 f:\sp\public\sdk\inc\basetsd.h
+FILE 953 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 954 f:\sp\public\sdk\inc\winreg.h
+FILE 955 f:\sp\vctools\crt_bld\self_x86\crt\src\memmove_s.c
+FILE 956 f:\sp\public\sdk\inc\winbase.h
+FILE 957 f:\sp\public\sdk\inc\winerror.h
+FILE 958 f:\sp\public\sdk\inc\pshpack8.h
+FILE 959 f:\sp\public\sdk\inc\reason.h
+FILE 960 f:\sp\public\sdk\inc\wincon.h
+FILE 961 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 962 f:\sp\public\sdk\inc\windef.h
+FILE 963 f:\sp\public\sdk\inc\ddbanned.h
+FILE 964 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 965 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 966 f:\sp\public\sdk\inc\pshpack2.h
+FILE 967 f:\sp\public\sdk\inc\mcx.h
+FILE 968 f:\sp\public\sdk\inc\winuser.h
+FILE 969 f:\sp\public\sdk\inc\winnls.h
+FILE 970 f:\sp\public\sdk\inc\stralign.h
+FILE 971 f:\sp\public\sdk\inc\tvout.h
+FILE 972 f:\sp\public\sdk\inc\winsvc.h
+FILE 973 f:\sp\public\sdk\inc\wingdi.h
+FILE 974 f:\sp\public\sdk\inc\winnt.h
+FILE 975 f:\sp\public\sdk\inc\pshpack4.h
+FILE 976 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\memmove.asm
+FILE 977 F:\SP\vctools\crt_bld\SELF_X86\crt\src\Intel\MEMCPY.ASM
+FILE 978 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 979 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\string\i386\memcmp.c
+FILE 980 f:\sp\public\sdk\inc\ddbanned.h
+FILE 981 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 982 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 983 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 984 f:\sp\public\sdk\inc\poppack.h
+FILE 985 f:\sp\public\sdk\inc\winnetwk.h
+FILE 986 f:\sp\public\sdk\inc\imm.h
+FILE 987 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 988 f:\sp\public\sdk\inc\pshpack1.h
+FILE 989 f:\sp\public\sdk\inc\winver.h
+FILE 990 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 991 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 992 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 993 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 994 f:\sp\public\sdk\inc\guiddef.h
+FILE 995 f:\sp\public\sdk\inc\windows.h
+FILE 996 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 997 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 998 f:\sp\public\sdk\inc\specstrings.h
+FILE 999 f:\sp\public\sdk\inc\basetsd.h
+FILE 1000 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1001 f:\sp\public\sdk\inc\winreg.h
+FILE 1002 f:\sp\vctools\crt_bld\self_x86\crt\src\memcpy_s.c
+FILE 1003 f:\sp\public\sdk\inc\winbase.h
+FILE 1004 f:\sp\public\sdk\inc\winerror.h
+FILE 1005 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1006 f:\sp\public\sdk\inc\reason.h
+FILE 1007 f:\sp\public\sdk\inc\wincon.h
+FILE 1008 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1009 f:\sp\public\sdk\inc\windef.h
+FILE 1010 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1011 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1012 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1013 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1014 f:\sp\public\sdk\inc\mcx.h
+FILE 1015 f:\sp\public\sdk\inc\winuser.h
+FILE 1016 f:\sp\public\sdk\inc\winnls.h
+FILE 1017 f:\sp\public\sdk\inc\stralign.h
+FILE 1018 f:\sp\public\sdk\inc\tvout.h
+FILE 1019 f:\sp\public\sdk\inc\winsvc.h
+FILE 1020 f:\sp\public\sdk\inc\wingdi.h
+FILE 1021 f:\sp\public\sdk\inc\winnt.h
+FILE 1022 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1023 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memcpy.c
+FILE 1024 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1025 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 1026 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 1027 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\memcpy.asm
+FILE 1028 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 1029 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1030 f:\sp\public\sdk\inc\wincon.h
+FILE 1031 f:\sp\public\sdk\inc\imm.h
+FILE 1032 f:\sp\public\sdk\inc\winbase.h
+FILE 1033 f:\sp\public\sdk\inc\wingdi.h
+FILE 1034 f:\sp\public\sdk\inc\winver.h
+FILE 1035 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1036 f:\sp\public\sdk\inc\windows.h
+FILE 1037 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1038 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1039 f:\sp\public\sdk\inc\reason.h
+FILE 1040 f:\sp\vctools\crt_bld\self_x86\crt\src\woutputs.c
+FILE 1041 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h
+FILE 1042 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1043 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1044 f:\sp\public\sdk\inc\specstrings.h
+FILE 1045 f:\sp\public\sdk\inc\basetsd.h
+FILE 1046 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1047 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1048 f:\sp\public\sdk\inc\stralign.h
+FILE 1049 f:\sp\public\sdk\inc\poppack.h
+FILE 1050 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1051 f:\sp\public\sdk\inc\winsvc.h
+FILE 1052 f:\sp\public\sdk\inc\windef.h
+FILE 1053 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c
+FILE 1054 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1055 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1056 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1057 f:\sp\public\sdk\inc\winuser.h
+FILE 1058 f:\sp\public\sdk\inc\mcx.h
+FILE 1059 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1060 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 1061 f:\sp\public\sdk\inc\guiddef.h
+FILE 1062 f:\sp\public\sdk\inc\winnt.h
+FILE 1063 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1064 f:\sp\public\sdk\inc\winnls.h
+FILE 1065 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1066 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1067 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 1068 f:\sp\public\sdk\inc\winerror.h
+FILE 1069 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1070 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h
+FILE 1071 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h
+FILE 1072 f:\sp\public\sdk\inc\winreg.h
+FILE 1073 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1074 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 1075 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 1076 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1077 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1078 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1079 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1080 f:\sp\public\sdk\inc\tvout.h
+FILE 1081 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1082 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 1083 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 1084 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1085 f:\sp\public\sdk\inc\wincon.h
+FILE 1086 f:\sp\public\sdk\inc\imm.h
+FILE 1087 f:\sp\public\sdk\inc\winbase.h
+FILE 1088 f:\sp\public\sdk\inc\wingdi.h
+FILE 1089 f:\sp\public\sdk\inc\winver.h
+FILE 1090 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1091 f:\sp\public\sdk\inc\windows.h
+FILE 1092 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1093 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1094 f:\sp\public\sdk\inc\reason.h
+FILE 1095 f:\sp\vctools\crt_bld\self_x86\crt\src\woutputp.c
+FILE 1096 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h
+FILE 1097 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1098 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1099 f:\sp\public\sdk\inc\specstrings.h
+FILE 1100 f:\sp\public\sdk\inc\basetsd.h
+FILE 1101 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1102 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1103 f:\sp\public\sdk\inc\stralign.h
+FILE 1104 f:\sp\public\sdk\inc\poppack.h
+FILE 1105 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1106 f:\sp\public\sdk\inc\winsvc.h
+FILE 1107 f:\sp\public\sdk\inc\windef.h
+FILE 1108 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c
+FILE 1109 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1110 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1111 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1112 f:\sp\public\sdk\inc\winuser.h
+FILE 1113 f:\sp\public\sdk\inc\mcx.h
+FILE 1114 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1115 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 1116 f:\sp\public\sdk\inc\guiddef.h
+FILE 1117 f:\sp\public\sdk\inc\winnt.h
+FILE 1118 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1119 f:\sp\public\sdk\inc\winnls.h
+FILE 1120 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1121 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1122 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 1123 f:\sp\public\sdk\inc\winerror.h
+FILE 1124 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1125 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h
+FILE 1126 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h
+FILE 1127 f:\sp\public\sdk\inc\winreg.h
+FILE 1128 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1129 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 1130 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 1131 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1132 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1133 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1134 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1135 f:\sp\public\sdk\inc\tvout.h
+FILE 1136 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1137 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 1138 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 1139 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1140 f:\sp\public\sdk\inc\wincon.h
+FILE 1141 f:\sp\public\sdk\inc\imm.h
+FILE 1142 f:\sp\public\sdk\inc\winbase.h
+FILE 1143 f:\sp\public\sdk\inc\wingdi.h
+FILE 1144 f:\sp\public\sdk\inc\winver.h
+FILE 1145 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1146 f:\sp\public\sdk\inc\windows.h
+FILE 1147 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1148 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1149 f:\sp\public\sdk\inc\reason.h
+FILE 1150 f:\sp\vctools\crt_bld\self_x86\crt\src\woutput.c
+FILE 1151 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h
+FILE 1152 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1153 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1154 f:\sp\public\sdk\inc\specstrings.h
+FILE 1155 f:\sp\public\sdk\inc\basetsd.h
+FILE 1156 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1157 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1158 f:\sp\public\sdk\inc\stralign.h
+FILE 1159 f:\sp\public\sdk\inc\poppack.h
+FILE 1160 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1161 f:\sp\public\sdk\inc\winsvc.h
+FILE 1162 f:\sp\public\sdk\inc\windef.h
+FILE 1163 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c
+FILE 1164 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1165 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1166 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1167 f:\sp\public\sdk\inc\winuser.h
+FILE 1168 f:\sp\public\sdk\inc\mcx.h
+FILE 1169 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1170 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 1171 f:\sp\public\sdk\inc\guiddef.h
+FILE 1172 f:\sp\public\sdk\inc\winnt.h
+FILE 1173 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1174 f:\sp\public\sdk\inc\winnls.h
+FILE 1175 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1176 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1177 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 1178 f:\sp\public\sdk\inc\winerror.h
+FILE 1179 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1180 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h
+FILE 1181 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h
+FILE 1182 f:\sp\public\sdk\inc\winreg.h
+FILE 1183 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1184 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 1185 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 1186 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1187 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1188 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1189 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1190 f:\sp\public\sdk\inc\tvout.h
+FILE 1191 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1192 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 1193 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 1194 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1195 f:\sp\public\sdk\inc\wincon.h
+FILE 1196 f:\sp\public\sdk\inc\imm.h
+FILE 1197 f:\sp\public\sdk\inc\winbase.h
+FILE 1198 f:\sp\public\sdk\inc\wingdi.h
+FILE 1199 f:\sp\public\sdk\inc\winver.h
+FILE 1200 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1201 f:\sp\public\sdk\inc\windows.h
+FILE 1202 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1203 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1204 f:\sp\public\sdk\inc\reason.h
+FILE 1205 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h
+FILE 1206 f:\sp\vctools\crt_bld\self_x86\crt\src\outputs.c
+FILE 1207 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1208 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1209 f:\sp\public\sdk\inc\specstrings.h
+FILE 1210 f:\sp\public\sdk\inc\basetsd.h
+FILE 1211 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1212 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1213 f:\sp\public\sdk\inc\stralign.h
+FILE 1214 f:\sp\public\sdk\inc\poppack.h
+FILE 1215 f:\sp\public\sdk\inc\winsvc.h
+FILE 1216 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1217 f:\sp\public\sdk\inc\windef.h
+FILE 1218 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c
+FILE 1219 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1220 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1221 f:\sp\public\sdk\inc\winuser.h
+FILE 1222 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1223 f:\sp\public\sdk\inc\mcx.h
+FILE 1224 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1225 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 1226 f:\sp\public\sdk\inc\guiddef.h
+FILE 1227 f:\sp\public\sdk\inc\winnt.h
+FILE 1228 f:\sp\public\sdk\inc\winnls.h
+FILE 1229 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1230 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1231 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1232 f:\sp\public\sdk\inc\winerror.h
+FILE 1233 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1234 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h
+FILE 1235 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h
+FILE 1236 f:\sp\public\sdk\inc\winreg.h
+FILE 1237 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1238 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 1239 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 1240 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1241 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1242 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1243 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1244 f:\sp\public\sdk\inc\tvout.h
+FILE 1245 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1246 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 1247 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1248 f:\sp\public\sdk\inc\wincon.h
+FILE 1249 f:\sp\public\sdk\inc\imm.h
+FILE 1250 f:\sp\public\sdk\inc\winbase.h
+FILE 1251 f:\sp\public\sdk\inc\wingdi.h
+FILE 1252 f:\sp\public\sdk\inc\winver.h
+FILE 1253 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1254 f:\sp\public\sdk\inc\windows.h
+FILE 1255 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1256 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1257 f:\sp\public\sdk\inc\reason.h
+FILE 1258 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h
+FILE 1259 f:\sp\vctools\crt_bld\self_x86\crt\src\outputp.c
+FILE 1260 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1261 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1262 f:\sp\public\sdk\inc\specstrings.h
+FILE 1263 f:\sp\public\sdk\inc\basetsd.h
+FILE 1264 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1265 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1266 f:\sp\public\sdk\inc\stralign.h
+FILE 1267 f:\sp\public\sdk\inc\poppack.h
+FILE 1268 f:\sp\public\sdk\inc\winsvc.h
+FILE 1269 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1270 f:\sp\public\sdk\inc\windef.h
+FILE 1271 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c
+FILE 1272 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1273 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1274 f:\sp\public\sdk\inc\winuser.h
+FILE 1275 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1276 f:\sp\public\sdk\inc\mcx.h
+FILE 1277 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1278 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 1279 f:\sp\public\sdk\inc\guiddef.h
+FILE 1280 f:\sp\public\sdk\inc\winnt.h
+FILE 1281 f:\sp\public\sdk\inc\winnls.h
+FILE 1282 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1283 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1284 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1285 f:\sp\public\sdk\inc\winerror.h
+FILE 1286 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1287 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h
+FILE 1288 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h
+FILE 1289 f:\sp\public\sdk\inc\winreg.h
+FILE 1290 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1291 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 1292 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 1293 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1294 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1295 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1296 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1297 f:\sp\public\sdk\inc\tvout.h
+FILE 1298 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1299 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 1300 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1301 f:\sp\public\sdk\inc\wincon.h
+FILE 1302 f:\sp\public\sdk\inc\imm.h
+FILE 1303 f:\sp\public\sdk\inc\winbase.h
+FILE 1304 f:\sp\public\sdk\inc\wingdi.h
+FILE 1305 f:\sp\public\sdk\inc\winver.h
+FILE 1306 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1307 f:\sp\public\sdk\inc\windows.h
+FILE 1308 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1309 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1310 f:\sp\public\sdk\inc\reason.h
+FILE 1311 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h
+FILE 1312 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c
+FILE 1313 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1314 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1315 f:\sp\public\sdk\inc\specstrings.h
+FILE 1316 f:\sp\public\sdk\inc\basetsd.h
+FILE 1317 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1318 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1319 f:\sp\public\sdk\inc\stralign.h
+FILE 1320 f:\sp\public\sdk\inc\poppack.h
+FILE 1321 f:\sp\public\sdk\inc\winsvc.h
+FILE 1322 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1323 f:\sp\public\sdk\inc\windef.h
+FILE 1324 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1325 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1326 f:\sp\public\sdk\inc\winuser.h
+FILE 1327 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1328 f:\sp\public\sdk\inc\mcx.h
+FILE 1329 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1330 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 1331 f:\sp\public\sdk\inc\guiddef.h
+FILE 1332 f:\sp\public\sdk\inc\winnt.h
+FILE 1333 f:\sp\public\sdk\inc\winnls.h
+FILE 1334 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1335 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1336 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1337 f:\sp\public\sdk\inc\winerror.h
+FILE 1338 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1339 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h
+FILE 1340 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h
+FILE 1341 f:\sp\public\sdk\inc\winreg.h
+FILE 1342 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1343 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 1344 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 1345 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1346 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1347 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1348 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1349 f:\sp\public\sdk\inc\tvout.h
+FILE 1350 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1351 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 1352 f:\sp\public\sdk\inc\stralign.h
+FILE 1353 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1354 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1355 f:\sp\public\sdk\inc\tvout.h
+FILE 1356 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1357 f:\sp\public\sdk\inc\windows.h
+FILE 1358 f:\sp\public\sdk\inc\winsvc.h
+FILE 1359 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1360 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1361 f:\sp\public\sdk\inc\wingdi.h
+FILE 1362 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1363 f:\sp\public\sdk\inc\poppack.h
+FILE 1364 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1365 f:\sp\public\sdk\inc\imm.h
+FILE 1366 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1367 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1368 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 1369 f:\sp\public\sdk\inc\windef.h
+FILE 1370 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1371 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1372 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1373 f:\sp\public\sdk\inc\winver.h
+FILE 1374 f:\sp\vctools\crt_bld\self_x86\crt\src\vswprnc.c
+FILE 1375 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1376 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1377 f:\sp\public\sdk\inc\winnt.h
+FILE 1378 f:\sp\public\sdk\inc\winreg.h
+FILE 1379 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1380 f:\sp\vctools\crt_bld\self_x86\crt\src\vswprint.c
+FILE 1381 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1382 f:\sp\public\sdk\inc\winbase.h
+FILE 1383 f:\sp\public\sdk\inc\winerror.h
+FILE 1384 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1385 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1386 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1387 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1388 f:\sp\public\sdk\inc\guiddef.h
+FILE 1389 f:\sp\public\sdk\inc\specstrings.h
+FILE 1390 f:\sp\public\sdk\inc\basetsd.h
+FILE 1391 f:\sp\public\sdk\inc\reason.h
+FILE 1392 f:\sp\public\sdk\inc\wincon.h
+FILE 1393 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 1394 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1395 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1396 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1397 f:\sp\public\sdk\inc\mcx.h
+FILE 1398 f:\sp\public\sdk\inc\winuser.h
+FILE 1399 f:\sp\public\sdk\inc\winnls.h
+FILE 1400 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1401 f:\sp\public\sdk\inc\winver.h
+FILE 1402 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1403 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1404 f:\sp\public\sdk\inc\winnt.h
+FILE 1405 f:\sp\public\sdk\inc\winreg.h
+FILE 1406 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1407 f:\sp\public\sdk\inc\winbase.h
+FILE 1408 f:\sp\public\sdk\inc\winerror.h
+FILE 1409 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1410 f:\sp\public\sdk\inc\guiddef.h
+FILE 1411 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1412 f:\sp\public\sdk\inc\specstrings.h
+FILE 1413 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1414 f:\sp\public\sdk\inc\basetsd.h
+FILE 1415 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1416 f:\sp\public\sdk\inc\reason.h
+FILE 1417 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 1418 f:\sp\public\sdk\inc\wincon.h
+FILE 1419 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1420 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1421 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1422 f:\sp\public\sdk\inc\mcx.h
+FILE 1423 f:\sp\public\sdk\inc\winuser.h
+FILE 1424 f:\sp\public\sdk\inc\winnls.h
+FILE 1425 f:\sp\vctools\crt_bld\self_x86\crt\src\vswprint.c
+FILE 1426 f:\sp\public\sdk\inc\stralign.h
+FILE 1427 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1428 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1429 f:\sp\public\sdk\inc\tvout.h
+FILE 1430 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1431 f:\sp\public\sdk\inc\windows.h
+FILE 1432 f:\sp\public\sdk\inc\winsvc.h
+FILE 1433 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1434 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1435 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1436 f:\sp\public\sdk\inc\wingdi.h
+FILE 1437 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1438 f:\sp\public\sdk\inc\poppack.h
+FILE 1439 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1440 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1441 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1442 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 1443 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1444 f:\sp\public\sdk\inc\imm.h
+FILE 1445 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1446 f:\sp\public\sdk\inc\windef.h
+FILE 1447 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1448 f:\sp\public\sdk\inc\windef.h
+FILE 1449 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1450 f:\sp\public\sdk\inc\winver.h
+FILE 1451 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1452 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1453 f:\sp\public\sdk\inc\winnt.h
+FILE 1454 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1455 f:\sp\public\sdk\inc\winreg.h
+FILE 1456 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1457 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1458 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1459 f:\sp\public\sdk\inc\winbase.h
+FILE 1460 f:\sp\public\sdk\inc\winerror.h
+FILE 1461 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1462 f:\sp\vctools\crt_bld\self_x86\crt\src\vfprintf.c
+FILE 1463 f:\sp\public\sdk\inc\reason.h
+FILE 1464 f:\sp\public\sdk\inc\wincon.h
+FILE 1465 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1466 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1467 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1468 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1469 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 1470 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1471 f:\sp\public\sdk\inc\mcx.h
+FILE 1472 f:\sp\public\sdk\inc\winuser.h
+FILE 1473 f:\sp\public\sdk\inc\winnls.h
+FILE 1474 f:\sp\public\sdk\inc\guiddef.h
+FILE 1475 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1476 f:\sp\public\sdk\inc\windows.h
+FILE 1477 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1478 f:\sp\public\sdk\inc\specstrings.h
+FILE 1479 f:\sp\public\sdk\inc\basetsd.h
+FILE 1480 f:\sp\public\sdk\inc\stralign.h
+FILE 1481 f:\sp\public\sdk\inc\tvout.h
+FILE 1482 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1483 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1484 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1485 f:\sp\public\sdk\inc\winsvc.h
+FILE 1486 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1487 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1488 f:\sp\public\sdk\inc\wingdi.h
+FILE 1489 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1490 f:\sp\public\sdk\inc\poppack.h
+FILE 1491 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1492 f:\sp\public\sdk\inc\imm.h
+FILE 1493 f:\sp\public\sdk\inc\windef.h
+FILE 1494 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1495 f:\sp\public\sdk\inc\winver.h
+FILE 1496 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1497 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1498 f:\sp\public\sdk\inc\winnt.h
+FILE 1499 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1500 f:\sp\public\sdk\inc\winreg.h
+FILE 1501 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1502 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1503 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1504 f:\sp\public\sdk\inc\winbase.h
+FILE 1505 f:\sp\public\sdk\inc\winerror.h
+FILE 1506 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1507 f:\sp\vctools\crt_bld\self_x86\crt\src\vprintf.c
+FILE 1508 f:\sp\public\sdk\inc\reason.h
+FILE 1509 f:\sp\public\sdk\inc\wincon.h
+FILE 1510 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 1511 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1512 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1513 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1514 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1515 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1516 f:\sp\public\sdk\inc\mcx.h
+FILE 1517 f:\sp\public\sdk\inc\winuser.h
+FILE 1518 f:\sp\public\sdk\inc\winnls.h
+FILE 1519 f:\sp\public\sdk\inc\guiddef.h
+FILE 1520 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1521 f:\sp\public\sdk\inc\windows.h
+FILE 1522 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1523 f:\sp\public\sdk\inc\specstrings.h
+FILE 1524 f:\sp\public\sdk\inc\basetsd.h
+FILE 1525 f:\sp\public\sdk\inc\stralign.h
+FILE 1526 f:\sp\public\sdk\inc\tvout.h
+FILE 1527 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1528 f:\sp\public\sdk\inc\winsvc.h
+FILE 1529 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1530 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1531 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1532 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1533 f:\sp\public\sdk\inc\wingdi.h
+FILE 1534 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1535 f:\sp\public\sdk\inc\poppack.h
+FILE 1536 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1537 f:\sp\public\sdk\inc\imm.h
+FILE 1538 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1539 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1540 f:\sp\public\sdk\inc\winver.h
+FILE 1541 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1542 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1543 f:\sp\public\sdk\inc\winnt.h
+FILE 1544 f:\sp\public\sdk\inc\winreg.h
+FILE 1545 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1546 f:\sp\public\sdk\inc\winbase.h
+FILE 1547 f:\sp\public\sdk\inc\winerror.h
+FILE 1548 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1549 f:\sp\public\sdk\inc\guiddef.h
+FILE 1550 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1551 f:\sp\public\sdk\inc\specstrings.h
+FILE 1552 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1553 f:\sp\public\sdk\inc\basetsd.h
+FILE 1554 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1555 f:\sp\public\sdk\inc\reason.h
+FILE 1556 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 1557 f:\sp\public\sdk\inc\wincon.h
+FILE 1558 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1559 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1560 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1561 f:\sp\public\sdk\inc\mcx.h
+FILE 1562 f:\sp\public\sdk\inc\winuser.h
+FILE 1563 f:\sp\public\sdk\inc\winnls.h
+FILE 1564 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.c
+FILE 1565 f:\sp\public\sdk\inc\stralign.h
+FILE 1566 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1567 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1568 f:\sp\public\sdk\inc\tvout.h
+FILE 1569 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1570 f:\sp\public\sdk\inc\windows.h
+FILE 1571 f:\sp\public\sdk\inc\winsvc.h
+FILE 1572 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1573 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1574 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1575 f:\sp\public\sdk\inc\wingdi.h
+FILE 1576 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1577 f:\sp\public\sdk\inc\poppack.h
+FILE 1578 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1579 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1580 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1581 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 1582 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1583 f:\sp\public\sdk\inc\imm.h
+FILE 1584 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1585 f:\sp\public\sdk\inc\windef.h
+FILE 1586 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1587 f:\sp\public\sdk\inc\windef.h
+FILE 1588 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1589 f:\sp\public\sdk\inc\winver.h
+FILE 1590 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1591 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1592 f:\sp\public\sdk\inc\winnt.h
+FILE 1593 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1594 f:\sp\public\sdk\inc\winreg.h
+FILE 1595 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1596 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1597 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1598 f:\sp\public\sdk\inc\winbase.h
+FILE 1599 f:\sp\public\sdk\inc\winerror.h
+FILE 1600 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1601 f:\sp\vctools\crt_bld\self_x86\crt\src\printf.c
+FILE 1602 f:\sp\public\sdk\inc\reason.h
+FILE 1603 f:\sp\public\sdk\inc\wincon.h
+FILE 1604 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1605 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1606 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1607 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1608 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 1609 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1610 f:\sp\public\sdk\inc\mcx.h
+FILE 1611 f:\sp\public\sdk\inc\winuser.h
+FILE 1612 f:\sp\public\sdk\inc\winnls.h
+FILE 1613 f:\sp\public\sdk\inc\guiddef.h
+FILE 1614 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1615 f:\sp\public\sdk\inc\windows.h
+FILE 1616 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1617 f:\sp\public\sdk\inc\specstrings.h
+FILE 1618 f:\sp\public\sdk\inc\basetsd.h
+FILE 1619 f:\sp\public\sdk\inc\stralign.h
+FILE 1620 f:\sp\public\sdk\inc\tvout.h
+FILE 1621 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1622 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1623 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1624 f:\sp\public\sdk\inc\winsvc.h
+FILE 1625 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1626 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1627 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h
+FILE 1628 f:\sp\public\sdk\inc\wingdi.h
+FILE 1629 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1630 f:\sp\public\sdk\inc\poppack.h
+FILE 1631 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1632 f:\sp\public\sdk\inc\imm.h
+FILE 1633 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1634 f:\sp\public\sdk\inc\windef.h
+FILE 1635 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1636 f:\sp\public\sdk\inc\winver.h
+FILE 1637 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1638 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1639 f:\sp\public\sdk\inc\winnt.h
+FILE 1640 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1641 f:\sp\public\sdk\inc\winreg.h
+FILE 1642 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1643 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1644 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1645 f:\sp\public\sdk\inc\winbase.h
+FILE 1646 f:\sp\public\sdk\inc\winerror.h
+FILE 1647 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1648 f:\sp\vctools\crt_bld\self_x86\crt\src\fprintf.c
+FILE 1649 f:\sp\public\sdk\inc\reason.h
+FILE 1650 f:\sp\public\sdk\inc\wincon.h
+FILE 1651 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1652 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1653 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1654 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1655 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 1656 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1657 f:\sp\public\sdk\inc\mcx.h
+FILE 1658 f:\sp\public\sdk\inc\winuser.h
+FILE 1659 f:\sp\public\sdk\inc\winnls.h
+FILE 1660 f:\sp\public\sdk\inc\guiddef.h
+FILE 1661 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1662 f:\sp\public\sdk\inc\windows.h
+FILE 1663 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1664 f:\sp\public\sdk\inc\specstrings.h
+FILE 1665 f:\sp\public\sdk\inc\basetsd.h
+FILE 1666 f:\sp\public\sdk\inc\stralign.h
+FILE 1667 f:\sp\public\sdk\inc\tvout.h
+FILE 1668 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1669 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1670 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 1671 f:\sp\public\sdk\inc\winsvc.h
+FILE 1672 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1673 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1674 f:\sp\public\sdk\inc\wingdi.h
+FILE 1675 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1676 f:\sp\public\sdk\inc\poppack.h
+FILE 1677 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1678 f:\sp\public\sdk\inc\imm.h
+FILE 1679 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1680 f:\sp\public\sdk\inc\winver.h
+FILE 1681 f:\sp\public\sdk\inc\winnt.h
+FILE 1682 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1683 f:\sp\public\sdk\inc\winreg.h
+FILE 1684 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1685 f:\sp\public\sdk\inc\winbase.h
+FILE 1686 f:\sp\public\sdk\inc\winerror.h
+FILE 1687 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1688 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h
+FILE 1689 f:\sp\public\sdk\inc\reason.h
+FILE 1690 f:\sp\public\sdk\inc\wincon.h
+FILE 1691 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1692 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1693 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1694 f:\sp\public\sdk\inc\mcx.h
+FILE 1695 f:\sp\public\sdk\inc\winuser.h
+FILE 1696 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1697 f:\sp\public\sdk\inc\winnls.h
+FILE 1698 f:\sp\public\sdk\inc\guiddef.h
+FILE 1699 f:\sp\public\sdk\inc\windows.h
+FILE 1700 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1701 f:\sp\public\sdk\inc\specstrings.h
+FILE 1702 f:\sp\public\sdk\inc\basetsd.h
+FILE 1703 f:\sp\public\sdk\inc\stralign.h
+FILE 1704 f:\sp\vctools\crt_bld\self_x86\crt\src\fflush.c
+FILE 1705 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 1706 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h
+FILE 1707 f:\sp\public\sdk\inc\tvout.h
+FILE 1708 f:\sp\public\sdk\inc\winsvc.h
+FILE 1709 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1710 f:\sp\public\sdk\inc\wingdi.h
+FILE 1711 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1712 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1713 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1714 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1715 f:\sp\public\sdk\inc\poppack.h
+FILE 1716 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1717 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1718 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1719 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1720 f:\sp\public\sdk\inc\imm.h
+FILE 1721 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1722 f:\sp\public\sdk\inc\windef.h
+FILE 1723 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1724 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1725 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1726 f:\sp\public\sdk\inc\reason.h
+FILE 1727 f:\sp\public\sdk\inc\wincon.h
+FILE 1728 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1729 f:\sp\public\sdk\inc\mcx.h
+FILE 1730 f:\sp\public\sdk\inc\winuser.h
+FILE 1731 f:\sp\public\sdk\inc\winnls.h
+FILE 1732 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1733 f:\sp\public\sdk\inc\windef.h
+FILE 1734 f:\sp\public\sdk\inc\stralign.h
+FILE 1735 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 1736 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1737 f:\sp\public\sdk\inc\tvout.h
+FILE 1738 f:\sp\public\sdk\inc\winsvc.h
+FILE 1739 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1740 f:\sp\public\sdk\inc\wingdi.h
+FILE 1741 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1742 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1743 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1744 f:\sp\public\sdk\inc\poppack.h
+FILE 1745 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1746 f:\sp\public\sdk\inc\winnt.h
+FILE 1747 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1748 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1749 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1750 f:\sp\public\sdk\inc\imm.h
+FILE 1751 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1752 f:\sp\vctools\crt_bld\self_x86\crt\src\fclose.c
+FILE 1753 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1754 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1755 f:\sp\public\sdk\inc\winver.h
+FILE 1756 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1757 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 1758 f:\sp\public\sdk\inc\guiddef.h
+FILE 1759 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1760 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1761 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1762 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1763 f:\sp\public\sdk\inc\specstrings.h
+FILE 1764 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1765 f:\sp\public\sdk\inc\basetsd.h
+FILE 1766 f:\sp\public\sdk\inc\windows.h
+FILE 1767 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1768 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h
+FILE 1769 f:\sp\public\sdk\inc\winreg.h
+FILE 1770 f:\sp\public\sdk\inc\winbase.h
+FILE 1771 f:\sp\public\sdk\inc\winerror.h
+FILE 1772 f:\sp\public\sdk\inc\poppack.h
+FILE 1773 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 1774 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1775 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1776 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1777 f:\sp\public\sdk\inc\imm.h
+FILE 1778 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1779 f:\sp\public\sdk\inc\windef.h
+FILE 1780 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1781 f:\sp\public\sdk\inc\winver.h
+FILE 1782 f:\sp\public\sdk\inc\windows.h
+FILE 1783 f:\sp\public\sdk\inc\winnt.h
+FILE 1784 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1785 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1786 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1787 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1788 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 1789 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1790 f:\sp\public\sdk\inc\winreg.h
+FILE 1791 f:\sp\public\sdk\inc\winbase.h
+FILE 1792 f:\sp\vctools\crt_bld\self_x86\crt\src\closeall.c
+FILE 1793 f:\sp\public\sdk\inc\winerror.h
+FILE 1794 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1795 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1796 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1797 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1798 f:\sp\public\sdk\inc\reason.h
+FILE 1799 f:\sp\public\sdk\inc\wincon.h
+FILE 1800 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1801 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1802 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1803 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1804 f:\sp\public\sdk\inc\mcx.h
+FILE 1805 f:\sp\public\sdk\inc\winuser.h
+FILE 1806 f:\sp\public\sdk\inc\winnls.h
+FILE 1807 f:\sp\public\sdk\inc\guiddef.h
+FILE 1808 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1809 f:\sp\public\sdk\inc\specstrings.h
+FILE 1810 f:\sp\public\sdk\inc\basetsd.h
+FILE 1811 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1812 f:\sp\public\sdk\inc\stralign.h
+FILE 1813 f:\sp\public\sdk\inc\tvout.h
+FILE 1814 f:\sp\public\sdk\inc\winsvc.h
+FILE 1815 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1816 f:\sp\public\sdk\inc\wingdi.h
+FILE 1817 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1818 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1819 f:\sp\public\sdk\inc\reason.h
+FILE 1820 f:\sp\public\sdk\inc\wincon.h
+FILE 1821 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1822 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1823 f:\sp\public\sdk\inc\mcx.h
+FILE 1824 f:\sp\public\sdk\inc\winuser.h
+FILE 1825 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1826 f:\sp\public\sdk\inc\winnls.h
+FILE 1827 f:\sp\public\sdk\inc\guiddef.h
+FILE 1828 f:\sp\public\sdk\inc\windows.h
+FILE 1829 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1830 f:\sp\public\sdk\inc\specstrings.h
+FILE 1831 f:\sp\public\sdk\inc\basetsd.h
+FILE 1832 f:\sp\public\sdk\inc\stralign.h
+FILE 1833 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 1834 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h
+FILE 1835 f:\sp\public\sdk\inc\tvout.h
+FILE 1836 f:\sp\public\sdk\inc\winsvc.h
+FILE 1837 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1838 f:\sp\public\sdk\inc\wingdi.h
+FILE 1839 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1840 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 1841 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1842 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1843 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1844 f:\sp\public\sdk\inc\poppack.h
+FILE 1845 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1846 f:\sp\public\sdk\inc\imm.h
+FILE 1847 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1848 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1849 f:\sp\public\sdk\inc\windef.h
+FILE 1850 f:\sp\vctools\crt_bld\self_x86\crt\src\_sftbuf.c
+FILE 1851 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1852 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1853 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1854 f:\sp\public\sdk\inc\winver.h
+FILE 1855 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1856 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1857 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1858 f:\sp\public\sdk\inc\winnt.h
+FILE 1859 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1860 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1861 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1862 f:\sp\public\sdk\inc\winreg.h
+FILE 1863 f:\sp\public\sdk\inc\winbase.h
+FILE 1864 f:\sp\public\sdk\inc\winerror.h
+FILE 1865 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1866 f:\sp\public\sdk\inc\winver.h
+FILE 1867 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1868 f:\sp\public\sdk\inc\winnt.h
+FILE 1869 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1870 f:\sp\public\sdk\inc\winreg.h
+FILE 1871 f:\sp\public\sdk\inc\winbase.h
+FILE 1872 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 1873 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 1874 f:\sp\public\sdk\inc\winerror.h
+FILE 1875 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1876 f:\sp\public\sdk\inc\reason.h
+FILE 1877 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1878 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1879 f:\sp\public\sdk\inc\wincon.h
+FILE 1880 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1881 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1882 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1883 f:\sp\public\sdk\inc\mcx.h
+FILE 1884 f:\sp\public\sdk\inc\winuser.h
+FILE 1885 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1886 f:\sp\public\sdk\inc\winnls.h
+FILE 1887 f:\sp\public\sdk\inc\guiddef.h
+FILE 1888 f:\sp\public\sdk\inc\windows.h
+FILE 1889 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1890 f:\sp\public\sdk\inc\specstrings.h
+FILE 1891 f:\sp\public\sdk\inc\basetsd.h
+FILE 1892 f:\sp\public\sdk\inc\stralign.h
+FILE 1893 f:\sp\vctools\crt_bld\self_x86\crt\src\_getbuf.c
+FILE 1894 f:\sp\public\sdk\inc\tvout.h
+FILE 1895 f:\sp\public\sdk\inc\winsvc.h
+FILE 1896 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1897 f:\sp\public\sdk\inc\wingdi.h
+FILE 1898 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1899 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1900 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1901 f:\sp\public\sdk\inc\poppack.h
+FILE 1902 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1903 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1904 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1905 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1906 f:\sp\public\sdk\inc\imm.h
+FILE 1907 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1908 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1909 f:\sp\public\sdk\inc\windef.h
+FILE 1910 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1911 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1912 f:\sp\public\sdk\inc\windef.h
+FILE 1913 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1914 f:\sp\public\sdk\inc\winver.h
+FILE 1915 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 1916 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1917 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1918 f:\sp\public\sdk\inc\winnt.h
+FILE 1919 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 1920 f:\sp\public\sdk\inc\winreg.h
+FILE 1921 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1922 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1923 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1924 f:\sp\public\sdk\inc\winbase.h
+FILE 1925 f:\sp\public\sdk\inc\winerror.h
+FILE 1926 f:\sp\public\sdk\inc\pshpack8.h
+FILE 1927 f:\sp\vctools\crt_bld\self_x86\crt\src\_freebuf.c
+FILE 1928 f:\sp\public\sdk\inc\reason.h
+FILE 1929 f:\sp\public\sdk\inc\wincon.h
+FILE 1930 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 1931 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1932 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1933 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1934 f:\sp\public\sdk\inc\mcx.h
+FILE 1935 f:\sp\public\sdk\inc\winuser.h
+FILE 1936 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1937 f:\sp\public\sdk\inc\winnls.h
+FILE 1938 f:\sp\public\sdk\inc\guiddef.h
+FILE 1939 f:\sp\public\sdk\inc\windows.h
+FILE 1940 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1941 f:\sp\public\sdk\inc\specstrings.h
+FILE 1942 f:\sp\public\sdk\inc\basetsd.h
+FILE 1943 f:\sp\public\sdk\inc\stralign.h
+FILE 1944 f:\sp\public\sdk\inc\tvout.h
+FILE 1945 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1946 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1947 f:\sp\public\sdk\inc\winsvc.h
+FILE 1948 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1949 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1950 f:\sp\public\sdk\inc\wingdi.h
+FILE 1951 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1952 f:\sp\public\sdk\inc\poppack.h
+FILE 1953 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1954 f:\sp\public\sdk\inc\imm.h
+FILE 1955 f:\sp\public\sdk\inc\specstrings.h
+FILE 1956 f:\sp\public\sdk\inc\basetsd.h
+FILE 1957 f:\sp\public\sdk\inc\reason.h
+FILE 1958 f:\sp\public\sdk\inc\wincon.h
+FILE 1959 f:\sp\public\sdk\inc\pshpack2.h
+FILE 1960 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 1961 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 1962 f:\sp\public\sdk\inc\mcx.h
+FILE 1963 f:\sp\public\sdk\inc\winuser.h
+FILE 1964 f:\sp\public\sdk\inc\winnls.h
+FILE 1965 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 1966 f:\sp\public\sdk\inc\stralign.h
+FILE 1967 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 1968 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 1969 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 1970 f:\sp\public\sdk\inc\windows.h
+FILE 1971 f:\sp\public\sdk\inc\tvout.h
+FILE 1972 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 1973 f:\sp\public\sdk\inc\winsvc.h
+FILE 1974 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 1975 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 1976 f:\sp\public\sdk\inc\wingdi.h
+FILE 1977 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h
+FILE 1978 f:\sp\public\sdk\inc\pshpack4.h
+FILE 1979 f:\sp\public\sdk\inc\poppack.h
+FILE 1980 f:\sp\vctools\crt_bld\self_x86\crt\src\_flsbuf.c
+FILE 1981 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 1982 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 1983 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 1984 f:\sp\public\sdk\inc\winnetwk.h
+FILE 1985 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 1986 f:\sp\public\sdk\inc\imm.h
+FILE 1987 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 1988 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 1989 f:\sp\vctools\crt_bld\self_x86\crt\src\_flswbuf.c
+FILE 1990 f:\sp\public\sdk\inc\windef.h
+FILE 1991 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 1992 f:\sp\public\sdk\inc\pshpack1.h
+FILE 1993 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 1994 f:\sp\public\sdk\inc\winver.h
+FILE 1995 f:\sp\public\sdk\inc\ddbanned.h
+FILE 1996 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 1997 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 1998 f:\sp\public\sdk\inc\winnt.h
+FILE 1999 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2000 f:\sp\public\sdk\inc\winreg.h
+FILE 2001 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h
+FILE 2002 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 2003 f:\sp\public\sdk\inc\winbase.h
+FILE 2004 f:\sp\public\sdk\inc\winerror.h
+FILE 2005 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2006 f:\sp\public\sdk\inc\guiddef.h
+FILE 2007 f:\sp\public\sdk\inc\basetsd.h
+FILE 2008 f:\sp\public\sdk\inc\reason.h
+FILE 2009 f:\sp\public\sdk\inc\wincon.h
+FILE 2010 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2011 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 2012 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2013 f:\sp\public\sdk\inc\mcx.h
+FILE 2014 f:\sp\public\sdk\inc\winuser.h
+FILE 2015 f:\sp\public\sdk\inc\winnls.h
+FILE 2016 f:\sp\public\sdk\inc\stralign.h
+FILE 2017 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2018 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2019 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2020 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2021 f:\sp\public\sdk\inc\tvout.h
+FILE 2022 f:\sp\public\sdk\inc\windows.h
+FILE 2023 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2024 f:\sp\public\sdk\inc\winsvc.h
+FILE 2025 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 2026 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 2027 f:\sp\public\sdk\inc\wingdi.h
+FILE 2028 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 2029 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h
+FILE 2030 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2031 f:\sp\public\sdk\inc\poppack.h
+FILE 2032 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 2033 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2034 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2035 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2036 f:\sp\public\sdk\inc\imm.h
+FILE 2037 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 2038 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2039 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2040 f:\sp\public\sdk\inc\windef.h
+FILE 2041 f:\sp\vctools\crt_bld\self_x86\crt\src\_flsbuf.c
+FILE 2042 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 2043 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2044 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 2045 f:\sp\public\sdk\inc\winver.h
+FILE 2046 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2047 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2048 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2049 f:\sp\public\sdk\inc\winnt.h
+FILE 2050 f:\sp\public\sdk\inc\winreg.h
+FILE 2051 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2052 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h
+FILE 2053 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 2054 f:\sp\public\sdk\inc\winbase.h
+FILE 2055 f:\sp\public\sdk\inc\winerror.h
+FILE 2056 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2057 f:\sp\public\sdk\inc\guiddef.h
+FILE 2058 f:\sp\public\sdk\inc\specstrings.h
+FILE 2059 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 2060 f:\sp\public\sdk\inc\reason.h
+FILE 2061 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2062 f:\sp\public\sdk\inc\wincon.h
+FILE 2063 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2064 f:\sp\public\sdk\inc\mcx.h
+FILE 2065 f:\sp\public\sdk\inc\winuser.h
+FILE 2066 f:\sp\public\sdk\inc\winnls.h
+FILE 2067 f:\sp\public\sdk\inc\guiddef.h
+FILE 2068 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2069 f:\sp\public\sdk\inc\specstrings.h
+FILE 2070 f:\sp\public\sdk\inc\basetsd.h
+FILE 2071 f:\sp\public\sdk\inc\stralign.h
+FILE 2072 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 2073 f:\sp\public\sdk\inc\tvout.h
+FILE 2074 f:\sp\public\sdk\inc\winsvc.h
+FILE 2075 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2076 f:\sp\public\sdk\inc\wingdi.h
+FILE 2077 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2078 f:\sp\public\sdk\inc\poppack.h
+FILE 2079 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h
+FILE 2080 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 2081 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2082 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2083 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2084 f:\sp\public\sdk\inc\imm.h
+FILE 2085 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2086 f:\sp\public\sdk\inc\windef.h
+FILE 2087 f:\sp\vctools\crt_bld\self_x86\crt\src\_file.c
+FILE 2088 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2089 f:\sp\public\sdk\inc\winver.h
+FILE 2090 f:\sp\public\sdk\inc\windows.h
+FILE 2091 f:\sp\public\sdk\inc\winnt.h
+FILE 2092 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2093 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2094 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2095 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2096 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2097 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2098 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 2099 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2100 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 2101 f:\sp\public\sdk\inc\winreg.h
+FILE 2102 f:\sp\public\sdk\inc\winbase.h
+FILE 2103 f:\sp\public\sdk\inc\winerror.h
+FILE 2104 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2105 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2106 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 2107 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2108 f:\sp\public\sdk\inc\windef.h
+FILE 2109 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2110 f:\sp\public\sdk\inc\winver.h
+FILE 2111 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 2112 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2113 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2114 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2115 f:\sp\public\sdk\inc\winnt.h
+FILE 2116 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2117 f:\sp\public\sdk\inc\winreg.h
+FILE 2118 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 2119 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2120 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2121 f:\sp\public\sdk\inc\winbase.h
+FILE 2122 f:\sp\public\sdk\inc\winerror.h
+FILE 2123 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2124 f:\sp\vctools\crt_bld\self_x86\crt\src\fputwc.c
+FILE 2125 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 2126 f:\sp\public\sdk\inc\reason.h
+FILE 2127 f:\sp\public\sdk\inc\wincon.h
+FILE 2128 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2129 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 2130 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 2131 f:\sp\public\sdk\inc\mcx.h
+FILE 2132 f:\sp\public\sdk\inc\winuser.h
+FILE 2133 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 2134 f:\sp\public\sdk\inc\winnls.h
+FILE 2135 f:\sp\public\sdk\inc\guiddef.h
+FILE 2136 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h
+FILE 2137 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 2138 f:\sp\public\sdk\inc\stralign.h
+FILE 2139 f:\sp\public\sdk\inc\specstrings.h
+FILE 2140 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 2141 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2142 f:\sp\public\sdk\inc\basetsd.h
+FILE 2143 f:\sp\public\sdk\inc\windows.h
+FILE 2144 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2145 f:\sp\public\sdk\inc\tvout.h
+FILE 2146 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2147 f:\sp\public\sdk\inc\winsvc.h
+FILE 2148 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2149 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2150 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2151 f:\sp\public\sdk\inc\wingdi.h
+FILE 2152 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 2153 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 2154 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2155 f:\sp\public\sdk\inc\poppack.h
+FILE 2156 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 2157 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2158 f:\sp\public\sdk\inc\imm.h
+FILE 2159 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2160 f:\sp\public\sdk\inc\poppack.h
+FILE 2161 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 2162 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2163 f:\sp\public\sdk\inc\imm.h
+FILE 2164 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2165 f:\sp\public\sdk\inc\windef.h
+FILE 2166 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2167 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2168 f:\sp\public\sdk\inc\winver.h
+FILE 2169 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2170 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2171 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2172 f:\sp\public\sdk\inc\winnt.h
+FILE 2173 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2174 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2175 f:\sp\public\sdk\inc\winreg.h
+FILE 2176 f:\sp\vctools\crt_bld\self_x86\crt\src\fileno.c
+FILE 2177 f:\sp\public\sdk\inc\winbase.h
+FILE 2178 f:\sp\public\sdk\inc\winerror.h
+FILE 2179 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2180 f:\sp\public\sdk\inc\reason.h
+FILE 2181 f:\sp\public\sdk\inc\wincon.h
+FILE 2182 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2183 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2184 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2185 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2186 f:\sp\public\sdk\inc\mcx.h
+FILE 2187 f:\sp\public\sdk\inc\winuser.h
+FILE 2188 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2189 f:\sp\public\sdk\inc\winnls.h
+FILE 2190 f:\sp\public\sdk\inc\guiddef.h
+FILE 2191 f:\sp\public\sdk\inc\windows.h
+FILE 2192 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2193 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 2194 f:\sp\public\sdk\inc\specstrings.h
+FILE 2195 f:\sp\public\sdk\inc\basetsd.h
+FILE 2196 f:\sp\public\sdk\inc\stralign.h
+FILE 2197 f:\sp\public\sdk\inc\tvout.h
+FILE 2198 f:\sp\public\sdk\inc\winsvc.h
+FILE 2199 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2200 f:\sp\public\sdk\inc\wingdi.h
+FILE 2201 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2202 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2203 f:\sp\public\sdk\inc\winreg.h
+FILE 2204 f:\sp\public\sdk\inc\guiddef.h
+FILE 2205 f:\sp\public\sdk\inc\windows.h
+FILE 2206 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2207 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 2208 f:\sp\public\sdk\inc\specstrings.h
+FILE 2209 f:\sp\public\sdk\inc\basetsd.h
+FILE 2210 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2211 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2212 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2213 f:\sp\public\sdk\inc\reason.h
+FILE 2214 f:\sp\public\sdk\inc\wincon.h
+FILE 2215 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2216 f:\sp\public\sdk\inc\poppack.h
+FILE 2217 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2218 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h
+FILE 2219 f:\sp\public\sdk\inc\mcx.h
+FILE 2220 f:\sp\public\sdk\inc\winuser.h
+FILE 2221 f:\sp\public\sdk\inc\winnls.h
+FILE 2222 f:\sp\public\sdk\inc\stralign.h
+FILE 2223 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2224 f:\sp\public\sdk\inc\windef.h
+FILE 2225 f:\sp\public\sdk\inc\tvout.h
+FILE 2226 f:\sp\public\sdk\inc\winsvc.h
+FILE 2227 f:\sp\vctools\crt_bld\self_x86\crt\src\tidtable.c
+FILE 2228 f:\sp\public\sdk\inc\wingdi.h
+FILE 2229 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 2230 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2231 f:\sp\public\sdk\inc\winnt.h
+FILE 2232 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2233 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2234 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2235 f:\sp\public\sdk\inc\imm.h
+FILE 2236 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2237 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2238 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2239 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 2240 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 2241 f:\sp\public\sdk\inc\winbase.h
+FILE 2242 f:\sp\public\sdk\inc\winerror.h
+FILE 2243 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2244 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 2245 f:\sp\vctools\crt_bld\self_x86\crt\src\memory.h
+FILE 2246 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2247 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h
+FILE 2248 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 2249 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2250 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2251 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 2252 f:\sp\public\sdk\inc\winver.h
+FILE 2253 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2254 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 2255 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 2256 f:\sp\public\sdk\inc\poppack.h
+FILE 2257 f:\sp\public\sdk\inc\winnt.h
+FILE 2258 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2259 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2260 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 2261 f:\sp\public\sdk\inc\imm.h
+FILE 2262 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 2263 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2264 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2265 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2266 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 2267 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2268 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2269 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2270 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2271 f:\sp\public\sdk\inc\winver.h
+FILE 2272 f:\sp\public\sdk\inc\guiddef.h
+FILE 2273 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2274 f:\sp\public\sdk\inc\specstrings.h
+FILE 2275 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2276 f:\sp\public\sdk\inc\basetsd.h
+FILE 2277 f:\sp\public\sdk\inc\windows.h
+FILE 2278 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2279 f:\sp\public\sdk\inc\winreg.h
+FILE 2280 f:\sp\vctools\crt_bld\self_x86\crt\src\stdenvp.c
+FILE 2281 f:\sp\public\sdk\inc\winbase.h
+FILE 2282 f:\sp\public\sdk\inc\winerror.h
+FILE 2283 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2284 f:\sp\public\sdk\inc\reason.h
+FILE 2285 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2286 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2287 f:\sp\public\sdk\inc\wincon.h
+FILE 2288 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2289 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2290 f:\sp\public\sdk\inc\mcx.h
+FILE 2291 f:\sp\public\sdk\inc\winuser.h
+FILE 2292 f:\sp\public\sdk\inc\winnls.h
+FILE 2293 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2294 f:\sp\public\sdk\inc\windef.h
+FILE 2295 f:\sp\public\sdk\inc\stralign.h
+FILE 2296 f:\sp\public\sdk\inc\tvout.h
+FILE 2297 f:\sp\public\sdk\inc\winsvc.h
+FILE 2298 f:\sp\public\sdk\inc\wingdi.h
+FILE 2299 f:\sp\public\sdk\inc\poppack.h
+FILE 2300 f:\sp\vctools\crt_bld\self_x86\crt\src\dos.h
+FILE 2301 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2302 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 2303 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 2304 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2305 f:\sp\public\sdk\inc\imm.h
+FILE 2306 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2307 f:\sp\public\sdk\inc\windef.h
+FILE 2308 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 2309 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2310 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 2311 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 2312 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h
+FILE 2313 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2314 f:\sp\public\sdk\inc\winver.h
+FILE 2315 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2316 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2317 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2318 f:\sp\public\sdk\inc\winnt.h
+FILE 2319 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2320 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2321 f:\sp\public\sdk\inc\winreg.h
+FILE 2322 f:\sp\vctools\crt_bld\self_x86\crt\src\stdargv.c
+FILE 2323 f:\sp\public\sdk\inc\winbase.h
+FILE 2324 f:\sp\public\sdk\inc\winerror.h
+FILE 2325 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2326 f:\sp\public\sdk\inc\reason.h
+FILE 2327 f:\sp\public\sdk\inc\wincon.h
+FILE 2328 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2329 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2330 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2331 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2332 f:\sp\public\sdk\inc\mcx.h
+FILE 2333 f:\sp\public\sdk\inc\winuser.h
+FILE 2334 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2335 f:\sp\public\sdk\inc\winnls.h
+FILE 2336 f:\sp\public\sdk\inc\guiddef.h
+FILE 2337 f:\sp\public\sdk\inc\windows.h
+FILE 2338 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2339 f:\sp\public\sdk\inc\specstrings.h
+FILE 2340 f:\sp\public\sdk\inc\basetsd.h
+FILE 2341 f:\sp\public\sdk\inc\stralign.h
+FILE 2342 f:\sp\public\sdk\inc\tvout.h
+FILE 2343 f:\sp\public\sdk\inc\winsvc.h
+FILE 2344 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2345 f:\sp\public\sdk\inc\wingdi.h
+FILE 2346 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2347 f:\sp\public\sdk\inc\reason.h
+FILE 2348 f:\sp\public\sdk\inc\wincon.h
+FILE 2349 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2350 f:\sp\public\sdk\inc\poppack.h
+FILE 2351 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2352 f:\sp\public\sdk\inc\mcx.h
+FILE 2353 f:\sp\public\sdk\inc\winuser.h
+FILE 2354 f:\sp\public\sdk\inc\winnls.h
+FILE 2355 f:\sp\public\sdk\inc\stralign.h
+FILE 2356 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2357 f:\sp\public\sdk\inc\windef.h
+FILE 2358 f:\sp\public\sdk\inc\tvout.h
+FILE 2359 f:\sp\public\sdk\inc\winsvc.h
+FILE 2360 f:\sp\public\sdk\inc\wingdi.h
+FILE 2361 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2362 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 2363 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2364 f:\sp\public\sdk\inc\winnt.h
+FILE 2365 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2366 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2367 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2368 f:\sp\public\sdk\inc\imm.h
+FILE 2369 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h
+FILE 2370 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 2371 f:\sp\vctools\crt_bld\self_x86\crt\src\mlock.c
+FILE 2372 f:\sp\public\sdk\inc\winbase.h
+FILE 2373 f:\sp\public\sdk\inc\winerror.h
+FILE 2374 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2375 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 2376 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2377 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 2378 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2379 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 2380 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 2381 f:\sp\public\sdk\inc\winver.h
+FILE 2382 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2383 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2384 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2385 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2386 f:\sp\public\sdk\inc\winreg.h
+FILE 2387 f:\sp\public\sdk\inc\guiddef.h
+FILE 2388 f:\sp\public\sdk\inc\windows.h
+FILE 2389 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2390 f:\sp\public\sdk\inc\specstrings.h
+FILE 2391 f:\sp\public\sdk\inc\basetsd.h
+FILE 2392 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2393 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 2394 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2395 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2396 f:\sp\public\sdk\inc\poppack.h
+FILE 2397 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 2398 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 2399 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 2400 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2401 f:\sp\public\sdk\inc\imm.h
+FILE 2402 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2403 f:\sp\public\sdk\inc\windef.h
+FILE 2404 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2405 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2406 f:\sp\public\sdk\inc\winver.h
+FILE 2407 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2408 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2409 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2410 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 2411 f:\sp\public\sdk\inc\winnt.h
+FILE 2412 f:\sp\vctools\crt_bld\self_x86\crt\src\cmsgs.h
+FILE 2413 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2414 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 2415 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2416 f:\sp\public\sdk\inc\winreg.h
+FILE 2417 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2418 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0msg.c
+FILE 2419 f:\sp\public\sdk\inc\winbase.h
+FILE 2420 f:\sp\public\sdk\inc\winerror.h
+FILE 2421 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2422 f:\sp\public\sdk\inc\reason.h
+FILE 2423 f:\sp\public\sdk\inc\wincon.h
+FILE 2424 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2425 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2426 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2427 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2428 f:\sp\public\sdk\inc\mcx.h
+FILE 2429 f:\sp\public\sdk\inc\winuser.h
+FILE 2430 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2431 f:\sp\public\sdk\inc\winnls.h
+FILE 2432 f:\sp\public\sdk\inc\guiddef.h
+FILE 2433 f:\sp\public\sdk\inc\windows.h
+FILE 2434 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 2435 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2436 f:\sp\public\sdk\inc\specstrings.h
+FILE 2437 f:\sp\public\sdk\inc\basetsd.h
+FILE 2438 f:\sp\public\sdk\inc\stralign.h
+FILE 2439 f:\sp\public\sdk\inc\tvout.h
+FILE 2440 f:\sp\public\sdk\inc\winsvc.h
+FILE 2441 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2442 f:\sp\public\sdk\inc\wingdi.h
+FILE 2443 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2444 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2445 f:\sp\public\sdk\inc\winver.h
+FILE 2446 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2447 f:\sp\public\sdk\inc\winnt.h
+FILE 2448 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2449 f:\sp\public\sdk\inc\winreg.h
+FILE 2450 f:\sp\public\sdk\inc\winbase.h
+FILE 2451 f:\sp\public\sdk\inc\winerror.h
+FILE 2452 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h
+FILE 2453 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2454 f:\sp\public\sdk\inc\reason.h
+FILE 2455 f:\sp\public\sdk\inc\wincon.h
+FILE 2456 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2457 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0init.c
+FILE 2458 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2459 f:\sp\public\sdk\inc\mcx.h
+FILE 2460 f:\sp\public\sdk\inc\winuser.h
+FILE 2461 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2462 f:\sp\public\sdk\inc\winnls.h
+FILE 2463 f:\sp\public\sdk\inc\guiddef.h
+FILE 2464 f:\sp\public\sdk\inc\windows.h
+FILE 2465 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2466 f:\sp\public\sdk\inc\specstrings.h
+FILE 2467 f:\sp\public\sdk\inc\basetsd.h
+FILE 2468 f:\sp\public\sdk\inc\stralign.h
+FILE 2469 f:\sp\public\sdk\inc\tvout.h
+FILE 2470 f:\sp\public\sdk\inc\winsvc.h
+FILE 2471 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2472 f:\sp\public\sdk\inc\wingdi.h
+FILE 2473 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 2474 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2475 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2476 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2477 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2478 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2479 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2480 f:\sp\public\sdk\inc\poppack.h
+FILE 2481 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2482 f:\sp\public\sdk\inc\imm.h
+FILE 2483 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2484 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2485 f:\sp\public\sdk\inc\windef.h
+FILE 2486 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 2487 f:\sp\public\sdk\inc\poppack.h
+FILE 2488 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 2489 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2490 f:\sp\public\sdk\inc\imm.h
+FILE 2491 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2492 f:\sp\public\sdk\inc\windef.h
+FILE 2493 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2494 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2495 f:\sp\public\sdk\inc\winver.h
+FILE 2496 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2497 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2498 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2499 f:\sp\public\sdk\inc\winnt.h
+FILE 2500 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2501 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2502 f:\sp\public\sdk\inc\winreg.h
+FILE 2503 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0fp.c
+FILE 2504 f:\sp\public\sdk\inc\winbase.h
+FILE 2505 f:\sp\public\sdk\inc\winerror.h
+FILE 2506 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2507 f:\sp\public\sdk\inc\reason.h
+FILE 2508 f:\sp\public\sdk\inc\wincon.h
+FILE 2509 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2510 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2511 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2512 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2513 f:\sp\public\sdk\inc\mcx.h
+FILE 2514 f:\sp\public\sdk\inc\winuser.h
+FILE 2515 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2516 f:\sp\public\sdk\inc\winnls.h
+FILE 2517 f:\sp\public\sdk\inc\guiddef.h
+FILE 2518 f:\sp\public\sdk\inc\windows.h
+FILE 2519 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2520 f:\sp\public\sdk\inc\specstrings.h
+FILE 2521 f:\sp\public\sdk\inc\basetsd.h
+FILE 2522 f:\sp\public\sdk\inc\stralign.h
+FILE 2523 f:\sp\public\sdk\inc\tvout.h
+FILE 2524 f:\sp\public\sdk\inc\winsvc.h
+FILE 2525 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2526 f:\sp\public\sdk\inc\wingdi.h
+FILE 2527 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2528 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h
+FILE 2529 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2530 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 2531 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2532 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2533 f:\sp\public\sdk\inc\reason.h
+FILE 2534 f:\sp\public\sdk\inc\wincon.h
+FILE 2535 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 2536 f:\sp\public\sdk\inc\poppack.h
+FILE 2537 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h
+FILE 2538 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2539 f:\sp\public\sdk\inc\mcx.h
+FILE 2540 f:\sp\public\sdk\inc\winuser.h
+FILE 2541 f:\sp\public\sdk\inc\winnls.h
+FILE 2542 f:\sp\public\sdk\inc\stralign.h
+FILE 2543 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2544 f:\sp\public\sdk\inc\windef.h
+FILE 2545 f:\sp\public\sdk\inc\tvout.h
+FILE 2546 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2547 f:\sp\public\sdk\inc\winsvc.h
+FILE 2548 f:\sp\public\sdk\inc\wingdi.h
+FILE 2549 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h
+FILE 2550 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h
+FILE 2551 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2552 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2553 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h
+FILE 2554 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h
+FILE 2555 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 2556 f:\sp\public\sdk\inc\winnt.h
+FILE 2557 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2558 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2559 f:\sp\public\sdk\inc\imm.h
+FILE 2560 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0dat.c
+FILE 2561 f:\sp\public\sdk\inc\winbase.h
+FILE 2562 f:\sp\public\sdk\inc\winerror.h
+FILE 2563 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2564 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 2565 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2566 f:\sp\public\sdk\inc\winver.h
+FILE 2567 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2568 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2569 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2570 f:\sp\vctools\crt_bld\self_x86\crt\src\dos.h
+FILE 2571 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2572 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2573 f:\sp\public\sdk\inc\winreg.h
+FILE 2574 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 2575 f:\sp\public\sdk\inc\guiddef.h
+FILE 2576 f:\sp\public\sdk\inc\windows.h
+FILE 2577 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2578 f:\sp\public\sdk\inc\specstrings.h
+FILE 2579 f:\sp\public\sdk\inc\basetsd.h
+FILE 2580 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2581 f:\sp\public\sdk\inc\tvout.h
+FILE 2582 f:\sp\public\sdk\inc\winsvc.h
+FILE 2583 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2584 f:\sp\public\sdk\inc\wingdi.h
+FILE 2585 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2586 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 2587 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 2588 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h
+FILE 2589 f:\sp\public\sdk\inc\poppack.h
+FILE 2590 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h
+FILE 2591 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 2592 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 2593 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2594 f:\sp\public\sdk\inc\imm.h
+FILE 2595 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 2596 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2597 f:\sp\public\sdk\inc\windef.h
+FILE 2598 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2599 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2600 f:\sp\vctools\crt_bld\self_x86\crt\src\dos.h
+FILE 2601 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2602 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2603 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2604 f:\sp\public\sdk\inc\winver.h
+FILE 2605 f:\sp\public\sdk\inc\winnt.h
+FILE 2606 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2607 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 2608 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0.c
+FILE 2609 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2610 f:\sp\public\sdk\inc\winreg.h
+FILE 2611 f:\sp\public\sdk\inc\winbase.h
+FILE 2612 f:\sp\public\sdk\inc\winerror.h
+FILE 2613 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2614 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2615 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2616 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2617 f:\sp\public\sdk\inc\reason.h
+FILE 2618 f:\sp\public\sdk\inc\wincon.h
+FILE 2619 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2620 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2621 f:\sp\public\sdk\inc\mcx.h
+FILE 2622 f:\sp\public\sdk\inc\winuser.h
+FILE 2623 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2624 f:\sp\public\sdk\inc\winnls.h
+FILE 2625 f:\sp\public\sdk\inc\guiddef.h
+FILE 2626 f:\sp\public\sdk\inc\windows.h
+FILE 2627 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2628 f:\sp\public\sdk\inc\specstrings.h
+FILE 2629 f:\sp\public\sdk\inc\basetsd.h
+FILE 2630 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h
+FILE 2631 f:\sp\public\sdk\inc\stralign.h
+FILE 2632 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\alloca16.asm
+FILE 2633 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 2634 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\chkstk.asm
+FILE 2635 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 2636 f:\sp\public\sdk\inc\wincon.h
+FILE 2637 f:\sp\public\sdk\inc\imm.h
+FILE 2638 f:\sp\public\sdk\inc\winbase.h
+FILE 2639 f:\sp\public\sdk\inc\wingdi.h
+FILE 2640 f:\sp\public\sdk\inc\winver.h
+FILE 2641 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h
+FILE 2642 f:\sp\public\sdk\inc\windows.h
+FILE 2643 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 2644 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2645 f:\sp\public\sdk\inc\reason.h
+FILE 2646 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\rtc\initsect.cpp
+FILE 2647 f:\sp\public\sdk\inc\specstrings.h
+FILE 2648 f:\sp\public\sdk\inc\basetsd.h
+FILE 2649 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2650 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2651 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h
+FILE 2652 f:\sp\public\sdk\inc\stralign.h
+FILE 2653 f:\sp\public\sdk\inc\poppack.h
+FILE 2654 f:\sp\public\sdk\inc\winsvc.h
+FILE 2655 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 2656 f:\sp\public\sdk\inc\windef.h
+FILE 2657 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h
+FILE 2658 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 2659 f:\sp\public\sdk\inc\winuser.h
+FILE 2660 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 2661 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h
+FILE 2662 f:\sp\public\sdk\inc\mcx.h
+FILE 2663 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2664 f:\sp\public\sdk\inc\guiddef.h
+FILE 2665 f:\sp\public\sdk\inc\winnt.h
+FILE 2666 f:\sp\public\sdk\inc\winnls.h
+FILE 2667 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 2668 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2669 f:\sp\public\sdk\inc\winerror.h
+FILE 2670 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\rtcapi.h
+FILE 2671 f:\sp\public\sdk\inc\winreg.h
+FILE 2672 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 2673 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2674 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 2675 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 2676 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\rtcpriv.h
+FILE 2677 f:\sp\public\sdk\inc\tvout.h
+FILE 2678 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h
+FILE 2679 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h
+FILE 2680 f:\sp\public\sdk\inc\poppack.h
+FILE 2681 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2682 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 2683 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2684 f:\sp\public\sdk\inc\imm.h
+FILE 2685 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2686 f:\sp\public\sdk\inc\windef.h
+FILE 2687 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2688 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2689 f:\sp\public\sdk\inc\winver.h
+FILE 2690 f:\sp\public\sdk\inc\windows.h
+FILE 2691 f:\sp\public\sdk\inc\winnt.h
+FILE 2692 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2693 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2694 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2695 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2696 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2697 f:\sp\public\sdk\inc\winreg.h
+FILE 2698 f:\sp\public\sdk\inc\winbase.h
+FILE 2699 f:\sp\vctools\crt_bld\self_x86\crt\src\wtombenv.c
+FILE 2700 f:\sp\public\sdk\inc\winerror.h
+FILE 2701 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2702 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2703 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2704 f:\sp\public\sdk\inc\reason.h
+FILE 2705 f:\sp\public\sdk\inc\wincon.h
+FILE 2706 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2707 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2708 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2709 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2710 f:\sp\public\sdk\inc\mcx.h
+FILE 2711 f:\sp\public\sdk\inc\winuser.h
+FILE 2712 f:\sp\public\sdk\inc\winnls.h
+FILE 2713 f:\sp\public\sdk\inc\guiddef.h
+FILE 2714 f:\sp\public\sdk\inc\specstrings.h
+FILE 2715 f:\sp\public\sdk\inc\basetsd.h
+FILE 2716 f:\sp\public\sdk\inc\stralign.h
+FILE 2717 f:\sp\public\sdk\inc\tvout.h
+FILE 2718 f:\sp\public\sdk\inc\winsvc.h
+FILE 2719 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2720 f:\sp\public\sdk\inc\wingdi.h
+FILE 2721 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2722 f:\sp\public\sdk\inc\winnt.h
+FILE 2723 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2724 f:\sp\public\sdk\inc\winreg.h
+FILE 2725 f:\sp\public\sdk\inc\winbase.h
+FILE 2726 f:\sp\public\sdk\inc\winerror.h
+FILE 2727 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2728 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2729 f:\sp\public\sdk\inc\reason.h
+FILE 2730 f:\sp\public\sdk\inc\wincon.h
+FILE 2731 f:\sp\vctools\crt_bld\self_x86\crt\src\float.h
+FILE 2732 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2733 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2734 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2735 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 2736 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 2737 f:\sp\public\sdk\inc\mcx.h
+FILE 2738 f:\sp\public\sdk\inc\winuser.h
+FILE 2739 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2740 f:\sp\public\sdk\inc\winnls.h
+FILE 2741 f:\sp\public\sdk\inc\guiddef.h
+FILE 2742 f:\sp\public\sdk\inc\windows.h
+FILE 2743 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2744 f:\sp\public\sdk\inc\specstrings.h
+FILE 2745 f:\sp\public\sdk\inc\basetsd.h
+FILE 2746 f:\sp\public\sdk\inc\stralign.h
+FILE 2747 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2748 f:\sp\vctools\crt_bld\self_x86\crt\src\signal.h
+FILE 2749 f:\sp\public\sdk\inc\tvout.h
+FILE 2750 f:\sp\public\sdk\inc\winsvc.h
+FILE 2751 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2752 f:\sp\vctools\crt_bld\self_x86\crt\src\winxfltr.c
+FILE 2753 f:\sp\public\sdk\inc\wingdi.h
+FILE 2754 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2755 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 2756 f:\sp\public\sdk\inc\poppack.h
+FILE 2757 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2758 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2759 f:\sp\public\sdk\inc\imm.h
+FILE 2760 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2761 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2762 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2763 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2764 f:\sp\public\sdk\inc\windef.h
+FILE 2765 f:\sp\vctools\crt_bld\self_x86\crt\src\crtwrn.h
+FILE 2766 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2767 f:\sp\public\sdk\inc\winver.h
+FILE 2768 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2769 f:\sp\public\sdk\inc\imm.h
+FILE 2770 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2771 f:\sp\public\sdk\inc\windef.h
+FILE 2772 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2773 f:\sp\public\sdk\inc\winver.h
+FILE 2774 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2775 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2776 f:\sp\public\sdk\inc\winnt.h
+FILE 2777 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2778 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2779 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2780 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2781 f:\sp\public\sdk\inc\winreg.h
+FILE 2782 f:\sp\public\sdk\inc\winbase.h
+FILE 2783 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 2784 f:\sp\public\sdk\inc\winerror.h
+FILE 2785 f:\sp\vctools\crt_bld\self_x86\crt\src\winsig.c
+FILE 2786 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2787 f:\sp\public\sdk\inc\reason.h
+FILE 2788 f:\sp\public\sdk\inc\wincon.h
+FILE 2789 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2790 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2791 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 2792 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 2793 f:\sp\public\sdk\inc\mcx.h
+FILE 2794 f:\sp\public\sdk\inc\winuser.h
+FILE 2795 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2796 f:\sp\public\sdk\inc\winnls.h
+FILE 2797 f:\sp\public\sdk\inc\guiddef.h
+FILE 2798 f:\sp\public\sdk\inc\windows.h
+FILE 2799 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2800 f:\sp\public\sdk\inc\specstrings.h
+FILE 2801 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2802 f:\sp\public\sdk\inc\basetsd.h
+FILE 2803 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2804 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2805 f:\sp\public\sdk\inc\stralign.h
+FILE 2806 f:\sp\vctools\crt_bld\self_x86\crt\src\signal.h
+FILE 2807 f:\sp\public\sdk\inc\tvout.h
+FILE 2808 f:\sp\public\sdk\inc\winsvc.h
+FILE 2809 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2810 f:\sp\public\sdk\inc\wingdi.h
+FILE 2811 f:\sp\vctools\crt_bld\self_x86\crt\src\float.h
+FILE 2812 f:\sp\vctools\crt_bld\self_x86\crt\src\crtwrn.h
+FILE 2813 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2814 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 2815 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 2816 f:\sp\public\sdk\inc\poppack.h
+FILE 2817 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 2818 f:\sp\public\sdk\inc\wincon.h
+FILE 2819 f:\sp\public\sdk\inc\imm.h
+FILE 2820 f:\sp\public\sdk\inc\winbase.h
+FILE 2821 f:\sp\public\sdk\inc\wingdi.h
+FILE 2822 f:\sp\public\sdk\inc\winver.h
+FILE 2823 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2824 f:\sp\public\sdk\inc\windows.h
+FILE 2825 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2826 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2827 f:\sp\public\sdk\inc\reason.h
+FILE 2828 f:\sp\vctools\crt_bld\self_x86\crt\src\w_str.c
+FILE 2829 f:\sp\public\sdk\inc\specstrings.h
+FILE 2830 f:\sp\public\sdk\inc\basetsd.h
+FILE 2831 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2832 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 2833 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2834 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2835 f:\sp\public\sdk\inc\stralign.h
+FILE 2836 f:\sp\public\sdk\inc\poppack.h
+FILE 2837 f:\sp\public\sdk\inc\winsvc.h
+FILE 2838 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2839 f:\sp\public\sdk\inc\windef.h
+FILE 2840 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2841 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2842 f:\sp\public\sdk\inc\winuser.h
+FILE 2843 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2844 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 2845 f:\sp\public\sdk\inc\mcx.h
+FILE 2846 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2847 f:\sp\public\sdk\inc\guiddef.h
+FILE 2848 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 2849 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 2850 f:\sp\public\sdk\inc\winnt.h
+FILE 2851 f:\sp\public\sdk\inc\winnls.h
+FILE 2852 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2853 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2854 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 2855 f:\sp\public\sdk\inc\winerror.h
+FILE 2856 f:\sp\public\sdk\inc\winreg.h
+FILE 2857 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2858 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2859 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2860 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2861 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2862 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 2863 f:\sp\public\sdk\inc\tvout.h
+FILE 2864 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2865 f:\sp\public\sdk\inc\wincon.h
+FILE 2866 f:\sp\public\sdk\inc\imm.h
+FILE 2867 f:\sp\public\sdk\inc\winbase.h
+FILE 2868 f:\sp\public\sdk\inc\wingdi.h
+FILE 2869 f:\sp\public\sdk\inc\winver.h
+FILE 2870 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2871 f:\sp\public\sdk\inc\windows.h
+FILE 2872 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2873 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2874 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 2875 f:\sp\public\sdk\inc\reason.h
+FILE 2876 f:\sp\vctools\crt_bld\self_x86\crt\src\w_loc.c
+FILE 2877 f:\sp\public\sdk\inc\specstrings.h
+FILE 2878 f:\sp\public\sdk\inc\basetsd.h
+FILE 2879 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2880 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 2881 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2882 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2883 f:\sp\public\sdk\inc\stralign.h
+FILE 2884 f:\sp\public\sdk\inc\poppack.h
+FILE 2885 f:\sp\public\sdk\inc\winsvc.h
+FILE 2886 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2887 f:\sp\public\sdk\inc\windef.h
+FILE 2888 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2889 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2890 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2891 f:\sp\public\sdk\inc\winuser.h
+FILE 2892 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2893 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 2894 f:\sp\public\sdk\inc\mcx.h
+FILE 2895 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 2896 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2897 f:\sp\public\sdk\inc\guiddef.h
+FILE 2898 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 2899 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 2900 f:\sp\public\sdk\inc\winnt.h
+FILE 2901 f:\sp\public\sdk\inc\winnls.h
+FILE 2902 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2903 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2904 f:\sp\public\sdk\inc\winerror.h
+FILE 2905 f:\sp\public\sdk\inc\winreg.h
+FILE 2906 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2907 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2908 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2909 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2910 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 2911 f:\sp\public\sdk\inc\tvout.h
+FILE 2912 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2913 f:\sp\public\sdk\inc\poppack.h
+FILE 2914 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 2915 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 2916 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2917 f:\sp\public\sdk\inc\imm.h
+FILE 2918 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2919 f:\sp\public\sdk\inc\windef.h
+FILE 2920 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 2921 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 2922 f:\sp\public\sdk\inc\pshpack1.h
+FILE 2923 f:\sp\public\sdk\inc\winver.h
+FILE 2924 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2925 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 2926 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2927 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2928 f:\sp\public\sdk\inc\winnt.h
+FILE 2929 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 2930 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 2931 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 2932 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 2933 f:\sp\public\sdk\inc\winreg.h
+FILE 2934 f:\sp\vctools\crt_bld\self_x86\crt\src\convrtcp.c
+FILE 2935 f:\sp\public\sdk\inc\winbase.h
+FILE 2936 f:\sp\public\sdk\inc\winerror.h
+FILE 2937 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2938 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 2939 f:\sp\public\sdk\inc\reason.h
+FILE 2940 f:\sp\public\sdk\inc\wincon.h
+FILE 2941 f:\sp\public\sdk\inc\ddbanned.h
+FILE 2942 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 2943 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 2944 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2945 f:\sp\public\sdk\inc\mcx.h
+FILE 2946 f:\sp\public\sdk\inc\winuser.h
+FILE 2947 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2948 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 2949 f:\sp\public\sdk\inc\winnls.h
+FILE 2950 f:\sp\public\sdk\inc\guiddef.h
+FILE 2951 f:\sp\public\sdk\inc\windows.h
+FILE 2952 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2953 f:\sp\public\sdk\inc\specstrings.h
+FILE 2954 f:\sp\public\sdk\inc\basetsd.h
+FILE 2955 f:\sp\public\sdk\inc\stralign.h
+FILE 2956 f:\sp\public\sdk\inc\tvout.h
+FILE 2957 f:\sp\public\sdk\inc\winsvc.h
+FILE 2958 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 2959 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2960 f:\sp\public\sdk\inc\wingdi.h
+FILE 2961 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 2962 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2963 f:\sp\public\sdk\inc\winerror.h
+FILE 2964 f:\sp\public\sdk\inc\pshpack8.h
+FILE 2965 f:\sp\public\sdk\inc\reason.h
+FILE 2966 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 2967 f:\sp\public\sdk\inc\wincon.h
+FILE 2968 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 2969 f:\sp\public\sdk\inc\pshpack2.h
+FILE 2970 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 2971 f:\sp\public\sdk\inc\mcx.h
+FILE 2972 f:\sp\public\sdk\inc\winuser.h
+FILE 2973 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 2974 f:\sp\public\sdk\inc\winnls.h
+FILE 2975 f:\sp\public\sdk\inc\guiddef.h
+FILE 2976 f:\sp\public\sdk\inc\windows.h
+FILE 2977 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h
+FILE 2978 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 2979 f:\sp\public\sdk\inc\specstrings.h
+FILE 2980 f:\sp\public\sdk\inc\basetsd.h
+FILE 2981 f:\sp\public\sdk\inc\stralign.h
+FILE 2982 f:\sp\public\sdk\inc\tvout.h
+FILE 2983 f:\sp\public\sdk\inc\winsvc.h
+FILE 2984 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 2985 f:\sp\public\sdk\inc\wingdi.h
+FILE 2986 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 2987 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 2988 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 2989 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 2990 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 2991 f:\sp\public\sdk\inc\pshpack4.h
+FILE 2992 f:\sp\public\sdk\inc\poppack.h
+FILE 2993 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 2994 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 2995 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.c
+FILE 2996 f:\sp\public\sdk\inc\winnetwk.h
+FILE 2997 f:\sp\public\sdk\inc\imm.h
+FILE 2998 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 2999 f:\sp\public\sdk\inc\windef.h
+FILE 3000 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3001 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3002 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3003 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3004 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3005 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3006 f:\sp\public\sdk\inc\winver.h
+FILE 3007 f:\sp\public\sdk\inc\winnt.h
+FILE 3008 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3009 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 3010 f:\sp\public\sdk\inc\winreg.h
+FILE 3011 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 3012 f:\sp\public\sdk\inc\winbase.h
+FILE 3013 f:\sp\public\sdk\inc\poppack.h
+FILE 3014 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 3015 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 3016 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3017 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3018 f:\sp\public\sdk\inc\imm.h
+FILE 3019 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3020 f:\sp\public\sdk\inc\windef.h
+FILE 3021 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 3022 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 3023 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3024 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3025 f:\sp\public\sdk\inc\winver.h
+FILE 3026 f:\sp\public\sdk\inc\windows.h
+FILE 3027 f:\sp\public\sdk\inc\winnt.h
+FILE 3028 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3029 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 3030 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3031 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3032 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3033 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 3034 f:\sp\public\sdk\inc\winreg.h
+FILE 3035 f:\sp\public\sdk\inc\winbase.h
+FILE 3036 f:\sp\vctools\crt_bld\self_x86\crt\src\setenv.c
+FILE 3037 f:\sp\public\sdk\inc\winerror.h
+FILE 3038 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3039 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 3040 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3041 f:\sp\public\sdk\inc\reason.h
+FILE 3042 f:\sp\public\sdk\inc\wincon.h
+FILE 3043 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3044 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3045 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3046 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3047 f:\sp\public\sdk\inc\mcx.h
+FILE 3048 f:\sp\public\sdk\inc\winuser.h
+FILE 3049 f:\sp\public\sdk\inc\winnls.h
+FILE 3050 f:\sp\public\sdk\inc\guiddef.h
+FILE 3051 f:\sp\public\sdk\inc\specstrings.h
+FILE 3052 f:\sp\public\sdk\inc\basetsd.h
+FILE 3053 f:\sp\public\sdk\inc\stralign.h
+FILE 3054 f:\sp\public\sdk\inc\tvout.h
+FILE 3055 f:\sp\public\sdk\inc\winsvc.h
+FILE 3056 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3057 f:\sp\public\sdk\inc\wingdi.h
+FILE 3058 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3059 f:\sp\public\sdk\inc\poppack.h
+FILE 3060 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3061 f:\sp\public\sdk\inc\imm.h
+FILE 3062 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3063 f:\sp\public\sdk\inc\windef.h
+FILE 3064 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3065 f:\sp\public\sdk\inc\winver.h
+FILE 3066 f:\sp\public\sdk\inc\windows.h
+FILE 3067 f:\sp\public\sdk\inc\winnt.h
+FILE 3068 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3069 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3070 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3071 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3072 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3073 f:\sp\public\sdk\inc\winreg.h
+FILE 3074 f:\sp\public\sdk\inc\winbase.h
+FILE 3075 f:\sp\vctools\crt_bld\self_x86\crt\src\rand_s.c
+FILE 3076 f:\sp\public\sdk\inc\winerror.h
+FILE 3077 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3078 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 3079 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3080 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 3081 f:\sp\public\sdk\inc\reason.h
+FILE 3082 f:\sp\public\sdk\inc\wincon.h
+FILE 3083 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3084 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3085 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3086 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3087 f:\sp\public\sdk\inc\mcx.h
+FILE 3088 f:\sp\public\sdk\inc\winuser.h
+FILE 3089 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 3090 f:\sp\public\sdk\inc\winnls.h
+FILE 3091 f:\sp\public\sdk\inc\guiddef.h
+FILE 3092 f:\sp\public\sdk\inc\specstrings.h
+FILE 3093 f:\sp\public\sdk\inc\basetsd.h
+FILE 3094 f:\sp\public\sdk\inc\stralign.h
+FILE 3095 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 3096 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3097 f:\sp\public\sdk\inc\tvout.h
+FILE 3098 f:\sp\public\sdk\inc\winsvc.h
+FILE 3099 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3100 f:\sp\public\sdk\inc\wingdi.h
+FILE 3101 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3102 f:\sp\public\sdk\inc\poppack.h
+FILE 3103 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 3104 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3105 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3106 f:\sp\public\sdk\inc\imm.h
+FILE 3107 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3108 f:\sp\public\sdk\inc\windef.h
+FILE 3109 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3110 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3111 f:\sp\public\sdk\inc\winver.h
+FILE 3112 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 3113 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3114 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3115 f:\sp\public\sdk\inc\winnt.h
+FILE 3116 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3117 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 3118 f:\sp\public\sdk\inc\winreg.h
+FILE 3119 f:\sp\vctools\crt_bld\self_x86\crt\src\purevirt.c
+FILE 3120 f:\sp\public\sdk\inc\winbase.h
+FILE 3121 f:\sp\public\sdk\inc\winerror.h
+FILE 3122 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3123 f:\sp\public\sdk\inc\reason.h
+FILE 3124 f:\sp\public\sdk\inc\wincon.h
+FILE 3125 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3126 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3127 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3128 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3129 f:\sp\public\sdk\inc\mcx.h
+FILE 3130 f:\sp\public\sdk\inc\winuser.h
+FILE 3131 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3132 f:\sp\public\sdk\inc\winnls.h
+FILE 3133 f:\sp\public\sdk\inc\guiddef.h
+FILE 3134 f:\sp\public\sdk\inc\windows.h
+FILE 3135 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3136 f:\sp\public\sdk\inc\specstrings.h
+FILE 3137 f:\sp\public\sdk\inc\basetsd.h
+FILE 3138 f:\sp\public\sdk\inc\stralign.h
+FILE 3139 f:\sp\public\sdk\inc\tvout.h
+FILE 3140 f:\sp\public\sdk\inc\winsvc.h
+FILE 3141 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3142 f:\sp\public\sdk\inc\wingdi.h
+FILE 3143 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3144 f:\sp\public\sdk\inc\poppack.h
+FILE 3145 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3146 f:\sp\public\sdk\inc\imm.h
+FILE 3147 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3148 f:\sp\public\sdk\inc\windef.h
+FILE 3149 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3150 f:\sp\public\sdk\inc\winver.h
+FILE 3151 f:\sp\public\sdk\inc\windows.h
+FILE 3152 f:\sp\public\sdk\inc\winnt.h
+FILE 3153 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3154 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3155 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3156 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3157 f:\sp\public\sdk\inc\winreg.h
+FILE 3158 f:\sp\public\sdk\inc\winbase.h
+FILE 3159 f:\sp\vctools\crt_bld\self_x86\crt\src\pesect.c
+FILE 3160 f:\sp\public\sdk\inc\winerror.h
+FILE 3161 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3162 f:\sp\public\sdk\inc\reason.h
+FILE 3163 f:\sp\public\sdk\inc\wincon.h
+FILE 3164 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3165 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3166 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3167 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3168 f:\sp\public\sdk\inc\mcx.h
+FILE 3169 f:\sp\public\sdk\inc\winuser.h
+FILE 3170 f:\sp\public\sdk\inc\winnls.h
+FILE 3171 f:\sp\public\sdk\inc\guiddef.h
+FILE 3172 f:\sp\public\sdk\inc\specstrings.h
+FILE 3173 f:\sp\public\sdk\inc\basetsd.h
+FILE 3174 f:\sp\public\sdk\inc\stralign.h
+FILE 3175 f:\sp\public\sdk\inc\tvout.h
+FILE 3176 f:\sp\public\sdk\inc\winsvc.h
+FILE 3177 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3178 f:\sp\public\sdk\inc\wingdi.h
+FILE 3179 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3180 f:\sp\public\sdk\inc\winerror.h
+FILE 3181 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3182 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3183 f:\sp\public\sdk\inc\winver.h
+FILE 3184 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3185 f:\sp\public\sdk\inc\winreg.h
+FILE 3186 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 3187 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 3188 f:\sp\public\sdk\inc\guiddef.h
+FILE 3189 f:\sp\public\sdk\inc\windows.h
+FILE 3190 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3191 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h
+FILE 3192 f:\sp\public\sdk\inc\specstrings.h
+FILE 3193 f:\sp\public\sdk\inc\basetsd.h
+FILE 3194 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3195 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 3196 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3197 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3198 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3199 f:\sp\public\sdk\inc\reason.h
+FILE 3200 f:\sp\public\sdk\inc\wincon.h
+FILE 3201 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3202 f:\sp\public\sdk\inc\poppack.h
+FILE 3203 f:\sp\public\sdk\inc\mcx.h
+FILE 3204 f:\sp\public\sdk\inc\winuser.h
+FILE 3205 f:\sp\public\sdk\inc\winnls.h
+FILE 3206 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsdata2.c
+FILE 3207 f:\sp\public\sdk\inc\stralign.h
+FILE 3208 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3209 f:\sp\public\sdk\inc\windef.h
+FILE 3210 f:\sp\public\sdk\inc\tvout.h
+FILE 3211 f:\sp\public\sdk\inc\winsvc.h
+FILE 3212 f:\sp\public\sdk\inc\wingdi.h
+FILE 3213 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3214 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3215 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3216 f:\sp\public\sdk\inc\winnt.h
+FILE 3217 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3218 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3219 f:\sp\public\sdk\inc\imm.h
+FILE 3220 f:\sp\public\sdk\inc\winbase.h
+FILE 3221 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3222 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3223 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3224 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsdata1.c
+FILE 3225 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3226 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3227 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3228 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3229 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsint.h
+FILE 3230 f:\sp\public\sdk\inc\reason.h
+FILE 3231 f:\sp\public\sdk\inc\wincon.h
+FILE 3232 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3233 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3234 f:\sp\public\sdk\inc\mcx.h
+FILE 3235 f:\sp\public\sdk\inc\winuser.h
+FILE 3236 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3237 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 3238 f:\sp\public\sdk\inc\winnls.h
+FILE 3239 f:\sp\public\sdk\inc\guiddef.h
+FILE 3240 f:\sp\public\sdk\inc\windows.h
+FILE 3241 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 3242 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3243 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 3244 f:\sp\public\sdk\inc\specstrings.h
+FILE 3245 f:\sp\public\sdk\inc\basetsd.h
+FILE 3246 f:\sp\public\sdk\inc\stralign.h
+FILE 3247 f:\sp\public\sdk\inc\tvout.h
+FILE 3248 f:\sp\public\sdk\inc\winsvc.h
+FILE 3249 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3250 f:\sp\public\sdk\inc\wingdi.h
+FILE 3251 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3252 f:\sp\public\sdk\inc\poppack.h
+FILE 3253 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h
+FILE 3254 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3255 f:\sp\public\sdk\inc\imm.h
+FILE 3256 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3257 f:\sp\public\sdk\inc\windef.h
+FILE 3258 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 3259 f:\sp\vctools\crt_bld\self_x86\crt\src\onexit.c
+FILE 3260 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3261 f:\sp\public\sdk\inc\winver.h
+FILE 3262 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 3263 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3264 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3265 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3266 f:\sp\public\sdk\inc\winnt.h
+FILE 3267 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3268 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3269 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3270 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3271 f:\sp\public\sdk\inc\winreg.h
+FILE 3272 f:\sp\public\sdk\inc\winbase.h
+FILE 3273 f:\sp\public\sdk\inc\winerror.h
+FILE 3274 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 3275 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3276 f:\sp\public\sdk\inc\winbase.h
+FILE 3277 f:\sp\public\sdk\inc\winerror.h
+FILE 3278 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3279 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3280 f:\sp\public\sdk\inc\winver.h
+FILE 3281 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3282 f:\sp\public\sdk\inc\winreg.h
+FILE 3283 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 3284 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 3285 f:\sp\public\sdk\inc\guiddef.h
+FILE 3286 f:\sp\public\sdk\inc\windows.h
+FILE 3287 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 3288 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3289 f:\sp\public\sdk\inc\specstrings.h
+FILE 3290 f:\sp\public\sdk\inc\basetsd.h
+FILE 3291 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3292 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3293 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3294 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3295 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3296 f:\sp\public\sdk\inc\reason.h
+FILE 3297 f:\sp\public\sdk\inc\wincon.h
+FILE 3298 f:\sp\public\sdk\inc\poppack.h
+FILE 3299 f:\sp\public\sdk\inc\mcx.h
+FILE 3300 f:\sp\public\sdk\inc\winuser.h
+FILE 3301 f:\sp\public\sdk\inc\winnls.h
+FILE 3302 f:\sp\vctools\crt_bld\self_x86\crt\src\lconv.c
+FILE 3303 f:\sp\public\sdk\inc\stralign.h
+FILE 3304 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3305 f:\sp\public\sdk\inc\windef.h
+FILE 3306 f:\sp\public\sdk\inc\tvout.h
+FILE 3307 f:\sp\public\sdk\inc\winsvc.h
+FILE 3308 f:\sp\public\sdk\inc\wingdi.h
+FILE 3309 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3310 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3311 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3312 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 3313 f:\sp\public\sdk\inc\winnt.h
+FILE 3314 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3315 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3316 f:\sp\public\sdk\inc\imm.h
+FILE 3317 f:\sp\public\sdk\inc\guiddef.h
+FILE 3318 f:\sp\public\sdk\inc\winnt.h
+FILE 3319 f:\sp\public\sdk\inc\winnls.h
+FILE 3320 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3321 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3322 f:\sp\public\sdk\inc\winerror.h
+FILE 3323 f:\sp\public\sdk\inc\winreg.h
+FILE 3324 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3325 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 3326 f:\sp\public\sdk\inc\tvout.h
+FILE 3327 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3328 f:\sp\vctools\crt_bld\self_x86\crt\src\invarg.c
+FILE 3329 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3330 f:\sp\public\sdk\inc\wincon.h
+FILE 3331 f:\sp\public\sdk\inc\imm.h
+FILE 3332 f:\sp\public\sdk\inc\winbase.h
+FILE 3333 f:\sp\public\sdk\inc\wingdi.h
+FILE 3334 f:\sp\public\sdk\inc\winver.h
+FILE 3335 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3336 f:\sp\public\sdk\inc\windows.h
+FILE 3337 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3338 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3339 f:\sp\public\sdk\inc\reason.h
+FILE 3340 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h
+FILE 3341 f:\sp\public\sdk\inc\specstrings.h
+FILE 3342 f:\sp\public\sdk\inc\basetsd.h
+FILE 3343 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3344 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 3345 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3346 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 3347 f:\sp\public\sdk\inc\stralign.h
+FILE 3348 f:\sp\public\sdk\inc\poppack.h
+FILE 3349 f:\sp\public\sdk\inc\winsvc.h
+FILE 3350 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3351 f:\sp\public\sdk\inc\windef.h
+FILE 3352 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 3353 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3354 f:\sp\public\sdk\inc\winuser.h
+FILE 3355 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3356 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3357 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3358 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3359 f:\sp\public\sdk\inc\mcx.h
+FILE 3360 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3361 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 3362 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 3363 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3364 f:\sp\public\sdk\inc\poppack.h
+FILE 3365 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 3366 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 3367 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3368 f:\sp\public\sdk\inc\imm.h
+FILE 3369 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3370 f:\sp\public\sdk\inc\windef.h
+FILE 3371 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3372 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3373 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3374 f:\sp\public\sdk\inc\winver.h
+FILE 3375 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3376 f:\sp\public\sdk\inc\winnt.h
+FILE 3377 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3378 f:\sp\public\sdk\inc\winreg.h
+FILE 3379 f:\sp\vctools\crt_bld\self_x86\crt\src\inittime.c
+FILE 3380 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 3381 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3382 f:\sp\public\sdk\inc\winbase.h
+FILE 3383 f:\sp\public\sdk\inc\winerror.h
+FILE 3384 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3385 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 3386 f:\sp\public\sdk\inc\reason.h
+FILE 3387 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3388 f:\sp\public\sdk\inc\wincon.h
+FILE 3389 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3390 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3391 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3392 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3393 f:\sp\public\sdk\inc\mcx.h
+FILE 3394 f:\sp\public\sdk\inc\winuser.h
+FILE 3395 f:\sp\public\sdk\inc\winnls.h
+FILE 3396 f:\sp\public\sdk\inc\guiddef.h
+FILE 3397 f:\sp\public\sdk\inc\stralign.h
+FILE 3398 f:\sp\public\sdk\inc\specstrings.h
+FILE 3399 f:\sp\public\sdk\inc\basetsd.h
+FILE 3400 f:\sp\public\sdk\inc\windows.h
+FILE 3401 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3402 f:\sp\public\sdk\inc\tvout.h
+FILE 3403 f:\sp\public\sdk\inc\winsvc.h
+FILE 3404 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3405 f:\sp\public\sdk\inc\wingdi.h
+FILE 3406 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 3407 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 3408 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3409 f:\sp\public\sdk\inc\poppack.h
+FILE 3410 f:\sp\public\sdk\inc\winnt.h
+FILE 3411 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3412 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 3413 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 3414 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3415 f:\sp\public\sdk\inc\imm.h
+FILE 3416 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3417 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3418 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3419 f:\sp\public\sdk\inc\winver.h
+FILE 3420 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3421 f:\sp\public\sdk\inc\guiddef.h
+FILE 3422 f:\sp\public\sdk\inc\specstrings.h
+FILE 3423 f:\sp\public\sdk\inc\basetsd.h
+FILE 3424 f:\sp\public\sdk\inc\windows.h
+FILE 3425 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3426 f:\sp\public\sdk\inc\winreg.h
+FILE 3427 f:\sp\vctools\crt_bld\self_x86\crt\src\initnum.c
+FILE 3428 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsint.h
+FILE 3429 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 3430 f:\sp\public\sdk\inc\winbase.h
+FILE 3431 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3432 f:\sp\public\sdk\inc\winerror.h
+FILE 3433 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3434 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 3435 f:\sp\public\sdk\inc\reason.h
+FILE 3436 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3437 f:\sp\public\sdk\inc\wincon.h
+FILE 3438 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3439 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3440 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3441 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3442 f:\sp\public\sdk\inc\mcx.h
+FILE 3443 f:\sp\public\sdk\inc\winuser.h
+FILE 3444 f:\sp\public\sdk\inc\winnls.h
+FILE 3445 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3446 f:\sp\public\sdk\inc\windef.h
+FILE 3447 f:\sp\public\sdk\inc\stralign.h
+FILE 3448 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3449 f:\sp\public\sdk\inc\tvout.h
+FILE 3450 f:\sp\public\sdk\inc\winsvc.h
+FILE 3451 f:\sp\public\sdk\inc\wingdi.h
+FILE 3452 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 3453 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 3454 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3455 f:\sp\public\sdk\inc\poppack.h
+FILE 3456 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 3457 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 3458 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3459 f:\sp\public\sdk\inc\imm.h
+FILE 3460 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3461 f:\sp\public\sdk\inc\windef.h
+FILE 3462 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3463 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3464 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3465 f:\sp\public\sdk\inc\winver.h
+FILE 3466 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3467 f:\sp\public\sdk\inc\winnt.h
+FILE 3468 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3469 f:\sp\public\sdk\inc\winreg.h
+FILE 3470 f:\sp\vctools\crt_bld\self_x86\crt\src\initmon.c
+FILE 3471 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 3472 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3473 f:\sp\public\sdk\inc\winbase.h
+FILE 3474 f:\sp\public\sdk\inc\winerror.h
+FILE 3475 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3476 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 3477 f:\sp\public\sdk\inc\reason.h
+FILE 3478 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3479 f:\sp\public\sdk\inc\wincon.h
+FILE 3480 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3481 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3482 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3483 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3484 f:\sp\public\sdk\inc\mcx.h
+FILE 3485 f:\sp\public\sdk\inc\winuser.h
+FILE 3486 f:\sp\public\sdk\inc\winnls.h
+FILE 3487 f:\sp\public\sdk\inc\guiddef.h
+FILE 3488 f:\sp\public\sdk\inc\stralign.h
+FILE 3489 f:\sp\public\sdk\inc\specstrings.h
+FILE 3490 f:\sp\public\sdk\inc\basetsd.h
+FILE 3491 f:\sp\public\sdk\inc\windows.h
+FILE 3492 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3493 f:\sp\public\sdk\inc\tvout.h
+FILE 3494 f:\sp\public\sdk\inc\winsvc.h
+FILE 3495 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3496 f:\sp\public\sdk\inc\wingdi.h
+FILE 3497 f:\sp\public\sdk\inc\winbase.h
+FILE 3498 f:\sp\public\sdk\inc\winerror.h
+FILE 3499 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3500 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3501 f:\sp\public\sdk\inc\winver.h
+FILE 3502 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3503 f:\sp\public\sdk\inc\winreg.h
+FILE 3504 f:\sp\public\sdk\inc\guiddef.h
+FILE 3505 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 3506 f:\sp\public\sdk\inc\specstrings.h
+FILE 3507 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 3508 f:\sp\public\sdk\inc\basetsd.h
+FILE 3509 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 3510 f:\sp\public\sdk\inc\windows.h
+FILE 3511 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 3512 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3513 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3514 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3515 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 3516 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3517 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3518 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3519 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3520 f:\sp\public\sdk\inc\reason.h
+FILE 3521 f:\sp\public\sdk\inc\wincon.h
+FILE 3522 f:\sp\public\sdk\inc\poppack.h
+FILE 3523 f:\sp\vctools\crt_bld\self_x86\crt\src\inithelp.c
+FILE 3524 f:\sp\public\sdk\inc\mcx.h
+FILE 3525 f:\sp\public\sdk\inc\winuser.h
+FILE 3526 f:\sp\public\sdk\inc\winnls.h
+FILE 3527 f:\sp\public\sdk\inc\stralign.h
+FILE 3528 f:\sp\public\sdk\inc\tvout.h
+FILE 3529 f:\sp\public\sdk\inc\winsvc.h
+FILE 3530 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3531 f:\sp\public\sdk\inc\wingdi.h
+FILE 3532 f:\sp\public\sdk\inc\windef.h
+FILE 3533 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3534 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3535 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3536 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 3537 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 3538 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3539 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3540 f:\sp\public\sdk\inc\imm.h
+FILE 3541 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 3542 f:\sp\public\sdk\inc\winnt.h
+FILE 3543 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3544 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 3545 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3546 f:\sp\public\sdk\inc\poppack.h
+FILE 3547 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 3548 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 3549 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 3550 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3551 f:\sp\public\sdk\inc\imm.h
+FILE 3552 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3553 f:\sp\public\sdk\inc\windef.h
+FILE 3554 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3555 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3556 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3557 f:\sp\public\sdk\inc\winver.h
+FILE 3558 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3559 f:\sp\public\sdk\inc\winnt.h
+FILE 3560 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3561 f:\sp\public\sdk\inc\winreg.h
+FILE 3562 f:\sp\vctools\crt_bld\self_x86\crt\src\initctyp.c
+FILE 3563 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 3564 f:\sp\public\sdk\inc\winbase.h
+FILE 3565 f:\sp\public\sdk\inc\winerror.h
+FILE 3566 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3567 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 3568 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 3569 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3570 f:\sp\public\sdk\inc\reason.h
+FILE 3571 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3572 f:\sp\public\sdk\inc\wincon.h
+FILE 3573 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3574 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3575 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3576 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3577 f:\sp\public\sdk\inc\mcx.h
+FILE 3578 f:\sp\public\sdk\inc\winuser.h
+FILE 3579 f:\sp\public\sdk\inc\winnls.h
+FILE 3580 f:\sp\public\sdk\inc\guiddef.h
+FILE 3581 f:\sp\public\sdk\inc\stralign.h
+FILE 3582 f:\sp\public\sdk\inc\specstrings.h
+FILE 3583 f:\sp\public\sdk\inc\basetsd.h
+FILE 3584 f:\sp\public\sdk\inc\windows.h
+FILE 3585 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3586 f:\sp\public\sdk\inc\tvout.h
+FILE 3587 f:\sp\public\sdk\inc\winsvc.h
+FILE 3588 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3589 f:\sp\public\sdk\inc\wingdi.h
+FILE 3590 f:\sp\public\sdk\inc\poppack.h
+FILE 3591 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 3592 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3593 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3594 f:\sp\public\sdk\inc\imm.h
+FILE 3595 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3596 f:\sp\public\sdk\inc\windef.h
+FILE 3597 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3598 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3599 f:\sp\public\sdk\inc\winver.h
+FILE 3600 f:\sp\public\sdk\inc\windows.h
+FILE 3601 f:\sp\public\sdk\inc\winnt.h
+FILE 3602 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3603 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3604 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3605 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3606 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 3607 f:\sp\public\sdk\inc\winreg.h
+FILE 3608 f:\sp\public\sdk\inc\winbase.h
+FILE 3609 f:\sp\vctools\crt_bld\self_x86\crt\src\initcrit.c
+FILE 3610 f:\sp\public\sdk\inc\winerror.h
+FILE 3611 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3612 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 3613 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3614 f:\sp\public\sdk\inc\reason.h
+FILE 3615 f:\sp\public\sdk\inc\wincon.h
+FILE 3616 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3617 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3618 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3619 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3620 f:\sp\public\sdk\inc\mcx.h
+FILE 3621 f:\sp\public\sdk\inc\winuser.h
+FILE 3622 f:\sp\public\sdk\inc\winnls.h
+FILE 3623 f:\sp\public\sdk\inc\guiddef.h
+FILE 3624 f:\sp\public\sdk\inc\specstrings.h
+FILE 3625 f:\sp\public\sdk\inc\basetsd.h
+FILE 3626 f:\sp\public\sdk\inc\stralign.h
+FILE 3627 f:\sp\public\sdk\inc\tvout.h
+FILE 3628 f:\sp\public\sdk\inc\winsvc.h
+FILE 3629 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3630 f:\sp\public\sdk\inc\wingdi.h
+FILE 3631 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3632 f:\sp\public\sdk\inc\poppack.h
+FILE 3633 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 3634 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 3635 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3636 f:\sp\public\sdk\inc\imm.h
+FILE 3637 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3638 f:\sp\public\sdk\inc\windef.h
+FILE 3639 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3640 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3641 f:\sp\public\sdk\inc\winver.h
+FILE 3642 f:\sp\public\sdk\inc\windows.h
+FILE 3643 f:\sp\public\sdk\inc\winnt.h
+FILE 3644 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3645 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3646 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3647 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3648 f:\sp\public\sdk\inc\winreg.h
+FILE 3649 f:\sp\public\sdk\inc\winbase.h
+FILE 3650 f:\sp\vctools\crt_bld\self_x86\crt\src\initcoll.c
+FILE 3651 f:\sp\public\sdk\inc\winerror.h
+FILE 3652 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3653 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 3654 f:\sp\public\sdk\inc\reason.h
+FILE 3655 f:\sp\public\sdk\inc\wincon.h
+FILE 3656 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3657 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3658 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3659 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3660 f:\sp\public\sdk\inc\mcx.h
+FILE 3661 f:\sp\public\sdk\inc\winuser.h
+FILE 3662 f:\sp\public\sdk\inc\winnls.h
+FILE 3663 f:\sp\public\sdk\inc\guiddef.h
+FILE 3664 f:\sp\public\sdk\inc\specstrings.h
+FILE 3665 f:\sp\public\sdk\inc\basetsd.h
+FILE 3666 f:\sp\public\sdk\inc\stralign.h
+FILE 3667 f:\sp\public\sdk\inc\tvout.h
+FILE 3668 f:\sp\public\sdk\inc\winsvc.h
+FILE 3669 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3670 f:\sp\public\sdk\inc\wingdi.h
+FILE 3671 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3672 f:\sp\public\sdk\inc\poppack.h
+FILE 3673 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3674 f:\sp\public\sdk\inc\imm.h
+FILE 3675 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3676 f:\sp\public\sdk\inc\windef.h
+FILE 3677 f:\binaries.x86ret\vcboot\inc\mm3dnow.h
+FILE 3678 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3679 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 3680 f:\sp\public\sdk\inc\winver.h
+FILE 3681 f:\sp\public\sdk\inc\windows.h
+FILE 3682 f:\sp\public\sdk\inc\winnt.h
+FILE 3683 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3684 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3685 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3686 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3687 f:\sp\public\sdk\inc\winreg.h
+FILE 3688 f:\sp\public\sdk\inc\winbase.h
+FILE 3689 f:\sp\vctools\crt_bld\self_x86\crt\src\gs_support.c
+FILE 3690 f:\sp\public\sdk\inc\winerror.h
+FILE 3691 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3692 f:\sp\vctools\crt_bld\self_x86\crt\src\intrin.h
+FILE 3693 f:\sp\vctools\crt_bld\self_x86\crt\src\setjmp.h
+FILE 3694 f:\sp\public\sdk\inc\reason.h
+FILE 3695 f:\sp\public\sdk\inc\wincon.h
+FILE 3696 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3697 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3698 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3699 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3700 f:\sp\public\sdk\inc\mcx.h
+FILE 3701 f:\sp\public\sdk\inc\winuser.h
+FILE 3702 f:\sp\public\sdk\inc\winnls.h
+FILE 3703 f:\sp\public\sdk\inc\guiddef.h
+FILE 3704 f:\sp\public\sdk\inc\specstrings.h
+FILE 3705 f:\sp\public\sdk\inc\basetsd.h
+FILE 3706 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 3707 f:\sp\public\sdk\inc\stralign.h
+FILE 3708 f:\sp\public\sdk\inc\tvout.h
+FILE 3709 f:\sp\public\sdk\inc\winsvc.h
+FILE 3710 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3711 f:\sp\public\sdk\inc\wingdi.h
+FILE 3712 f:\binaries.x86ret\vcboot\inc\emmintrin.h
+FILE 3713 f:\binaries.x86ret\vcboot\inc\xmmintrin.h
+FILE 3714 f:\binaries.x86ret\vcboot\inc\mmintrin.h
+FILE 3715 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3716 f:\sp\public\sdk\inc\poppack.h
+FILE 3717 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3718 f:\sp\public\sdk\inc\imm.h
+FILE 3719 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3720 f:\sp\public\sdk\inc\windef.h
+FILE 3721 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3722 f:\sp\public\sdk\inc\winver.h
+FILE 3723 f:\sp\public\sdk\inc\windows.h
+FILE 3724 f:\sp\public\sdk\inc\winnt.h
+FILE 3725 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3726 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3727 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3728 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3729 f:\sp\public\sdk\inc\winreg.h
+FILE 3730 f:\sp\public\sdk\inc\winbase.h
+FILE 3731 f:\sp\vctools\crt_bld\self_x86\crt\src\gs_report.c
+FILE 3732 f:\sp\public\sdk\inc\winerror.h
+FILE 3733 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3734 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 3735 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3736 f:\sp\public\sdk\inc\reason.h
+FILE 3737 f:\sp\public\sdk\inc\wincon.h
+FILE 3738 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3739 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3740 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3741 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3742 f:\sp\public\sdk\inc\mcx.h
+FILE 3743 f:\sp\public\sdk\inc\winuser.h
+FILE 3744 f:\sp\public\sdk\inc\winnls.h
+FILE 3745 f:\sp\public\sdk\inc\guiddef.h
+FILE 3746 f:\sp\public\sdk\inc\specstrings.h
+FILE 3747 f:\sp\public\sdk\inc\basetsd.h
+FILE 3748 f:\sp\public\sdk\inc\stralign.h
+FILE 3749 f:\sp\public\sdk\inc\tvout.h
+FILE 3750 f:\sp\public\sdk\inc\winsvc.h
+FILE 3751 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3752 f:\sp\public\sdk\inc\wingdi.h
+FILE 3753 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3754 f:\sp\public\sdk\inc\poppack.h
+FILE 3755 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3756 f:\sp\public\sdk\inc\imm.h
+FILE 3757 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3758 f:\sp\public\sdk\inc\windef.h
+FILE 3759 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3760 f:\sp\public\sdk\inc\winver.h
+FILE 3761 f:\sp\public\sdk\inc\windows.h
+FILE 3762 f:\sp\public\sdk\inc\winnt.h
+FILE 3763 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3764 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3765 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3766 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3767 f:\sp\public\sdk\inc\winreg.h
+FILE 3768 f:\sp\public\sdk\inc\winbase.h
+FILE 3769 f:\sp\vctools\crt_bld\self_x86\crt\src\gs_cookie.c
+FILE 3770 f:\sp\public\sdk\inc\winerror.h
+FILE 3771 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3772 f:\sp\public\sdk\inc\reason.h
+FILE 3773 f:\sp\public\sdk\inc\wincon.h
+FILE 3774 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3775 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3776 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3777 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3778 f:\sp\public\sdk\inc\mcx.h
+FILE 3779 f:\sp\public\sdk\inc\winuser.h
+FILE 3780 f:\sp\public\sdk\inc\winnls.h
+FILE 3781 f:\sp\public\sdk\inc\guiddef.h
+FILE 3782 f:\sp\public\sdk\inc\specstrings.h
+FILE 3783 f:\sp\public\sdk\inc\basetsd.h
+FILE 3784 f:\sp\public\sdk\inc\stralign.h
+FILE 3785 f:\sp\public\sdk\inc\tvout.h
+FILE 3786 f:\sp\public\sdk\inc\winsvc.h
+FILE 3787 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3788 f:\sp\public\sdk\inc\wingdi.h
+FILE 3789 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3790 f:\sp\public\sdk\inc\winerror.h
+FILE 3791 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3792 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3793 f:\sp\public\sdk\inc\winver.h
+FILE 3794 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3795 f:\sp\public\sdk\inc\winreg.h
+FILE 3796 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 3797 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 3798 f:\sp\public\sdk\inc\guiddef.h
+FILE 3799 f:\sp\public\sdk\inc\windows.h
+FILE 3800 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3801 f:\sp\public\sdk\inc\specstrings.h
+FILE 3802 f:\sp\public\sdk\inc\basetsd.h
+FILE 3803 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3804 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 3805 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3806 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3807 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3808 f:\sp\public\sdk\inc\reason.h
+FILE 3809 f:\sp\public\sdk\inc\wincon.h
+FILE 3810 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3811 f:\sp\public\sdk\inc\poppack.h
+FILE 3812 f:\sp\public\sdk\inc\mcx.h
+FILE 3813 f:\sp\public\sdk\inc\winuser.h
+FILE 3814 f:\sp\public\sdk\inc\winnls.h
+FILE 3815 f:\sp\vctools\crt_bld\self_x86\crt\src\glstatus.c
+FILE 3816 f:\sp\public\sdk\inc\stralign.h
+FILE 3817 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3818 f:\sp\public\sdk\inc\windef.h
+FILE 3819 f:\sp\public\sdk\inc\tvout.h
+FILE 3820 f:\sp\public\sdk\inc\winsvc.h
+FILE 3821 f:\sp\public\sdk\inc\wingdi.h
+FILE 3822 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3823 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3824 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3825 f:\sp\public\sdk\inc\winnt.h
+FILE 3826 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3827 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3828 f:\sp\public\sdk\inc\imm.h
+FILE 3829 f:\sp\public\sdk\inc\winbase.h
+FILE 3830 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3831 f:\sp\public\sdk\inc\poppack.h
+FILE 3832 f:\sp\public\sdk\inc\winnt.h
+FILE 3833 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3834 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3835 f:\sp\public\sdk\inc\imm.h
+FILE 3836 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3837 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3838 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3839 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3840 f:\sp\public\sdk\inc\winver.h
+FILE 3841 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3842 f:\sp\public\sdk\inc\guiddef.h
+FILE 3843 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 3844 f:\sp\public\sdk\inc\specstrings.h
+FILE 3845 f:\sp\public\sdk\inc\basetsd.h
+FILE 3846 f:\sp\public\sdk\inc\windows.h
+FILE 3847 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3848 f:\sp\public\sdk\inc\winreg.h
+FILE 3849 f:\sp\vctools\crt_bld\self_x86\crt\src\getqloc.c
+FILE 3850 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 3851 f:\sp\public\sdk\inc\winbase.h
+FILE 3852 f:\sp\public\sdk\inc\winerror.h
+FILE 3853 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 3854 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 3855 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3856 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 3857 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 3858 f:\sp\public\sdk\inc\reason.h
+FILE 3859 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3860 f:\sp\public\sdk\inc\wincon.h
+FILE 3861 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3862 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3863 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3864 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3865 f:\sp\public\sdk\inc\mcx.h
+FILE 3866 f:\sp\public\sdk\inc\winuser.h
+FILE 3867 f:\sp\public\sdk\inc\winnls.h
+FILE 3868 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3869 f:\sp\public\sdk\inc\windef.h
+FILE 3870 f:\sp\public\sdk\inc\stralign.h
+FILE 3871 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3872 f:\sp\public\sdk\inc\tvout.h
+FILE 3873 f:\sp\public\sdk\inc\winsvc.h
+FILE 3874 f:\sp\public\sdk\inc\wingdi.h
+FILE 3875 f:\sp\public\sdk\inc\reason.h
+FILE 3876 f:\sp\public\sdk\inc\wincon.h
+FILE 3877 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3878 f:\sp\public\sdk\inc\mcx.h
+FILE 3879 f:\sp\public\sdk\inc\winuser.h
+FILE 3880 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3881 f:\sp\public\sdk\inc\winnls.h
+FILE 3882 f:\sp\public\sdk\inc\guiddef.h
+FILE 3883 f:\sp\public\sdk\inc\windows.h
+FILE 3884 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3885 f:\sp\public\sdk\inc\specstrings.h
+FILE 3886 f:\sp\public\sdk\inc\basetsd.h
+FILE 3887 f:\sp\public\sdk\inc\stralign.h
+FILE 3888 f:\sp\public\sdk\inc\tvout.h
+FILE 3889 f:\sp\public\sdk\inc\winsvc.h
+FILE 3890 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3891 f:\sp\public\sdk\inc\wingdi.h
+FILE 3892 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3893 f:\sp\public\sdk\inc\poppack.h
+FILE 3894 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h
+FILE 3895 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 3896 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3897 f:\sp\public\sdk\inc\imm.h
+FILE 3898 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3899 f:\sp\public\sdk\inc\windef.h
+FILE 3900 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 3901 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 3902 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3903 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3904 f:\sp\vctools\crt_bld\self_x86\crt\src\getenv.c
+FILE 3905 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3906 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 3907 f:\sp\public\sdk\inc\winver.h
+FILE 3908 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 3909 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3910 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3911 f:\sp\public\sdk\inc\winnt.h
+FILE 3912 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3913 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3914 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3915 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3916 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 3917 f:\sp\public\sdk\inc\winreg.h
+FILE 3918 f:\sp\public\sdk\inc\winbase.h
+FILE 3919 f:\sp\public\sdk\inc\winerror.h
+FILE 3920 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3921 f:\sp\public\sdk\inc\poppack.h
+FILE 3922 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 3923 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3924 f:\sp\public\sdk\inc\imm.h
+FILE 3925 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3926 f:\sp\public\sdk\inc\windef.h
+FILE 3927 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3928 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3929 f:\sp\public\sdk\inc\winver.h
+FILE 3930 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 3931 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3932 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3933 f:\sp\public\sdk\inc\winnt.h
+FILE 3934 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3935 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 3936 f:\sp\public\sdk\inc\winreg.h
+FILE 3937 f:\sp\vctools\crt_bld\self_x86\crt\src\errmode.c
+FILE 3938 f:\sp\public\sdk\inc\winbase.h
+FILE 3939 f:\sp\public\sdk\inc\winerror.h
+FILE 3940 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3941 f:\sp\public\sdk\inc\reason.h
+FILE 3942 f:\sp\public\sdk\inc\wincon.h
+FILE 3943 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3944 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3945 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3946 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3947 f:\sp\public\sdk\inc\mcx.h
+FILE 3948 f:\sp\public\sdk\inc\winuser.h
+FILE 3949 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3950 f:\sp\public\sdk\inc\winnls.h
+FILE 3951 f:\sp\public\sdk\inc\guiddef.h
+FILE 3952 f:\sp\public\sdk\inc\windows.h
+FILE 3953 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3954 f:\sp\public\sdk\inc\specstrings.h
+FILE 3955 f:\sp\public\sdk\inc\basetsd.h
+FILE 3956 f:\sp\public\sdk\inc\stralign.h
+FILE 3957 f:\sp\public\sdk\inc\tvout.h
+FILE 3958 f:\sp\public\sdk\inc\winsvc.h
+FILE 3959 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 3960 f:\sp\public\sdk\inc\wingdi.h
+FILE 3961 f:\sp\public\sdk\inc\pshpack4.h
+FILE 3962 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 3963 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 3964 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3965 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3966 f:\sp\vctools\crt_bld\self_x86\crt\src\dbghook.c
+FILE 3967 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3968 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3969 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 3970 f:\sp\public\sdk\inc\poppack.h
+FILE 3971 f:\sp\public\sdk\inc\winnetwk.h
+FILE 3972 f:\sp\public\sdk\inc\imm.h
+FILE 3973 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 3974 f:\sp\public\sdk\inc\windef.h
+FILE 3975 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 3976 f:\sp\public\sdk\inc\pshpack1.h
+FILE 3977 f:\sp\public\sdk\inc\winver.h
+FILE 3978 f:\sp\public\sdk\inc\windows.h
+FILE 3979 f:\sp\public\sdk\inc\winnt.h
+FILE 3980 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 3981 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 3982 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 3983 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 3984 f:\sp\public\sdk\inc\winreg.h
+FILE 3985 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 3986 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.c
+FILE 3987 f:\sp\public\sdk\inc\winbase.h
+FILE 3988 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 3989 f:\sp\public\sdk\inc\winerror.h
+FILE 3990 f:\sp\public\sdk\inc\pshpack8.h
+FILE 3991 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 3992 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 3993 f:\sp\public\sdk\inc\reason.h
+FILE 3994 f:\sp\public\sdk\inc\wincon.h
+FILE 3995 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 3996 f:\sp\public\sdk\inc\ddbanned.h
+FILE 3997 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 3998 f:\sp\public\sdk\inc\pshpack2.h
+FILE 3999 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4000 f:\sp\public\sdk\inc\mcx.h
+FILE 4001 f:\sp\public\sdk\inc\winuser.h
+FILE 4002 f:\sp\public\sdk\inc\winnls.h
+FILE 4003 f:\sp\public\sdk\inc\guiddef.h
+FILE 4004 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 4005 f:\sp\public\sdk\inc\specstrings.h
+FILE 4006 f:\sp\public\sdk\inc\basetsd.h
+FILE 4007 f:\sp\public\sdk\inc\stralign.h
+FILE 4008 f:\sp\public\sdk\inc\tvout.h
+FILE 4009 f:\sp\public\sdk\inc\winsvc.h
+FILE 4010 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4011 f:\sp\public\sdk\inc\wingdi.h
+FILE 4012 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4013 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4014 f:\sp\public\sdk\inc\mcx.h
+FILE 4015 f:\sp\public\sdk\inc\winuser.h
+FILE 4016 f:\sp\public\sdk\inc\winnls.h
+FILE 4017 f:\sp\public\sdk\inc\stralign.h
+FILE 4018 f:\sp\public\sdk\inc\tvout.h
+FILE 4019 f:\sp\public\sdk\inc\winsvc.h
+FILE 4020 f:\sp\public\sdk\inc\wingdi.h
+FILE 4021 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4022 f:\sp\public\sdk\inc\winnt.h
+FILE 4023 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4024 f:\sp\public\sdk\inc\poppack.h
+FILE 4025 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4026 f:\sp\public\sdk\inc\imm.h
+FILE 4027 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 4028 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 4029 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4030 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4031 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4032 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4033 f:\sp\vctools\crt_bld\self_x86\crt\src\crtmbox.c
+FILE 4034 f:\sp\public\sdk\inc\winver.h
+FILE 4035 f:\sp\public\sdk\inc\guiddef.h
+FILE 4036 f:\sp\public\sdk\inc\windows.h
+FILE 4037 f:\sp\public\sdk\inc\specstrings.h
+FILE 4038 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4039 f:\sp\public\sdk\inc\basetsd.h
+FILE 4040 f:\sp\public\sdk\inc\winreg.h
+FILE 4041 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4042 f:\sp\public\sdk\inc\winbase.h
+FILE 4043 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4044 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4045 f:\sp\public\sdk\inc\winerror.h
+FILE 4046 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4047 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4048 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4049 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4050 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4051 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 4052 f:\sp\public\sdk\inc\reason.h
+FILE 4053 f:\sp\public\sdk\inc\wincon.h
+FILE 4054 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4055 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4056 f:\sp\public\sdk\inc\windef.h
+FILE 4057 f:\sp\public\sdk\inc\poppack.h
+FILE 4058 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h
+FILE 4059 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4060 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4061 f:\sp\public\sdk\inc\imm.h
+FILE 4062 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4063 f:\sp\public\sdk\inc\windef.h
+FILE 4064 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4065 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4066 f:\sp\public\sdk\inc\winver.h
+FILE 4067 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4068 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4069 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4070 f:\sp\public\sdk\inc\winnt.h
+FILE 4071 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4072 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4073 f:\sp\public\sdk\inc\winreg.h
+FILE 4074 f:\sp\vctools\crt_bld\self_x86\crt\src\cmiscdat.c
+FILE 4075 f:\sp\public\sdk\inc\winbase.h
+FILE 4076 f:\sp\public\sdk\inc\winerror.h
+FILE 4077 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4078 f:\sp\public\sdk\inc\reason.h
+FILE 4079 f:\sp\public\sdk\inc\wincon.h
+FILE 4080 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4081 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4082 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4083 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4084 f:\sp\public\sdk\inc\mcx.h
+FILE 4085 f:\sp\public\sdk\inc\winuser.h
+FILE 4086 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4087 f:\sp\public\sdk\inc\winnls.h
+FILE 4088 f:\sp\public\sdk\inc\guiddef.h
+FILE 4089 f:\sp\public\sdk\inc\windows.h
+FILE 4090 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4091 f:\sp\public\sdk\inc\specstrings.h
+FILE 4092 f:\sp\public\sdk\inc\basetsd.h
+FILE 4093 f:\sp\public\sdk\inc\stralign.h
+FILE 4094 f:\sp\public\sdk\inc\tvout.h
+FILE 4095 f:\sp\public\sdk\inc\winsvc.h
+FILE 4096 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4097 f:\sp\public\sdk\inc\wingdi.h
+FILE 4098 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4099 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4100 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 4101 f:\sp\vctools\crt_bld\self_x86\crt\src\signal.h
+FILE 4102 f:\sp\public\sdk\inc\poppack.h
+FILE 4103 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4104 f:\sp\public\sdk\inc\imm.h
+FILE 4105 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4106 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4107 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4108 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4109 f:\sp\public\sdk\inc\windef.h
+FILE 4110 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4111 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4112 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4113 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4114 f:\sp\public\sdk\inc\winver.h
+FILE 4115 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4116 f:\sp\public\sdk\inc\winnt.h
+FILE 4117 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4118 f:\sp\public\sdk\inc\winreg.h
+FILE 4119 f:\sp\vctools\crt_bld\self_x86\crt\src\abort.c
+FILE 4120 f:\sp\public\sdk\inc\winbase.h
+FILE 4121 f:\sp\public\sdk\inc\winerror.h
+FILE 4122 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4123 f:\sp\public\sdk\inc\reason.h
+FILE 4124 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4125 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4126 f:\sp\public\sdk\inc\wincon.h
+FILE 4127 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4128 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4129 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4130 f:\sp\public\sdk\inc\mcx.h
+FILE 4131 f:\sp\public\sdk\inc\winuser.h
+FILE 4132 f:\sp\public\sdk\inc\winnls.h
+FILE 4133 f:\sp\public\sdk\inc\guiddef.h
+FILE 4134 f:\sp\public\sdk\inc\stralign.h
+FILE 4135 f:\sp\public\sdk\inc\specstrings.h
+FILE 4136 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4137 f:\sp\public\sdk\inc\basetsd.h
+FILE 4138 f:\sp\public\sdk\inc\windows.h
+FILE 4139 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4140 f:\sp\public\sdk\inc\tvout.h
+FILE 4141 f:\sp\public\sdk\inc\winsvc.h
+FILE 4142 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4143 f:\sp\public\sdk\inc\wingdi.h
+FILE 4144 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 4145 f:\sp\public\sdk\inc\wincon.h
+FILE 4146 f:\sp\public\sdk\inc\imm.h
+FILE 4147 f:\sp\public\sdk\inc\winbase.h
+FILE 4148 f:\sp\public\sdk\inc\wingdi.h
+FILE 4149 f:\sp\public\sdk\inc\winver.h
+FILE 4150 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4151 f:\sp\public\sdk\inc\windows.h
+FILE 4152 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4153 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4154 f:\sp\public\sdk\inc\reason.h
+FILE 4155 f:\sp\vctools\crt_bld\self_x86\crt\src\a_str.c
+FILE 4156 f:\sp\public\sdk\inc\specstrings.h
+FILE 4157 f:\sp\public\sdk\inc\basetsd.h
+FILE 4158 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4159 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 4160 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4161 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4162 f:\sp\public\sdk\inc\stralign.h
+FILE 4163 f:\sp\public\sdk\inc\poppack.h
+FILE 4164 f:\sp\public\sdk\inc\winsvc.h
+FILE 4165 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4166 f:\sp\public\sdk\inc\windef.h
+FILE 4167 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4168 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4169 f:\sp\public\sdk\inc\winuser.h
+FILE 4170 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4171 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4172 f:\sp\public\sdk\inc\mcx.h
+FILE 4173 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4174 f:\sp\public\sdk\inc\guiddef.h
+FILE 4175 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 4176 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4177 f:\sp\public\sdk\inc\winnt.h
+FILE 4178 f:\sp\public\sdk\inc\winnls.h
+FILE 4179 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4180 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4181 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 4182 f:\sp\public\sdk\inc\winerror.h
+FILE 4183 f:\sp\public\sdk\inc\winreg.h
+FILE 4184 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4185 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4186 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4187 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4188 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 4189 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4190 f:\sp\public\sdk\inc\tvout.h
+FILE 4191 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4192 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 4193 f:\sp\public\sdk\inc\wincon.h
+FILE 4194 f:\sp\public\sdk\inc\imm.h
+FILE 4195 f:\sp\public\sdk\inc\winbase.h
+FILE 4196 f:\sp\public\sdk\inc\wingdi.h
+FILE 4197 f:\sp\public\sdk\inc\winver.h
+FILE 4198 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4199 f:\sp\public\sdk\inc\windows.h
+FILE 4200 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4201 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4202 f:\sp\public\sdk\inc\reason.h
+FILE 4203 f:\sp\vctools\crt_bld\self_x86\crt\src\a_map.c
+FILE 4204 f:\sp\public\sdk\inc\specstrings.h
+FILE 4205 f:\sp\public\sdk\inc\basetsd.h
+FILE 4206 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4207 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 4208 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4209 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4210 f:\sp\public\sdk\inc\stralign.h
+FILE 4211 f:\sp\public\sdk\inc\poppack.h
+FILE 4212 f:\sp\public\sdk\inc\winsvc.h
+FILE 4213 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4214 f:\sp\public\sdk\inc\windef.h
+FILE 4215 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4216 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4217 f:\sp\public\sdk\inc\winuser.h
+FILE 4218 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4219 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4220 f:\sp\public\sdk\inc\mcx.h
+FILE 4221 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4222 f:\sp\public\sdk\inc\guiddef.h
+FILE 4223 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 4224 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4225 f:\sp\public\sdk\inc\winnt.h
+FILE 4226 f:\sp\public\sdk\inc\winnls.h
+FILE 4227 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4228 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4229 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 4230 f:\sp\public\sdk\inc\winerror.h
+FILE 4231 f:\sp\public\sdk\inc\winreg.h
+FILE 4232 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4233 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4234 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4235 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4236 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 4237 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4238 f:\sp\public\sdk\inc\tvout.h
+FILE 4239 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4240 f:\sp\public\sdk\inc\wincon.h
+FILE 4241 f:\sp\public\sdk\inc\imm.h
+FILE 4242 f:\sp\public\sdk\inc\winbase.h
+FILE 4243 f:\sp\public\sdk\inc\wingdi.h
+FILE 4244 f:\sp\public\sdk\inc\winver.h
+FILE 4245 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4246 f:\sp\public\sdk\inc\windows.h
+FILE 4247 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4248 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4249 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 4250 f:\sp\public\sdk\inc\reason.h
+FILE 4251 f:\sp\vctools\crt_bld\self_x86\crt\src\a_loc.c
+FILE 4252 f:\sp\public\sdk\inc\specstrings.h
+FILE 4253 f:\sp\public\sdk\inc\basetsd.h
+FILE 4254 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4255 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 4256 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4257 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4258 f:\sp\public\sdk\inc\stralign.h
+FILE 4259 f:\sp\public\sdk\inc\poppack.h
+FILE 4260 f:\sp\public\sdk\inc\winsvc.h
+FILE 4261 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4262 f:\sp\public\sdk\inc\windef.h
+FILE 4263 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4264 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4265 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 4266 f:\sp\public\sdk\inc\winuser.h
+FILE 4267 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4268 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4269 f:\sp\public\sdk\inc\mcx.h
+FILE 4270 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 4271 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4272 f:\sp\public\sdk\inc\guiddef.h
+FILE 4273 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 4274 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4275 f:\sp\public\sdk\inc\winnt.h
+FILE 4276 f:\sp\public\sdk\inc\winnls.h
+FILE 4277 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4278 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4279 f:\sp\public\sdk\inc\winerror.h
+FILE 4280 f:\sp\public\sdk\inc\winreg.h
+FILE 4281 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4282 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4283 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4284 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4285 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4286 f:\sp\public\sdk\inc\tvout.h
+FILE 4287 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4288 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 4289 f:\sp\public\sdk\inc\poppack.h
+FILE 4290 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 4291 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4292 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4293 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4294 f:\sp\public\sdk\inc\imm.h
+FILE 4295 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4296 f:\sp\public\sdk\inc\windef.h
+FILE 4297 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4298 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4299 f:\sp\public\sdk\inc\winver.h
+FILE 4300 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4301 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4302 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4303 f:\sp\public\sdk\inc\winnt.h
+FILE 4304 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4305 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4306 f:\sp\public\sdk\inc\winreg.h
+FILE 4307 f:\sp\vctools\crt_bld\self_x86\crt\src\a_env.c
+FILE 4308 f:\sp\public\sdk\inc\winbase.h
+FILE 4309 f:\sp\public\sdk\inc\winerror.h
+FILE 4310 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4311 f:\sp\public\sdk\inc\reason.h
+FILE 4312 f:\sp\public\sdk\inc\wincon.h
+FILE 4313 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4314 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4315 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4316 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4317 f:\sp\public\sdk\inc\mcx.h
+FILE 4318 f:\sp\public\sdk\inc\winuser.h
+FILE 4319 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4320 f:\sp\public\sdk\inc\winnls.h
+FILE 4321 f:\sp\public\sdk\inc\guiddef.h
+FILE 4322 f:\sp\public\sdk\inc\windows.h
+FILE 4323 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4324 f:\sp\public\sdk\inc\specstrings.h
+FILE 4325 f:\sp\public\sdk\inc\basetsd.h
+FILE 4326 f:\sp\public\sdk\inc\stralign.h
+FILE 4327 f:\sp\public\sdk\inc\tvout.h
+FILE 4328 f:\sp\public\sdk\inc\winsvc.h
+FILE 4329 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4330 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 4331 f:\sp\public\sdk\inc\wingdi.h
+FILE 4332 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4333 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 4334 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4335 f:\sp\public\sdk\inc\wincon.h
+FILE 4336 f:\sp\public\sdk\inc\imm.h
+FILE 4337 f:\sp\public\sdk\inc\winbase.h
+FILE 4338 f:\sp\public\sdk\inc\wingdi.h
+FILE 4339 f:\sp\public\sdk\inc\winver.h
+FILE 4340 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4341 f:\sp\public\sdk\inc\windows.h
+FILE 4342 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4343 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4344 f:\sp\public\sdk\inc\reason.h
+FILE 4345 f:\sp\vctools\crt_bld\self_x86\crt\src\a_cmp.c
+FILE 4346 f:\sp\public\sdk\inc\specstrings.h
+FILE 4347 f:\sp\public\sdk\inc\basetsd.h
+FILE 4348 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4349 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4350 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4351 f:\sp\public\sdk\inc\stralign.h
+FILE 4352 f:\sp\public\sdk\inc\poppack.h
+FILE 4353 f:\sp\public\sdk\inc\winsvc.h
+FILE 4354 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4355 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 4356 f:\sp\public\sdk\inc\windef.h
+FILE 4357 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4358 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4359 f:\sp\public\sdk\inc\winuser.h
+FILE 4360 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4361 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4362 f:\sp\public\sdk\inc\mcx.h
+FILE 4363 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4364 f:\sp\public\sdk\inc\guiddef.h
+FILE 4365 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 4366 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4367 f:\sp\public\sdk\inc\winnt.h
+FILE 4368 f:\sp\public\sdk\inc\winnls.h
+FILE 4369 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4370 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4371 f:\sp\public\sdk\inc\winerror.h
+FILE 4372 f:\sp\public\sdk\inc\winreg.h
+FILE 4373 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4374 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 4375 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4376 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4377 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4378 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 4379 f:\sp\public\sdk\inc\tvout.h
+FILE 4380 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4381 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\sehprolg4.asm
+FILE 4382 f:\sp\public\sdk\inc\poppack.h
+FILE 4383 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4384 f:\sp\public\sdk\inc\imm.h
+FILE 4385 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4386 f:\sp\public\sdk\inc\windef.h
+FILE 4387 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4388 f:\sp\public\sdk\inc\winver.h
+FILE 4389 f:\sp\public\sdk\inc\windows.h
+FILE 4390 f:\sp\public\sdk\inc\winnt.h
+FILE 4391 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4392 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4393 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4394 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4395 f:\sp\public\sdk\inc\winreg.h
+FILE 4396 f:\sp\public\sdk\inc\winbase.h
+FILE 4397 f:\sp\vctools\crt_bld\self_x86\crt\src\intel\secchk.c
+FILE 4398 f:\sp\public\sdk\inc\winerror.h
+FILE 4399 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4400 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h
+FILE 4401 f:\sp\public\sdk\inc\reason.h
+FILE 4402 f:\sp\public\sdk\inc\wincon.h
+FILE 4403 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4404 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4405 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4406 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4407 f:\sp\public\sdk\inc\mcx.h
+FILE 4408 f:\sp\public\sdk\inc\winuser.h
+FILE 4409 f:\sp\public\sdk\inc\winnls.h
+FILE 4410 f:\sp\public\sdk\inc\guiddef.h
+FILE 4411 f:\sp\public\sdk\inc\specstrings.h
+FILE 4412 f:\sp\public\sdk\inc\basetsd.h
+FILE 4413 f:\sp\public\sdk\inc\stralign.h
+FILE 4414 f:\sp\public\sdk\inc\tvout.h
+FILE 4415 f:\sp\public\sdk\inc\winsvc.h
+FILE 4416 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4417 f:\sp\public\sdk\inc\wingdi.h
+FILE 4418 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4419 f:\sp\public\sdk\inc\poppack.h
+FILE 4420 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4421 f:\sp\public\sdk\inc\imm.h
+FILE 4422 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4423 f:\sp\public\sdk\inc\windef.h
+FILE 4424 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4425 f:\sp\public\sdk\inc\winver.h
+FILE 4426 f:\sp\public\sdk\inc\windows.h
+FILE 4427 f:\sp\public\sdk\inc\winnt.h
+FILE 4428 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4429 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4430 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4431 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4432 f:\sp\public\sdk\inc\winreg.h
+FILE 4433 f:\sp\public\sdk\inc\winbase.h
+FILE 4434 f:\sp\vctools\crt_bld\self_x86\crt\src\intel\loadcfg.c
+FILE 4435 f:\sp\public\sdk\inc\winerror.h
+FILE 4436 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4437 f:\sp\public\sdk\inc\reason.h
+FILE 4438 f:\sp\public\sdk\inc\wincon.h
+FILE 4439 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4440 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4441 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4442 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4443 f:\sp\public\sdk\inc\mcx.h
+FILE 4444 f:\sp\public\sdk\inc\winuser.h
+FILE 4445 f:\sp\public\sdk\inc\winnls.h
+FILE 4446 f:\sp\public\sdk\inc\guiddef.h
+FILE 4447 f:\sp\public\sdk\inc\specstrings.h
+FILE 4448 f:\sp\public\sdk\inc\basetsd.h
+FILE 4449 f:\sp\public\sdk\inc\stralign.h
+FILE 4450 f:\sp\public\sdk\inc\tvout.h
+FILE 4451 f:\sp\public\sdk\inc\winsvc.h
+FILE 4452 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4453 f:\sp\public\sdk\inc\wingdi.h
+FILE 4454 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4455 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\exsup4.asm
+FILE 4456 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\exsup.inc
+FILE 4457 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\exsup.asm
+FILE 4458 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\pversion.inc
+FILE 4459 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\cmacros.inc
+FILE 4460 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\exsup.inc
+FILE 4461 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\nlgsupp.asm
+FILE 4462 f:\sp\public\sdk\inc\ntldr.h
+FILE 4463 f:\sp\public\sdk\inc\ntpoapi.h
+FILE 4464 f:\sp\public\sdk\inc\ntexapi.h
+FILE 4465 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4466 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4467 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 4468 f:\sp\public\sdk\inc\ntdef.h
+FILE 4469 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 4470 f:\sp\public\sdk\inc\mce.h
+FILE 4471 f:\sp\public\sdk\inc\poppack.h
+FILE 4472 f:\sp\public\sdk\inc\ntimage.h
+FILE 4473 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4474 f:\sp\public\sdk\inc\ntpsapi.h
+FILE 4475 f:\sp\public\sdk\inc\nti386.h
+FILE 4476 f:\sp\public\sdk\inc\nt.h
+FILE 4477 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 4478 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 4479 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 4480 f:\sp\public\sdk\inc\specstrings.h
+FILE 4481 f:\sp\public\sdk\inc\basetsd.h
+FILE 4482 f:\sp\public\sdk\inc\ntxcapi.h
+FILE 4483 f:\sp\public\sdk\inc\guiddef.h
+FILE 4484 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\misc\i386\chandler4.c
+FILE 4485 f:\sp\public\sdk\inc\ntstatus.h
+FILE 4486 f:\sp\public\sdk\inc\ntkeapi.h
+FILE 4487 f:\sp\public\sdk\inc\ntconfig.h
+FILE 4488 f:\sp\public\sdk\inc\ntregapi.h
+FILE 4489 f:\sp\public\sdk\inc\ntmmapi.h
+FILE 4490 f:\sp\public\sdk\inc\ntobapi.h
+FILE 4491 f:\sp\public\sdk\inc\nxi386.h
+FILE 4492 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\process.h
+FILE 4493 f:\sp\public\sdk\inc\ntioapi.h
+FILE 4494 f:\sp\public\sdk\inc\devioctl.h
+FILE 4495 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 4496 f:\sp\public\sdk\inc\ntseapi.h
+FILE 4497 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4498 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 4499 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 4500 f:\sp\public\sdk\inc\ntnls.h
+FILE 4501 f:\sp\public\sdk\inc\ntelfapi.h
+FILE 4502 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4503 f:\sp\public\sdk\inc\ntiolog.h
+FILE 4504 f:\sp\public\sdk\inc\ntlpcapi.h
+FILE 4505 f:\sp\public\sdk\inc\ntpnpapi.h
+FILE 4506 f:\sp\public\sdk\inc\cfg.h
+FILE 4507 f:\sp\public\sdk\inc\pebteb.h
+FILE 4508 f:\sp\public\sdk\inc\wincon.h
+FILE 4509 f:\sp\public\sdk\inc\imm.h
+FILE 4510 f:\sp\public\sdk\inc\winbase.h
+FILE 4511 f:\sp\public\sdk\inc\wingdi.h
+FILE 4512 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4513 f:\sp\public\sdk\inc\winver.h
+FILE 4514 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4515 f:\sp\public\sdk\inc\reason.h
+FILE 4516 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h
+FILE 4517 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4518 f:\sp\vctools\crt_bld\self_x86\crt\src\mbsnbico.c
+FILE 4519 f:\sp\public\sdk\inc\specstrings.h
+FILE 4520 f:\sp\public\sdk\inc\basetsd.h
+FILE 4521 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4522 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 4523 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h
+FILE 4524 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4525 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4526 f:\sp\public\sdk\inc\stralign.h
+FILE 4527 f:\sp\public\sdk\inc\poppack.h
+FILE 4528 f:\sp\public\sdk\inc\winsvc.h
+FILE 4529 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4530 f:\sp\public\sdk\inc\windef.h
+FILE 4531 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 4532 f:\sp\public\sdk\inc\winuser.h
+FILE 4533 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4534 f:\sp\public\sdk\inc\windows.h
+FILE 4535 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4536 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4537 f:\sp\public\sdk\inc\mcx.h
+FILE 4538 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4539 f:\sp\public\sdk\inc\guiddef.h
+FILE 4540 f:\sp\public\sdk\inc\winnt.h
+FILE 4541 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4542 f:\sp\public\sdk\inc\winnls.h
+FILE 4543 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4544 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4545 f:\sp\public\sdk\inc\winerror.h
+FILE 4546 f:\sp\public\sdk\inc\winreg.h
+FILE 4547 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4548 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4549 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4550 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4551 f:\sp\public\sdk\inc\tvout.h
+FILE 4552 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4553 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4554 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 4555 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 4556 f:\sp\public\sdk\inc\wincon.h
+FILE 4557 f:\sp\public\sdk\inc\imm.h
+FILE 4558 f:\sp\public\sdk\inc\winbase.h
+FILE 4559 f:\sp\public\sdk\inc\wingdi.h
+FILE 4560 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h
+FILE 4561 f:\sp\public\sdk\inc\winver.h
+FILE 4562 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4563 f:\sp\public\sdk\inc\windows.h
+FILE 4564 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4565 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4566 f:\sp\public\sdk\inc\reason.h
+FILE 4567 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 4568 f:\sp\vctools\crt_bld\self_x86\crt\src\mbschr.c
+FILE 4569 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4570 f:\sp\public\sdk\inc\specstrings.h
+FILE 4571 f:\sp\public\sdk\inc\basetsd.h
+FILE 4572 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4573 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4574 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4575 f:\sp\public\sdk\inc\stralign.h
+FILE 4576 f:\sp\public\sdk\inc\poppack.h
+FILE 4577 f:\sp\public\sdk\inc\winsvc.h
+FILE 4578 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4579 f:\sp\public\sdk\inc\windef.h
+FILE 4580 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4581 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4582 f:\sp\public\sdk\inc\winuser.h
+FILE 4583 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4584 f:\sp\public\sdk\inc\mcx.h
+FILE 4585 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4586 f:\sp\public\sdk\inc\guiddef.h
+FILE 4587 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 4588 f:\sp\public\sdk\inc\winnt.h
+FILE 4589 f:\sp\public\sdk\inc\winnls.h
+FILE 4590 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4591 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4592 f:\sp\public\sdk\inc\winerror.h
+FILE 4593 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 4594 f:\sp\public\sdk\inc\winreg.h
+FILE 4595 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4596 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 4597 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4598 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4599 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4600 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4601 f:\sp\public\sdk\inc\tvout.h
+FILE 4602 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4603 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h
+FILE 4604 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 4605 f:\sp\public\sdk\inc\wincon.h
+FILE 4606 f:\sp\public\sdk\inc\imm.h
+FILE 4607 f:\sp\public\sdk\inc\winbase.h
+FILE 4608 f:\sp\public\sdk\inc\wingdi.h
+FILE 4609 f:\sp\public\sdk\inc\winver.h
+FILE 4610 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 4611 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4612 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4613 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 4614 f:\sp\public\sdk\inc\reason.h
+FILE 4615 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.c
+FILE 4616 f:\sp\public\sdk\inc\specstrings.h
+FILE 4617 f:\sp\public\sdk\inc\basetsd.h
+FILE 4618 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4619 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 4620 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4621 f:\sp\public\sdk\inc\stralign.h
+FILE 4622 f:\sp\public\sdk\inc\poppack.h
+FILE 4623 f:\sp\public\sdk\inc\winsvc.h
+FILE 4624 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4625 f:\sp\public\sdk\inc\windef.h
+FILE 4626 f:\sp\public\sdk\inc\winuser.h
+FILE 4627 f:\sp\public\sdk\inc\windows.h
+FILE 4628 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4629 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4630 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4631 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4632 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4633 f:\sp\public\sdk\inc\mcx.h
+FILE 4634 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4635 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4636 f:\sp\public\sdk\inc\guiddef.h
+FILE 4637 f:\sp\public\sdk\inc\winnt.h
+FILE 4638 f:\sp\public\sdk\inc\winnls.h
+FILE 4639 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4640 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h
+FILE 4641 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4642 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 4643 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 4644 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4645 f:\sp\public\sdk\inc\winerror.h
+FILE 4646 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h
+FILE 4647 f:\sp\public\sdk\inc\winreg.h
+FILE 4648 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4649 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4650 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 4651 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4652 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h
+FILE 4653 f:\sp\public\sdk\inc\tvout.h
+FILE 4654 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4655 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4656 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4657 f:\sp\public\sdk\inc\wincon.h
+FILE 4658 f:\sp\public\sdk\inc\imm.h
+FILE 4659 f:\sp\public\sdk\inc\winbase.h
+FILE 4660 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4661 f:\sp\public\sdk\inc\wingdi.h
+FILE 4662 f:\sp\public\sdk\inc\windef.h
+FILE 4663 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h
+FILE 4664 f:\sp\public\sdk\inc\winver.h
+FILE 4665 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4666 f:\sp\public\sdk\inc\reason.h
+FILE 4667 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 4668 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4669 f:\sp\vctools\crt_bld\self_x86\crt\src\ismbbyte.c
+FILE 4670 f:\sp\public\sdk\inc\winnt.h
+FILE 4671 f:\sp\public\sdk\inc\specstrings.h
+FILE 4672 f:\sp\public\sdk\inc\basetsd.h
+FILE 4673 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4674 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4675 f:\sp\public\sdk\inc\stralign.h
+FILE 4676 f:\sp\public\sdk\inc\poppack.h
+FILE 4677 f:\sp\public\sdk\inc\winsvc.h
+FILE 4678 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4679 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4680 f:\sp\public\sdk\inc\winuser.h
+FILE 4681 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4682 f:\sp\public\sdk\inc\mcx.h
+FILE 4683 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4684 f:\sp\public\sdk\inc\guiddef.h
+FILE 4685 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4686 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 4687 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4688 f:\sp\public\sdk\inc\windows.h
+FILE 4689 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4690 f:\sp\public\sdk\inc\winnls.h
+FILE 4691 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4692 f:\sp\public\sdk\inc\winerror.h
+FILE 4693 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 4694 f:\sp\public\sdk\inc\winreg.h
+FILE 4695 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4696 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4697 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4698 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4699 f:\sp\public\sdk\inc\tvout.h
+FILE 4700 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h
+FILE 4701 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4702 f:\sp\public\sdk\inc\imm.h
+FILE 4703 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h
+FILE 4704 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4705 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 4706 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4707 f:\sp\public\sdk\inc\windef.h
+FILE 4708 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4709 f:\sp\public\sdk\inc\winver.h
+FILE 4710 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 4711 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4712 f:\sp\public\sdk\inc\winnt.h
+FILE 4713 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4714 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4715 f:\sp\public\sdk\inc\winreg.h
+FILE 4716 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4717 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4718 f:\sp\public\sdk\inc\winbase.h
+FILE 4719 f:\sp\public\sdk\inc\winerror.h
+FILE 4720 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4721 f:\sp\vctools\crt_bld\self_x86\crt\src\putwch.c
+FILE 4722 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4723 f:\sp\public\sdk\inc\reason.h
+FILE 4724 f:\sp\public\sdk\inc\wincon.h
+FILE 4725 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4726 f:\sp\public\sdk\inc\mcx.h
+FILE 4727 f:\sp\public\sdk\inc\winuser.h
+FILE 4728 f:\sp\public\sdk\inc\winnls.h
+FILE 4729 f:\sp\public\sdk\inc\guiddef.h
+FILE 4730 f:\sp\public\sdk\inc\stralign.h
+FILE 4731 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4732 f:\sp\public\sdk\inc\specstrings.h
+FILE 4733 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h
+FILE 4734 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4735 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4736 f:\sp\public\sdk\inc\basetsd.h
+FILE 4737 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 4738 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4739 f:\sp\public\sdk\inc\windows.h
+FILE 4740 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4741 f:\sp\public\sdk\inc\tvout.h
+FILE 4742 f:\sp\public\sdk\inc\winsvc.h
+FILE 4743 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4744 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4745 f:\sp\public\sdk\inc\wingdi.h
+FILE 4746 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4747 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h
+FILE 4748 f:\sp\public\sdk\inc\poppack.h
+FILE 4749 f:\sp\public\sdk\inc\reason.h
+FILE 4750 f:\sp\public\sdk\inc\wincon.h
+FILE 4751 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h
+FILE 4752 f:\sp\public\sdk\inc\poppack.h
+FILE 4753 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4754 f:\sp\public\sdk\inc\mcx.h
+FILE 4755 f:\sp\public\sdk\inc\winuser.h
+FILE 4756 f:\sp\public\sdk\inc\winnls.h
+FILE 4757 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h
+FILE 4758 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4759 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4760 f:\sp\public\sdk\inc\stralign.h
+FILE 4761 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4762 f:\sp\public\sdk\inc\windef.h
+FILE 4763 f:\sp\public\sdk\inc\tvout.h
+FILE 4764 f:\sp\public\sdk\inc\winsvc.h
+FILE 4765 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 4766 f:\sp\public\sdk\inc\wingdi.h
+FILE 4767 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 4768 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4769 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4770 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4771 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4772 f:\sp\public\sdk\inc\winnt.h
+FILE 4773 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4774 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4775 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4776 f:\sp\public\sdk\inc\imm.h
+FILE 4777 f:\sp\vctools\crt_bld\self_x86\crt\src\write.c
+FILE 4778 f:\sp\public\sdk\inc\winbase.h
+FILE 4779 f:\sp\public\sdk\inc\winerror.h
+FILE 4780 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4781 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 4782 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4783 f:\sp\public\sdk\inc\winver.h
+FILE 4784 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 4785 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4786 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4787 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4788 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4789 f:\sp\public\sdk\inc\winreg.h
+FILE 4790 f:\sp\public\sdk\inc\guiddef.h
+FILE 4791 f:\sp\public\sdk\inc\windows.h
+FILE 4792 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4793 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 4794 f:\sp\public\sdk\inc\specstrings.h
+FILE 4795 f:\sp\public\sdk\inc\basetsd.h
+FILE 4796 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4797 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4798 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4799 f:\sp\public\sdk\inc\reason.h
+FILE 4800 f:\sp\public\sdk\inc\wincon.h
+FILE 4801 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4802 f:\sp\public\sdk\inc\poppack.h
+FILE 4803 f:\sp\public\sdk\inc\mcx.h
+FILE 4804 f:\sp\public\sdk\inc\winuser.h
+FILE 4805 f:\sp\public\sdk\inc\winnls.h
+FILE 4806 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4807 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4808 f:\sp\public\sdk\inc\stralign.h
+FILE 4809 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4810 f:\sp\public\sdk\inc\windef.h
+FILE 4811 f:\sp\public\sdk\inc\tvout.h
+FILE 4812 f:\sp\public\sdk\inc\winsvc.h
+FILE 4813 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 4814 f:\sp\public\sdk\inc\wingdi.h
+FILE 4815 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4816 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4817 f:\sp\public\sdk\inc\winnt.h
+FILE 4818 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4819 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4820 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h
+FILE 4821 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4822 f:\sp\public\sdk\inc\imm.h
+FILE 4823 f:\sp\vctools\crt_bld\self_x86\crt\src\fcntl.h
+FILE 4824 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 4825 f:\sp\vctools\crt_bld\self_x86\crt\src\osfinfo.c
+FILE 4826 f:\sp\public\sdk\inc\winbase.h
+FILE 4827 f:\sp\public\sdk\inc\winerror.h
+FILE 4828 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4829 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4830 f:\sp\public\sdk\inc\winver.h
+FILE 4831 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4832 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h
+FILE 4833 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4834 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4835 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4836 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4837 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4838 f:\sp\public\sdk\inc\winreg.h
+FILE 4839 f:\sp\public\sdk\inc\guiddef.h
+FILE 4840 f:\sp\public\sdk\inc\windows.h
+FILE 4841 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4842 f:\sp\public\sdk\inc\specstrings.h
+FILE 4843 f:\sp\public\sdk\inc\basetsd.h
+FILE 4844 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4845 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4846 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4847 f:\sp\public\sdk\inc\reason.h
+FILE 4848 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4849 f:\sp\public\sdk\inc\wincon.h
+FILE 4850 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 4851 f:\sp\public\sdk\inc\poppack.h
+FILE 4852 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4853 f:\sp\public\sdk\inc\mcx.h
+FILE 4854 f:\sp\public\sdk\inc\winuser.h
+FILE 4855 f:\sp\public\sdk\inc\winnls.h
+FILE 4856 f:\sp\public\sdk\inc\stralign.h
+FILE 4857 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4858 f:\sp\public\sdk\inc\windef.h
+FILE 4859 f:\sp\public\sdk\inc\tvout.h
+FILE 4860 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h
+FILE 4861 f:\sp\public\sdk\inc\winsvc.h
+FILE 4862 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4863 f:\sp\public\sdk\inc\wingdi.h
+FILE 4864 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 4865 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 4866 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4867 f:\sp\public\sdk\inc\winnt.h
+FILE 4868 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4869 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4870 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4871 f:\sp\public\sdk\inc\imm.h
+FILE 4872 f:\sp\vctools\crt_bld\self_x86\crt\src\lseeki64.c
+FILE 4873 f:\sp\public\sdk\inc\winbase.h
+FILE 4874 f:\sp\public\sdk\inc\winerror.h
+FILE 4875 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4876 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h
+FILE 4877 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 4878 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4879 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4880 f:\sp\public\sdk\inc\winver.h
+FILE 4881 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4882 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4883 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4884 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4885 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4886 f:\sp\public\sdk\inc\winreg.h
+FILE 4887 f:\sp\public\sdk\inc\guiddef.h
+FILE 4888 f:\sp\public\sdk\inc\windows.h
+FILE 4889 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4890 f:\sp\public\sdk\inc\specstrings.h
+FILE 4891 f:\sp\public\sdk\inc\basetsd.h
+FILE 4892 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4893 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4894 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4895 f:\sp\public\sdk\inc\poppack.h
+FILE 4896 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h
+FILE 4897 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4898 f:\sp\public\sdk\inc\imm.h
+FILE 4899 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4900 f:\sp\public\sdk\inc\windef.h
+FILE 4901 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4902 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4903 f:\sp\public\sdk\inc\winver.h
+FILE 4904 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h
+FILE 4905 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4906 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4907 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4908 f:\sp\public\sdk\inc\winnt.h
+FILE 4909 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4910 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4911 f:\sp\public\sdk\inc\winreg.h
+FILE 4912 f:\sp\vctools\crt_bld\self_x86\crt\src\isatty.c
+FILE 4913 f:\sp\public\sdk\inc\winbase.h
+FILE 4914 f:\sp\public\sdk\inc\winerror.h
+FILE 4915 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4916 f:\sp\public\sdk\inc\reason.h
+FILE 4917 f:\sp\public\sdk\inc\wincon.h
+FILE 4918 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4919 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4920 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4921 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4922 f:\sp\public\sdk\inc\mcx.h
+FILE 4923 f:\sp\public\sdk\inc\winuser.h
+FILE 4924 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4925 f:\sp\public\sdk\inc\winnls.h
+FILE 4926 f:\sp\public\sdk\inc\guiddef.h
+FILE 4927 f:\sp\public\sdk\inc\windows.h
+FILE 4928 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4929 f:\sp\public\sdk\inc\specstrings.h
+FILE 4930 f:\sp\public\sdk\inc\basetsd.h
+FILE 4931 f:\sp\public\sdk\inc\stralign.h
+FILE 4932 f:\sp\public\sdk\inc\tvout.h
+FILE 4933 f:\sp\public\sdk\inc\winsvc.h
+FILE 4934 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4935 f:\sp\public\sdk\inc\wingdi.h
+FILE 4936 f:\sp\public\sdk\inc\poppack.h
+FILE 4937 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 4938 f:\sp\public\sdk\inc\winnetwk.h
+FILE 4939 f:\sp\public\sdk\inc\imm.h
+FILE 4940 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 4941 f:\sp\public\sdk\inc\windef.h
+FILE 4942 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 4943 f:\sp\public\sdk\inc\pshpack1.h
+FILE 4944 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h
+FILE 4945 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 4946 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 4947 f:\sp\public\sdk\inc\winver.h
+FILE 4948 f:\sp\public\sdk\inc\windows.h
+FILE 4949 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 4950 f:\sp\public\sdk\inc\winnt.h
+FILE 4951 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4952 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 4953 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 4954 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 4955 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 4956 f:\sp\public\sdk\inc\winreg.h
+FILE 4957 f:\sp\public\sdk\inc\winbase.h
+FILE 4958 f:\sp\vctools\crt_bld\self_x86\crt\src\ioinit.c
+FILE 4959 f:\sp\public\sdk\inc\winerror.h
+FILE 4960 f:\sp\public\sdk\inc\pshpack8.h
+FILE 4961 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 4962 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4963 f:\sp\public\sdk\inc\reason.h
+FILE 4964 f:\sp\public\sdk\inc\wincon.h
+FILE 4965 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 4966 f:\sp\public\sdk\inc\ddbanned.h
+FILE 4967 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 4968 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4969 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 4970 f:\sp\public\sdk\inc\mcx.h
+FILE 4971 f:\sp\public\sdk\inc\winuser.h
+FILE 4972 f:\sp\public\sdk\inc\winnls.h
+FILE 4973 f:\sp\public\sdk\inc\guiddef.h
+FILE 4974 f:\sp\public\sdk\inc\specstrings.h
+FILE 4975 f:\sp\public\sdk\inc\basetsd.h
+FILE 4976 f:\sp\public\sdk\inc\stralign.h
+FILE 4977 f:\sp\public\sdk\inc\tvout.h
+FILE 4978 f:\sp\public\sdk\inc\winsvc.h
+FILE 4979 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4980 f:\sp\public\sdk\inc\wingdi.h
+FILE 4981 f:\sp\public\sdk\inc\pshpack4.h
+FILE 4982 f:\sp\public\sdk\inc\reason.h
+FILE 4983 f:\sp\public\sdk\inc\wincon.h
+FILE 4984 f:\sp\public\sdk\inc\pshpack2.h
+FILE 4985 f:\sp\public\sdk\inc\mcx.h
+FILE 4986 f:\sp\public\sdk\inc\winuser.h
+FILE 4987 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 4988 f:\sp\public\sdk\inc\winnls.h
+FILE 4989 f:\sp\public\sdk\inc\guiddef.h
+FILE 4990 f:\sp\public\sdk\inc\windows.h
+FILE 4991 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 4992 f:\sp\public\sdk\inc\specstrings.h
+FILE 4993 f:\sp\public\sdk\inc\basetsd.h
+FILE 4994 f:\sp\public\sdk\inc\stralign.h
+FILE 4995 f:\sp\public\sdk\inc\tvout.h
+FILE 4996 f:\sp\public\sdk\inc\winsvc.h
+FILE 4997 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 4998 f:\sp\public\sdk\inc\wingdi.h
+FILE 4999 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5000 f:\sp\public\sdk\inc\poppack.h
+FILE 5001 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h
+FILE 5002 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 5003 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5004 f:\sp\public\sdk\inc\imm.h
+FILE 5005 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5006 f:\sp\public\sdk\inc\windef.h
+FILE 5007 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 5008 f:\sp\vctools\crt_bld\self_x86\crt\src\initcon.c
+FILE 5009 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5010 f:\sp\public\sdk\inc\winver.h
+FILE 5011 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 5012 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5013 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5014 f:\sp\public\sdk\inc\winnt.h
+FILE 5015 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5016 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5017 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5018 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5019 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 5020 f:\sp\public\sdk\inc\winreg.h
+FILE 5021 f:\sp\public\sdk\inc\winbase.h
+FILE 5022 f:\sp\public\sdk\inc\winerror.h
+FILE 5023 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5024 f:\sp\public\sdk\inc\poppack.h
+FILE 5025 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h
+FILE 5026 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5027 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 5028 f:\sp\public\sdk\inc\imm.h
+FILE 5029 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5030 f:\sp\public\sdk\inc\windef.h
+FILE 5031 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 5032 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5033 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 5034 f:\sp\public\sdk\inc\winver.h
+FILE 5035 f:\sp\public\sdk\inc\windows.h
+FILE 5036 f:\sp\public\sdk\inc\winnt.h
+FILE 5037 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5038 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5039 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5040 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5041 f:\sp\public\sdk\inc\winreg.h
+FILE 5042 f:\sp\public\sdk\inc\winbase.h
+FILE 5043 f:\sp\vctools\crt_bld\self_x86\crt\src\commit.c
+FILE 5044 f:\sp\public\sdk\inc\winerror.h
+FILE 5045 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5046 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 5047 f:\sp\public\sdk\inc\reason.h
+FILE 5048 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h
+FILE 5049 f:\sp\public\sdk\inc\wincon.h
+FILE 5050 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 5051 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 5052 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5053 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5054 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5055 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5056 f:\sp\public\sdk\inc\mcx.h
+FILE 5057 f:\sp\public\sdk\inc\winuser.h
+FILE 5058 f:\sp\public\sdk\inc\winnls.h
+FILE 5059 f:\sp\public\sdk\inc\guiddef.h
+FILE 5060 f:\sp\public\sdk\inc\specstrings.h
+FILE 5061 f:\sp\public\sdk\inc\basetsd.h
+FILE 5062 f:\sp\public\sdk\inc\stralign.h
+FILE 5063 f:\sp\public\sdk\inc\tvout.h
+FILE 5064 f:\sp\public\sdk\inc\winsvc.h
+FILE 5065 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5066 f:\sp\public\sdk\inc\wingdi.h
+FILE 5067 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5068 f:\sp\public\sdk\inc\reason.h
+FILE 5069 f:\sp\public\sdk\inc\wincon.h
+FILE 5070 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h
+FILE 5071 f:\sp\public\sdk\inc\poppack.h
+FILE 5072 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 5073 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 5074 f:\sp\public\sdk\inc\mcx.h
+FILE 5075 f:\sp\public\sdk\inc\winuser.h
+FILE 5076 f:\sp\public\sdk\inc\winnls.h
+FILE 5077 f:\sp\public\sdk\inc\stralign.h
+FILE 5078 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5079 f:\sp\public\sdk\inc\windef.h
+FILE 5080 f:\sp\public\sdk\inc\tvout.h
+FILE 5081 f:\sp\public\sdk\inc\winsvc.h
+FILE 5082 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 5083 f:\sp\public\sdk\inc\wingdi.h
+FILE 5084 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h
+FILE 5085 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 5086 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 5087 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 5088 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5089 f:\sp\public\sdk\inc\winnt.h
+FILE 5090 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5091 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5092 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5093 f:\sp\public\sdk\inc\imm.h
+FILE 5094 f:\sp\vctools\crt_bld\self_x86\crt\src\close.c
+FILE 5095 f:\sp\public\sdk\inc\winbase.h
+FILE 5096 f:\sp\public\sdk\inc\winerror.h
+FILE 5097 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5098 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5099 f:\sp\public\sdk\inc\winver.h
+FILE 5100 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5101 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5102 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5103 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5104 f:\sp\public\sdk\inc\winreg.h
+FILE 5105 f:\sp\public\sdk\inc\guiddef.h
+FILE 5106 f:\sp\public\sdk\inc\windows.h
+FILE 5107 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5108 f:\sp\public\sdk\inc\specstrings.h
+FILE 5109 f:\sp\public\sdk\inc\basetsd.h
+FILE 5110 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 5111 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5112 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5113 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\ulldvrm.asm
+FILE 5114 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 5115 F:\SP\vctools\crt_bld\SELF_X86\crt\src\mm.inc
+FILE 5116 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\llmul.asm
+FILE 5117 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc
+FILE 5118 F:\SP\vctools\crt_bld\SELF_X86\crt\src\mm.inc
+FILE 5119 f:\sp\vctools\crt_bld\self_x86\crt\src\use_ansi.h
+FILE 5120 f:\sp\vctools\crt_bld\self_x86\crt\src\new
+FILE 5121 f:\sp\vctools\crt_bld\self_x86\crt\src\exception
+FILE 5122 f:\sp\vctools\crt_bld\self_x86\crt\src\xstddef
+FILE 5123 f:\sp\vctools\crt_bld\self_x86\crt\src\new.cpp
+FILE 5124 f:\sp\vctools\crt_bld\self_x86\crt\src\cstddef
+FILE 5125 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 5126 f:\sp\vctools\crt_bld\self_x86\crt\src\eh.h
+FILE 5127 f:\sp\vctools\crt_bld\self_x86\crt\src\cstdlib
+FILE 5128 f:\sp\vctools\crt_bld\self_x86\crt\src\yvals.h
+FILE 5129 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5130 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 5131 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5132 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 5133 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 5134 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5135 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5136 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5137 f:\sp\public\sdk\inc\poppack.h
+FILE 5138 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5139 f:\sp\public\sdk\inc\imm.h
+FILE 5140 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5141 f:\sp\public\sdk\inc\windef.h
+FILE 5142 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 5143 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5144 f:\sp\public\sdk\inc\winver.h
+FILE 5145 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 5146 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5147 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5148 f:\sp\public\sdk\inc\winnt.h
+FILE 5149 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5150 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 5151 f:\sp\public\sdk\inc\winreg.h
+FILE 5152 f:\sp\vctools\crt_bld\self_x86\crt\src\_newmode.c
+FILE 5153 f:\sp\public\sdk\inc\winbase.h
+FILE 5154 f:\sp\public\sdk\inc\winerror.h
+FILE 5155 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5156 f:\sp\public\sdk\inc\reason.h
+FILE 5157 f:\sp\public\sdk\inc\wincon.h
+FILE 5158 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5159 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5160 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5161 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5162 f:\sp\public\sdk\inc\mcx.h
+FILE 5163 f:\sp\public\sdk\inc\winuser.h
+FILE 5164 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 5165 f:\sp\public\sdk\inc\winnls.h
+FILE 5166 f:\sp\public\sdk\inc\guiddef.h
+FILE 5167 f:\sp\public\sdk\inc\windows.h
+FILE 5168 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5169 f:\sp\public\sdk\inc\specstrings.h
+FILE 5170 f:\sp\public\sdk\inc\basetsd.h
+FILE 5171 f:\sp\public\sdk\inc\stralign.h
+FILE 5172 f:\sp\public\sdk\inc\tvout.h
+FILE 5173 f:\sp\public\sdk\inc\winsvc.h
+FILE 5174 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5175 f:\sp\public\sdk\inc\wingdi.h
+FILE 5176 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5177 f:\sp\vctools\crt_bld\self_x86\crt\src\new.h
+FILE 5178 f:\sp\public\sdk\inc\winerror.h
+FILE 5179 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h
+FILE 5180 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h
+FILE 5181 f:\sp\public\sdk\inc\winreg.h
+FILE 5182 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5183 f:\sp\public\sdk\inc\tvout.h
+FILE 5184 f:\sp\vctools\crt_bld\self_x86\crt\src\delete.cpp
+FILE 5185 f:\sp\public\sdk\inc\wincon.h
+FILE 5186 f:\sp\public\sdk\inc\imm.h
+FILE 5187 f:\sp\public\sdk\inc\winbase.h
+FILE 5188 f:\sp\public\sdk\inc\wingdi.h
+FILE 5189 f:\sp\public\sdk\inc\winver.h
+FILE 5190 f:\sp\public\sdk\inc\windows.h
+FILE 5191 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5192 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5193 f:\sp\public\sdk\inc\reason.h
+FILE 5194 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 5195 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5196 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5197 f:\sp\public\sdk\inc\specstrings.h
+FILE 5198 f:\sp\public\sdk\inc\basetsd.h
+FILE 5199 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5200 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5201 f:\sp\public\sdk\inc\stralign.h
+FILE 5202 f:\sp\public\sdk\inc\poppack.h
+FILE 5203 f:\sp\public\sdk\inc\winsvc.h
+FILE 5204 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5205 f:\sp\public\sdk\inc\windef.h
+FILE 5206 f:\sp\public\sdk\inc\winuser.h
+FILE 5207 f:\sp\public\sdk\inc\mcx.h
+FILE 5208 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5209 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5210 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5211 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5212 f:\sp\public\sdk\inc\guiddef.h
+FILE 5213 f:\sp\public\sdk\inc\winnt.h
+FILE 5214 f:\sp\public\sdk\inc\winnls.h
+FILE 5215 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5216 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5217 f:\sp\public\sdk\inc\tvout.h
+FILE 5218 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 5219 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h
+FILE 5220 f:\sp\public\sdk\inc\wincon.h
+FILE 5221 f:\sp\public\sdk\inc\imm.h
+FILE 5222 f:\sp\public\sdk\inc\winbase.h
+FILE 5223 f:\sp\public\sdk\inc\wingdi.h
+FILE 5224 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 5225 f:\sp\public\sdk\inc\winver.h
+FILE 5226 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 5227 f:\sp\public\sdk\inc\windows.h
+FILE 5228 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5229 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5230 f:\sp\vctools\crt_bld\self_x86\crt\src\handler.cpp
+FILE 5231 f:\sp\public\sdk\inc\reason.h
+FILE 5232 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 5233 f:\sp\public\sdk\inc\specstrings.h
+FILE 5234 f:\sp\public\sdk\inc\basetsd.h
+FILE 5235 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5236 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5237 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 5238 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5239 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5240 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 5241 f:\sp\public\sdk\inc\stralign.h
+FILE 5242 f:\sp\public\sdk\inc\poppack.h
+FILE 5243 f:\sp\public\sdk\inc\winsvc.h
+FILE 5244 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5245 f:\sp\public\sdk\inc\windef.h
+FILE 5246 f:\sp\public\sdk\inc\winuser.h
+FILE 5247 f:\sp\public\sdk\inc\mcx.h
+FILE 5248 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5249 f:\sp\public\sdk\inc\guiddef.h
+FILE 5250 f:\sp\public\sdk\inc\winnt.h
+FILE 5251 f:\sp\public\sdk\inc\winnls.h
+FILE 5252 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5253 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5254 f:\sp\public\sdk\inc\winerror.h
+FILE 5255 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5256 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5257 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5258 f:\sp\public\sdk\inc\winreg.h
+FILE 5259 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5260 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 5261 f:\sp\vctools\crt_bld\self_x86\crt\src\new.h
+FILE 5262 f:\sp\public\sdk\inc\winsvc.h
+FILE 5263 f:\sp\public\sdk\inc\wingdi.h
+FILE 5264 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5265 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 5266 f:\sp\public\sdk\inc\poppack.h
+FILE 5267 f:\sp\public\sdk\inc\winnt.h
+FILE 5268 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5269 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5270 f:\sp\public\sdk\inc\imm.h
+FILE 5271 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 5272 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 5273 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5274 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5275 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5276 f:\sp\public\sdk\inc\winver.h
+FILE 5277 f:\sp\public\sdk\inc\guiddef.h
+FILE 5278 f:\sp\public\sdk\inc\specstrings.h
+FILE 5279 f:\sp\public\sdk\inc\basetsd.h
+FILE 5280 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h
+FILE 5281 f:\sp\vctools\crt_bld\self_x86\crt\src\sbheap.c
+FILE 5282 f:\sp\public\sdk\inc\windows.h
+FILE 5283 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5284 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 5285 f:\sp\public\sdk\inc\winreg.h
+FILE 5286 f:\sp\public\sdk\inc\winbase.h
+FILE 5287 f:\sp\public\sdk\inc\winerror.h
+FILE 5288 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5289 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5290 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5291 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5292 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 5293 f:\sp\public\sdk\inc\reason.h
+FILE 5294 f:\sp\public\sdk\inc\wincon.h
+FILE 5295 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5296 f:\sp\public\sdk\inc\mcx.h
+FILE 5297 f:\sp\public\sdk\inc\winuser.h
+FILE 5298 f:\sp\public\sdk\inc\winnls.h
+FILE 5299 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5300 f:\sp\public\sdk\inc\windef.h
+FILE 5301 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 5302 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 5303 f:\sp\public\sdk\inc\stralign.h
+FILE 5304 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5305 f:\sp\public\sdk\inc\tvout.h
+FILE 5306 f:\sp\public\sdk\inc\winver.h
+FILE 5307 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h
+FILE 5308 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h
+FILE 5309 f:\sp\public\sdk\inc\guiddef.h
+FILE 5310 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 5311 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 5312 f:\sp\public\sdk\inc\specstrings.h
+FILE 5313 f:\sp\public\sdk\inc\basetsd.h
+FILE 5314 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h
+FILE 5315 f:\sp\public\sdk\inc\windows.h
+FILE 5316 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5317 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 5318 f:\sp\public\sdk\inc\winreg.h
+FILE 5319 f:\sp\public\sdk\inc\winbase.h
+FILE 5320 f:\sp\public\sdk\inc\winerror.h
+FILE 5321 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5322 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 5323 f:\sp\public\sdk\inc\reason.h
+FILE 5324 f:\sp\public\sdk\inc\wincon.h
+FILE 5325 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 5326 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5327 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5328 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5329 f:\sp\public\sdk\inc\mcx.h
+FILE 5330 f:\sp\public\sdk\inc\winuser.h
+FILE 5331 f:\sp\public\sdk\inc\winnls.h
+FILE 5332 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5333 f:\sp\public\sdk\inc\windef.h
+FILE 5334 f:\sp\public\sdk\inc\stralign.h
+FILE 5335 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5336 f:\sp\public\sdk\inc\tvout.h
+FILE 5337 f:\sp\public\sdk\inc\winsvc.h
+FILE 5338 f:\sp\vctools\crt_bld\self_x86\crt\src\realloc.c
+FILE 5339 f:\sp\public\sdk\inc\wingdi.h
+FILE 5340 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5341 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 5342 f:\sp\public\sdk\inc\poppack.h
+FILE 5343 f:\sp\public\sdk\inc\winnt.h
+FILE 5344 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5345 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5346 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5347 f:\sp\public\sdk\inc\imm.h
+FILE 5348 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5349 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5350 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 5351 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 5352 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5353 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5354 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h
+FILE 5355 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 5356 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 5357 f:\sp\public\sdk\inc\mcx.h
+FILE 5358 f:\sp\public\sdk\inc\winuser.h
+FILE 5359 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 5360 f:\sp\public\sdk\inc\winnls.h
+FILE 5361 f:\sp\public\sdk\inc\guiddef.h
+FILE 5362 f:\sp\public\sdk\inc\windows.h
+FILE 5363 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5364 f:\sp\public\sdk\inc\specstrings.h
+FILE 5365 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 5366 f:\sp\public\sdk\inc\basetsd.h
+FILE 5367 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 5368 f:\sp\public\sdk\inc\stralign.h
+FILE 5369 f:\sp\public\sdk\inc\tvout.h
+FILE 5370 f:\sp\public\sdk\inc\winsvc.h
+FILE 5371 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5372 f:\sp\public\sdk\inc\wingdi.h
+FILE 5373 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5374 f:\sp\public\sdk\inc\poppack.h
+FILE 5375 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5376 f:\sp\public\sdk\inc\imm.h
+FILE 5377 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 5378 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5379 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5380 f:\sp\public\sdk\inc\windef.h
+FILE 5381 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5382 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 5383 f:\sp\vctools\crt_bld\self_x86\crt\src\msize.c
+FILE 5384 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5385 f:\sp\public\sdk\inc\winver.h
+FILE 5386 f:\sp\public\sdk\inc\winnt.h
+FILE 5387 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5388 f:\sp\public\sdk\inc\winreg.h
+FILE 5389 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5390 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5391 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5392 f:\sp\public\sdk\inc\winbase.h
+FILE 5393 f:\sp\public\sdk\inc\winerror.h
+FILE 5394 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5395 f:\sp\public\sdk\inc\reason.h
+FILE 5396 f:\sp\public\sdk\inc\wincon.h
+FILE 5397 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5398 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 5399 f:\sp\public\sdk\inc\mcx.h
+FILE 5400 f:\sp\public\sdk\inc\winuser.h
+FILE 5401 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 5402 f:\sp\public\sdk\inc\winnls.h
+FILE 5403 f:\sp\public\sdk\inc\guiddef.h
+FILE 5404 f:\sp\public\sdk\inc\windows.h
+FILE 5405 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5406 f:\sp\public\sdk\inc\specstrings.h
+FILE 5407 f:\sp\public\sdk\inc\basetsd.h
+FILE 5408 f:\sp\public\sdk\inc\stralign.h
+FILE 5409 f:\sp\public\sdk\inc\tvout.h
+FILE 5410 f:\sp\public\sdk\inc\winsvc.h
+FILE 5411 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5412 f:\sp\public\sdk\inc\wingdi.h
+FILE 5413 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5414 f:\sp\public\sdk\inc\poppack.h
+FILE 5415 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 5416 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5417 f:\sp\public\sdk\inc\imm.h
+FILE 5418 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 5419 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5420 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5421 f:\sp\public\sdk\inc\windef.h
+FILE 5422 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5423 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 5424 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 5425 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.c
+FILE 5426 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5427 f:\sp\public\sdk\inc\winver.h
+FILE 5428 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h
+FILE 5429 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h
+FILE 5430 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h
+FILE 5431 f:\sp\public\sdk\inc\winnt.h
+FILE 5432 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h
+FILE 5433 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5434 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 5435 f:\sp\public\sdk\inc\winreg.h
+FILE 5436 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5437 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5438 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5439 f:\sp\public\sdk\inc\winbase.h
+FILE 5440 f:\sp\public\sdk\inc\winerror.h
+FILE 5441 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5442 f:\sp\public\sdk\inc\reason.h
+FILE 5443 f:\sp\public\sdk\inc\wincon.h
+FILE 5444 f:\sp\public\sdk\inc\winver.h
+FILE 5445 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 5446 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 5447 f:\sp\public\sdk\inc\winnt.h
+FILE 5448 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 5449 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5450 f:\sp\public\sdk\inc\winreg.h
+FILE 5451 f:\sp\public\sdk\inc\winbase.h
+FILE 5452 f:\sp\public\sdk\inc\winerror.h
+FILE 5453 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5454 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 5455 f:\sp\public\sdk\inc\reason.h
+FILE 5456 f:\sp\public\sdk\inc\wincon.h
+FILE 5457 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 5458 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5459 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5460 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5461 f:\sp\public\sdk\inc\mcx.h
+FILE 5462 f:\sp\public\sdk\inc\winuser.h
+FILE 5463 f:\sp\public\sdk\inc\winnls.h
+FILE 5464 f:\sp\public\sdk\inc\guiddef.h
+FILE 5465 f:\sp\public\sdk\inc\stralign.h
+FILE 5466 f:\sp\public\sdk\inc\specstrings.h
+FILE 5467 f:\sp\public\sdk\inc\basetsd.h
+FILE 5468 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h
+FILE 5469 f:\sp\public\sdk\inc\windows.h
+FILE 5470 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5471 f:\sp\public\sdk\inc\tvout.h
+FILE 5472 f:\sp\public\sdk\inc\winsvc.h
+FILE 5473 f:\sp\vctools\crt_bld\self_x86\crt\src\heapinit.c
+FILE 5474 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5475 f:\sp\public\sdk\inc\wingdi.h
+FILE 5476 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5477 f:\sp\public\sdk\inc\poppack.h
+FILE 5478 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5479 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5480 f:\sp\public\sdk\inc\imm.h
+FILE 5481 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5482 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5483 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5484 f:\sp\public\sdk\inc\windef.h
+FILE 5485 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 5486 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5487 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5488 f:\sp\public\sdk\inc\mcx.h
+FILE 5489 f:\sp\public\sdk\inc\winuser.h
+FILE 5490 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h
+FILE 5491 f:\sp\public\sdk\inc\winnls.h
+FILE 5492 f:\sp\public\sdk\inc\guiddef.h
+FILE 5493 f:\sp\public\sdk\inc\windows.h
+FILE 5494 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5495 f:\sp\public\sdk\inc\specstrings.h
+FILE 5496 f:\sp\public\sdk\inc\basetsd.h
+FILE 5497 f:\sp\public\sdk\inc\stralign.h
+FILE 5498 f:\sp\public\sdk\inc\tvout.h
+FILE 5499 f:\sp\public\sdk\inc\winsvc.h
+FILE 5500 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5501 f:\sp\public\sdk\inc\wingdi.h
+FILE 5502 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5503 f:\sp\public\sdk\inc\poppack.h
+FILE 5504 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 5505 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5506 f:\sp\public\sdk\inc\imm.h
+FILE 5507 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5508 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 5509 f:\sp\public\sdk\inc\windef.h
+FILE 5510 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5511 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5512 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 5513 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 5514 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5515 f:\sp\vctools\crt_bld\self_x86\crt\src\free.c
+FILE 5516 f:\sp\public\sdk\inc\winver.h
+FILE 5517 f:\sp\public\sdk\inc\winnt.h
+FILE 5518 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5519 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h
+FILE 5520 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h
+FILE 5521 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 5522 f:\sp\public\sdk\inc\winreg.h
+FILE 5523 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5524 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5525 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5526 f:\sp\public\sdk\inc\winbase.h
+FILE 5527 f:\sp\public\sdk\inc\winerror.h
+FILE 5528 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5529 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 5530 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 5531 f:\sp\public\sdk\inc\reason.h
+FILE 5532 f:\sp\public\sdk\inc\wincon.h
+FILE 5533 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5534 f:\sp\public\sdk\inc\mcx.h
+FILE 5535 f:\sp\public\sdk\inc\winuser.h
+FILE 5536 f:\sp\public\sdk\inc\winnls.h
+FILE 5537 f:\sp\public\sdk\inc\guiddef.h
+FILE 5538 f:\sp\public\sdk\inc\windows.h
+FILE 5539 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5540 f:\sp\public\sdk\inc\specstrings.h
+FILE 5541 f:\sp\public\sdk\inc\basetsd.h
+FILE 5542 f:\sp\public\sdk\inc\stralign.h
+FILE 5543 f:\sp\public\sdk\inc\tvout.h
+FILE 5544 f:\sp\public\sdk\inc\winsvc.h
+FILE 5545 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5546 f:\sp\public\sdk\inc\wingdi.h
+FILE 5547 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5548 f:\sp\public\sdk\inc\poppack.h
+FILE 5549 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5550 f:\sp\public\sdk\inc\imm.h
+FILE 5551 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5552 f:\sp\public\sdk\inc\windef.h
+FILE 5553 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 5554 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5555 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5556 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5557 f:\sp\vctools\crt_bld\self_x86\crt\src\crtheap.c
+FILE 5558 f:\sp\public\sdk\inc\winver.h
+FILE 5559 f:\sp\public\sdk\inc\winnt.h
+FILE 5560 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5561 f:\sp\public\sdk\inc\winreg.h
+FILE 5562 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5563 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5564 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5565 f:\sp\public\sdk\inc\winbase.h
+FILE 5566 f:\sp\public\sdk\inc\winerror.h
+FILE 5567 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5568 f:\sp\public\sdk\inc\reason.h
+FILE 5569 f:\sp\public\sdk\inc\wincon.h
+FILE 5570 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5571 f:\sp\public\sdk\inc\mcx.h
+FILE 5572 f:\sp\public\sdk\inc\winuser.h
+FILE 5573 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 5574 f:\sp\public\sdk\inc\winnls.h
+FILE 5575 f:\sp\public\sdk\inc\stralign.h
+FILE 5576 f:\sp\public\sdk\inc\tvout.h
+FILE 5577 f:\sp\public\sdk\inc\winsvc.h
+FILE 5578 f:\sp\public\sdk\inc\wingdi.h
+FILE 5579 f:\sp\public\sdk\inc\winnt.h
+FILE 5580 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5581 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 5582 f:\sp\public\sdk\inc\poppack.h
+FILE 5583 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 5584 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5585 f:\sp\public\sdk\inc\imm.h
+FILE 5586 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h
+FILE 5587 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 5588 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 5589 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 5590 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 5591 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5592 f:\sp\vctools\crt_bld\self_x86\crt\src\calloc.c
+FILE 5593 f:\sp\public\sdk\inc\winver.h
+FILE 5594 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h
+FILE 5595 f:\sp\public\sdk\inc\guiddef.h
+FILE 5596 f:\sp\public\sdk\inc\windows.h
+FILE 5597 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 5598 f:\sp\public\sdk\inc\specstrings.h
+FILE 5599 f:\sp\public\sdk\inc\basetsd.h
+FILE 5600 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h
+FILE 5601 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h
+FILE 5602 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 5603 f:\sp\public\sdk\inc\winreg.h
+FILE 5604 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5605 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 5606 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 5607 f:\sp\public\sdk\inc\winbase.h
+FILE 5608 f:\sp\public\sdk\inc\winerror.h
+FILE 5609 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5610 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 5611 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 5612 f:\sp\public\sdk\inc\reason.h
+FILE 5613 f:\sp\public\sdk\inc\wincon.h
+FILE 5614 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 5615 f:\sp\public\sdk\inc\windef.h
+FILE 5616 f:\sp\public\sdk\inc\wincon.h
+FILE 5617 f:\sp\public\sdk\inc\imm.h
+FILE 5618 f:\sp\public\sdk\inc\winbase.h
+FILE 5619 f:\sp\public\sdk\inc\wingdi.h
+FILE 5620 f:\sp\public\sdk\inc\winver.h
+FILE 5621 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h
+FILE 5622 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5623 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h
+FILE 5624 f:\sp\public\sdk\inc\reason.h
+FILE 5625 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h
+FILE 5626 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\setjmp.h
+FILE 5627 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\i386\trnsctrl.cpp
+FILE 5628 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\process.h
+FILE 5629 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h
+FILE 5630 f:\sp\public\sdk\inc\specstrings.h
+FILE 5631 f:\sp\public\sdk\inc\basetsd.h
+FILE 5632 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5633 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5634 f:\sp\public\sdk\inc\stralign.h
+FILE 5635 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\trnsctrl.h
+FILE 5636 f:\sp\public\sdk\inc\poppack.h
+FILE 5637 f:\sp\public\sdk\inc\winsvc.h
+FILE 5638 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 5639 f:\sp\public\sdk\inc\windef.h
+FILE 5640 f:\sp\public\sdk\inc\winuser.h
+FILE 5641 f:\sp\public\sdk\inc\windows.h
+FILE 5642 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 5643 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 5644 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 5645 f:\sp\public\sdk\inc\mcx.h
+FILE 5646 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5647 f:\sp\public\sdk\inc\guiddef.h
+FILE 5648 f:\sp\public\sdk\inc\winnt.h
+FILE 5649 f:\sp\public\sdk\inc\winnls.h
+FILE 5650 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 5651 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5652 f:\sp\public\sdk\inc\winerror.h
+FILE 5653 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h
+FILE 5654 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h
+FILE 5655 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h
+FILE 5656 f:\sp\public\sdk\inc\winreg.h
+FILE 5657 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 5658 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5659 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 5660 f:\sp\public\sdk\inc\tvout.h
+FILE 5661 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 5662 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h
+FILE 5663 f:\sp\vctools\langapi\include\ehdata.h
+FILE 5664 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h
+FILE 5665 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\eh\i386\lowhelpr.asm
+FILE 5666 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\cruntime.inc
+FILE 5667 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\exsup.inc
+FILE 5668 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\process.h
+FILE 5669 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 5670 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 5671 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\i386\ehprolg3.c
+FILE 5672 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5673 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 5674 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 5675 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h
+FILE 5676 f:\sp\public\sdk\inc\wincon.h
+FILE 5677 f:\sp\public\sdk\inc\imm.h
+FILE 5678 f:\sp\public\sdk\inc\winbase.h
+FILE 5679 f:\sp\public\sdk\inc\wingdi.h
+FILE 5680 f:\sp\public\sdk\inc\winver.h
+FILE 5681 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5682 f:\sp\public\sdk\inc\reason.h
+FILE 5683 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\validate.cpp
+FILE 5684 f:\sp\public\sdk\inc\specstrings.h
+FILE 5685 f:\sp\public\sdk\inc\basetsd.h
+FILE 5686 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5687 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5688 f:\sp\public\sdk\inc\stralign.h
+FILE 5689 f:\sp\public\sdk\inc\poppack.h
+FILE 5690 f:\sp\public\sdk\inc\winsvc.h
+FILE 5691 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 5692 f:\sp\public\sdk\inc\windef.h
+FILE 5693 f:\sp\public\sdk\inc\winuser.h
+FILE 5694 f:\sp\public\sdk\inc\windows.h
+FILE 5695 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 5696 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 5697 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 5698 f:\sp\public\sdk\inc\mcx.h
+FILE 5699 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5700 f:\sp\public\sdk\inc\guiddef.h
+FILE 5701 f:\sp\public\sdk\inc\winnt.h
+FILE 5702 f:\sp\public\sdk\inc\winnls.h
+FILE 5703 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 5704 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5705 f:\sp\public\sdk\inc\winerror.h
+FILE 5706 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h
+FILE 5707 f:\sp\public\sdk\inc\winreg.h
+FILE 5708 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 5709 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5710 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 5711 f:\sp\public\sdk\inc\tvout.h
+FILE 5712 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 5713 f:\sp\public\sdk\inc\wincon.h
+FILE 5714 f:\sp\public\sdk\inc\imm.h
+FILE 5715 f:\sp\public\sdk\inc\winbase.h
+FILE 5716 f:\sp\public\sdk\inc\wingdi.h
+FILE 5717 f:\sp\public\sdk\inc\winver.h
+FILE 5718 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5719 f:\sp\public\sdk\inc\reason.h
+FILE 5720 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h
+FILE 5721 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\unhandld.cpp
+FILE 5722 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h
+FILE 5723 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h
+FILE 5724 f:\sp\public\sdk\inc\specstrings.h
+FILE 5725 f:\sp\public\sdk\inc\basetsd.h
+FILE 5726 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5727 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5728 f:\sp\public\sdk\inc\stralign.h
+FILE 5729 f:\sp\public\sdk\inc\poppack.h
+FILE 5730 f:\sp\public\sdk\inc\winsvc.h
+FILE 5731 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 5732 f:\sp\public\sdk\inc\windef.h
+FILE 5733 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h
+FILE 5734 f:\sp\public\sdk\inc\winuser.h
+FILE 5735 f:\sp\public\sdk\inc\windows.h
+FILE 5736 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 5737 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 5738 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 5739 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h
+FILE 5740 f:\sp\public\sdk\inc\mcx.h
+FILE 5741 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5742 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h
+FILE 5743 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h
+FILE 5744 f:\sp\public\sdk\inc\guiddef.h
+FILE 5745 f:\sp\public\sdk\inc\winnt.h
+FILE 5746 f:\sp\public\sdk\inc\winnls.h
+FILE 5747 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 5748 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h
+FILE 5749 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5750 f:\sp\public\sdk\inc\winerror.h
+FILE 5751 f:\sp\vctools\langapi\include\ehdata.h
+FILE 5752 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h
+FILE 5753 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h
+FILE 5754 f:\sp\public\sdk\inc\winreg.h
+FILE 5755 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 5756 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5757 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 5758 f:\sp\public\sdk\inc\tvout.h
+FILE 5759 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 5760 f:\sp\public\sdk\inc\specstrings.h
+FILE 5761 f:\sp\public\sdk\inc\basetsd.h
+FILE 5762 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5763 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5764 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h
+FILE 5765 f:\sp\public\sdk\inc\stralign.h
+FILE 5766 f:\sp\public\sdk\inc\poppack.h
+FILE 5767 f:\sp\public\sdk\inc\winsvc.h
+FILE 5768 f:\sp\public\sdk\inc\winuser.h
+FILE 5769 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 5770 f:\sp\public\sdk\inc\windef.h
+FILE 5771 f:\sp\vctools\langapi\undname\undname.cxx
+FILE 5772 f:\sp\public\sdk\inc\mcx.h
+FILE 5773 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5774 f:\sp\public\sdk\inc\guiddef.h
+FILE 5775 f:\sp\vctools\langapi\undname\utf8.h
+FILE 5776 f:\sp\public\sdk\inc\winnls.h
+FILE 5777 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5778 f:\sp\public\sdk\inc\winnt.h
+FILE 5779 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 5780 f:\sp\public\sdk\inc\winerror.h
+FILE 5781 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\swprintf.inl
+FILE 5782 f:\sp\vctools\langapi\undname\undname.hxx
+FILE 5783 f:\sp\vctools\langapi\undname\undname.h
+FILE 5784 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h
+FILE 5785 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 5786 f:\sp\public\sdk\inc\winreg.h
+FILE 5787 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 5788 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 5789 f:\sp\public\sdk\inc\tvout.h
+FILE 5790 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdio.h
+FILE 5791 f:\sp\public\sdk\inc\wincon.h
+FILE 5792 f:\sp\public\sdk\inc\imm.h
+FILE 5793 f:\sp\public\sdk\inc\winbase.h
+FILE 5794 f:\sp\public\sdk\inc\wingdi.h
+FILE 5795 f:\sp\public\sdk\inc\winver.h
+FILE 5796 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5797 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h
+FILE 5798 f:\sp\public\sdk\inc\windows.h
+FILE 5799 f:\sp\public\sdk\inc\reason.h
+FILE 5800 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 5801 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5802 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 5803 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 5804 f:\sp\vctools\langapi\undname\undname.inl
+FILE 5805 f:\sp\public\sdk\inc\guiddef.h
+FILE 5806 f:\sp\public\sdk\inc\winnt.h
+FILE 5807 f:\sp\public\sdk\inc\winnls.h
+FILE 5808 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 5809 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5810 f:\sp\public\sdk\inc\winerror.h
+FILE 5811 f:\sp\public\sdk\inc\winreg.h
+FILE 5812 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 5813 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h
+FILE 5814 f:\sp\public\sdk\inc\tvout.h
+FILE 5815 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\typname.cpp
+FILE 5816 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h
+FILE 5817 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef
+FILE 5818 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h
+FILE 5819 f:\sp\public\sdk\inc\wincon.h
+FILE 5820 f:\sp\public\sdk\inc\imm.h
+FILE 5821 f:\sp\public\sdk\inc\winbase.h
+FILE 5822 f:\sp\public\sdk\inc\wingdi.h
+FILE 5823 f:\sp\public\sdk\inc\winver.h
+FILE 5824 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h
+FILE 5825 f:\sp\public\sdk\inc\windows.h
+FILE 5826 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 5827 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5828 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h
+FILE 5829 f:\sp\public\sdk\inc\reason.h
+FILE 5830 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h
+FILE 5831 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\dbgint.h
+FILE 5832 f:\sp\public\sdk\inc\specstrings.h
+FILE 5833 f:\sp\public\sdk\inc\basetsd.h
+FILE 5834 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5835 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\typeinfo.h
+FILE 5836 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo
+FILE 5837 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception
+FILE 5838 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef
+FILE 5839 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h
+FILE 5840 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h
+FILE 5841 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h
+FILE 5842 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5843 f:\sp\vctools\langapi\undname\undname.h
+FILE 5844 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h
+FILE 5845 f:\sp\public\sdk\inc\stralign.h
+FILE 5846 f:\sp\public\sdk\inc\poppack.h
+FILE 5847 f:\sp\public\sdk\inc\winsvc.h
+FILE 5848 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 5849 f:\sp\public\sdk\inc\windef.h
+FILE 5850 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h
+FILE 5851 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 5852 f:\sp\public\sdk\inc\winuser.h
+FILE 5853 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 5854 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5855 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 5856 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 5857 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h
+FILE 5858 f:\sp\public\sdk\inc\mcx.h
+FILE 5859 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5860 f:\sp\public\sdk\inc\winnls.h
+FILE 5861 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5862 f:\sp\public\sdk\inc\winnt.h
+FILE 5863 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 5864 f:\sp\public\sdk\inc\winerror.h
+FILE 5865 f:\sp\public\sdk\inc\winreg.h
+FILE 5866 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 5867 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h
+FILE 5868 f:\sp\public\sdk\inc\tvout.h
+FILE 5869 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\dbgint.h
+FILE 5870 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h
+FILE 5871 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef
+FILE 5872 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h
+FILE 5873 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\typinfo.cpp
+FILE 5874 f:\sp\public\sdk\inc\wincon.h
+FILE 5875 f:\sp\public\sdk\inc\imm.h
+FILE 5876 f:\sp\public\sdk\inc\winbase.h
+FILE 5877 f:\sp\public\sdk\inc\wingdi.h
+FILE 5878 f:\sp\public\sdk\inc\winver.h
+FILE 5879 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5880 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h
+FILE 5881 f:\sp\public\sdk\inc\reason.h
+FILE 5882 f:\sp\public\sdk\inc\windows.h
+FILE 5883 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 5884 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h
+FILE 5885 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 5886 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 5887 f:\sp\public\sdk\inc\specstrings.h
+FILE 5888 f:\sp\public\sdk\inc\basetsd.h
+FILE 5889 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5890 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo
+FILE 5891 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5892 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception
+FILE 5893 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef
+FILE 5894 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h
+FILE 5895 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h
+FILE 5896 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h
+FILE 5897 f:\sp\public\sdk\inc\stralign.h
+FILE 5898 f:\sp\public\sdk\inc\poppack.h
+FILE 5899 f:\sp\public\sdk\inc\winsvc.h
+FILE 5900 f:\sp\public\sdk\inc\winuser.h
+FILE 5901 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 5902 f:\sp\public\sdk\inc\windef.h
+FILE 5903 f:\sp\vctools\langapi\undname\undname.h
+FILE 5904 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5905 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h
+FILE 5906 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 5907 f:\sp\public\sdk\inc\mcx.h
+FILE 5908 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 5909 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5910 f:\sp\public\sdk\inc\guiddef.h
+FILE 5911 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h
+FILE 5912 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo
+FILE 5913 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h
+FILE 5914 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception
+FILE 5915 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef
+FILE 5916 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\stdexcpt.cpp
+FILE 5917 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h
+FILE 5918 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h
+FILE 5919 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h
+FILE 5920 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 5921 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 5922 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 5923 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef
+FILE 5924 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h
+FILE 5925 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h
+FILE 5926 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5927 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 5928 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 5929 f:\sp\vctools\langapi\include\ehdata.h
+FILE 5930 f:\sp\public\sdk\inc\wincon.h
+FILE 5931 f:\sp\public\sdk\inc\imm.h
+FILE 5932 f:\sp\public\sdk\inc\winbase.h
+FILE 5933 f:\sp\public\sdk\inc\wingdi.h
+FILE 5934 f:\sp\public\sdk\inc\winver.h
+FILE 5935 f:\sp\public\sdk\inc\windows.h
+FILE 5936 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 5937 f:\sp\public\sdk\inc\pshpack2.h
+FILE 5938 f:\sp\public\sdk\inc\reason.h
+FILE 5939 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\throw.cpp
+FILE 5940 f:\sp\public\sdk\inc\specstrings.h
+FILE 5941 f:\sp\public\sdk\inc\basetsd.h
+FILE 5942 f:\sp\public\sdk\inc\pshpack4.h
+FILE 5943 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h
+FILE 5944 f:\sp\public\sdk\inc\winnetwk.h
+FILE 5945 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h
+FILE 5946 f:\sp\public\sdk\inc\stralign.h
+FILE 5947 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 5948 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 5949 f:\sp\public\sdk\inc\poppack.h
+FILE 5950 f:\sp\public\sdk\inc\winsvc.h
+FILE 5951 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 5952 f:\sp\public\sdk\inc\windef.h
+FILE 5953 f:\sp\public\sdk\inc\winuser.h
+FILE 5954 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h
+FILE 5955 f:\sp\public\sdk\inc\mcx.h
+FILE 5956 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h
+FILE 5957 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5958 f:\sp\public\sdk\inc\guiddef.h
+FILE 5959 f:\sp\public\sdk\inc\winnt.h
+FILE 5960 f:\sp\public\sdk\inc\winnls.h
+FILE 5961 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 5962 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5963 f:\sp\public\sdk\inc\winerror.h
+FILE 5964 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h
+FILE 5965 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h
+FILE 5966 f:\sp\public\sdk\inc\ddbanned.h
+FILE 5967 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 5968 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 5969 f:\sp\public\sdk\inc\winreg.h
+FILE 5970 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 5971 f:\sp\public\sdk\inc\tvout.h
+FILE 5972 f:\sp\public\sdk\inc\poppack.h
+FILE 5973 f:\sp\public\sdk\inc\winsvc.h
+FILE 5974 f:\sp\public\sdk\inc\windows.h
+FILE 5975 f:\sp\public\sdk\inc\winuser.h
+FILE 5976 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 5977 f:\sp\public\sdk\inc\windef.h
+FILE 5978 f:\sp\public\sdk\inc\mcx.h
+FILE 5979 f:\sp\public\sdk\inc\pshpack8.h
+FILE 5980 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h
+FILE 5981 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h
+FILE 5982 f:\sp\public\sdk\inc\guiddef.h
+FILE 5983 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\hooks.cpp
+FILE 5984 f:\sp\public\sdk\inc\winnls.h
+FILE 5985 f:\sp\public\sdk\inc\pshpack1.h
+FILE 5986 f:\sp\public\sdk\inc\winnt.h
+FILE 5987 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 5988 f:\sp\public\sdk\inc\winerror.h
+FILE 5989 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h
+FILE 5990 f:\sp\public\sdk\inc\winreg.h
+FILE 5991 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 5992 f:\sp\public\sdk\inc\tvout.h
+FILE 5993 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h
+FILE 5994 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h
+FILE 5995 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h
+FILE 5996 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 5997 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 5998 f:\sp\public\sdk\inc\wincon.h
+FILE 5999 f:\sp\public\sdk\inc\imm.h
+FILE 6000 f:\sp\public\sdk\inc\winbase.h
+FILE 6001 f:\sp\public\sdk\inc\wingdi.h
+FILE 6002 f:\sp\public\sdk\inc\winver.h
+FILE 6003 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h
+FILE 6004 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6005 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 6006 f:\sp\public\sdk\inc\reason.h
+FILE 6007 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h
+FILE 6008 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h
+FILE 6009 f:\sp\public\sdk\inc\specstrings.h
+FILE 6010 f:\sp\public\sdk\inc\basetsd.h
+FILE 6011 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6012 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6013 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 6014 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 6015 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6016 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h
+FILE 6017 f:\sp\public\sdk\inc\stralign.h
+FILE 6018 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h
+FILE 6019 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h
+FILE 6020 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h
+FILE 6021 f:\sp\public\sdk\inc\wincon.h
+FILE 6022 f:\sp\public\sdk\inc\imm.h
+FILE 6023 f:\sp\public\sdk\inc\guiddef.h
+FILE 6024 f:\sp\public\sdk\inc\winbase.h
+FILE 6025 f:\sp\public\sdk\inc\wingdi.h
+FILE 6026 f:\sp\vctools\langapi\include\ehdata.h
+FILE 6027 f:\sp\public\sdk\inc\winver.h
+FILE 6028 f:\sp\public\sdk\inc\winnt.h
+FILE 6029 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h
+FILE 6030 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h
+FILE 6031 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6032 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h
+FILE 6033 f:\sp\public\sdk\inc\reason.h
+FILE 6034 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\frame.cpp
+FILE 6035 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception
+FILE 6036 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\typeinfo.h
+FILE 6037 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo
+FILE 6038 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef
+FILE 6039 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h
+FILE 6040 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h
+FILE 6041 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6042 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6043 f:\sp\public\sdk\inc\stralign.h
+FILE 6044 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h
+FILE 6045 f:\sp\public\sdk\inc\poppack.h
+FILE 6046 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h
+FILE 6047 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h
+FILE 6048 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h
+FILE 6049 f:\sp\public\sdk\inc\winsvc.h
+FILE 6050 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehstate.h
+FILE 6051 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h
+FILE 6052 f:\sp\public\sdk\inc\winuser.h
+FILE 6053 f:\sp\public\sdk\inc\windows.h
+FILE 6054 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h
+FILE 6055 f:\sp\public\sdk\inc\mcx.h
+FILE 6056 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6057 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h
+FILE 6058 f:\sp\public\sdk\inc\specstrings.h
+FILE 6059 f:\sp\public\sdk\inc\basetsd.h
+FILE 6060 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h
+FILE 6061 f:\sp\public\sdk\inc\winnls.h
+FILE 6062 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6063 f:\sp\public\sdk\inc\winerror.h
+FILE 6064 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\trnsctrl.h
+FILE 6065 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h
+FILE 6066 f:\sp\public\sdk\inc\winreg.h
+FILE 6067 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6068 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h
+FILE 6069 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef
+FILE 6070 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h
+FILE 6071 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h
+FILE 6072 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h
+FILE 6073 f:\sp\public\sdk\inc\windef.h
+FILE 6074 f:\sp\public\sdk\inc\tvout.h
+FILE 6075 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6076 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6077 f:\sp\public\sdk\inc\reason.h
+FILE 6078 f:\sp\public\sdk\inc\wincon.h
+FILE 6079 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 6080 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 6081 f:\sp\public\sdk\inc\poppack.h
+FILE 6082 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6083 f:\sp\public\sdk\inc\mcx.h
+FILE 6084 f:\sp\public\sdk\inc\winuser.h
+FILE 6085 f:\sp\public\sdk\inc\winnls.h
+FILE 6086 f:\sp\public\sdk\inc\stralign.h
+FILE 6087 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6088 f:\sp\public\sdk\inc\windef.h
+FILE 6089 f:\sp\public\sdk\inc\tvout.h
+FILE 6090 f:\sp\public\sdk\inc\winsvc.h
+FILE 6091 f:\sp\public\sdk\inc\wingdi.h
+FILE 6092 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 6093 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6094 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6095 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 6096 f:\sp\public\sdk\inc\winnt.h
+FILE 6097 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6098 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6099 f:\sp\public\sdk\inc\imm.h
+FILE 6100 f:\sp\vctools\crt_bld\self_x86\crt\src\dosmap.c
+FILE 6101 f:\sp\public\sdk\inc\winbase.h
+FILE 6102 f:\sp\public\sdk\inc\winerror.h
+FILE 6103 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 6104 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6105 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6106 f:\sp\public\sdk\inc\winver.h
+FILE 6107 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6108 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6109 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6110 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6111 f:\sp\public\sdk\inc\winreg.h
+FILE 6112 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 6113 f:\sp\public\sdk\inc\guiddef.h
+FILE 6114 f:\sp\public\sdk\inc\windows.h
+FILE 6115 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6116 f:\sp\public\sdk\inc\specstrings.h
+FILE 6117 f:\sp\public\sdk\inc\basetsd.h
+FILE 6118 f:\sp\public\sdk\inc\winver.h
+FILE 6119 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 6120 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6121 f:\sp\public\sdk\inc\windows.h
+FILE 6122 f:\sp\public\sdk\inc\reason.h
+FILE 6123 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6124 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6125 f:\sp\public\sdk\inc\specstrings.h
+FILE 6126 f:\sp\public\sdk\inc\basetsd.h
+FILE 6127 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6128 f:\sp\vctools\crt_bld\self_x86\crt\src\wctomb.c
+FILE 6129 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6130 f:\sp\public\sdk\inc\stralign.h
+FILE 6131 f:\sp\public\sdk\inc\poppack.h
+FILE 6132 f:\sp\public\sdk\inc\winsvc.h
+FILE 6133 f:\sp\public\sdk\inc\winuser.h
+FILE 6134 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6135 f:\sp\public\sdk\inc\windef.h
+FILE 6136 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 6137 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6138 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6139 f:\sp\public\sdk\inc\mcx.h
+FILE 6140 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6141 f:\sp\public\sdk\inc\guiddef.h
+FILE 6142 f:\sp\public\sdk\inc\winnls.h
+FILE 6143 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6144 f:\sp\public\sdk\inc\winnt.h
+FILE 6145 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 6146 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6147 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 6148 f:\sp\public\sdk\inc\winerror.h
+FILE 6149 f:\sp\public\sdk\inc\winreg.h
+FILE 6150 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6151 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 6152 f:\sp\public\sdk\inc\tvout.h
+FILE 6153 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 6154 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6155 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 6156 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6157 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 6158 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6159 f:\sp\public\sdk\inc\wincon.h
+FILE 6160 f:\sp\public\sdk\inc\imm.h
+FILE 6161 f:\sp\public\sdk\inc\winbase.h
+FILE 6162 f:\sp\public\sdk\inc\wingdi.h
+FILE 6163 f:\sp\public\sdk\inc\winsvc.h
+FILE 6164 f:\sp\public\sdk\inc\winuser.h
+FILE 6165 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6166 f:\sp\public\sdk\inc\mcx.h
+FILE 6167 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6168 f:\sp\public\sdk\inc\guiddef.h
+FILE 6169 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 6170 f:\sp\public\sdk\inc\windows.h
+FILE 6171 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6172 f:\sp\public\sdk\inc\winnls.h
+FILE 6173 f:\sp\vctools\crt_bld\self_x86\crt\src\wcstol.c
+FILE 6174 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6175 f:\sp\public\sdk\inc\winerror.h
+FILE 6176 f:\sp\public\sdk\inc\winreg.h
+FILE 6177 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6178 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 6179 f:\sp\public\sdk\inc\tvout.h
+FILE 6180 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 6181 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 6182 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6183 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6184 f:\sp\public\sdk\inc\wincon.h
+FILE 6185 f:\sp\public\sdk\inc\imm.h
+FILE 6186 f:\sp\public\sdk\inc\winbase.h
+FILE 6187 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6188 f:\sp\public\sdk\inc\wingdi.h
+FILE 6189 f:\sp\public\sdk\inc\windef.h
+FILE 6190 f:\sp\public\sdk\inc\winver.h
+FILE 6191 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 6192 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6193 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6194 f:\sp\public\sdk\inc\reason.h
+FILE 6195 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 6196 f:\sp\public\sdk\inc\winnt.h
+FILE 6197 f:\sp\public\sdk\inc\specstrings.h
+FILE 6198 f:\sp\public\sdk\inc\basetsd.h
+FILE 6199 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6200 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6201 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 6202 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6203 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 6204 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6205 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6206 f:\sp\public\sdk\inc\stralign.h
+FILE 6207 f:\sp\public\sdk\inc\poppack.h
+FILE 6208 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 6209 f:\sp\public\sdk\inc\mcx.h
+FILE 6210 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6211 f:\sp\public\sdk\inc\guiddef.h
+FILE 6212 f:\sp\public\sdk\inc\winnt.h
+FILE 6213 f:\sp\public\sdk\inc\winnls.h
+FILE 6214 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6215 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 6216 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6217 f:\sp\public\sdk\inc\winerror.h
+FILE 6218 f:\sp\vctools\crt_bld\self_x86\crt\src\tolower.c
+FILE 6219 f:\sp\public\sdk\inc\winreg.h
+FILE 6220 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6221 f:\sp\public\sdk\inc\tvout.h
+FILE 6222 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 6223 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6224 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 6225 f:\sp\public\sdk\inc\wincon.h
+FILE 6226 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h
+FILE 6227 f:\sp\public\sdk\inc\imm.h
+FILE 6228 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6229 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6230 f:\sp\public\sdk\inc\winbase.h
+FILE 6231 f:\sp\public\sdk\inc\wingdi.h
+FILE 6232 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 6233 f:\sp\public\sdk\inc\winver.h
+FILE 6234 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 6235 f:\sp\public\sdk\inc\windows.h
+FILE 6236 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6237 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 6238 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6239 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 6240 f:\sp\public\sdk\inc\reason.h
+FILE 6241 f:\sp\public\sdk\inc\specstrings.h
+FILE 6242 f:\sp\public\sdk\inc\basetsd.h
+FILE 6243 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6244 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6245 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6246 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6247 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6248 f:\sp\public\sdk\inc\stralign.h
+FILE 6249 f:\sp\public\sdk\inc\poppack.h
+FILE 6250 f:\sp\public\sdk\inc\winsvc.h
+FILE 6251 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6252 f:\sp\public\sdk\inc\windef.h
+FILE 6253 f:\sp\public\sdk\inc\winuser.h
+FILE 6254 f:\sp\public\sdk\inc\winsvc.h
+FILE 6255 f:\sp\public\sdk\inc\winuser.h
+FILE 6256 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6257 f:\sp\public\sdk\inc\mcx.h
+FILE 6258 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6259 f:\sp\public\sdk\inc\guiddef.h
+FILE 6260 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 6261 f:\sp\public\sdk\inc\windows.h
+FILE 6262 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6263 f:\sp\public\sdk\inc\winnls.h
+FILE 6264 f:\sp\vctools\crt_bld\self_x86\crt\src\strtoq.c
+FILE 6265 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6266 f:\sp\public\sdk\inc\winerror.h
+FILE 6267 f:\sp\public\sdk\inc\winreg.h
+FILE 6268 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6269 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 6270 f:\sp\public\sdk\inc\tvout.h
+FILE 6271 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 6272 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 6273 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6274 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6275 f:\sp\public\sdk\inc\wincon.h
+FILE 6276 f:\sp\public\sdk\inc\imm.h
+FILE 6277 f:\sp\public\sdk\inc\winbase.h
+FILE 6278 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6279 f:\sp\public\sdk\inc\wingdi.h
+FILE 6280 f:\sp\public\sdk\inc\windef.h
+FILE 6281 f:\sp\public\sdk\inc\winver.h
+FILE 6282 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 6283 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6284 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6285 f:\sp\public\sdk\inc\reason.h
+FILE 6286 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 6287 f:\sp\public\sdk\inc\winnt.h
+FILE 6288 f:\sp\public\sdk\inc\specstrings.h
+FILE 6289 f:\sp\public\sdk\inc\basetsd.h
+FILE 6290 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6291 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6292 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 6293 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6294 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 6295 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6296 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6297 f:\sp\public\sdk\inc\stralign.h
+FILE 6298 f:\sp\public\sdk\inc\poppack.h
+FILE 6299 f:\sp\public\sdk\inc\winsvc.h
+FILE 6300 f:\sp\public\sdk\inc\winuser.h
+FILE 6301 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6302 f:\sp\public\sdk\inc\mcx.h
+FILE 6303 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6304 f:\sp\public\sdk\inc\guiddef.h
+FILE 6305 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 6306 f:\sp\public\sdk\inc\windows.h
+FILE 6307 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6308 f:\sp\public\sdk\inc\winnls.h
+FILE 6309 f:\sp\vctools\crt_bld\self_x86\crt\src\strtol.c
+FILE 6310 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6311 f:\sp\public\sdk\inc\winerror.h
+FILE 6312 f:\sp\public\sdk\inc\winreg.h
+FILE 6313 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6314 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 6315 f:\sp\public\sdk\inc\tvout.h
+FILE 6316 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 6317 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 6318 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6319 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6320 f:\sp\public\sdk\inc\wincon.h
+FILE 6321 f:\sp\public\sdk\inc\imm.h
+FILE 6322 f:\sp\public\sdk\inc\winbase.h
+FILE 6323 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6324 f:\sp\public\sdk\inc\wingdi.h
+FILE 6325 f:\sp\public\sdk\inc\windef.h
+FILE 6326 f:\sp\public\sdk\inc\winver.h
+FILE 6327 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 6328 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6329 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6330 f:\sp\public\sdk\inc\reason.h
+FILE 6331 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 6332 f:\sp\public\sdk\inc\winnt.h
+FILE 6333 f:\sp\public\sdk\inc\specstrings.h
+FILE 6334 f:\sp\public\sdk\inc\basetsd.h
+FILE 6335 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6336 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6337 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 6338 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6339 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 6340 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6341 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6342 f:\sp\public\sdk\inc\stralign.h
+FILE 6343 f:\sp\public\sdk\inc\poppack.h
+FILE 6344 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 6345 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 6346 f:\sp\public\sdk\inc\tvout.h
+FILE 6347 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6348 f:\sp\public\sdk\inc\wincon.h
+FILE 6349 f:\sp\public\sdk\inc\imm.h
+FILE 6350 f:\sp\public\sdk\inc\winbase.h
+FILE 6351 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6352 f:\sp\public\sdk\inc\wingdi.h
+FILE 6353 f:\sp\public\sdk\inc\windef.h
+FILE 6354 f:\sp\public\sdk\inc\winver.h
+FILE 6355 f:\sp\vctools\crt_bld\self_x86\crt\src\mbtowc.c
+FILE 6356 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6357 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6358 f:\sp\public\sdk\inc\reason.h
+FILE 6359 f:\sp\public\sdk\inc\winnt.h
+FILE 6360 f:\sp\public\sdk\inc\specstrings.h
+FILE 6361 f:\sp\public\sdk\inc\basetsd.h
+FILE 6362 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6363 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 6364 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 6365 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6366 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6367 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6368 f:\sp\public\sdk\inc\stralign.h
+FILE 6369 f:\sp\public\sdk\inc\poppack.h
+FILE 6370 f:\sp\public\sdk\inc\winsvc.h
+FILE 6371 f:\sp\public\sdk\inc\winuser.h
+FILE 6372 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 6373 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 6374 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 6375 f:\sp\public\sdk\inc\mcx.h
+FILE 6376 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6377 f:\sp\public\sdk\inc\guiddef.h
+FILE 6378 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 6379 f:\sp\public\sdk\inc\windows.h
+FILE 6380 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6381 f:\sp\public\sdk\inc\winnls.h
+FILE 6382 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 6383 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6384 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6385 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6386 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6387 f:\sp\public\sdk\inc\winerror.h
+FILE 6388 f:\sp\public\sdk\inc\winreg.h
+FILE 6389 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6390 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 6391 f:\sp\public\sdk\inc\winreg.h
+FILE 6392 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6393 f:\sp\public\sdk\inc\tvout.h
+FILE 6394 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h
+FILE 6395 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 6396 f:\sp\public\sdk\inc\wincon.h
+FILE 6397 f:\sp\public\sdk\inc\imm.h
+FILE 6398 f:\sp\public\sdk\inc\winbase.h
+FILE 6399 f:\sp\vctools\crt_bld\self_x86\crt\src\isctype.c
+FILE 6400 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6401 f:\sp\public\sdk\inc\wingdi.h
+FILE 6402 f:\sp\public\sdk\inc\windef.h
+FILE 6403 f:\sp\public\sdk\inc\winver.h
+FILE 6404 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6405 f:\sp\public\sdk\inc\reason.h
+FILE 6406 f:\sp\public\sdk\inc\winnt.h
+FILE 6407 f:\sp\public\sdk\inc\specstrings.h
+FILE 6408 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 6409 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 6410 f:\sp\public\sdk\inc\basetsd.h
+FILE 6411 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6412 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6413 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6414 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6415 f:\sp\public\sdk\inc\stralign.h
+FILE 6416 f:\sp\public\sdk\inc\poppack.h
+FILE 6417 f:\sp\public\sdk\inc\winsvc.h
+FILE 6418 f:\sp\public\sdk\inc\winuser.h
+FILE 6419 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 6420 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6421 f:\sp\public\sdk\inc\mcx.h
+FILE 6422 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6423 f:\sp\public\sdk\inc\guiddef.h
+FILE 6424 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6425 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 6426 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 6427 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6428 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 6429 f:\sp\public\sdk\inc\windows.h
+FILE 6430 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6431 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6432 f:\sp\public\sdk\inc\winnls.h
+FILE 6433 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6434 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6435 f:\sp\public\sdk\inc\winerror.h
+FILE 6436 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 6437 f:\sp\public\sdk\inc\winreg.h
+FILE 6438 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6439 f:\sp\public\sdk\inc\tvout.h
+FILE 6440 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 6441 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6442 f:\sp\public\sdk\inc\wincon.h
+FILE 6443 f:\sp\public\sdk\inc\imm.h
+FILE 6444 f:\sp\public\sdk\inc\winbase.h
+FILE 6445 f:\sp\vctools\crt_bld\self_x86\crt\src\iswctype.c
+FILE 6446 f:\sp\public\sdk\inc\wingdi.h
+FILE 6447 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 6448 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 6449 f:\sp\public\sdk\inc\winver.h
+FILE 6450 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h
+FILE 6451 f:\sp\public\sdk\inc\windows.h
+FILE 6452 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6453 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6454 f:\sp\public\sdk\inc\reason.h
+FILE 6455 f:\sp\public\sdk\inc\specstrings.h
+FILE 6456 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h
+FILE 6457 f:\sp\public\sdk\inc\basetsd.h
+FILE 6458 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6459 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6460 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6461 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6462 f:\sp\public\sdk\inc\stralign.h
+FILE 6463 f:\sp\public\sdk\inc\poppack.h
+FILE 6464 f:\sp\public\sdk\inc\winsvc.h
+FILE 6465 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6466 f:\sp\public\sdk\inc\windef.h
+FILE 6467 f:\sp\public\sdk\inc\winuser.h
+FILE 6468 f:\sp\public\sdk\inc\mcx.h
+FILE 6469 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6470 f:\sp\public\sdk\inc\guiddef.h
+FILE 6471 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6472 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6473 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6474 f:\sp\public\sdk\inc\winnt.h
+FILE 6475 f:\sp\public\sdk\inc\winnls.h
+FILE 6476 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6477 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 6478 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6479 f:\sp\public\sdk\inc\winerror.h
+FILE 6480 f:\sp\public\sdk\inc\winsvc.h
+FILE 6481 f:\sp\public\sdk\inc\winuser.h
+FILE 6482 f:\sp\public\sdk\inc\mcx.h
+FILE 6483 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6484 f:\sp\public\sdk\inc\guiddef.h
+FILE 6485 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 6486 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 6487 f:\sp\public\sdk\inc\windows.h
+FILE 6488 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6489 f:\sp\public\sdk\inc\winnls.h
+FILE 6490 f:\sp\vctools\crt_bld\self_x86\crt\src\_wctype.c
+FILE 6491 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6492 f:\sp\public\sdk\inc\winerror.h
+FILE 6493 f:\sp\public\sdk\inc\winreg.h
+FILE 6494 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6495 f:\sp\public\sdk\inc\tvout.h
+FILE 6496 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 6497 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 6498 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6499 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6500 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6501 f:\sp\public\sdk\inc\wincon.h
+FILE 6502 f:\sp\public\sdk\inc\imm.h
+FILE 6503 f:\sp\public\sdk\inc\winbase.h
+FILE 6504 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6505 f:\sp\public\sdk\inc\wingdi.h
+FILE 6506 f:\sp\public\sdk\inc\windef.h
+FILE 6507 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h
+FILE 6508 f:\sp\public\sdk\inc\winver.h
+FILE 6509 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6510 f:\sp\public\sdk\inc\reason.h
+FILE 6511 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 6512 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6513 f:\sp\public\sdk\inc\winnt.h
+FILE 6514 f:\sp\public\sdk\inc\specstrings.h
+FILE 6515 f:\sp\public\sdk\inc\basetsd.h
+FILE 6516 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6517 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6518 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6519 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6520 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6521 f:\sp\public\sdk\inc\stralign.h
+FILE 6522 f:\sp\public\sdk\inc\poppack.h
+FILE 6523 f:\sp\public\sdk\inc\mcx.h
+FILE 6524 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6525 f:\sp\public\sdk\inc\guiddef.h
+FILE 6526 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 6527 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6528 f:\sp\public\sdk\inc\windows.h
+FILE 6529 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6530 f:\sp\public\sdk\inc\winnls.h
+FILE 6531 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6532 f:\sp\public\sdk\inc\winerror.h
+FILE 6533 f:\sp\public\sdk\inc\winreg.h
+FILE 6534 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6535 f:\sp\vctools\crt_bld\self_x86\crt\src\_ctype.c
+FILE 6536 f:\sp\public\sdk\inc\tvout.h
+FILE 6537 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 6538 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 6539 f:\sp\public\sdk\inc\wincon.h
+FILE 6540 f:\sp\public\sdk\inc\imm.h
+FILE 6541 f:\sp\public\sdk\inc\winbase.h
+FILE 6542 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6543 f:\sp\public\sdk\inc\wingdi.h
+FILE 6544 f:\sp\public\sdk\inc\windef.h
+FILE 6545 f:\sp\public\sdk\inc\winver.h
+FILE 6546 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6547 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6548 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6549 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6550 f:\sp\public\sdk\inc\reason.h
+FILE 6551 f:\sp\public\sdk\inc\winnt.h
+FILE 6552 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h
+FILE 6553 f:\sp\public\sdk\inc\specstrings.h
+FILE 6554 f:\sp\public\sdk\inc\basetsd.h
+FILE 6555 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6556 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6557 f:\sp\public\sdk\inc\stralign.h
+FILE 6558 f:\sp\public\sdk\inc\poppack.h
+FILE 6559 f:\sp\public\sdk\inc\winsvc.h
+FILE 6560 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6561 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6562 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6563 f:\sp\public\sdk\inc\winuser.h
+FILE 6564 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6565 f:\sp\public\sdk\inc\mcx.h
+FILE 6566 f:\sp\public\sdk\inc\winuser.h
+FILE 6567 f:\sp\public\sdk\inc\winnls.h
+FILE 6568 f:\sp\public\sdk\inc\stralign.h
+FILE 6569 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6570 f:\sp\public\sdk\inc\windef.h
+FILE 6571 f:\sp\public\sdk\inc\tvout.h
+FILE 6572 f:\sp\public\sdk\inc\winsvc.h
+FILE 6573 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h
+FILE 6574 f:\sp\public\sdk\inc\wingdi.h
+FILE 6575 f:\sp\public\sdk\inc\pshpack4.h
+FILE 6576 f:\sp\public\sdk\inc\poppack.h
+FILE 6577 f:\sp\public\sdk\inc\winnt.h
+FILE 6578 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6579 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6580 f:\sp\public\sdk\inc\imm.h
+FILE 6581 f:\sp\vctools\crt_bld\self_x86\crt\src\xtoa.c
+FILE 6582 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 6583 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h
+FILE 6584 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6585 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6586 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 6587 f:\sp\vctools\crt_bld\self_x86\crt\src\xtoas.c
+FILE 6588 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6589 f:\sp\public\sdk\inc\winver.h
+FILE 6590 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h
+FILE 6591 f:\sp\public\sdk\inc\guiddef.h
+FILE 6592 f:\sp\public\sdk\inc\specstrings.h
+FILE 6593 f:\sp\public\sdk\inc\basetsd.h
+FILE 6594 f:\sp\public\sdk\inc\winreg.h
+FILE 6595 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6596 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h
+FILE 6597 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6598 f:\sp\public\sdk\inc\windows.h
+FILE 6599 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6600 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6601 f:\sp\public\sdk\inc\winbase.h
+FILE 6602 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6603 f:\sp\public\sdk\inc\winerror.h
+FILE 6604 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6605 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 6606 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6607 f:\sp\public\sdk\inc\reason.h
+FILE 6608 f:\sp\public\sdk\inc\wincon.h
+FILE 6609 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl
+FILE 6610 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h
+FILE 6611 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6612 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6613 f:\sp\vctools\crt_bld\self_x86\crt\src\wchtodig.c
+FILE 6614 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6615 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6616 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6617 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl
+FILE 6618 f:\sp\public\sdk\inc\poppack.h
+FILE 6619 f:\sp\public\sdk\inc\winnetwk.h
+FILE 6620 f:\sp\public\sdk\inc\imm.h
+FILE 6621 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h
+FILE 6622 f:\sp\public\sdk\inc\windef.h
+FILE 6623 f:\sp\public\sdk\inc\pshpack1.h
+FILE 6624 f:\sp\public\sdk\inc\winver.h
+FILE 6625 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h
+FILE 6626 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h
+FILE 6627 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h
+FILE 6628 f:\sp\public\sdk\inc\winnt.h
+FILE 6629 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h
+FILE 6630 f:\sp\public\sdk\inc\winreg.h
+FILE 6631 f:\sp\vctools\crt_bld\self_x86\crt\src\atox.c
+FILE 6632 f:\sp\public\sdk\inc\winbase.h
+FILE 6633 f:\sp\public\sdk\inc\winerror.h
+FILE 6634 f:\sp\public\sdk\inc\pshpack8.h
+FILE 6635 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h
+FILE 6636 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h
+FILE 6637 f:\sp\public\sdk\inc\reason.h
+FILE 6638 f:\sp\public\sdk\inc\wincon.h
+FILE 6639 f:\sp\public\sdk\inc\ddbanned.h
+FILE 6640 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h
+FILE 6641 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h
+FILE 6642 f:\sp\public\sdk\inc\pshpack2.h
+FILE 6643 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h
+FILE 6644 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h
+FILE 6645 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h
+FILE 6646 f:\sp\public\sdk\inc\mcx.h
+FILE 6647 f:\sp\public\sdk\inc\winuser.h
+FILE 6648 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h
+FILE 6649 f:\sp\public\sdk\inc\winnls.h
+FILE 6650 f:\sp\public\sdk\inc\guiddef.h
+FILE 6651 f:\sp\public\sdk\inc\windows.h
+FILE 6652 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h
+FILE 6653 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h
+FILE 6654 f:\sp\public\sdk\inc\specstrings.h
+FILE 6655 f:\sp\public\sdk\inc\basetsd.h
+FILE 6656 f:\sp\public\sdk\inc\stralign.h
+FILE 6657 f:\sp\public\sdk\inc\tvout.h
+FILE 6658 f:\sp\public\sdk\inc\winsvc.h
+FILE 6659 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h
+FILE 6660 f:\sp\public\sdk\inc\wingdi.h
+FILE 6661 f:\sp\public\sdk\inc\pshpack4.h
+FUNC 1000 13 4 vswprintf
+1000 0 50 71
+1000 12 51 71
+1012 1 52 71
+FUNC 1020 1b 10 wmemcpy_s
+1020 0 1230 66
+1020 1b 1233 66
+FUNC 1040 1b 10 wmemmove_s
+1040 0 1250 66
+1040 1b 1253 66
+FUNC 1060 19 4 std::bad_alloc::bad_alloc(char const *)
+1060 13 371 83
+1073 6 372 83
+FUNC 1080 b 0 std::bad_alloc::~bad_alloc()
+1080 6 380 83
+1086 5 381 83
+FUNC 1090 24 0 std::bad_alloc::`vector deleting destructor'(unsigned int)
+FUNC 10c0 f 8 std::char_traits<wchar_t>::assign(wchar_t &,wchar_t const &)
+10c0 0 302 70
+10c0 e 303 70
+10ce 1 304 70
+FUNC 10d0 17 4 std::char_traits<wchar_t>::length(wchar_t const *)
+10d0 0 325 70
+10d0 16 327 70
+10e6 1 328 70
+FUNC 10f0 27 10 std::char_traits<wchar_t>::_Copy_s(wchar_t *,unsigned int,wchar_t const *,unsigned int)
+10f0 0 340 70
+10f0 23 343 70
+1113 3 344 70
+1116 1 345 70
+FUNC 1120 27 10 std::char_traits<wchar_t>::_Move_s(wchar_t *,unsigned int,wchar_t const *,unsigned int)
+1120 0 364 70
+1120 23 367 70
+1143 3 368 70
+1146 1 369 70
+FUNC 1150 d 8 std::char_traits<char>::assign(char &,char const &)
+1150 0 417 70
+1150 c 418 70
+115c 1 419 70
+FUNC 1160 13 4 std::char_traits<char>::length(char const *)
+1160 0 440 70
+1160 12 442 70
+1172 1 443 70
+FUNC 1180 21 10 std::char_traits<char>::_Copy_s(char *,unsigned int,char const *,unsigned int)
+1180 0 455 70
+1180 1d 458 70
+119d 3 459 70
+11a0 1 460 70
+FUNC 11b0 21 10 std::char_traits<char>::_Move_s(char *,unsigned int,char const *,unsigned int)
+11b0 0 479 70
+11b0 1d 482 70
+11cd 3 483 70
+11d0 1 484 70
+FUNC 11e0 7 0 std::_Iterator_base::_Iterator_base()
+11e0 6 441 65
+11e6 1 442 65
+FUNC 11f0 6b 4 std::logic_error::logic_error(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)
+11f0 56 27 82
+1246 15 28 82
+FUNC 1260 32 0 std::logic_error::~logic_error()
+1260 9 31 82
+1269 29 32 82
+FUNC 12a0 e 0 std::logic_error::what()
+12a0 0 35 82
+12a0 9 36 82
+12a9 1 37 82
+12aa 3 36 82
+12ad 1 37 82
+FUNC 12b0 47 0 std::logic_error::`scalar deleting destructor'(unsigned int)
+FUNC 1300 19 4 std::length_error::length_error(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)
+1300 13 106 82
+1313 6 107 82
+FUNC 1320 32 0 std::length_error::~length_error()
+1320 3 110 82
+1323 2f 111 82
+FUNC 1360 47 0 std::length_error::`vector deleting destructor'(unsigned int)
+FUNC 13b0 19 4 std::out_of_range::out_of_range(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)
+13b0 13 130 82
+13c3 6 131 82
+FUNC 13d0 32 0 std::out_of_range::~out_of_range()
+13d0 3 134 82
+13d3 2f 135 82
+FUNC 1410 47 0 std::out_of_range::`vector deleting destructor'(unsigned int)
+FUNC 1460 19 4 std::out_of_range::out_of_range(std::out_of_range const &)
+FUNC 1480 71 4 std::logic_error::logic_error(std::logic_error const &)
+FUNC 1500 1b 8 google_breakpad::WindowsStringUtils::safe_swprintf(wchar_t *,unsigned int,wchar_t const *,...)
+1500 0 94 63
+1500 1a 97 63
+151a 1 105 63
+FUNC 1520 35 0 google_breakpad::ExceptionHandler::set_dump_path(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const &)
+1520 4 137 43
+1524 f 138 43
+1533 c 139 43
+153f 7 140 43
+1546 1 141 43
+1547 6 139 43
+154d 7 140 43
+1554 1 141 43
+FUNC 1560 20b 14 google_breakpad::ExceptionHandler::ExceptionHandler(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const &,bool (*)(void *,_EXCEPTION_POINTERS *,MDRawAssertionInfo *),bool (*)(wchar_t const *,wchar_t const *,void *,_EXCEPTION_POINTERS *,MDRawAssertionInfo *,bool),void *,bool)
+1560 6d 75 12
+15cd 90 78 12
+165d 9 86 12
+1666 d 87 12
+1673 d 88 12
+1680 1e 96 12
+169e 11 98 12
+16af 7 99 12
+16b6 f 101 12
+16c5 a 104 12
+16cf 8 105 12
+16d7 7 106 12
+16de 7 107 12
+16e5 b 110 12
+16f0 8 114 12
+16f8 25 115 12
+171d d 117 12
+172a b 118 12
+1735 10 121 12
+1745 e 124 12
+1753 18 126 12
+FUNC 1770 274 0 google_breakpad::ExceptionHandler::~ExceptionHandler()
+1770 e 128 12
+177e a 129 12
+1788 7 130 12
+178f a 133 12
+1799 b 134 12
+17a4 a 136 12
+17ae 9 139 12
+17b7 63 142 12
+181a 23 143 12
+183d 5 144 12
+1842 13 147 12
+1855 2b 149 12
+1880 2a 151 12
+18aa 17 152 12
+18c1 2c 153 12
+18ed 19 151 12
+1906 11 158 12
+1917 23 161 12
+193a 6 162 12
+1940 d 165 12
+194d f 169 12
+195c d 170 12
+1969 f 171 12
+1978 9 172 12
+1981 63 173 12
+FUNC 19f0 31 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::`scalar deleting destructor'(unsigned int)
+FUNC 1a30 51 4 google_breakpad::ExceptionHandler::ExceptionHandlerThreadMain(void *)
+1a30 13 176 12
+1a43 f 182 12
+1a52 1a 185 12
+1a6c 13 188 12
+1a7f 2 190 12
+FUNC 1a90 c7 4 google_breakpad::AutoExceptionHandler::AutoExceptionHandler()
+1a90 7 204 12
+1a97 b 221 12
+1aa2 82 224 12
+1b24 d 225 12
+1b31 c 229 12
+1b3d e 231 12
+1b4b c 233 12
+FUNC 1b60 36 0 google_breakpad::AutoExceptionHandler::~AutoExceptionHandler()
+1b60 0 235 12
+1b60 b 237 12
+1b6b d 239 12
+1b78 b 242 12
+1b83 7 243 12
+1b8a b 244 12
+1b95 1 245 12
+FUNC 1ba0 3 0 google_breakpad::AutoExceptionHandler::get_handler()
+1ba0 3 247 12
+FUNC 1bb0 c4 4 google_breakpad::ExceptionHandler::HandleException(_EXCEPTION_POINTERS *)
+1bb0 2b 254 12
+1bdb a 255 12
+1be5 f 262 12
+1bf4 1e 265 12
+1c12 5 273 12
+1c17 2 274 12
+1c19 7 283 12
+1c20 5 284 12
+1c25 2 285 12
+1c27 2 286 12
+1c29 37 290 12
+1c60 14 291 12
+FUNC 1c80 121 14 google_breakpad::ExceptionHandler::HandleInvalidParameter(wchar_t const *,wchar_t const *,wchar_t const *,unsigned int,unsigned int)
+1c80 40 299 12
+1cc0 b7 319 12
+1d77 7 320 12
+1d7e 14 323 12
+1d92 2 324 12
+1d94 5 337 12
+1d99 8 345 12
+FUNC 1db0 81 8 google_breakpad::ExceptionHandler::WriteMinidumpOnHandlerThread(_EXCEPTION_POINTERS *,MDRawAssertionInfo *)
+1db0 2 350 12
+1db2 d 351 12
+1dbf 6 354 12
+1dc5 2b 359 12
+1df0 f 362 12
+1dff 6 363 12
+1e05 26 370 12
+1e2b 3 372 12
+1e2e 3 373 12
+FUNC 1e40 1d 0 google_breakpad::ExceptionHandler::WriteMinidump()
+1e40 3 375 12
+1e43 b 376 12
+1e4e b 377 12
+1e59 3 378 12
+1e5c 1 379 12
+FUNC 1e60 a2 4 google_breakpad::ExceptionHandler::WriteMinidump(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const &,bool (*)(wchar_t const *,wchar_t const *,void *,_EXCEPTION_POINTERS *,MDRawAssertionInfo *,bool),void *)
+1e60 41 384 12
+1ea1 10 385 12
+1eb1 2a 386 12
+1edb 27 387 12
+FUNC 1f10 142 c google_breakpad::ExceptionHandler::WriteMinidumpWithException(unsigned long,_EXCEPTION_POINTERS *,MDRawAssertionInfo *)
+1f10 0 392 12
+1f10 22 399 12
+1f32 7 466 12
+1f39 2 403 12
+1f3b e 404 12
+1f49 1f 411 12
+1f68 9 412 12
+1f71 8 414 12
+1f79 4 415 12
+1f7d 8 416 12
+1f85 8 426 12
+1f8d a 427 12
+1f97 34 440 12
+1fcb 8 441 12
+1fd3 8 442 12
+1fdb 4 443 12
+1fdf 8 444 12
+1fe7 30 454 12
+2017 c 456 12
+2023 7 460 12
+202a 1e 462 12
+2048 4 465 12
+204c 6 466 12
+FUNC 2060 138 0 google_breakpad::ExceptionHandler::UpdateNextID()
+2060 38 468 12
+2098 b 470 12
+20a3 4a 471 12
+20ed 25 472 12
+2112 1c 477 12
+212e 31 478 12
+215f 14 479 12
+2173 25 480 12
+FUNC 21a0 3b 4 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >(char const *)
+21a0 0 650 17
+21a0 35 652 17
+21d5 6 653 17
+FUNC 21e0 25 4 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)
+21e0 1 720 17
+21e1 4 721 17
+21e5 1a 722 17
+21ff 6 723 17
+FUNC 2210 26 0 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >()
+2210 3 904 17
+2213 22 905 17
+2235 1 906 17
+FUNC 2240 e 0 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::c_str()
+2240 0 1621 17
+2240 9 1622 17
+2249 1 1623 17
+224a 3 1622 17
+224d 1 1623 17
+FUNC 2250 4 0 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::size()
+2250 0 1636 17
+2250 3 1637 17
+2253 1 1638 17
+FUNC 2260 11 0 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >()
+2260 0 564 17
+2260 10 565 17
+2270 1 566 17
+FUNC 2280 27 0 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::~basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >()
+2280 3 904 17
+2283 23 905 17
+22a6 1 906 17
+FUNC 22b0 b 0 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::operator=(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const &)
+22b0 0 914 17
+22b0 a 915 17
+22ba 1 916 17
+FUNC 22c0 24 4 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::operator=(wchar_t const *)
+22c0 0 919 17
+22c0 21 920 17
+22e1 3 921 17
+FUNC 22f0 e 0 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::c_str()
+22f0 0 1621 17
+22f0 9 1622 17
+22f9 1 1623 17
+22fa 3 1622 17
+22fd 1 1623 17
+FUNC 2300 c 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >()
+2300 0 457 23
+2300 b 458 23
+230b 1 459 23
+FUNC 2310 26 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::~vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >()
+2310 0 545 23
+2310 25 546 23
+2335 1 547 23
+FUNC 2340 1d 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::begin()
+2340 1 627 23
+2341 1b 628 23
+235c 1 629 23
+FUNC 2360 1d 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::end()
+2360 1 637 23
+2361 1b 638 23
+237c 1 639 23
+FUNC 2380 13 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::size()
+2380 0 702 23
+2380 9 703 23
+2389 1 704 23
+238a 8 703 23
+2392 1 704 23
+FUNC 23a0 23 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::empty()
+23a0 0 712 23
+23a0 10 713 23
+23b0 1 714 23
+23b1 11 713 23
+23c2 1 714 23
+FUNC 23d0 56 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::at(unsigned int)
+23d0 b 729 23
+23db 15 730 23
+23f0 5 731 23
+23f5 29 732 23
+241e 8 733 23
+FUNC 2430 47 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::back()
+2430 c 776 23
+243c 32 777 23
+246e 9 778 23
+FUNC 2480 68 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::push_back(google_breakpad::ExceptionHandler * const &)
+2480 10 786 23
+2490 24 787 23
+24b4 d 796 23
+24c1 6 801 23
+24c7 1b 800 23
+24e2 6 801 23
+FUNC 24f0 23 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::pop_back()
+24f0 6 818 23
+24f6 15 819 23
+250b 6 822 23
+2511 2 824 23
+FUNC 2520 3f 8 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::erase(std::_Vector_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >)
+2520 7 996 23
+2527 24 998 23
+254b 11 1001 23
+255c 3 1002 23
+FUNC 2560 20 0 std::_Vector_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator*()
+2560 0 325 23
+2560 1c 326 23
+257c 1 327 23
+257d 2 326 23
+257f 1 327 23
+FUNC 2580 20 0 std::_Vector_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator++()
+2580 0 335 23
+2580 1d 336 23
+259d 2 337 23
+259f 1 338 23
+FUNC 25a0 1d 0 std::_Vector_const_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator!=(std::_Vector_const_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> > const &)
+25a0 0 202 23
+25a0 1c 203 23
+25bc 1 204 23
+FUNC 25c0 da c std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,unsigned int,unsigned int)
+25c0 1 1038 17
+25c1 12 1039 17
+25d3 5 1040 17
+25d8 3 1041 17
+25db a 1042 17
+25e5 2 1043 17
+25e7 4 1045 17
+25eb 17 1046 17
+2602 5 1052 17
+2607 3 1053 17
+260a 21 1047 17
+262b b 1049 17
+2636 13 1047 17
+2649 5 1052 17
+264e 3 1053 17
+2651 7 1047 17
+2658 5 1052 17
+265d 3 1053 17
+2660 22 1049 17
+2682 10 1050 17
+2692 5 1052 17
+2697 3 1053 17
+FUNC 26a0 27 4 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign(char const *)
+26a0 1 1069 17
+26a1 23 1070 17
+26c4 3 1071 17
+FUNC 26d0 4a 8 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Tidy(bool,unsigned int)
+26d0 0 2066 17
+26d0 f 2067 17
+26df 6 2069 17
+26e5 a 2072 17
+26ef d 2073 17
+26fc a 2074 17
+2706 11 2077 17
+2717 3 2078 17
+FUNC 2720 e 0 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Myptr()
+2720 0 2092 17
+2720 9 2093 17
+2729 1 2094 17
+272a 3 2093 17
+272d 1 2094 17
+FUNC 2730 5 4 std::_String_val<char,std::allocator<char> >::_String_val<char,std::allocator<char> >(std::allocator<char>)
+2730 2 471 17
+2732 3 472 17
+FUNC 2740 5 4 std::_String_val<char,std::allocator<char> >::_String_val<char,std::allocator<char> >(std::_String_val<char,std::allocator<char> > const &)
+2740 2 477 17
+2742 3 484 17
+FUNC 2750 3 0 std::allocator<char>::allocator<char>()
+2750 2 120 19
+2752 1 122 19
+FUNC 2760 b 0 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::assign(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const &)
+2760 0 1032 17
+2760 a 1033 17
+276a 1 1034 17
+FUNC 2770 ef c std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::assign(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const &,unsigned int,unsigned int)
+2770 1 1038 17
+2771 12 1039 17
+2783 5 1040 17
+2788 3 1041 17
+278b a 1042 17
+2795 2 1043 17
+2797 4 1045 17
+279b 17 1046 17
+27b2 5 1052 17
+27b7 3 1053 17
+27ba 24 1047 17
+27de b 1049 17
+27e9 13 1047 17
+27fc 5 1052 17
+2801 3 1053 17
+2804 9 1047 17
+280d 5 1052 17
+2812 3 1053 17
+2815 2f 1049 17
+2844 13 1050 17
+2857 5 1052 17
+285c 3 1053 17
+FUNC 2860 2b 4 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::assign(wchar_t const *)
+2860 1 1069 17
+2861 27 1070 17
+2888 3 1071 17
+FUNC 2890 4f 8 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::_Tidy(bool,unsigned int)
+2890 0 2066 17
+2890 f 2067 17
+289f 6 2069 17
+28a5 a 2072 17
+28af 10 2073 17
+28bf a 2074 17
+28c9 13 2077 17
+28dc 3 2078 17
+FUNC 28e0 e 0 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::_Myptr()
+28e0 0 2092 17
+28e0 9 2093 17
+28e9 1 2094 17
+28ea 3 2093 17
+28ed 1 2094 17
+FUNC 28f0 5 4 std::_String_val<wchar_t,std::allocator<wchar_t> >::_String_val<wchar_t,std::allocator<wchar_t> >(std::allocator<wchar_t>)
+28f0 2 471 17
+28f2 3 472 17
+FUNC 2900 3 0 std::allocator<wchar_t>::allocator<wchar_t>()
+2900 2 120 19
+2902 1 122 19
+FUNC 2910 13 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::capacity()
+2910 0 621 23
+2910 9 622 23
+2919 1 623 23
+291a 8 622 23
+2922 1 623 23
+FUNC 2930 86 c std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::insert(std::_Vector_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >,google_breakpad::ExceptionHandler * const &)
+2930 3 852 23
+2933 3e 853 23
+2971 11 854 23
+2982 2a 855 23
+29ac a 856 23
+FUNC 29c0 23 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::_Buy(unsigned int)
+29c0 0 1066 23
+29c0 8 1070 23
+29c8 5 1071 23
+29cd a 1074 23
+29d7 3 1075 23
+29da 6 1076 23
+29e0 2 1078 23
+29e2 1 1079 23
+FUNC 29f0 1 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::_Destroy(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *)
+29f0 0 1082 23
+29f0 1 1084 23
+FUNC 2a00 26 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::_Tidy()
+2a00 0 1087 23
+2a00 7 1088 23
+2a07 9 1096 23
+2a10 15 1098 23
+2a25 1 1099 23
+FUNC 2a30 23 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::_Ufill(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &)
+2a30 0 1207 23
+2a30 1f 1208 23
+2a4f 3 1209 23
+2a52 1 1210 23
+FUNC 2a60 76 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::_Xran()
+2a60 23 1218 23
+2a83 53 1219 23
+FUNC 2ae0 3 4 std::_Vector_val<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::_Vector_val<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >(std::allocator<google_breakpad::ExceptionHandler *>)
+2ae0 0 412 23
+2ae0 3 413 23
+FUNC 2af0 1 0 std::allocator<google_breakpad::ExceptionHandler *>::allocator<google_breakpad::ExceptionHandler *>()
+2af0 0 120 19
+2af0 1 122 19
+FUNC 2b00 21 0 std::_Vector_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::_Vector_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >(google_breakpad::ExceptionHandler * *,std::_Container_base const *)
+2b00 1e 314 23
+2b1e 3 315 23
+FUNC 2b30 32 4 std::_Vector_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator+(int)
+2b30 1 367 23
+2b31 2 368 23
+2b33 26 369 23
+2b59 9 370 23
+FUNC 2b70 2f 0 std::_Vector_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator-(int)
+2b70 1 378 23
+2b71 2 379 23
+2b73 25 380 23
+2b98 7 381 23
+FUNC 2ba0 20 0 std::_Vector_const_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator*()
+2ba0 0 92 23
+2ba0 a 103 23
+2baa f 104 23
+2bb9 3 107 23
+2bbc 1 108 23
+2bbd 2 107 23
+2bbf 1 108 23
+FUNC 2bc0 20 0 std::_Vector_const_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator++()
+2bc0 0 116 23
+2bc0 a 117 23
+2bca f 118 23
+2bd9 4 119 23
+2bdd 2 120 23
+2bdf 1 121 23
+FUNC 2be0 1d 0 std::_Vector_const_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator==(std::_Vector_const_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> > const &)
+2be0 0 190 23
+2be0 f 195 23
+2bef d 198 23
+2bfc 1 199 23
+FUNC 2c00 c1 8 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign(char const *,unsigned int)
+2c00 5 1056 17
+2c05 2d 1057 17
+2c32 1a 1058 17
+2c4c 4 1066 17
+2c50 25 1060 17
+2c75 c 1062 17
+2c81 f 1060 17
+2c90 8 1065 17
+2c98 3 1066 17
+2c9b e 1062 17
+2ca9 10 1063 17
+2cb9 5 1065 17
+2cbe 3 1066 17
+FUNC 2cd0 83 8 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::erase(unsigned int,unsigned int)
+2cd0 1 1240 17
+2cd1 d 1241 17
+2cde 5 1242 17
+2ce3 d 1243 17
+2cf0 2 1244 17
+2cf2 4 1245 17
+2cf6 3c 1248 17
+2d32 8 1249 17
+2d3a 12 1250 17
+2d4c 4 1252 17
+2d50 3 1253 17
+FUNC 2d60 1f 4 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Eos(unsigned int)
+2d60 0 2030 17
+2d60 14 2031 17
+2d74 3 2032 17
+2d77 5 2031 17
+2d7c 3 2032 17
+FUNC 2d80 bc 8 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Grow(unsigned int,bool)
+2d80 1 2036 17
+2d81 c 2037 17
+2d8d 5 2038 17
+2d92 7 2039 17
+2d99 c 2040 17
+2da5 a 2046 17
+2daf 3 2047 17
+2db2 d 2041 17
+2dbf 39 2043 17
+2df8 10 2046 17
+2e08 3 2047 17
+2e0b 4 2044 17
+2e0f b 2045 17
+2e1a c 2046 17
+2e26 3 2047 17
+2e29 6 2045 17
+2e2f a 2046 17
+2e39 3 2047 17
+FUNC 2e40 e 0 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Myptr()
+2e40 0 2087 17
+2e40 9 2088 17
+2e49 1 2089 17
+2e4a 3 2088 17
+2e4d 1 2089 17
+FUNC 2e50 5 4 std::allocator<char>::allocator<char>(std::allocator<char> const &)
+2e50 2 124 19
+2e52 3 126 19
+FUNC 2e60 e 8 std::allocator<char>::deallocate(char *,unsigned int)
+2e60 0 140 19
+2e60 b 141 19
+2e6b 3 142 19
+FUNC 2e70 da 8 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::assign(wchar_t const *,unsigned int)
+2e70 4 1056 17
+2e74 31 1057 17
+2ea5 1d 1058 17
+2ec2 3 1066 17
+2ec5 28 1060 17
+2eed d 1062 17
+2efa 10 1060 17
+2f0a a 1065 17
+2f14 3 1066 17
+2f17 18 1062 17
+2f2f 14 1063 17
+2f43 4 1065 17
+2f47 3 1066 17
+FUNC 2f50 97 8 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::erase(unsigned int,unsigned int)
+2f50 1 1240 17
+2f51 d 1241 17
+2f5e 5 1242 17
+2f63 d 1243 17
+2f70 2 1244 17
+2f72 4 1245 17
+2f76 4d 1248 17
+2fc3 8 1249 17
+2fcb 15 1250 17
+2fe0 4 1252 17
+2fe4 3 1253 17
+FUNC 2ff0 4 0 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::size()
+2ff0 0 1636 17
+2ff0 3 1637 17
+2ff3 1 1638 17
+FUNC 3000 23 4 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::_Eos(unsigned int)
+3000 0 2030 17
+3000 16 2031 17
+3016 3 2032 17
+3019 7 2031 17
+3020 3 2032 17
+FUNC 3030 c7 8 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::_Grow(unsigned int,bool)
+3030 1 2036 17
+3031 f 2037 17
+3040 5 2038 17
+3045 7 2039 17
+304c c 2040 17
+3058 a 2046 17
+3062 3 2047 17
+3065 d 2041 17
+3072 3c 2043 17
+30ae 12 2046 17
+30c0 3 2047 17
+30c3 4 2044 17
+30c7 b 2045 17
+30d2 d 2046 17
+30df 3 2047 17
+30e2 8 2045 17
+30ea a 2046 17
+30f4 3 2047 17
+FUNC 3100 e 0 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::_Myptr()
+3100 0 2087 17
+3100 9 2088 17
+3109 1 2089 17
+310a 3 2088 17
+310d 1 2089 17
+FUNC 3110 5 4 std::allocator<wchar_t>::allocator<wchar_t>(std::allocator<wchar_t> const &)
+3110 2 124 19
+3112 3 126 19
+FUNC 3120 e 8 std::allocator<wchar_t>::deallocate(wchar_t *,unsigned int)
+3120 0 140 19
+3120 b 141 19
+312b 3 142 19
+FUNC 3130 6 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::max_size()
+3130 0 707 23
+3130 5 708 23
+3135 1 709 23
+FUNC 3140 208 8 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::_Insert_n(std::_Vector_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >,unsigned int,google_breakpad::ExceptionHandler * const &)
+3140 6 1117 23
+3146 2 1125 23
+3148 1c 1126 23
+3164 1c 1130 23
+3180 5 1131 23
+3185 1b 1132 23
+31a0 23 1135 23
+31c3 17 1136 23
+31da 19 1137 23
+31f3 7 1138 23
+31fa 25 1143 23
+321f 7 1144 23
+3226 1e 1145 23
+3244 13 1152 23
+3257 4 1153 23
+325b 9 1156 23
+3264 7 1163 23
+326b a 1164 23
+3275 3 1165 23
+3278 a 1204 23
+3282 13 1167 23
+3295 17 1170 23
+32ac 1a 1174 23
+32c6 7 1180 23
+32cd 16 1187 23
+32e3 a 1204 23
+32ed 2a 1193 23
+3317 e 1200 23
+3325 19 1202 23
+333e a 1204 23
+FUNC 3350 7c 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::_Xlen()
+3350 29 1213 23
+3379 53 1214 23
+FUNC 33d0 1 0 std::allocator<google_breakpad::ExceptionHandler *>::allocator<google_breakpad::ExceptionHandler *>(std::allocator<google_breakpad::ExceptionHandler *> const &)
+33d0 0 124 19
+33d0 1 126 19
+FUNC 33e0 8 0 std::allocator<google_breakpad::ExceptionHandler *>::deallocate(google_breakpad::ExceptionHandler * *,unsigned int)
+33e0 0 140 19
+33e0 7 141 19
+33e7 1 142 19
+FUNC 33f0 56 0 std::allocator<google_breakpad::ExceptionHandler *>::allocate(unsigned int)
+33f0 3 145 19
+33f3 16 146 19
+3409 4 147 19
+340d 39 146 19
+FUNC 3450 32 4 std::_Vector_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator+=(int)
+3450 0 361 23
+3450 2c 362 23
+347c 3 363 23
+347f 3 364 23
+FUNC 3490 28 0 std::_Vector_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator-=(int)
+3490 0 373 23
+3490 27 374 23
+34b7 1 375 23
+FUNC 34c0 19 0 std::_Vector_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator-(std::_Vector_const_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> > const &)
+34c0 0 384 23
+34c0 18 385 23
+34d8 1 386 23
+FUNC 34e0 21 0 std::_Vector_const_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::_Vector_const_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >(google_breakpad::ExceptionHandler * *,std::_Container_base const *)
+34e0 0 77 23
+34e0 19 79 23
+34f9 2 80 23
+34fb 3 81 23
+34fe 3 82 23
+FUNC 3510 19 4 std::length_error::length_error(std::length_error const &)
+FUNC 3530 7 0 std::_Ranit<google_breakpad::ExceptionHandler *,int,google_breakpad::ExceptionHandler * const *,google_breakpad::ExceptionHandler * const &>::_Ranit<google_breakpad::ExceptionHandler *,int,google_breakpad::ExceptionHandler * const *,google_breakpad::ExceptionHandler * const &>()
+FUNC 3540 6 0 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::max_size()
+3540 0 1641 17
+3540 5 1643 17
+3545 1 1644 17
+FUNC 3550 171 8 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Copy(unsigned int,unsigned int)
+3550 30 2000 17
+3580 8 2001 17
+3588 5 2002 17
+358d 2 2003 17
+358f 2 2004 17
+3591 1f 2005 17
+35b0 3 2006 17
+35b3 2 2009 17
+35b5 18 2010 17
+35cd 2 2019 17
+35cf 30 2010 17
+35ff 3 2012 17
+3602 19 2014 17
+361b c 2019 17
+3627 7 2021 17
+362e 20 2022 17
+364e 12 2023 17
+3660 1c 2026 17
+367c 14 2027 17
+3690 15 2016 17
+36a5 1c 2017 17
+FUNC 36d0 39 4 std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Inside(char const *)
+36d0 1 2050 17
+36d1 2b 2052 17
+36fc 3 2055 17
+36ff 4 2056 17
+3703 3 2053 17
+3706 3 2056 17
+FUNC 3710 6 0 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::max_size()
+3710 0 1641 17
+3710 5 1643 17
+3715 1 1644 17
+FUNC 3720 17b 8 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::_Copy(unsigned int,unsigned int)
+3720 30 2000 17
+3750 8 2001 17
+3758 8 2002 17
+3760 2 2003 17
+3762 2 2004 17
+3764 1f 2005 17
+3783 3 2006 17
+3786 2 2009 17
+3788 1b 2010 17
+37a3 2 2019 17
+37a5 30 2010 17
+37d5 3 2012 17
+37d8 19 2014 17
+37f1 c 2019 17
+37fd 7 2021 17
+3804 24 2022 17
+3828 12 2023 17
+383a 20 2026 17
+385a 14 2027 17
+386e 17 2016 17
+3885 16 2017 17
+FUNC 38a0 3a 4 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::_Inside(wchar_t const *)
+38a0 1 2050 17
+38a1 2c 2052 17
+38cd 3 2055 17
+38d0 4 2056 17
+38d4 3 2053 17
+38d7 3 2056 17
+FUNC 38e0 6 0 std::allocator<google_breakpad::ExceptionHandler *>::max_size()
+38e0 0 165 19
+38e0 5 167 19
+38e5 1 168 19
+FUNC 38f0 32 4 std::_Vector_const_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator+=(int)
+38f0 0 146 23
+38f0 a 147 23
+38fa 1a 148 23
+3914 5 150 23
+3919 3 151 23
+391c 3 152 23
+391f 3 153 23
+FUNC 3930 19 0 std::_Vector_const_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::operator-(std::_Vector_const_iterator<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> > const &)
+3930 0 173 23
+3930 f 178 23
+393f 9 181 23
+3948 1 182 23
+FUNC 3950 56 4 std::allocator<char>::allocate(unsigned int)
+3950 0 145 19
+3950 16 146 19
+3966 6 147 19
+396c 3a 146 19
+FUNC 39b0 4 0 std::allocator<char>::max_size()
+39b0 0 165 19
+39b0 3 167 19
+39b3 1 168 19
+FUNC 39c0 59 4 std::allocator<wchar_t>::allocate(unsigned int)
+39c0 0 145 19
+39c0 19 146 19
+39d9 6 147 19
+39df 3a 146 19
+FUNC 3a20 6 0 std::allocator<wchar_t>::max_size()
+3a20 0 165 19
+3a20 5 167 19
+3a25 1 168 19
+FUNC 3a30 21 10 std::_Traits_helper::copy_s<std::char_traits<char> >(char *,unsigned int,char const *,unsigned int)
+3a30 0 581 70
+3a30 20 582 70
+3a50 1 583 70
+FUNC 3a60 27 10 std::_Traits_helper::copy_s<std::char_traits<wchar_t> >(wchar_t *,unsigned int,wchar_t const *,unsigned int)
+3a60 0 581 70
+3a60 26 582 70
+3a86 1 583 70
+FUNC 3a90 24 0 stdext::unchecked_copy<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *>(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *)
+3a90 0 3407 65
+3a90 23 3409 65
+3ab3 1 3410 65
+FUNC 3ac0 1 0 std::_Destroy_range<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator<google_breakpad::ExceptionHandler *> &)
+3ac0 0 225 19
+3ac0 1 227 19
+FUNC 3ad0 15 0 stdext::unchecked_uninitialized_fill_n<google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &,std::allocator<google_breakpad::ExceptionHandler *> &)
+3ad0 0 914 24
+3ad0 14 916 24
+3ae4 1 917 24
+FUNC 3af0 21 10 std::_Traits_helper::move_s<std::char_traits<char> >(char *,unsigned int,char const *,unsigned int)
+3af0 0 608 70
+3af0 20 609 70
+3b10 1 610 70
+FUNC 3b20 27 10 std::_Traits_helper::move_s<std::char_traits<wchar_t> >(wchar_t *,unsigned int,wchar_t const *,unsigned int)
+3b20 0 608 70
+3b20 26 609 70
+3b46 1 610 70
+FUNC 3b50 22 0 std::vector<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >::_Umove<google_breakpad::ExceptionHandler * *>(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *)
+3b50 0 1109 23
+3b50 21 1112 23
+3b71 1 1113 23
+FUNC 3b80 10 0 std::fill<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler *>(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * const &)
+3b80 0 2976 65
+3b80 f 2977 65
+3b8f 1 2978 65
+FUNC 3b90 25 0 stdext::_Unchecked_move_backward<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *>(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *)
+3b90 0 3497 65
+3b90 24 3499 65
+3bb4 1 3500 65
+FUNC 3bc0 4f 0 std::_Allocate<google_breakpad::ExceptionHandler *>(unsigned int,google_breakpad::ExceptionHandler * *)
+3bc0 0 37 19
+3bc0 f 40 19
+3bcf 2c 41 19
+3bfb 10 44 19
+3c0b 4 45 19
+FUNC 3c10 54 8 std::_Allocate<char>(unsigned int,char *)
+3c10 0 37 19
+3c10 b 38 19
+3c1b 2 39 19
+3c1d 9 44 19
+3c26 4 45 19
+3c2a c 40 19
+3c36 2e 41 19
+FUNC 3c70 57 8 std::_Allocate<wchar_t>(unsigned int,wchar_t *)
+3c70 0 37 19
+3c70 b 38 19
+3c7b 2 39 19
+3c7d c 44 19
+3c89 4 45 19
+3c8d c 40 19
+3c99 2e 41 19
+FUNC 3cd0 19 4 std::bad_alloc::bad_alloc(std::bad_alloc const &)
+FUNC 3cf0 7 0 std::_Char_traits_cat<std::char_traits<char> >()
+3cf0 1 568 70
+3cf1 4 570 70
+3cf5 2 571 70
+FUNC 3d00 21 14 std::_Traits_helper::copy_s<std::char_traits<char> >(char *,unsigned int,char const *,unsigned int,std::_Secure_char_traits_tag)
+3d00 0 589 70
+3d00 20 590 70
+3d20 1 591 70
+FUNC 3d30 7 0 std::_Char_traits_cat<std::char_traits<wchar_t> >()
+3d30 1 568 70
+3d31 4 570 70
+3d35 2 571 70
+FUNC 3d40 27 14 std::_Traits_helper::copy_s<std::char_traits<wchar_t> >(wchar_t *,unsigned int,wchar_t const *,unsigned int,std::_Secure_char_traits_tag)
+3d40 0 589 70
+3d40 26 590 70
+3d66 1 591 70
+FUNC 3d70 3 0 std::_Checked_base<google_breakpad::ExceptionHandler * *>(google_breakpad::ExceptionHandler * * &)
+3d70 0 1009 65
+3d70 2 1011 65
+3d72 1 1012 65
+FUNC 3d80 1 0 std::_Iter_random<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *>(google_breakpad::ExceptionHandler * * const &,google_breakpad::ExceptionHandler * * const &)
+3d80 0 839 65
+3d80 1 844 65
+FUNC 3d90 7 0 std::_Ptr_cat<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *>(google_breakpad::ExceptionHandler * * &,google_breakpad::ExceptionHandler * * &)
+3d90 1 1329 65
+3d91 4 1331 65
+3d95 2 1332 65
+FUNC 3da0 15 4 std::_Copy_opt<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::random_access_iterator_tag>(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::random_access_iterator_tag,std::_Scalar_ptr_iterator_tag,std::_Range_checked_iterator_tag)
+3da0 0 2288 65
+3da0 d 2300 65
+3dad 7 2301 65
+3db4 1 2302 65
+FUNC 3dc0 1 4 std::_Destroy_range<google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator<google_breakpad::ExceptionHandler *> &,std::_Scalar_ptr_iterator_tag)
+3dc0 0 242 19
+3dc0 1 243 19
+FUNC 3dd0 15 8 std::_Uninit_fill_n<google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler *,std::allocator<google_breakpad::ExceptionHandler *> >(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &,std::allocator<google_breakpad::ExceptionHandler *> &,std::_Scalar_ptr_iterator_tag,std::_Range_checked_iterator_tag)
+3dd0 0 415 24
+3dd0 14 416 24
+3de4 1 417 24
+FUNC 3df0 21 14 std::_Traits_helper::move_s<std::char_traits<char> >(char *,unsigned int,char const *,unsigned int,std::_Secure_char_traits_tag)
+3df0 0 616 70
+3df0 20 617 70
+3e10 1 618 70
+FUNC 3e20 27 14 std::_Traits_helper::move_s<std::char_traits<wchar_t> >(wchar_t *,unsigned int,wchar_t const *,unsigned int,std::_Secure_char_traits_tag)
+3e20 0 616 70
+3e20 26 617 70
+3e46 1 618 70
+FUNC 3e50 22 0 stdext::_Unchecked_uninitialized_move<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator<google_breakpad::ExceptionHandler *> >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator<google_breakpad::ExceptionHandler *> &)
+3e50 0 843 24
+3e50 21 845 24
+3e71 1 846 24
+FUNC 3e80 10 0 std::_Fill<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler *>(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * const &)
+3e80 0 2946 65
+3e80 6 2948 65
+3e86 9 2949 65
+3e8f 1 2950 65
+FUNC 3e90 7 0 std::_Move_cat<google_breakpad::ExceptionHandler * *>(google_breakpad::ExceptionHandler * * const &)
+3e90 1 1046 65
+3e91 4 1048 65
+3e95 2 1049 65
+FUNC 3ea0 25 c std::_Move_backward_opt<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::random_access_iterator_tag,std::_Undefined_move_tag>(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::random_access_iterator_tag,std::_Undefined_move_tag,std::_Range_checked_iterator_tag)
+3ea0 0 2546 65
+3ea0 24 2548 65
+3ec4 1 2549 65
+FUNC 3ed0 3 4 std::_Checked_base<google_breakpad::ExceptionHandler * *>(google_breakpad::ExceptionHandler * * &,std::_Unchanged_checked_iterator_base_type_tag)
+3ed0 0 992 65
+3ed0 2 993 65
+3ed2 1 994 65
+FUNC 3ee0 15 0 stdext::unchecked_fill_n<google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler *>(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &)
+3ee0 0 3523 65
+3ee0 14 3524 65
+3ef4 1 3525 65
+FUNC 3f00 22 8 std::_Uninit_move<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator<google_breakpad::ExceptionHandler *>,std::_Undefined_move_tag>(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator<google_breakpad::ExceptionHandler *> &,std::_Undefined_move_tag,std::_Range_checked_iterator_tag)
+3f00 0 205 24
+3f00 21 206 24
+3f21 1 207 24
+FUNC 3f30 13 0 std::_Copy_backward_opt<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::random_access_iterator_tag>(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::random_access_iterator_tag,std::_Scalar_ptr_iterator_tag,std::_Range_checked_iterator_tag)
+3f30 0 2492 65
+3f30 10 2506 65
+3f40 2 2507 65
+3f42 1 2508 65
+FUNC 3f50 1 0 std::_Iter_cat<google_breakpad::ExceptionHandler * *>(google_breakpad::ExceptionHandler * * const &)
+3f50 0 798 65
+3f50 1 801 65
+FUNC 3f60 15 8 std::_Fill_n<google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler *>(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &,std::random_access_iterator_tag,std::_Range_checked_iterator_tag)
+3f60 0 3040 65
+3f60 14 3044 65
+3f74 1 3045 65
+FUNC 3f80 22 0 stdext::unchecked_uninitialized_copy<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator<google_breakpad::ExceptionHandler *> >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator<google_breakpad::ExceptionHandler *> &)
+3f80 0 803 24
+3f80 21 805 24
+3fa1 1 806 24
+FUNC 3fb0 15 4 std::_Fill_n<google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler *>(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &,std::_Range_checked_iterator_tag)
+3fb0 0 2986 65
+3fb0 5 2987 65
+3fb5 f 2988 65
+3fc4 1 2989 65
+FUNC 3fd0 15 4 std::_Uninit_copy<google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator<google_breakpad::ExceptionHandler *> >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator<google_breakpad::ExceptionHandler *> &,std::_Scalar_ptr_iterator_tag,std::_Range_checked_iterator_tag)
+3fd0 0 144 24
+3fd0 d 150 24
+3fdd 7 151 24
+3fe4 1 152 24
+FUNC 3ff0 13 4 vswprintf
+3ff0 0 50 147
+3ff0 12 51 147
+4002 1 52 147
+FUNC 4010 ae 4 google_breakpad::GUIDString::GUIDToWString(_GUID *)
+4010 12 43 126
+4022 51 51 126
+4073 3a 52 126
+40ad 11 53 126
+FUNC 40c0 ae 4 google_breakpad::GUIDString::GUIDToSymbolServerWString(_GUID *)
+40c0 12 56 126
+40d2 51 64 126
+4123 3a 65 126
+415d 11 66 126
+FUNC 4170 40 4 std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >(wchar_t const *)
+4170 0 650 143
+4170 3a 652 143
+41aa 6 653 143
+FUNC 41b0 86 8 main
+41b0 13 63 178
+41c3 38 64 178
+41fb 5 65 178
+4200 d 66 178
+420d 1b 67 178
+4228 e 68 178
+FUNC 4240 41 18 `anonymous namespace'::callback
+4240 3 45 178
+4243 8 46 178
+424b 11 47 178
+425c 2 48 178
+425e d 49 178
+426b 11 51 178
+427c 3 53 178
+427f 2 54 178
+FUNC 4290 18 0 `anonymous namespace'::CrashFunction
+4290 4 56 178
+4294 7 57 178
+429b 9 58 178
+42a4 4 59 178
+FUNC 42ae 18 4 std::invalid_argument::invalid_argument(std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)
+42ae 12 82 298
+42c0 6 83 298
+FUNC 42c6 b 0 std::invalid_argument::~invalid_argument()
+42c6 6 86 298
+42cc 5 87 298
+FUNC 42d1 22 0 std::invalid_argument::`vector deleting destructor'(unsigned int)
+FUNC 42f3 3f 0 std::_String_base::_Xlen()
+42f3 c 12 291
+42ff 33 13 291
+FUNC 4332 3f 0 std::_String_base::_Xran()
+4332 c 17 291
+433e 33 18 291
+FUNC 4371 3f 0 std::_String_base::_Xinvarg()
+4371 c 22 291
+437d 33 23 291
+FUNC 43b0 18 4 std::invalid_argument::invalid_argument(std::invalid_argument const &)
+FUNC 43c8 af 4 printf
+43c8 c 49 1601
+43d4 2b 54 1601
+43ff 14 58 1601
+4413 3 59 1601
+4416 10 61 1601
+4426 18 63 1601
+443e 11 65 1601
+444f c 68 1601
+445b 3 72 1601
+445e 6 73 1601
+4464 13 69 1601
+FUNC 4477 16 8 _printf_l
+4477 0 80 1601
+4477 15 85 1601
+448c 1 86 1601
+FUNC 448d 16 8 _printf_s_l
+448d 0 94 1601
+448d 15 99 1601
+44a2 1 100 1601
+FUNC 44a3 14 4 printf_s
+44a3 0 106 1601
+44a3 13 111 1601
+44b6 1 112 1601
+FUNC 44b7 16 8 _printf_p_l
+44b7 0 119 1601
+44b7 15 124 1601
+44cc 1 125 1601
+FUNC 44cd 14 4 _printf_p
+44cd 0 131 1601
+44cd 13 136 1601
+44e0 1 137 1601
+FUNC 44e1 25 4 _set_printf_count_output
+44e1 0 154 1601
+44e1 6 155 1601
+44e7 1e 156 1601
+4505 1 158 1601
+FUNC 4506 16 0 _get_printf_count_output
+4506 0 167 1601
+4506 15 168 1601
+451b 1 169 1601
+FUNC 451c f 0 __security_check_cookie
+451c 0 52 4397
+451c 6 55 4397
+4522 2 56 4397
+4524 2 57 4397
+4526 5 59 4397
+FUNC 452b 62 4 _flush
+452b 2 142 1704
+452d 25 152 1704
+4552 16 154 1704
+4568 7 158 1704
+456f 6 159 1704
+4575 2 161 1704
+4577 4 162 1704
+457b 4 163 1704
+457f 3 167 1704
+4582 7 168 1704
+4589 3 170 1704
+458c 1 171 1704
+FUNC 458d 42 4 _fflush_nolock
+458d 1 98 1704
+458e 8 102 1704
+4596 8 103 1704
+459e 1 116 1704
+459f b 106 1704
+45aa 4 108 1704
+45ae 1 116 1704
+45af 8 112 1704
+45b7 13 113 1704
+45ca 1 116 1704
+45cb 3 115 1704
+45ce 1 116 1704
+FUNC 45cf da 4 flsall
+45cf c 228 1704
+45db 5 230 1704
+45e0 3 231 1704
+45e3 8 233 1704
+45eb 3 234 1704
+45ee 11 236 1704
+45ff 14 238 1704
+4613 9 246 1704
+461c 6 248 1704
+4622 10 254 1704
+4632 5 256 1704
+4637 c 262 1704
+4643 3 266 1704
+4646 2 268 1704
+4648 a 269 1704
+4652 c 275 1704
+465e 3 276 1704
+4661 8 281 1704
+4669 3 236 1704
+466c 5 281 1704
+4671 11 282 1704
+4682 c 288 1704
+468e 4 292 1704
+4692 3 293 1704
+4695 2 292 1704
+4697 3 295 1704
+469a 6 296 1704
+46a0 9 289 1704
+FUNC 46a9 53 4 fflush
+46a9 c 57 1704
+46b5 7 62 1704
+46bc 9 63 1704
+46c5 9 65 1704
+46ce 3 67 1704
+46d1 c 68 1704
+46dd c 70 1704
+46e9 3 74 1704
+46ec 6 75 1704
+46f2 a 71 1704
+FUNC 46fc 9 0 _flushall
+46fc 0 193 1704
+46fc 8 194 1704
+4704 1 195 1704
+FUNC 4705 6 0 __iob_func
+4705 0 53 2087
+4705 5 54 2087
+470a 1 55 2087
+FUNC 470b b1 0 __initstdio
+470b 0 113 2087
+470b d 122 2087
+4718 7 123 2087
+471f 4 124 2087
+4723 7 125 2087
+472a 13 134 2087
+473d 19 137 2087
+4756 4 138 2087
+475a 1 163 2087
+475b e 145 2087
+4769 11 146 2087
+477a b 148 2087
+4785 24 151 2087
+47a9 2 158 2087
+47ab d 148 2087
+47b8 3 162 2087
+47bb 1 163 2087
+FUNC 47bc 20 0 __endstdio
+47bc 0 191 2087
+47bc 5 193 2087
+47c1 9 196 2087
+47ca 5 197 2087
+47cf c 198 2087
+47db 1 199 2087
+FUNC 47dc 3c 4 _lock_file
+47dc 1 221 2087
+47dd 15 226 2087
+47f2 10 231 2087
+4802 9 233 2087
+480b 1 242 2087
+480c b 241 2087
+4817 1 242 2087
+FUNC 4818 2e 8 _lock_file2
+4818 0 264 2087
+4818 9 269 2087
+4821 9 274 2087
+482a c 276 2087
+4836 1 285 2087
+4837 e 284 2087
+4845 1 285 2087
+FUNC 4846 36 4 _unlock_file
+4846 0 306 2087
+4846 14 311 2087
+485a 7 317 2087
+4861 f 318 2087
+4870 1 327 2087
+4871 a 326 2087
+487b 1 327 2087
+FUNC 487c 2a 8 _unlock_file2
+487c 0 349 2087
+487c 7 354 2087
+4883 d 360 2087
+4890 a 361 2087
+489a 1 370 2087
+489b a 369 2087
+48a5 1 370 2087
+FUNC 48a6 16 4 wcslen
+48a6 0 41 731
+48a6 4 42 731
+48aa a 44 731
+48b4 7 46 731
+48bb 1 47 731
+FUNC 48bc 5 4 operator delete(void *)
+48bc 0 20 5184
+48bc 5 23 5184
+FUNC 48c1 30 8 _JumpToContinuation(void *,EHRegistrationNode *)
+48c1 5 77 5627
+48c6 9 84 5627
+48cf 7 93 5627
+48d6 2 94 5627
+48d8 6 95 5627
+48de 3 100 5627
+48e1 3 101 5627
+48e4 3 102 5627
+48e7 3 103 5627
+48ea 2 104 5627
+48ec 5 106 5627
+FUNC 48f1 7 8 _CallMemberFunction0(void *,void *)
+48f1 0 118 5627
+48f1 1 120 5627
+48f2 1 121 5627
+48f3 3 122 5627
+48f6 2 123 5627
+FUNC 48f8 7 c _CallMemberFunction1(void *,void *,void *)
+48f8 0 139 5627
+48f8 1 141 5627
+48f9 1 142 5627
+48fa 3 143 5627
+48fd 2 144 5627
+FUNC 48ff 7 10 _CallMemberFunction2(void *,void *,void *,int)
+48ff 0 161 5627
+48ff 1 163 5627
+4900 1 164 5627
+4901 3 165 5627
+4904 2 166 5627
+FUNC 4906 52 8 _UnwindNestedFrames(EHRegistrationNode *,EHExceptionRecord *)
+4906 8 218 5627
+490e 7 232 5627
+4915 3 233 5627
+4918 7 236 5627
+491f 10 237 5627
+492f f 241 5627
+493e 7 247 5627
+4945 3 248 5627
+4948 2 249 5627
+494a 7 250 5627
+4951 7 256 5627
+FUNC 4958 36 10 __CxxFrameHandler
+4958 0 287 5627
+4958 1 295 5627
+4959 2 296 5627
+495b 3 297 5627
+495e 1 298 5627
+495f 1 299 5627
+4960 1 300 5627
+4961 1 301 5627
+4962 3 306 5627
+4965 1f 311 5627
+4984 1 316 5627
+4985 1 317 5627
+4986 1 318 5627
+4987 3 319 5627
+498a 2 320 5627
+498c 1 321 5627
+498d 1 322 5627
+FUNC 498e 36 10 __CxxFrameHandler3
+498e 0 341 5627
+498e 1 349 5627
+498f 2 350 5627
+4991 3 351 5627
+4994 1 352 5627
+4995 1 353 5627
+4996 1 354 5627
+4997 1 355 5627
+4998 3 360 5627
+499b 1f 365 5627
+49ba 1 370 5627
+49bb 1 371 5627
+49bc 1 372 5627
+49bd 3 373 5627
+49c0 2 374 5627
+49c2 1 375 5627
+49c3 1 376 5627
+FUNC 49c4 36 10 __CxxFrameHandler2
+49c4 0 391 5627
+49c4 1 399 5627
+49c5 2 400 5627
+49c7 3 401 5627
+49ca 1 402 5627
+49cb 1 403 5627
+49cc 1 404 5627
+49cd 1 405 5627
+49ce 3 410 5627
+49d1 1f 415 5627
+49f0 1 420 5627
+49f1 1 421 5627
+49f2 1 422 5627
+49f3 3 423 5627
+49f6 2 424 5627
+49f8 1 425 5627
+49f9 1 426 5627
+FUNC 49fa 1a 4 __CxxLongjmpUnwind
+49fa 0 443 5627
+49fa 17 449 5627
+4a11 3 452 5627
+FUNC 4a14 30 10 CatchGuardHandler
+4a14 1 545 5627
+4a15 1 551 5627
+4a16 e 557 5627
+4a24 1f 567 5627
+4a43 1 572 5627
+FUNC 4a44 d5 1c _CallSETranslator(EHExceptionRecord *,EHRegistrationNode *,void *,void *,_s_FuncInfo const *,int,EHRegistrationNode *)
+4a44 7 637 5627
+4a4b 9 642 5627
+4a54 5 644 5627
+4a59 3 645 5627
+4a5c 2 646 5627
+4a5e 8 648 5627
+4a66 4 656 5627
+4a6a 7 657 5627
+4a71 d 658 5627
+4a7e 6 659 5627
+4a84 6 660 5627
+4a8a 6 661 5627
+4a90 6 662 5627
+4a96 4 663 5627
+4a9a 4 664 5627
+4a9e 4 669 5627
+4aa2 3 675 5627
+4aa5 3 676 5627
+4aa8 6 681 5627
+4aae 3 682 5627
+4ab1 3 683 5627
+4ab4 6 684 5627
+4aba 7 690 5627
+4ac1 6 692 5627
+4ac7 6 693 5627
+4acd e 697 5627
+4adb e 701 5627
+4ae9 4 707 5627
+4aed 6 715 5627
+4af3 7 724 5627
+4afa 2 725 5627
+4afc 3 726 5627
+4aff 2 727 5627
+4b01 7 728 5627
+4b08 2 731 5627
+4b0a 3 737 5627
+4b0d 6 738 5627
+4b13 3 744 5627
+4b16 3 745 5627
+FUNC 4b19 9d 10 TranslatorGuardHandler
+4b19 5 770 5627
+4b1e 1 776 5627
+4b1f e 782 5627
+4b2d b 784 5627
+4b38 a 786 5627
+4b42 5 790 5627
+4b47 2 792 5627
+4b49 2a 796 5627
+4b73 9 798 5627
+4b7c b 802 5627
+4b87 1b 811 5627
+4ba2 3 818 5627
+4ba5 3 819 5627
+4ba8 3 820 5627
+4bab 3 821 5627
+4bae 2 822 5627
+4bb0 3 826 5627
+4bb3 3 828 5627
+FUNC 4bb6 73 14 _GetRangeOfTrysToCheck(_s_FuncInfo const *,int,int,unsigned int *,unsigned int *)
+4bb6 7 848 5627
+4bbd 6 849 5627
+4bc3 6 850 5627
+4bc9 2 851 5627
+4bcb 2 852 5627
+4bcd a 855 5627
+4bd7 1d 859 5627
+4bf4 3 860 5627
+4bf7 3 861 5627
+4bfa 3 862 5627
+4bfd 6 854 5627
+4c03 6 866 5627
+4c09 5 867 5627
+4c0e e 869 5627
+4c1c b 871 5627
+4c27 2 872 5627
+FUNC 4c29 28 8 _CreateFrameInfo
+4c29 0 889 5627
+4c29 b 890 5627
+4c34 e 891 5627
+4c42 b 892 5627
+4c4d 3 893 5627
+4c50 1 894 5627
+FUNC 4c51 21 4 _IsExceptionObjectToBeDestroyed
+4c51 0 907 5627
+4c51 d 910 5627
+4c5e 8 911 5627
+4c66 7 910 5627
+4c6d 1 915 5627
+4c6e 1 916 5627
+4c6f 2 912 5627
+4c71 1 916 5627
+FUNC 4c72 4c 4 _FindAndUnlinkFrame
+4c72 1 926 5627
+4c73 11 927 5627
+4c84 f 928 5627
+4c93 1 944 5627
+4c94 d 931 5627
+4ca1 7 935 5627
+4ca8 9 933 5627
+4cb1 5 943 5627
+4cb6 7 936 5627
+4cbd 1 944 5627
+FUNC 4cbe 5e 14 _CallCatchBlock2(EHRegistrationNode *,_s_FuncInfo const *,void *,int,unsigned long)
+4cbe 6 485 5627
+4cc4 e 493 5627
+4cd2 c 495 5627
+4cde 11 500 5627
+4cef 6 503 5627
+4cf5 3 504 5627
+4cf8 3 505 5627
+4cfb 6 506 5627
+4d01 e 512 5627
+4d0f 3 518 5627
+4d12 6 519 5627
+4d18 2 524 5627
+4d1a 2 525 5627
+FUNC 4d1c 4a 8 _CxxThrowException
+4d1c 6 95 5939
+4d22 15 117 5939
+4d37 3 118 5939
+4d3a 9 134 5939
+4d43 5 136 5939
+4d48 7 138 5939
+4d4f 13 159 5939
+4d62 4 161 5939
+FUNC 4d66 19 0 std::bad_alloc::bad_alloc()
+4d66 15 382 5121
+4d7b 4 383 5121
+FUNC 4d7f 6a 4 operator new(unsigned int)
+4d7f 6 57 5123
+4d85 2 59 5123
+4d87 d 60 5123
+4d94 d 59 5123
+4da1 2 67 5123
+4da3 27 62 5123
+4dca 1f 63 5123
+FUNC 4de9 f 4 type_info::name(__type_info_node *)
+4de9 0 44 5873
+4de9 c 45 5873
+4df5 3 46 5873
+FUNC 4df8 e 0 type_info::~type_info()
+4df8 0 49 5873
+4df8 d 50 5873
+4e05 1 51 5873
+FUNC 4e06 1c 0 type_info::`scalar deleting destructor'(unsigned int)
+FUNC 4e22 f 4 type_info::_name_internal_method(__type_info_node *)
+4e22 0 54 5873
+4e22 c 55 5873
+4e2e 3 56 5873
+FUNC 4e31 8 0 type_info::_type_info_dtor_internal_method()
+4e31 0 59 5873
+4e31 7 60 5873
+4e38 1 61 5873
+FUNC 4e39 1b 4 type_info::operator==(type_info const &)
+4e39 0 89 5873
+4e39 18 90 5873
+4e51 3 91 5873
+FUNC 4e54 1c 4 type_info::operator!=(type_info const &)
+4e54 0 98 5873
+4e54 19 99 5873
+4e6d 3 100 5873
+FUNC 4e70 1f 4 type_info::before(type_info const &)
+4e70 0 103 5873
+4e70 1c 104 5873
+4e8c 3 105 5873
+FUNC 4e8f 4 0 type_info::raw_name()
+4e8f 0 108 5873
+4e8f 3 109 5873
+4e92 1 110 5873
+FUNC 4e93 b 4 type_info::type_info(type_info const &)
+4e93 8 113 5873
+4e9b 3 123 5873
+FUNC 4e9e 5 4 type_info::operator=(type_info const &)
+4e9e 2 127 5873
+4ea0 3 135 5873
+FUNC 4ea3 11 0 std::exception::exception()
+4ea3 2 68 5916
+4ea5 4 69 5916
+4ea9 a 70 5916
+4eb3 1 71 5916
+FUNC 4eb4 4e 4 std::exception::exception(char const * const &)
+4eb4 1 77 5916
+4eb5 14 78 5916
+4ec9 9 80 5916
+4ed2 6 81 5916
+4ed8 9 82 5916
+4ee1 c 84 5916
+4eed 2 87 5916
+4eef 4 89 5916
+4ef3 7 91 5916
+4efa 8 92 5916
+FUNC 4f02 18 8 std::exception::exception(char const * const &,int)
+4f02 2 98 5916
+4f04 c 99 5916
+4f10 7 100 5916
+4f17 3 101 5916
+FUNC 4f1a 58 4 std::exception::exception(std::exception const &)
+4f1a 1 107 5916
+4f1b 13 108 5916
+4f2e 2 109 5916
+4f30 a 111 5916
+4f3a 9 113 5916
+4f43 6 114 5916
+4f49 9 115 5916
+4f52 d 117 5916
+4f5f 2 120 5916
+4f61 4 122 5916
+4f65 2 125 5916
+4f67 4 126 5916
+4f6b 7 127 5916
+FUNC 4f72 56 4 std::exception::operator=(std::exception const &)
+4f72 1 133 5916
+4f73 c 134 5916
+4f7f 6 136 5916
+4f85 2 137 5916
+4f87 9 139 5916
+4f90 9 141 5916
+4f99 6 144 5916
+4f9f 9 146 5916
+4fa8 d 148 5916
+4fb5 2 151 5916
+4fb7 4 153 5916
+4fbb 2 156 5916
+4fbd 3 157 5916
+4fc0 5 159 5916
+4fc5 3 160 5916
+FUNC 4fc8 16 0 std::exception::~exception()
+4fc8 0 167 5916
+4fc8 c 168 5916
+4fd4 9 169 5916
+4fdd 1 170 5916
+FUNC 4fde d 0 std::exception::what()
+4fde 0 180 5916
+4fde 5 181 5916
+4fe3 2 182 5916
+4fe5 5 184 5916
+4fea 1 185 5916
+FUNC 4feb 19 4 std::bad_cast::bad_cast(char const *)
+4feb 13 194 5916
+4ffe 6 195 5916
+FUNC 5004 18 4 std::bad_cast::bad_cast(std::bad_cast const &)
+5004 12 199 5916
+5016 6 200 5916
+FUNC 501c b 0 std::bad_cast::~bad_cast()
+501c 6 203 5916
+5022 5 204 5916
+FUNC 5027 19 4 std::bad_typeid::bad_typeid(char const *)
+5027 13 229 5916
+503a 6 230 5916
+FUNC 5040 18 4 std::bad_typeid::bad_typeid(std::bad_typeid const &)
+5040 12 234 5916
+5052 6 235 5916
+FUNC 5058 b 0 std::bad_typeid::~bad_typeid()
+5058 6 238 5916
+505e 5 239 5916
+FUNC 5063 18 4 std::__non_rtti_object::__non_rtti_object(char const *)
+5063 12 248 5916
+5075 6 249 5916
+FUNC 507b 18 4 std::__non_rtti_object::__non_rtti_object(std::__non_rtti_object const &)
+507b 12 253 5916
+508d 6 254 5916
+FUNC 5093 b 0 std::__non_rtti_object::~__non_rtti_object()
+5093 0 257 5916
+5093 b 258 5916
+FUNC 509e 1c 0 std::exception::`vector deleting destructor'(unsigned int)
+FUNC 50ba 22 0 std::bad_cast::`vector deleting destructor'(unsigned int)
+FUNC 50dc 22 0 std::bad_typeid::`scalar deleting destructor'(unsigned int)
+FUNC 50fe 22 0 std::__non_rtti_object::`scalar deleting destructor'(unsigned int)
+FUNC 5120 7b 10 memcpy_s
+5120 4 47 1002
+5124 a 48 1002
+512e 4 51 1002
+5132 20 55 1002
+5152 a 56 1002
+515c f 67 1002
+516b 2 68 1002
+516d f 59 1002
+517c 5 61 1002
+5181 13 62 1002
+5194 5 64 1002
+5199 2 69 1002
+FUNC 519b 5b 10 memmove_s
+519b 3 46 955
+519e 9 47 955
+51a7 2 50 955
+51a9 20 54 955
+51c9 5 55 955
+51ce 13 56 955
+51e1 f 58 955
+51f0 4 59 955
+51f4 2 60 955
+FUNC 51f6 a 4 _set_osplatform
+51f6 a 385 2595
+FUNC 5200 a 4 _set_osver
+5200 a 386 2595
+FUNC 520a a 4 _set_winver
+520a a 387 2595
+FUNC 5214 a 4 _set_winmajor
+5214 a 388 2595
+FUNC 521e a 4 _set_winminor
+521e a 389 2595
+FUNC 5228 24 4 fast_error_exit
+5228 0 375 2608
+5228 9 384 2608
+5231 5 386 2608
+5236 9 388 2608
+523f c 389 2608
+524b 1 390 2608
+FUNC 524c 41 0 check_managed_app
+524c 0 413 2608
+524c b 418 2608
+5257 5 422 2608
+525c a 424 2608
+5266 2 425 2608
+5268 9 427 2608
+5271 2 428 2608
+5273 7 433 2608
+527a 2 434 2608
+527c d 437 2608
+5289 1 438 2608
+528a 2 419 2608
+528c 1 438 2608
+FUNC 528d 1b6 0 __tmainCRTStartup
+528d c 203 2608
+5299 19 233 2608
+52b2 4 234 2608
+52b6 8 235 2608
+52be a 236 2608
+52c8 2 242 2608
+52ca 7 243 2608
+52d1 3 244 2608
+52d4 4 243 2608
+52d8 9 244 2608
+52e1 2 245 2608
+52e3 6 248 2608
+52e9 6 249 2608
+52ef 6 250 2608
+52f5 9 256 2608
+52fe 9 257 2608
+5307 8 258 2608
+530f 6 259 2608
+5315 d 260 2608
+5322 6 262 2608
+5328 5 263 2608
+532d 6 264 2608
+5333 6 265 2608
+5339 6 266 2608
+533f 8 271 2608
+5347 c 273 2608
+5353 8 274 2608
+535b 9 276 2608
+5364 8 277 2608
+536c 5 286 2608
+5371 4 294 2608
+5375 9 296 2608
+537e 8 297 2608
+5386 b 300 2608
+5391 a 303 2608
+539b 9 305 2608
+53a4 8 306 2608
+53ac 9 307 2608
+53b5 8 308 2608
+53bd 8 310 2608
+53c5 4 311 2608
+53c9 7 312 2608
+53d0 a 326 2608
+53da 18 327 2608
+53f2 6 330 2608
+53f8 6 331 2608
+53fe 5 333 2608
+5403 2 335 2608
+5405 17 336 2608
+541c 6 342 2608
+5422 6 344 2608
+5428 6 345 2608
+542e 5 347 2608
+5433 7 349 2608
+543a 3 351 2608
+543d 6 352 2608
+FUNC 5443 a 0 mainCRTStartup
+5443 0 186 2608
+5443 5 193 2608
+5448 5 195 2608
+FUNC 544d a 4 _initp_misc_invarg
+544d 0 38 3328
+544d 9 39 3328
+5456 1 40 3328
+FUNC 5457 fc 14 _invoke_watson
+5457 1c 111 3328
+5473 6 128 3328
+5479 6 129 3328
+547f 6 130 3328
+5485 3 131 3328
+5488 3 132 3328
+548b 3 133 3328
+548e 7 134 3328
+5495 7 135 3328
+549c 4 136 3328
+54a0 4 137 3328
+54a4 4 138 3328
+54a8 4 139 3328
+54ac 1 140 3328
+54ad 6 141 3328
+54b3 6 147 3328
+54b9 19 148 3328
+54d2 3 150 3328
+54d5 13 163 3328
+54e8 6 168 3328
+54ee 13 169 3328
+5501 6 171 3328
+5507 a 174 3328
+5511 a 176 3328
+551b 8 180 3328
+5523 8 181 3328
+552b 12 184 3328
+553d 16 185 3328
+FUNC 5553 22 4 _set_invalid_parameter_handler
+5553 1 207 3328
+5554 b 211 3328
+555f d 212 3328
+556c 5 214 3328
+5571 3 216 3328
+5574 1 217 3328
+FUNC 5575 d 0 _get_invalid_parameter_handler
+5575 0 221 3328
+5575 c 225 3328
+5581 1 228 3328
+FUNC 5582 9 14 _invoke_watson(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)
+5582 3 266 3328
+5585 1 274 3328
+5586 5 273 3328
+FUNC 558b 24 14 _invalid_parameter
+558b 3 70 3328
+558e b 77 3328
+5599 5 78 3328
+559e 1 89 3328
+559f 2 80 3328
+55a1 8 86 3328
+55a9 1 89 3328
+55aa 5 88 3328
+FUNC 55af 10 0 _invalid_parameter_noinfo
+55af 0 98 3328
+55af f 99 3328
+55be 1 100 3328
+FUNC 55bf 9 14 _invalid_parameter(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)
+55bf 3 249 3328
+55c2 1 257 3328
+55c3 5 256 3328
+FUNC 55c8 96 8 _swprintf
+55c8 7 122 1564
+55cf 24 128 1564
+55f3 8 133 1564
+55fb 6 138 1564
+5601 22 153 1564
+5623 1d 160 1564
+5640 18 161 1564
+5658 4 163 1564
+565c 2 171 1564
+FUNC 565e 1a c __swprintf_l
+565e 0 181 1564
+565e 19 186 1564
+5677 1 188 1564
+FUNC 5678 1c c swprintf_s
+5678 0 238 1564
+5678 1b 243 1564
+5693 1 244 1564
+FUNC 5694 1f 10 _snwprintf_s
+5694 3 253 1564
+5697 1a 258 1564
+56b1 2 259 1564
+FUNC 56b3 1c c _swprintf_p
+56b3 0 267 1564
+56b3 1b 272 1564
+56ce 1 273 1564
+FUNC 56cf 1d 10 _swprintf_s_l
+56cf 3 282 1564
+56d2 18 287 1564
+56ea 2 288 1564
+FUNC 56ec 20 14 _snwprintf_s_l
+56ec 3 298 1564
+56ef 1b 303 1564
+570a 2 304 1564
+FUNC 570c 1d 10 _swprintf_p_l
+570c 3 313 1564
+570f 18 318 1564
+5727 2 319 1564
+FUNC 5729 11 4 _scwprintf
+5729 0 347 1564
+5729 10 352 1564
+5739 1 353 1564
+FUNC 573a 11 4 _scwprintf_p
+573a 0 359 1564
+573a 10 364 1564
+574a 1 365 1564
+FUNC 574b 16 8 _scwprintf_l
+574b 0 372 1564
+574b 15 376 1564
+5760 1 377 1564
+FUNC 5761 16 8 _scwprintf_p_l
+5761 0 384 1564
+5761 15 389 1564
+5776 1 390 1564
+FUNC 5777 14f 8 fprintf
+5777 c 49 1648
+5783 5 53 1648
+5788 2e 55 1648
+57b6 c 56 1648
+57c2 3 61 1648
+57c5 7 63 1648
+57cc 3 64 1648
+57cf b0 66 1648
+587f 5 67 1648
+5884 8 69 1648
+588c 11 70 1648
+589d a 71 1648
+58a7 c 75 1648
+58b3 3 79 1648
+58b6 6 80 1648
+58bc a 76 1648
+FUNC 58c6 1a c _fprintf_l
+58c6 0 88 1648
+58c6 19 93 1648
+58df 1 94 1648
+FUNC 58e0 1a c _fprintf_s_l
+58e0 0 102 1648
+58e0 19 107 1648
+58f9 1 108 1648
+FUNC 58fa 18 8 fprintf_s
+58fa 0 115 1648
+58fa 17 120 1648
+5911 1 121 1648
+FUNC 5912 1a c _fprintf_p_l
+5912 0 129 1648
+5912 19 134 1648
+592b 1 135 1648
+FUNC 592c 18 8 _fprintf_p
+592c 0 142 1648
+592c 17 147 1648
+5943 1 148 1648
+FUNC 5944 f6 18 _vswprintf_helper
+5944 7 125 1380
+594b 28 130 1380
+5973 2f 133 1380
+59a2 15 143 1380
+59b7 7 146 1380
+59be 2 148 1380
+59c0 6 150 1380
+59c6 13 157 1380
+59d9 5 160 1380
+59de 2 162 1380
+59e0 41 171 1380
+5a21 5 172 1380
+5a26 12 175 1380
+5a38 2 183 1380
+FUNC 5a3a 27 10 _vswprintf_c
+5a3a 0 241 1380
+5a3a 1f 242 1380
+5a59 7 243 1380
+5a60 1 244 1380
+FUNC 5a61 28 14 _vswprintf_c_l
+5a61 3 253 1380
+5a64 1c 254 1380
+5a80 7 255 1380
+5a87 2 256 1380
+FUNC 5a89 87 14 _vswprintf_s_l
+5a89 4 265 1380
+5a8d 25 269 1380
+5ab2 19 270 1380
+5acb 1a 272 1380
+5ae5 4 273 1380
+5ae9 3 275 1380
+5aec 5 278 1380
+5af1 1d 280 1380
+5b0e 2 288 1380
+FUNC 5b10 1b 10 vswprintf_s
+5b10 0 296 1380
+5b10 1a 297 1380
+5b2a 1 298 1380
+FUNC 5b2b 107 18 _vsnwprintf_s_l
+5b2b 5 308 1380
+5b30 27 313 1380
+5b57 13 314 1380
+5b6a 7 317 1380
+5b71 1b 319 1380
+5b8c 8 323 1380
+5b94 20 324 1380
+5bb4 5 325 1380
+5bb9 a 329 1380
+5bc3 7 331 1380
+5bca 2 333 1380
+5bcc 2 338 1380
+5bce 12 339 1380
+5be0 10 342 1380
+5bf0 a 344 1380
+5bfa a 346 1380
+5c04 2 348 1380
+5c06 4 352 1380
+5c0a 8 356 1380
+5c12 18 358 1380
+5c2a 6 360 1380
+5c30 2 366 1380
+FUNC 5c32 1e 14 _vsnwprintf_s
+5c32 3 375 1380
+5c35 19 376 1380
+5c4e 2 377 1380
+FUNC 5c50 27 10 _vswprintf_p
+5c50 0 385 1380
+5c50 1f 386 1380
+5c6f 7 387 1380
+5c76 1 388 1380
+FUNC 5c77 28 14 _vswprintf_p_l
+5c77 3 397 1380
+5c7a 1c 398 1380
+5c96 7 399 1380
+5c9d 2 400 1380
+FUNC 5c9f 24 4 _amsg_exit
+5c9f 0 446 2560
+5c9f 5 449 2560
+5ca4 9 450 2560
+5cad b 451 2560
+5cb8 a 452 2560
+5cc2 1 453 2560
+FUNC 5cc3 26 4 __crtCorExitProcess
+5cc3 0 650 2560
+5cc3 b 654 2560
+5cce 4 655 2560
+5cd2 c 656 2560
+5cde 4 657 2560
+5ce2 6 658 2560
+5ce8 1 668 2560
+FUNC 5ce9 15 4 __crtExitProcess
+5ce9 0 673 2560
+5ce9 a 674 2560
+5cf3 b 683 2560
+FUNC 5cfe 9 0 _lockexit
+5cfe 0 733 2560
+5cfe 8 734 2560
+5d06 1 735 2560
+FUNC 5d07 9 0 _unlockexit
+5d07 0 759 2560
+5d07 8 760 2560
+5d0f 1 761 2560
+FUNC 5d10 18 4 _initterm
+5d10 3 841 2560
+5d13 2 855 2560
+5d15 6 853 2560
+5d1b 2 854 2560
+5d1d 3 855 2560
+5d20 7 848 2560
+5d27 1 857 2560
+FUNC 5d28 20 8 _initterm_e
+5d28 1 890 2560
+5d29 c 899 2560
+5d35 6 904 2560
+5d3b 2 905 2560
+5d3d 3 906 2560
+5d40 7 899 2560
+5d47 1 910 2560
+FUNC 5d48 37 4 _get_osplatform
+5d48 0 929 2560
+5d48 27 931 2560
+5d6f 1 939 2560
+5d70 9 934 2560
+5d79 2 936 2560
+5d7b 3 938 2560
+5d7e 1 939 2560
+FUNC 5d7f 3c 4 _get_osver
+5d7f 0 958 2560
+5d7f 27 960 2560
+5da6 1 968 2560
+5da7 8 963 2560
+5daf 8 965 2560
+5db7 3 967 2560
+5dba 1 968 2560
+FUNC 5dbb 3c 4 _get_winver
+5dbb 0 987 2560
+5dbb 27 989 2560
+5de2 1 997 2560
+5de3 8 992 2560
+5deb 8 994 2560
+5df3 3 996 2560
+5df6 1 997 2560
+FUNC 5df7 3c 4 _get_winmajor
+5df7 0 1016 2560
+5df7 27 1018 2560
+5e1e 1 1026 2560
+5e1f 8 1021 2560
+5e27 8 1023 2560
+5e2f 3 1025 2560
+5e32 1 1026 2560
+FUNC 5e33 3c 4 _get_winminor
+5e33 0 1045 2560
+5e33 27 1047 2560
+5e5a 1 1055 2560
+5e5b 8 1050 2560
+5e63 8 1052 2560
+5e6b 3 1054 2560
+5e6e 1 1055 2560
+FUNC 5e6f 37 4 _get_wpgmptr
+5e6f 0 1074 2560
+5e6f 27 1076 2560
+5e96 1 1085 2560
+5e97 9 1080 2560
+5ea0 2 1082 2560
+5ea2 3 1084 2560
+5ea5 1 1085 2560
+FUNC 5ea6 37 4 _get_pgmptr
+5ea6 0 1104 2560
+5ea6 27 1106 2560
+5ecd 1 1115 2560
+5ece 9 1110 2560
+5ed7 2 1112 2560
+5ed9 3 1114 2560
+5edc 1 1115 2560
+FUNC 5edd 92 4 _cinit
+5edd 0 263 2560
+5edd 18 273 2560
+5ef5 b 275 2560
+5f00 5 277 2560
+5f05 f 283 2560
+5f14 4 284 2560
+5f18 4 285 2560
+5f1c a 288 2560
+5f26 20 293 2560
+5f46 1a 306 2560
+5f60 c 308 2560
+5f6c 2 312 2560
+5f6e 1 313 2560
+FUNC 5f6f e2 c doexit
+5f6f c 499 2560
+5f7b 8 517 2560
+5f83 5 518 2560
+5f88 b 520 2560
+5f93 6 521 2560
+5f99 8 524 2560
+5fa1 5 526 2560
+5fa6 e 542 2560
+5fb4 12 543 2560
+5fc6 5 545 2560
+5fcb b 546 2560
+5fd6 10 551 2560
+5fe6 9 552 2560
+5fef 2 553 2560
+5ff1 10 558 2560
+6001 10 566 2560
+6011 c 584 2560
+601d 6 588 2560
+6023 6 592 2560
+6029 8 594 2560
+6031 8 596 2560
+6039 3 584 2560
+603c 6 585 2560
+6042 9 586 2560
+604b 6 597 2560
+FUNC 6051 11 4 exit
+6051 0 397 2560
+6051 10 398 2560
+6061 1 399 2560
+FUNC 6062 11 4 _exit
+6062 0 405 2560
+6062 10 406 2560
+6072 1 407 2560
+FUNC 6073 f 0 _cexit
+6073 0 412 2560
+6073 e 413 2560
+6081 1 414 2560
+FUNC 6082 f 0 _c_exit
+6082 0 419 2560
+6082 e 420 2560
+6090 1 421 2560
+FUNC 6091 4c 0 _init_pointers
+6091 1 786 2560
+6092 7 787 2560
+6099 6 789 2560
+609f 6 790 2560
+60a5 6 791 2560
+60ab 6 792 2560
+60b1 6 793 2560
+60b7 6 794 2560
+60bd 6 795 2560
+60c3 6 796 2560
+60c9 13 799 2560
+60dc 1 800 2560
+FUNC 60e0 8b 4 strlen
+60e0 0 54 880
+60e0 4 63 880
+60e4 6 64 880
+60ea 2 65 880
+60ec 2 69 880
+60ee 3 70 880
+60f1 2 71 880
+60f3 2 72 880
+60f5 6 73 880
+60fb 2 74 880
+60fd 13 76 880
+6110 2 81 880
+6112 5 82 880
+6117 2 83 880
+6119 3 84 880
+611c 2 85 880
+611e 3 86 880
+6121 5 87 880
+6126 2 88 880
+6128 3 90 880
+612b 2 91 880
+612d 2 92 880
+612f 2 93 880
+6131 2 94 880
+6133 5 95 880
+6138 2 96 880
+613a 5 97 880
+613f 2 98 880
+6141 2 99 880
+6143 3 103 880
+6146 4 104 880
+614a 2 105 880
+614c 1 106 880
+614d 3 108 880
+6150 4 109 880
+6154 2 110 880
+6156 1 111 880
+6157 3 113 880
+615a 4 114 880
+615e 2 115 880
+6160 1 116 880
+6161 3 118 880
+6164 4 119 880
+6168 2 120 880
+616a 1 121 880
+FUNC 616b 33 4 _EH_prolog3
+616b 0 93 5671
+616b 1 101 5671
+616c 7 103 5671
+6173 4 112 5671
+6177 4 113 5671
+617b 1 114 5671
+617c 1 115 5671
+617d 1 116 5671
+617e 2 117 5671
+6180 2 118 5671
+6182 5 131 5671
+6187 2 132 5671
+6189 1 133 5671
+618a 3 134 5671
+618d 7 135 5671
+6194 3 150 5671
+6197 6 151 5671
+619d 1 153 5671
+FUNC 619e 36 4 _EH_prolog3_catch
+619e 0 206 5671
+619e 1 214 5671
+619f 7 216 5671
+61a6 4 225 5671
+61aa 4 226 5671
+61ae 1 228 5671
+61af 1 229 5671
+61b0 1 230 5671
+61b1 2 231 5671
+61b3 2 232 5671
+61b5 5 246 5671
+61ba 2 247 5671
+61bc 1 248 5671
+61bd 3 249 5671
+61c0 3 250 5671
+61c3 7 251 5671
+61ca 3 267 5671
+61cd 6 268 5671
+61d3 1 270 5671
+FUNC 61d4 36 4 _EH_prolog3_GS
+61d4 0 322 5671
+61d4 1 330 5671
+61d5 7 332 5671
+61dc 4 341 5671
+61e0 4 342 5671
+61e4 1 344 5671
+61e5 1 345 5671
+61e6 1 346 5671
+61e7 2 347 5671
+61e9 2 348 5671
+61eb 5 362 5671
+61f0 2 363 5671
+61f2 1 364 5671
+61f3 3 365 5671
+61f6 3 366 5671
+61f9 7 367 5671
+6200 3 384 5671
+6203 6 385 5671
+6209 1 387 5671
+FUNC 620a 39 4 _EH_prolog3_catch_GS
+620a 0 441 5671
+620a 1 449 5671
+620b 7 451 5671
+6212 4 460 5671
+6216 4 461 5671
+621a 1 463 5671
+621b 1 464 5671
+621c 1 465 5671
+621d 2 466 5671
+621f 2 467 5671
+6221 5 482 5671
+6226 2 483 5671
+6228 1 484 5671
+6229 3 485 5671
+622c 3 486 5671
+622f 3 487 5671
+6232 7 488 5671
+6239 3 505 5671
+623c 6 506 5671
+6242 1 508 5671
+FUNC 6243 14 0 _EH_epilog3
+6243 0 534 5671
+6243 3 537 5671
+6246 7 538 5671
+624d 1 539 5671
+624e 1 540 5671
+624f 1 541 5671
+6250 1 542 5671
+6251 1 543 5671
+6252 2 544 5671
+6254 1 545 5671
+6255 1 546 5671
+6256 1 547 5671
+FUNC 6257 f 0 _EH_epilog3_GS
+6257 0 575 5671
+6257 3 578 5671
+625a 2 579 5671
+625c 5 580 5671
+6261 5 581 5671
+FUNC 6266 f 0 _EH_epilog3_catch_GS
+6266 0 609 5671
+6266 3 612 5671
+6269 2 613 5671
+626b 5 614 5671
+6270 5 615 5671
+FUNC 6275 96 4 _stbuf
+6275 1 59 1850
+6276 14 69 1850
+628a 2 70 1850
+628c c 73 1850
+6298 4 74 1850
+629c c 75 1850
+62a8 3 76 1850
+62ab 6 82 1850
+62b1 6 86 1850
+62b7 4 87 1850
+62bb 1e 91 1850
+62d9 3 93 1850
+62dc e 94 1850
+62ea 2 96 1850
+62ec 7 98 1850
+62f3 6 99 1850
+62f9 8 102 1850
+6301 5 104 1850
+6306 1 105 1850
+6307 3 78 1850
+630a 1 105 1850
+FUNC 630b 2f 8 _ftbuf
+630b 0 138 1850
+630b 8 146 1850
+6313 c 148 1850
+631f 6 151 1850
+6325 7 152 1850
+632c 4 153 1850
+6330 9 154 1850
+6339 1 166 1850
+FUNC 633a 82 4 _LocaleUpdate::_LocaleUpdate(localeinfo_struct *)
+633a 0 261 1343
+633a f 262 1343
+6349 8 264 1343
+6351 5 265 1343
+6356 6 266 1343
+635c 1c 268 1343
+6378 21 269 1343
+6399 9 270 1343
+63a2 4 272 1343
+63a6 4 273 1343
+63aa 2 276 1343
+63ac a 278 1343
+63b6 6 280 1343
+FUNC 63bc e 0 _LocaleUpdate::~_LocaleUpdate()
+63bc 0 282 1343
+63bc 6 283 1343
+63c2 7 284 1343
+63c9 1 285 1343
+FUNC 63ca 3 0 _LocaleUpdate::GetLocaleT()
+63ca 2 287 1343
+63cc 1 289 1343
+FUNC 63cd 33 0 write_char
+63cd 0 2433 1312
+63cd a 2434 1312
+63d7 2 2437 1312
+63d9 21 2442 1312
+63fa 2 2444 1312
+63fc 1 2447 1312
+63fd 2 2446 1312
+63ff 1 2447 1312
+FUNC 6400 24 c write_multi_char
+6400 6 2498 1312
+6406 2 2501 1312
+6408 e 2500 1312
+6416 5 2501 1312
+641b 7 2499 1312
+6422 2 2504 1312
+FUNC 6424 4a 4 write_string
+6424 0 2563 1312
+6424 12 2564 1312
+6436 6 2566 1312
+643c 2 2567 1312
+643e e 2570 1312
+644c 5 2571 1312
+6451 a 2573 1312
+645b 9 2574 1312
+6464 9 2569 1312
+646d 1 2579 1312
+FUNC 646e d 4 get_int_arg
+646e 0 2602 1312
+646e c 2603 1312
+647a 1 2604 1312
+FUNC 647b 10 4 get_int64_arg
+647b 0 2644 1312
+647b f 2645 1312
+648a 1 2646 1312
+FUNC 648b e 4 get_short_arg
+648b 0 2671 1312
+648b d 2672 1312
+6498 1 2673 1312
+FUNC 6499 994 10 _output_l
+6499 1b 975 1312
+64b4 45 1036 1312
+64f9 2d 1031 1312
+6526 b1 1033 1312
+65d7 8 1036 1312
+65df 26 1073 1312
+6605 1d 1075 1312
+6622 8 1076 1312
+662a 18 1131 1312
+6642 13 1173 1312
+6655 3 1174 1312
+6658 5 1175 1312
+665d 1f 1179 1312
+667c 4 1193 1312
+6680 5 1194 1312
+6685 4 1181 1312
+6689 5 1182 1312
+668e 4 1184 1312
+6692 5 1185 1312
+6697 7 1190 1312
+669e 5 1191 1312
+66a3 4 1187 1312
+66a7 5 1196 1312
+66ac 5 1200 1312
+66b1 9 1206 1312
+66ba b 1233 1312
+66c5 4 1235 1312
+66c9 3 1236 1312
+66cc 5 1239 1312
+66d1 10 1241 1312
+66e1 5 1243 1312
+66e6 3 1248 1312
+66e9 5 1249 1312
+66ee 5 1253 1312
+66f3 9 1259 1312
+66fc b 1284 1312
+6707 4 1285 1312
+670b 5 1287 1312
+6710 10 1289 1312
+6720 5 1291 1312
+6725 18 1295 1312
+673d 7 1362 1312
+6744 5 1363 1312
+6749 5 1301 1312
+674e 1 1303 1312
+674f a 1304 1312
+6759 5 1306 1312
+675e 4 1308 1312
+6762 5 1310 1312
+6767 4 1358 1312
+676b 5 1359 1312
+6770 c 1322 1312
+677c 2 1324 1312
+677e f 1325 1312
+678d a 1327 1312
+6797 2 1329 1312
+6799 a 1330 1312
+67a3 5 1332 1312
+67a8 30 1337 1312
+67d8 3 1352 1312
+67db 13 1158 1312
+67ee 11 1160 1312
+67ff 3 1161 1312
+6802 b 1163 1312
+680d b 1166 1312
+6818 5 1167 1312
+681d 32 1378 1312
+684f d 1716 1312
+685c 4 1724 1312
+6860 17 1749 1312
+6877 c 1750 1312
+6883 8 1381 1312
+688b 9 1385 1312
+6894 8 1561 1312
+689c 7 1562 1312
+68a3 d 1584 1312
+68b0 3 1589 1312
+68b3 15 1635 1312
+68c8 4 1636 1312
+68cc 8 1637 1312
+68d4 f 1639 1312
+68e3 1d 1378 1312
+6900 12 1448 1312
+6912 16 1467 1312
+6928 4 1470 1312
+692c 7 1471 1312
+6933 2 1472 1312
+6935 6 1499 1312
+693b 7 1500 1312
+6942 6 1503 1312
+6948 5 1506 1312
+694d 5 1523 1312
+6952 e 1541 1312
+6960 6 1546 1312
+6966 d 1548 1312
+6973 7 1549 1312
+697a 5 1550 1312
+697f 3 1551 1312
+6982 5 1553 1312
+6987 8 1543 1312
+698f 7 1544 1312
+6996 5 1557 1312
+699b 34 1378 1312
+69cf d 1908 1312
+69dc 9 1910 1312
+69e5 8 1668 1312
+69ed d 1688 1312
+69fa 6 1702 1312
+6a00 7 1703 1312
+6a07 2 1704 1312
+6a09 5 1706 1312
+6a0e 7 1708 1312
+6a15 5 1710 1312
+6a1a 4 1864 1312
+6a1e 7 1869 1312
+6a25 c 1933 1312
+6a31 8 1939 1312
+6a39 5 1958 1312
+6a3e 7 1751 1312
+6a45 9 1752 1312
+6a4e 5 1753 1312
+6a53 3 1754 1312
+6a56 9 1756 1312
+6a5f f 1759 1312
+6a6e 2 1760 1312
+6a70 13 1765 1312
+6a83 9 1767 1312
+6a8c e 1809 1312
+6a9a 27 1828 1312
+6ac1 13 1838 1312
+6ad4 15 1840 1312
+6ae9 a 1844 1312
+6af3 15 1846 1312
+6b08 5 1852 1312
+6b0d 7 1853 1312
+6b14 4 1854 1312
+6b18 1 1857 1312
+6b19 5 1859 1312
+6b1e 7 1877 1312
+6b25 3 1887 1312
+6b28 2 1888 1312
+6b2a 1a 1378 1312
+6b44 7 1892 1312
+6b4b 11 1897 1312
+6b5c c 1900 1312
+6b68 7 1901 1312
+6b6f 5 1903 1312
+6b74 5 1961 1312
+6b79 6 1987 1312
+6b7f 14 2026 1312
+6b93 2 2045 1312
+6b95 5 2051 1312
+6b9a 2 2071 1312
+6b9c 3 2074 1312
+6b9f 6 2080 1312
+6ba5 2 2099 1312
+6ba7 5 2105 1312
+6bac f 2128 1312
+6bbb 7 2129 1312
+6bc2 7 2130 1312
+6bc9 c 2136 1312
+6bd5 2 2142 1312
+6bd7 6 2148 1312
+6bdd 7 2149 1312
+6be4 2 2150 1312
+6be6 4 2151 1312
+6bea a 2152 1312
+6bf4 3 2153 1312
+6bf7 6 2157 1312
+6bfd 3 2158 1312
+6c00 6 2163 1312
+6c06 10 2165 1312
+6c16 10 2166 1312
+6c26 c 2168 1312
+6c32 3 2170 1312
+6c35 3 2172 1312
+6c38 2 2173 1312
+6c3a 8 2175 1312
+6c42 1 2176 1312
+6c43 19 2180 1312
+6c5c 9 2181 1312
+6c65 1 2182 1312
+6c66 2 2185 1312
+6c68 6 1640 1312
+6c6e 2 1641 1312
+6c70 4 1640 1312
+6c74 5 1642 1312
+6c79 2 1644 1312
+6c7b 4 1645 1312
+6c7f 8 1646 1312
+6c87 5 1647 1312
+6c8c 6 1648 1312
+6c92 1 1649 1312
+6c93 4 1648 1312
+6c97 6 1650 1312
+6c9d a 2201 1312
+6ca7 7 2204 1312
+6cae 6 2205 1312
+6cb4 4 2207 1312
+6cb8 2 2208 1312
+6cba 4 2210 1312
+6cbe 4 2212 1312
+6cc2 2 2213 1312
+6cc4 4 2215 1312
+6cc8 4 2217 1312
+6ccc 7 2218 1312
+6cd3 9 2224 1312
+6cdc 6 2228 1312
+6ce2 11 2230 1312
+6cf3 11 2234 1312
+6d04 d 2236 1312
+6d11 f 2238 1312
+6d20 d 2243 1312
+6d2d 3 2249 1312
+6d30 3 2250 1312
+6d33 1e 2252 1312
+6d51 9 2253 1312
+6d5a 18 2257 1312
+6d72 2 1690 1312
+6d74 4 2254 1312
+6d78 2 2259 1312
+6d7a d 2260 1312
+6d87 c 2290 1312
+6d93 f 2292 1312
+6da2 6 2297 1312
+6da8 8 2298 1312
+6db0 1e 2299 1312
+6dce 17 1163 1312
+6de5 10 2376 1312
+6df5 38 2377 1312
+FUNC 6e2d 3b 4 _get_errno_from_oserr
+6e2d 0 119 6100
+6e2d 6 123 6100
+6e33 f 124 6100
+6e42 8 133 6100
+6e4a 3 134 6100
+6e4d 1 139 6100
+6e4e 7 125 6100
+6e55 1 139 6100
+6e56 11 135 6100
+6e67 1 139 6100
+FUNC 6e68 13 0 _errno
+6e68 0 280 6100
+6e68 5 281 6100
+6e6d 4 282 6100
+6e71 5 283 6100
+6e76 1 288 6100
+6e77 3 285 6100
+6e7a 1 288 6100
+FUNC 6e7b 13 0 __doserrno
+6e7b 0 293 6100
+6e7b 5 294 6100
+6e80 4 295 6100
+6e84 5 296 6100
+6e89 1 300 6100
+6e8a 3 298 6100
+6e8d 1 300 6100
+FUNC 6e8e 1e 4 _dosmaperr
+6e8e 1 110 6100
+6e8f 9 111 6100
+6e98 13 113 6100
+6eab 1 114 6100
+FUNC 6eac 1b 4 _set_errno
+6eac 0 157 6100
+6eac 5 158 6100
+6eb1 4 159 6100
+6eb5 3 161 6100
+6eb8 1 168 6100
+6eb9 b 165 6100
+6ec4 2 166 6100
+6ec6 1 168 6100
+FUNC 6ec7 2a 4 _get_errno
+6ec7 1 187 6100
+6ec8 1b 189 6100
+6ee3 1 195 6100
+6ee4 9 193 6100
+6eed 3 194 6100
+6ef0 1 195 6100
+FUNC 6ef1 1b 4 _set_doserrno
+6ef1 0 213 6100
+6ef1 5 214 6100
+6ef6 4 215 6100
+6efa 3 217 6100
+6efd 1 224 6100
+6efe b 221 6100
+6f09 2 222 6100
+6f0b 1 224 6100
+FUNC 6f0c 2a 4 _get_doserrno
+6f0c 1 243 6100
+6f0d 1b 245 6100
+6f28 1 251 6100
+6f29 9 249 6100
+6f32 3 250 6100
+6f35 1 251 6100
+FUNC 6f38 45 0 _SEH_prolog4
+FUNC 6f7d 14 0 _SEH_epilog4
+FUNC 6fa0 24 0 ValidateLocalCookies
+FUNC 6fd0 196 10 _except_handler4
+FUNC 7166 90 10 vprintf_helper
+7166 c 47 1507
+7172 d 48 1507
+717f 2b 52 1507
+71aa 7 55 1507
+71b1 3 56 1507
+71b4 8 58 1507
+71bc 10 59 1507
+71cc a 60 1507
+71d6 c 63 1507
+71e2 3 67 1507
+71e5 6 68 1507
+71eb 3 63 1507
+71ee 8 64 1507
+FUNC 71f6 1a c _vprintf_l
+71f6 0 75 1507
+71f6 19 76 1507
+720f 1 77 1507
+FUNC 7210 1a c _vprintf_s_l
+7210 0 84 1507
+7210 19 85 1507
+7229 1 86 1507
+FUNC 722a 1a c _vprintf_p_l
+722a 0 93 1507
+722a 19 94 1507
+7243 1 95 1507
+FUNC 7244 18 8 vprintf
+7244 0 101 1507
+7244 17 102 1507
+725b 1 103 1507
+FUNC 725c 18 8 vprintf_s
+725c 0 109 1507
+725c 17 110 1507
+7273 1 111 1507
+FUNC 7274 18 8 _vprintf_p
+7274 0 117 1507
+7274 17 118 1507
+728b 1 119 1507
+FUNC 728c 104 0 __report_gsfailure
+728c 9 140 3731
+7295 5 170 3731
+729a 6 171 3731
+72a0 6 172 3731
+72a6 6 173 3731
+72ac 6 174 3731
+72b2 6 175 3731
+72b8 7 176 3731
+72bf 7 177 3731
+72c6 7 178 3731
+72cd 7 179 3731
+72d4 7 180 3731
+72db 7 181 3731
+72e2 1 182 3731
+72e3 6 183 3731
+72e9 3 190 3731
+72ec 5 191 3731
+72f1 3 192 3731
+72f4 5 193 3731
+72f9 3 194 3731
+72fc 5 195 3731
+7301 6 201 3731
+7307 a 204 3731
+7311 a 206 3731
+731b a 285 3731
+7325 a 286 3731
+732f b 293 3731
+733a b 294 3731
+7345 b 297 3731
+7350 8 298 3731
+7358 8 302 3731
+7360 b 304 3731
+736b 9 313 3731
+7374 8 315 3731
+737c 12 319 3731
+738e 2 320 3731
+FUNC 7390 5c6 c _write_nolock
+7390 22 95 4777
+73b2 2 106 4777
+73b4 11 108 4777
+73c5 7 109 4777
+73cc 2b 111 4777
+73f7 27 113 4777
+741e 10 116 4777
+742e 33 119 4777
+7461 6 122 4777
+7467 f 126 4777
+7476 1c 143 4777
+7492 5 146 4777
+7497 8 147 4777
+749f 14 148 4777
+74b3 16 152 4777
+74c9 6 153 4777
+74cf 4 157 4777
+74d3 16 160 4777
+74e9 9 153 4777
+74f2 b 163 4777
+74fd 9 164 4777
+7506 11 170 4777
+7517 18 171 4777
+752f 2 173 4777
+7531 14 174 4777
+7545 18 175 4777
+755d 4 181 4777
+7561 2e 205 4777
+758f 21 212 4777
+75b0 6 213 4777
+75b6 8 214 4777
+75be a 222 4777
+75c8 29 229 4777
+75f1 a 230 4777
+75fb 3 232 4777
+75fe 3 233 4777
+7601 2 238 4777
+7603 8 186 4777
+760b 3 191 4777
+760e 9 192 4777
+7617 f 193 4777
+7626 8 240 4777
+762e 13 242 4777
+7641 3 244 4777
+7644 6 251 4777
+764a 3 254 4777
+764d 14 255 4777
+7661 3 257 4777
+7664 12 258 4777
+7676 5 236 4777
+767b e 268 4777
+7689 12 277 4777
+769b f 278 4777
+76aa d 279 4777
+76b7 8 283 4777
+76bf 9 284 4777
+76c8 5 285 4777
+76cd 3 286 4777
+76d0 7 287 4777
+76d7 f 289 4777
+76e6 25 297 4777
+770b 6 299 4777
+7711 16 300 4777
+7727 f 308 4777
+7736 f 314 4777
+7745 b 315 4777
+7750 8 319 4777
+7758 c 320 4777
+7764 6 321 4777
+776a 4 322 4777
+776e c 323 4777
+777a f 325 4777
+7789 25 333 4777
+77ae 6 335 4777
+77b4 1a 336 4777
+77ce 5 344 4777
+77d3 f 359 4777
+77e2 13 361 4777
+77f5 8 365 4777
+77fd b 366 4777
+7808 6 367 4777
+780e a 369 4777
+7818 11 371 4777
+7829 2f 382 4777
+7858 4 384 4777
+785c 25 406 4777
+7881 3 407 4777
+7884 6 412 4777
+788a 9 409 4777
+7893 4 419 4777
+7897 15 423 4777
+78ac 2 428 4777
+78ae 1b 434 4777
+78c9 a 437 4777
+78d3 2 439 4777
+78d5 9 440 4777
+78de a 443 4777
+78e8 7 447 4777
+78ef 8 449 4777
+78f7 b 452 4777
+7902 2 455 4777
+7904 9 456 4777
+790d 2 457 4777
+790f 11 459 4777
+7920 4 460 4777
+7924 b 462 4777
+792f 7 463 4777
+7936 5 464 4777
+793b 5 469 4777
+7940 16 470 4777
+FUNC 7956 dc c _write
+7956 c 61 4777
+7962 23 66 4777
+7985 2f 67 4777
+79b4 20 68 4777
+79d4 7 70 4777
+79db 3 72 4777
+79de 9 73 4777
+79e7 14 74 4777
+79fb 2 75 4777
+79fd b 76 4777
+7a08 7 77 4777
+7a0f 4 78 4777
+7a13 c 82 4777
+7a1f 3 86 4777
+7a22 6 87 4777
+7a28 a 83 4777
+FUNC 7a32 2d 4 _fileno
+7a32 0 40 2176
+7a32 27 41 2176
+7a59 1 43 2176
+7a5a 4 42 2176
+7a5e 1 43 2176
+FUNC 7a5f e1 4 _commit
+7a5f c 39 5043
+7a6b 1b 43 5043
+7a86 28 44 5043
+7aae 20 45 5043
+7ace 7 47 5043
+7ad5 3 48 5043
+7ad8 9 49 5043
+7ae1 14 51 5043
+7af5 9 52 5043
+7afe 2 54 5043
+7b00 3 55 5043
+7b03 5 59 5043
+7b08 a 62 5043
+7b12 b 66 5043
+7b1d 4 67 5043
+7b21 c 72 5043
+7b2d 3 75 5043
+7b30 6 76 5043
+7b36 a 73 5043
+FUNC 7b40 49 0 _mtinitlocks
+7b40 2 137 2371
+7b42 7 144 2371
+7b49 11 145 2371
+7b5a 2 146 2371
+7b5c 15 148 2371
+7b71 6 144 2371
+7b77 5 157 2371
+7b7c d 158 2371
+FUNC 7b89 55 0 _mtdeletelocks
+7b89 1 188 2371
+7b8a d 194 2371
+7b97 c 196 2371
+7ba3 3 200 2371
+7ba6 6 206 2371
+7bac f 207 2371
+7bbb 6 215 2371
+7bc1 c 217 2371
+7bcd 10 221 2371
+7bdd 1 224 2371
+FUNC 7bde 15 4 _unlock
+7bde 3 371 2371
+7be1 10 375 2371
+7bf1 2 376 2371
+FUNC 7bf3 18 4 _lockerr_exit
+7bf3 0 403 2371
+7bf3 c 404 2371
+7bff b 405 2371
+7c0a 1 406 2371
+FUNC 7c0b c3 4 _mtinitlocknum
+7c0b c 259 2371
+7c17 6 261 2371
+7c1d a 269 2371
+7c27 5 270 2371
+7c2c 7 271 2371
+7c33 c 272 2371
+7c3f e 276 2371
+7c4d 4 277 2371
+7c51 e 279 2371
+7c5f b 280 2371
+7c6a 4 281 2371
+7c6e 8 284 2371
+7c76 3 285 2371
+7c79 4 287 2371
+7c7d 11 288 2371
+7c8e 7 289 2371
+7c95 b 290 2371
+7ca0 3 291 2371
+7ca3 2 292 2371
+7ca5 2 293 2371
+7ca7 2 296 2371
+7ca9 7 297 2371
+7cb0 c 300 2371
+7cbc 3 304 2371
+7cbf 6 305 2371
+7cc5 9 301 2371
+FUNC 7cce 31 4 _lock
+7cce 3 333 2371
+7cd1 10 338 2371
+7ce1 b 340 2371
+7cec 8 341 2371
+7cf4 9 348 2371
+7cfd 2 349 2371
+FUNC 7cff 240 0 _ioinit
+7cff c 111 4958
+7d0b 5 122 4958
+7d10 a 127 4958
+7d1a 7 128 4958
+7d21 f 137 4958
+7d30 6 139 4958
+7d36 5 142 4958
+7d3b 6 143 4958
+7d41 8 145 4958
+7d49 4 146 4958
+7d4d 3 147 4958
+7d50 4 148 4958
+7d54 3 149 4958
+7d57 4 151 4958
+7d5b 4 152 4958
+7d5f 4 153 4958
+7d63 13 145 4958
+7d76 15 161 4958
+7d8b 2 166 4958
+7d8d 3 172 4958
+7d90 6 173 4958
+7d96 b 179 4958
+7da1 5 185 4958
+7da6 f 191 4958
+7db5 9 204 4958
+7dbe 7 205 4958
+7dc5 8 207 4958
+7dcd 4 208 4958
+7dd1 3 209 4958
+7dd4 4 210 4958
+7dd8 4 211 4958
+7ddc 4 212 4958
+7de0 4 213 4958
+7de4 4 214 4958
+7de8 f 207 4958
+7df7 9 185 4958
+7e00 2 284 4958
+7e02 6 197 4958
+7e08 8 221 4958
+7e10 24 234 4958
+7e34 15 236 4958
+7e49 7 237 4958
+7e50 5 238 4958
+7e55 18 241 4958
+7e6d 3 243 4958
+7e70 d 221 4958
+7e7d 2 253 4958
+7e7f b 255 4958
+7e8a c 258 4958
+7e96 6 306 4958
+7e9c 4 262 4958
+7ea0 30 266 4958
+7ed0 2 271 4958
+7ed2 a 277 4958
+7edc 6 278 4958
+7ee2 5 279 4958
+7ee7 4 280 4958
+7eeb 14 284 4958
+7eff 3 286 4958
+7f02 2 288 4958
+7f04 4 297 4958
+7f08 6 298 4958
+7f0e a 253 4958
+7f18 c 313 4958
+7f24 4 315 4958
+7f28 7 128 4958
+7f2f a 129 4958
+7f39 6 316 4958
+FUNC 7f3f 4c 0 _ioterm
+7f3f 2 341 4958
+7f41 5 345 4958
+7f46 6 347 4958
+7f4c 8 353 4958
+7f54 9 355 4958
+7f5d 11 356 4958
+7f6e 4 353 4958
+7f72 7 361 4958
+7f79 11 362 4958
+7f8a 1 365 4958
+FUNC 7f8b 21 4 wait_a_bit
+7f8b 1 18 5557
+7f8c b 19 5557
+7f97 6 20 5557
+7f9d 8 21 5557
+7fa5 3 22 5557
+7fa8 3 23 5557
+7fab 1 24 5557
+FUNC 7fac 10 4 _set_malloc_crt_max_wait
+7fac 0 32 5557
+7fac f 34 5557
+7fbb 1 36 5557
+FUNC 7fbc 40 4 _malloc_crt
+7fbc 2 39 5557
+7fbe 2 40 5557
+7fc0 b 44 5557
+7fcb d 45 5557
+7fd8 18 46 5557
+7ff0 7 47 5557
+7ff7 4 50 5557
+7ffb 1 51 5557
+FUNC 7ffc 48 8 _calloc_crt
+7ffc 2 54 5557
+7ffe 2 55 5557
+8000 14 61 5557
+8014 c 62 5557
+8020 18 63 5557
+8038 7 64 5557
+803f 4 67 5557
+8043 1 68 5557
+FUNC 8044 4b 8 _realloc_crt
+8044 2 71 5557
+8046 2 72 5557
+8048 f 76 5557
+8057 14 77 5557
+806b 18 78 5557
+8083 7 79 5557
+808a 4 82 5557
+808e 1 83 5557
+FUNC 808f 50 c _recalloc_crt
+808f 2 86 5557
+8091 2 87 5557
+8093 16 91 5557
+80a9 12 92 5557
+80bb 18 94 5557
+80d3 7 95 5557
+80da 4 100 5557
+80de 1 101 5557
+FUNC 80df 8 0 _malloc_crt_fastcall
+80df 0 105 5557
+80df 7 106 5557
+80e6 1 107 5557
+FUNC 80e7 a 0 _calloc_crt_fastcall
+80e7 0 110 5557
+80e7 9 111 5557
+80f0 1 112 5557
+FUNC 80f1 a 0 _realloc_crt_fastcall
+80f1 0 115 5557
+80f1 9 116 5557
+80fa 1 117 5557
+FUNC 80fb 8e 4 free
+80fb c 42 5515
+8107 7 47 5515
+810e 9 53 5515
+8117 8 57 5515
+811f 4 58 5515
+8123 e 60 5515
+8131 9 61 5515
+813a c 64 5515
+8146 6 68 5515
+814c 3 70 5515
+814f 2 106 5515
+8151 9 65 5515
+815a f 109 5515
+8169 4 110 5515
+816d 16 112 5515
+8183 6 115 5515
+FUNC 8189 9f 0 _fcloseall
+8189 c 43 1792
+8195 5 44 1792
+819a 8 47 1792
+81a2 3 48 1792
+81a5 e 50 1792
+81b3 10 52 1792
+81c3 14 57 1792
+81d7 3 58 1792
+81da 5 63 1792
+81df 12 65 1792
+81f1 e 66 1792
+81ff 8 67 1792
+8207 3 50 1792
+820a c 73 1792
+8216 3 77 1792
+8219 6 78 1792
+821f 9 74 1792
+FUNC 8228 19 4 std::bad_exception::bad_exception(char const *)
+8228 13 351 6035
+823b 6 352 6035
+FUNC 8241 b 0 std::bad_exception::~bad_exception()
+8241 6 355 6035
+8247 5 356 6035
+FUNC 824c 22 0 std::bad_exception::`vector deleting destructor'(unsigned int)
+FUNC 826e 5c c __TypeMatch
+826e 2 999 6034
+8270 13 1001 6034
+8283 1b 1008 6034
+829e 4 1009 6034
+82a2 22 1023 6034
+82c4 5 1002 6034
+82c9 1 1024 6034
+FUNC 82ca 44 4 __FrameUnwindFilter
+82ca 0 1035 6034
+82ca 6 1038 6034
+82d0 e 1040 6034
+82de 13 1076 6034
+82f1 e 1068 6034
+82ff c 1070 6034
+830b 2 1072 6034
+830d 1 1078 6034
+FUNC 830e e1 10 __FrameUnwindToState
+830e c 1105 6034
+831a 1b 1112 6034
+8335 c 1114 6034
+8341 4 1115 6034
+8345 5 1119 6034
+834a f 1123 6034
+8359 f 1126 6034
+8368 7 1128 6034
+836f 6 1131 6034
+8375 3 1138 6034
+8378 12 1145 6034
+838a 6 1149 6034
+8390 d 1151 6034
+839d d 1153 6034
+83aa 3 1155 6034
+83ad 2 1156 6034
+83af c 1157 6034
+83bb a 1169 6034
+83c5 3 1176 6034
+83c8 6 1180 6034
+83ce 6 1157 6034
+83d4 e 1158 6034
+83e2 d 1159 6034
+FUNC 83ef 45 0 ExFilterRethrow
+83ef 0 1533 6034
+83ef 2 1535 6034
+83f1 2f 1538 6034
+8420 e 1542 6034
+842e 2 1543 6034
+8430 1 1547 6034
+8431 2 1545 6034
+8433 1 1547 6034
+FUNC 8434 54 8 __DestructExceptionObject
+8434 c 1791 6034
+8440 f 1794 6034
+844f e 1801 6034
+845d 4 1803 6034
+8461 9 1810 6034
+846a 7 1814 6034
+8471 6 1824 6034
+8477 c 1815 6034
+8483 5 1819 6034
+FUNC 8488 25 8 __AdjustPointer
+8488 0 1842 6034
+8488 d 1843 6034
+8495 6 1845 6034
+849b 3 1850 6034
+849e e 1852 6034
+84ac 1 1856 6034
+FUNC 84ad 13 0 __uncaught_exception()
+84ad 0 1867 6034
+84ad 12 1868 6034
+84bf 1 1869 6034
+FUNC 84c0 b3 8 __CxxRegisterExceptionObject
+84c0 0 2077 6034
+84c0 14 2085 6034
+84d4 26 2087 6034
+84fa 6 2088 6034
+8500 b 2090 6034
+850b b 2093 6034
+8516 e 2094 6034
+8524 e 2095 6034
+8532 b 2096 6034
+853d 2 2097 6034
+853f 4 2098 6034
+8543 4 2099 6034
+8547 c 2101 6034
+8553 10 2102 6034
+8563 c 2103 6034
+856f 3 2104 6034
+8572 1 2105 6034
+FUNC 8573 4c 4 __CxxDetectRethrow
+8573 0 2117 6034
+8573 6 2119 6034
+8579 2 2120 6034
+857b 2 2121 6034
+857d 2f 2122 6034
+85ac c 2123 6034
+85b8 3 2124 6034
+85bb 1 2127 6034
+85bc 2 2126 6034
+85be 1 2127 6034
+FUNC 85bf 139 8 __CxxUnregisterExceptionObject
+85bf 1 2139 6034
+85c0 4 2143 6034
+85c4 d 2145 6034
+85d1 6 2146 6034
+85d7 85 2149 6034
+865c 14 2150 6034
+8670 5b 2152 6034
+86cb c 2153 6034
+86d7 e 2154 6034
+86e5 12 2155 6034
+86f7 1 2157 6034
+FUNC 86f8 4 0 __CxxQueryExceptionSize
+86f8 0 2167 6034
+86f8 3 2168 6034
+86fb 1 2169 6034
+FUNC 86fc 32 8 __CxxCallUnwindDtor
+86fc c 2189 6034
+8708 4 2190 6034
+870c 6 2192 6034
+8712 2 2193 6034
+8714 d 2194 6034
+8721 7 2197 6034
+8728 6 2198 6034
+FUNC 872e 33 8 __CxxCallUnwindDelDtor
+872e c 2218 6034
+873a 4 2219 6034
+873e 7 2221 6034
+8745 2 2222 6034
+8747 d 2223 6034
+8754 7 2226 6034
+875b 6 2227 6034
+FUNC 8761 32 8 __CxxCallUnwindStdDelDtor
+8761 c 2247 6034
+876d 4 2248 6034
+8771 6 2250 6034
+8777 2 2251 6034
+8779 d 2252 6034
+8786 7 2255 6034
+878d 6 2256 6034
+FUNC 8793 3b 14 __CxxCallUnwindVecDtor
+8793 c 2282 6034
+879f 4 2283 6034
+87a3 f 2285 6034
+87b2 2 2286 6034
+87b4 d 2287 6034
+87c1 7 2290 6034
+87c8 6 2291 6034
+FUNC 87ce 79 4 IsInExceptionSpec
+87ce 6 2302 6034
+87d4 9 2303 6034
+87dd 5 2307 6034
+87e2 f 2323 6034
+87f1 9 2326 6034
+87fa 2 2327 6034
+87fc 10 2328 6034
+880c 26 2335 6034
+8832 4 2337 6034
+8836 c 2323 6034
+8842 3 2343 6034
+8845 2 2344 6034
+FUNC 8847 49 4 CallUnexpected
+8847 c 2379 6034
+8853 13 2380 6034
+8866 4 2383 6034
+886a 5 2384 6034
+886f 4 2391 6034
+8873 5 2392 6034
+8878 8 2388 6034
+8880 10 2390 6034
+FUNC 8890 30 0 Is_bad_exception_allowed
+8890 2 2399 6034
+8892 8 2400 6034
+889a 1d 2402 6034
+88b7 4 2408 6034
+88bb 1 2409 6034
+88bc 4 2404 6034
+FUNC 88c0 82 8 _is_exception_typeof(type_info const &,_EXCEPTION_POINTERS *)
+88c0 1 2416 6034
+88c1 e 2417 6034
+88cf 2 2419 6034
+88d1 9 2422 6034
+88da 2b 2423 6034
+8905 6 2432 6034
+890b 7 2433 6034
+8912 2 2445 6034
+8914 20 2446 6034
+8934 4 2439 6034
+8938 4 2454 6034
+893c 6 2455 6034
+FUNC 8942 19c 18 CallCatchBlock
+8942 14 1431 6034
+8956 3 1437 6034
+8959 4 1439 6034
+895d 6 1443 6034
+8963 11 1447 6034
+8974 e 1451 6034
+8982 e 1452 6034
+8990 b 1454 6034
+899b e 1455 6034
+89a9 a 1457 6034
+89b3 3 1458 6034
+89b6 16 1463 6034
+89cc 12 1464 6034
+89de c 1465 6034
+89ea 3 1470 6034
+89ed 15 1471 6034
+8a02 3 1472 6034
+8a05 c 1474 6034
+8a11 11 1476 6034
+8a22 7 1478 6034
+8a29 d 1482 6034
+8a36 b 1486 6034
+8a41 13 1488 6034
+8a54 3 1517 6034
+8a57 6 1518 6034
+8a5d 5 1474 6034
+8a62 6 1488 6034
+8a68 6 1494 6034
+8a6e 9 1497 6034
+8a77 e 1500 6034
+8a85 e 1501 6034
+8a93 3f 1510 6034
+8ad2 c 1511 6034
+FUNC 8ade 17f 10 __BuildCatchObjectHelper
+8ade c 1575 6034
+8aea 5 1576 6034
+8aef 2a 1582 6034
+8b19 2 1588 6034
+8b1b 3 1590 6034
+8b1e 2 1588 6034
+8b20 2 1592 6034
+8b22 4 1611 6034
+8b26 3 1614 6034
+8b29 4 1622 6034
+8b2d 4 1615 6034
+8b31 26 1622 6034
+8b57 5 1623 6034
+8b5c 11 1625 6034
+8b6d 5 1628 6034
+8b72 3 1629 6034
+8b75 6 1636 6034
+8b7b 4 1629 6034
+8b7f 20 1636 6034
+8b9f 12 1637 6034
+8bb1 10 1639 6034
+8bc1 4 1641 6034
+8bc5 2 1646 6034
+8bc7 5 1649 6034
+8bcc 18 1654 6034
+8be4 1e 1656 6034
+8c02 2 1660 6034
+8c04 25 1668 6034
+8c29 d 1672 6034
+8c36 2 1677 6034
+8c38 5 1678 6034
+8c3d 7 1681 6034
+8c44 5 1688 6034
+8c49 7 1682 6034
+8c50 5 1684 6034
+8c55 2 1584 6034
+8c57 6 1689 6034
+FUNC 8c5d 91 10 __BuildCatchObject
+8c5d c 1712 6034
+8c69 b 1716 6034
+8c74 3 1718 6034
+8c77 2 1720 6034
+8c79 a 1739 6034
+8c83 4 1743 6034
+8c87 1a 1744 6034
+8ca1 1a 1756 6034
+8cbb 2 1757 6034
+8cbd 18 1750 6034
+8cd5 7 1762 6034
+8cdc 6 1769 6034
+8ce2 7 1763 6034
+8ce9 5 1765 6034
+FUNC 8cee 143 10 __CxxExceptionFilter
+8cee 3 1973 6034
+8cf1 a 1985 6034
+8cfb 3 2065 6034
+8cfe 2a 1993 6034
+8d28 32 2008 6034
+8d5a 6 2010 6034
+8d60 c 2011 6034
+8d6c 6 2012 6034
+8d72 b 2013 6034
+8d7d f 2040 6034
+8d8c a 2041 6034
+8d96 2 2047 6034
+8d98 1b 2050 6034
+8db3 4 2042 6034
+8db7 2 2050 6034
+8db9 c 2052 6034
+8dc5 6 2053 6034
+8dcb 13 2054 6034
+8dde 2 2055 6034
+8de0 25 1995 6034
+8e05 6 1997 6034
+8e0b e 1999 6034
+8e19 4 2000 6034
+8e1d c 2004 6034
+8e29 6 2005 6034
+8e2f 2 2065 6034
+FUNC 8e31 6c 20 CatchIt
+8e31 3 1217 6034
+8e34 6 1233 6034
+8e3a 10 1234 6034
+8e4a 4 1253 6034
+8e4e 6 1254 6034
+8e54 2 1255 6034
+8e56 8 1256 6034
+8e5e e 1259 6034
+8e6c 3 1265 6034
+8e6f 21 1273 6034
+8e90 4 1278 6034
+8e94 7 1280 6034
+8e9b 2 1286 6034
+FUNC 8e9d f2 20 FindHandlerForForeignException
+8e9d 6 913 6034
+8ea3 10 920 6034
+8eb3 2a 926 6034
+8edd 23 934 6034
+8f00 e 940 6034
+8f0e 17 945 6034
+8f25 c 948 6034
+8f31 29 954 6034
+8f5a 33 974 6034
+8f8d 2 984 6034
+FUNC 8f8f 356 20 FindHandler
+8f8f 6 569 6034
+8f95 20 632 6034
+8fb5 11 634 6034
+8fc6 42 637 6034
+9008 12 639 6034
+901a e 645 6034
+9028 b 646 6034
+9033 16 652 6034
+9049 2a 653 6034
+9073 12 659 6034
+9085 b 661 6034
+9090 5 662 6034
+9095 15 666 6034
+90aa 23 676 6034
+90cd 5 692 6034
+90d2 c 686 6034
+90de 30 688 6034
+910e 2b 698 6034
+9139 d 707 6034
+9146 19 715 6034
+915f c 718 6034
+916b 10 729 6034
+917b 6 735 6034
+9181 3 736 6034
+9184 7 737 6034
+918b 9 740 6034
+9194 2 741 6034
+9196 7 742 6034
+919d 23 750 6034
+91c0 d 737 6034
+91cd 2 676 6034
+91cf 33 774 6034
+9202 3 718 6034
+9205 6 795 6034
+920b a 804 6034
+9215 27 812 6034
+923c f 814 6034
+924b 5 840 6034
+9250 5 841 6034
+9255 b 843 6034
+9260 5 844 6034
+9265 d 846 6034
+9272 6 847 6034
+9278 2 848 6034
+927a 8 849 6034
+9282 14 851 6034
+9296 b 853 6034
+92a1 6 863 6034
+92a7 a 864 6034
+92b1 1c 866 6034
+92cd 16 877 6034
+92e3 2 880 6034
+FUNC 92e5 18 4 std::bad_exception::bad_exception(std::bad_exception const &)
+FUNC 92fd e4 20 __InternalCxxFrameHandler
+92fd 6 412 6034
+9303 3d 426 6034
+9340 6 432 6034
+9346 6 435 6034
+934c 10 440 6034
+935c 11 479 6034
+936d 2 482 6034
+936f 18 489 6034
+9387 19 499 6034
+93a0 1d 513 6034
+93bd 1c 524 6034
+93d9 6 533 6034
+93df 2 535 6034
+FUNC 93e1 6c 0 _use_encode_pointer
+93e1 7 66 2227
+93e8 2 72 2227
+93ea 12 75 2227
+93fc 7 76 2227
+9403 5 78 2227
+9408 7 82 2227
+940f 5 85 2227
+9414 e 91 2227
+9422 1f 93 2227
+9441 4 95 2227
+9445 6 100 2227
+944b 2 101 2227
+FUNC 944d 6e 4 _encode_pointer
+944d 1 120 2227
+944e 2b 129 2227
+9479 8 145 2227
+9481 d 133 2227
+948e d 135 2227
+949b c 138 2227
+94a7 4 148 2227
+94ab a 150 2227
+94b5 5 153 2227
+94ba 1 154 2227
+FUNC 94bb 9 0 _encoded_null
+94bb 0 173 2227
+94bb 8 174 2227
+94c3 1 175 2227
+FUNC 94c4 6e 4 _decode_pointer
+94c4 1 194 2227
+94c5 2b 203 2227
+94f0 8 219 2227
+94f8 d 207 2227
+9505 d 209 2227
+9512 c 212 2227
+951e 4 222 2227
+9522 a 224 2227
+952c 5 227 2227
+9531 1 228 2227
+FUNC 9532 9 4 __crtTlsAlloc
+9532 0 240 2227
+9532 6 241 2227
+9538 3 242 2227
+FUNC 953b 15 4 __fls_getvalue
+953b 0 258 2227
+953b 12 259 2227
+954d 3 260 2227
+FUNC 9550 6 0 __get_flsindex
+9550 0 272 2227
+9550 5 273 2227
+9555 1 274 2227
+FUNC 9556 32 0 __set_flsgetvalue
+9556 1 286 2227
+9557 e 288 2227
+9565 4 289 2227
+9569 e 291 2227
+9577 d 292 2227
+9584 3 294 2227
+9587 1 298 2227
+FUNC 9588 19 8 __fls_setvalue
+9588 0 315 2227
+9588 16 316 2227
+959e 3 317 2227
+FUNC 95a1 3d 0 _mtterm
+95a1 0 473 2227
+95a1 a 480 2227
+95ab f 481 2227
+95ba 7 482 2227
+95c1 a 485 2227
+95cb 7 486 2227
+95d2 7 487 2227
+95d9 5 494 2227
+FUNC 95de bf 8 _initptd
+95de c 521 2227
+95ea e 522 2227
+95f8 a 524 2227
+9602 6 525 2227
+9608 4 527 2227
+960c 9 529 2227
+9615 16 532 2227
+962b 10 533 2227
+963b 3 540 2227
+963e 7 544 2227
+9645 7 545 2227
+964c 8 546 2227
+9654 7 547 2227
+965b 8 551 2227
+9663 4 552 2227
+9667 6 553 2227
+966d 4 561 2227
+9671 8 562 2227
+9679 9 563 2227
+9682 c 565 2227
+968e 6 568 2227
+9694 9 566 2227
+FUNC 969d 77 0 _getptd_noexit
+969d 2 588 2227
+969f 6 592 2227
+96a5 15 600 2227
+96ba 14 608 2227
+96ce 19 610 2227
+96e7 a 616 2227
+96f1 6 618 2227
+96f7 6 619 2227
+96fd 2 621 2227
+96ff 7 627 2227
+9706 2 628 2227
+9708 8 633 2227
+9710 3 635 2227
+9713 1 636 2227
+FUNC 9714 18 0 _getptd
+9714 1 657 2227
+9715 7 658 2227
+971c 4 659 2227
+9720 8 660 2227
+9728 3 662 2227
+972b 1 663 2227
+FUNC 972c 121 4 _freefls
+972c c 691 2227
+9738 b 702 2227
+9743 7 703 2227
+974a 7 704 2227
+9751 7 706 2227
+9758 7 707 2227
+975f 7 709 2227
+9766 7 710 2227
+976d 7 712 2227
+9774 7 713 2227
+977b 7 715 2227
+9782 7 716 2227
+9789 7 718 2227
+9790 7 719 2227
+9797 a 721 2227
+97a1 7 722 2227
+97a8 8 724 2227
+97b0 4 725 2227
+97b4 1a 728 2227
+97ce 7 729 2227
+97d5 c 731 2227
+97e1 8 735 2227
+97e9 7 737 2227
+97f0 7 738 2227
+97f7 7 740 2227
+97fe 15 743 2227
+9813 7 744 2227
+981a c 747 2227
+9826 7 751 2227
+982d 8 754 2227
+9835 3 731 2227
+9838 9 732 2227
+9841 3 747 2227
+9844 9 748 2227
+FUNC 984d 69 4 _freeptd
+984d 0 778 2227
+984d a 783 2227
+9857 1b 795 2227
+9872 13 796 2227
+9885 16 802 2227
+989b 7 804 2227
+98a2 a 807 2227
+98ac 9 811 2227
+98b5 1 813 2227
+FUNC 98b6 6 0 __threadid
+98b6 0 837 2227
+98b6 6 838 2227
+FUNC 98bc 6 0 __threadhandle
+98bc 0 844 2227
+98bc 6 845 2227
+FUNC 98c2 184 0 _mtinit
+98c2 1 346 2227
+98c3 d 355 2227
+98d0 4 356 2227
+98d4 5 357 2227
+98d9 3 358 2227
+98dc 2 444 2227
+98de e 362 2227
+98ec d 365 2227
+98f9 d 368 2227
+9906 d 371 2227
+9913 2a 372 2227
+993d a 375 2227
+9947 1a 379 2227
+9961 25 388 2227
+9986 5 393 2227
+998b b 400 2227
+9996 10 401 2227
+99a6 10 402 2227
+99b6 18 403 2227
+99ce 7 410 2227
+99d5 2 412 2227
+99d7 1b 418 2227
+99f2 2 420 2227
+99f4 2d 428 2227
+9a21 a 438 2227
+9a2b 6 440 2227
+9a31 6 441 2227
+9a37 5 443 2227
+9a3c 5 430 2227
+9a41 4 389 2227
+9a45 1 444 2227
+FUNC 9a46 39 0 terminate()
+9a46 c 94 5983
+9a52 8 107 5983
+9a5a 4 111 5983
+9a5e 4 116 5983
+9a62 2 120 5983
+9a64 2 121 5983
+9a66 7 122 5983
+9a6d 7 127 5983
+9a74 5 135 5983
+9a79 6 136 5983
+FUNC 9a7f 13 0 unexpected()
+9a7f 0 149 5983
+9a7f 8 159 5983
+9a87 4 163 5983
+9a8b 2 167 5983
+9a8d 5 173 5983
+FUNC 9a92 37 0 _inconsistency()
+9a92 c 187 5983
+9a9e c 196 5983
+9aaa 4 197 5983
+9aae 4 202 5983
+9ab2 2 203 5983
+9ab4 2 204 5983
+9ab6 7 205 5983
+9abd 7 211 5983
+9ac4 5 217 5983
+FUNC 9ac9 11 4 _initp_eh_hooks
+9ac9 0 74 5983
+9ac9 10 80 5983
+9ad9 1 81 5983
+FUNC 9ae0 4c c _CallSettingFrame
+9ae0 3 48 5665
+9ae3 3 57 5665
+9ae6 1 58 5665
+9ae7 1 59 5665
+9ae8 3 60 5665
+9aeb 3 61 5665
+9aee 3 62 5665
+9af1 3 63 5665
+9af4 1 64 5665
+9af5 3 65 5665
+9af8 3 66 5665
+9afb 3 67 5665
+9afe 5 68 5665
+9b03 1 69 5665
+9b04 1 70 5665
+9b05 2 71 5665
+9b07 1 73 5665
+9b08 1 74 5665
+9b09 2 75 5665
+9b0b 1 76 5665
+9b0c 3 77 5665
+9b0f 1 78 5665
+9b10 2 79 5665
+9b12 6 80 5665
+9b18 2 81 5665
+9b1a 5 82 5665
+9b1f 1 84 5665
+9b20 5 85 5665
+9b25 1 86 5665
+9b26 1 87 5665
+9b27 1 88 5665
+9b28 4 89 5665
+PUBLIC 9b07 0 _NLG_Return
+FUNC 9b2c b9 4 _onexit_nolock
+9b2c 5 104 3259
+9b31 b 107 3259
+9b3c 13 108 3259
+9b4f 16 112 3259
+9b65 d 122 3259
+9b72 d 127 3259
+9b7f 14 129 3259
+9b93 3 134 3259
+9b96 14 136 3259
+9baa 3 147 3259
+9bad f 149 3259
+9bbc e 156 3259
+9bca c 157 3259
+9bd6 7 159 3259
+9bdd 6 114 3259
+9be3 2 160 3259
+FUNC 9be5 2f 0 __onexitinit
+9be5 1 205 3259
+9be6 b 208 3259
+9bf1 9 209 3259
+9bfa e 211 3259
+9c08 4 216 3259
+9c0c 1 221 3259
+9c0d 3 218 3259
+9c10 3 220 3259
+9c13 1 221 3259
+FUNC 9c14 3c 4 _onexit
+9c14 c 85 3259
+9c20 5 88 3259
+9c25 4 90 3259
+9c29 c 91 3259
+9c35 c 93 3259
+9c41 3 97 3259
+9c44 6 98 3259
+9c4a 6 94 3259
+FUNC 9c50 12 4 atexit
+9c50 0 165 3259
+9c50 11 166 3259
+9c61 1 167 3259
+FUNC 9c62 4f 4 V6_HeapAlloc
+9c62 c 27 5425
+9c6e 4 28 5425
+9c72 b 29 5425
+9c7d 8 31 5425
+9c85 4 32 5425
+9c89 a 33 5425
+9c93 c 35 5425
+9c9f 3 39 5425
+9ca2 6 40 5425
+9ca8 9 36 5425
+FUNC 9cb1 75 4 _heap_alloc
+9cb1 0 90 5425
+9cb1 9 95 5425
+9cba 5 96 5425
+9cbf 7 97 5425
+9cc6 c 98 5425
+9cd2 a 104 5425
+9cdc 18 105 5425
+9cf4 1 129 5425
+9cf5 a 107 5425
+9cff 9 108 5425
+9d08 2 109 5425
+9d0a 4 121 5425
+9d0e 1 122 5425
+9d0f 6 124 5425
+9d15 10 126 5425
+9d25 1 129 5425
+FUNC 9d26 c3 4 malloc
+9d26 1 155 5425
+9d27 16 159 5425
+9d3d 65 163 5425
+9da2 4 168 5425
+9da6 b 172 5425
+9db1 b 179 5425
+9dbc 2 183 5425
+9dbe 7 174 5425
+9dc5 8 193 5425
+9dcd 5 195 5425
+9dd2 1 196 5425
+9dd3 7 185 5425
+9dda b 186 5425
+9de5 3 187 5425
+9de8 1 196 5425
+FUNC 9de9 a 4 _initp_heap_handler
+9de9 0 31 5230
+9de9 9 32 5230
+9df2 1 33 5230
+FUNC 9df3 31 4 _set_new_handler(int (*)(unsigned int))
+9df3 1 53 5230
+9df4 7 57 5230
+9dfb b 59 5230
+9e06 b 60 5230
+9e11 f 63 5230
+9e20 3 65 5230
+9e23 1 66 5230
+FUNC 9e24 9 4 _set_new_handler(int)
+9e24 0 86 5230
+9e24 8 89 5230
+9e2c 1 90 5230
+FUNC 9e2d d 0 _query_new_handler()
+9e2d 0 110 5230
+9e2d c 111 5230
+9e39 1 112 5230
+FUNC 9e3a 22 4 _callnewh
+9e3a 0 131 5230
+9e3a b 133 5230
+9e45 10 135 5230
+9e55 3 138 5230
+9e58 1 139 5230
+9e59 2 136 5230
+9e5b 1 139 5230
+FUNC 9e5c 22 18 _invoke_watson_if_error
+9e5c 3 754 5850
+9e5f 6 755 5850
+9e65 17 759 5850
+9e7c 2 760 5850
+FUNC 9e7e 70 4 type_info::_Type_info_dtor(type_info *)
+9e7e c 62 5815
+9e8a 8 63 5815
+9e92 4 64 5815
+9e96 a 65 5815
+9ea0 d 70 5815
+9ead 4 72 5815
+9eb1 4 74 5815
+9eb5 6 79 5815
+9ebb 7 80 5815
+9ec2 9 94 5815
+9ecb 4 101 5815
+9ecf c 103 5815
+9edb 6 107 5815
+9ee1 2 83 5815
+9ee3 2 72 5815
+9ee5 9 104 5815
+FUNC 9eee f5 8 type_info::_Name_base(type_info const *,__type_info_node *)
+9eee c 109 5815
+9efa e 113 5815
+9f08 24 124 5815
+9f2c 7 125 5815
+9f33 16 132 5815
+9f49 2 133 5815
+9f4b 5 132 5815
+9f50 b 136 5815
+9f5b 5 142 5815
+9f60 a 149 5815
+9f6a 4 150 5815
+9f6e 11 157 5815
+9f7f 20 158 5815
+9f9f 5 159 5815
+9fa4 9 165 5815
+9fad 3 166 5815
+9fb0 2 167 5815
+9fb2 7 173 5815
+9fb9 9 180 5815
+9fc2 c 181 5815
+9fce 3 188 5815
+9fd1 6 189 5815
+9fd7 3 181 5815
+9fda 9 182 5815
+FUNC 9fe3 70 4 type_info::_Type_info_dtor_internal(type_info *)
+9fe3 c 197 5815
+9fef 8 198 5815
+9ff7 4 199 5815
+9ffb a 200 5815
+a005 d 205 5815
+a012 4 207 5815
+a016 4 209 5815
+a01a 6 214 5815
+a020 7 215 5815
+a027 9 229 5815
+a030 4 236 5815
+a034 c 238 5815
+a040 6 242 5815
+a046 2 218 5815
+a048 2 207 5815
+a04a 9 239 5815
+FUNC a053 31 10 __unDNameHelper
+a053 3 249 5815
+a056 7 250 5815
+a05d 7 252 5815
+a064 1e 260 5815
+a082 2 261 5815
+FUNC a084 eb 8 type_info::_Name_base_internal(type_info const *,__type_info_node *)
+a084 c 265 5815
+a090 e 269 5815
+a09e 1a 273 5815
+a0b8 7 274 5815
+a0bf 16 281 5815
+a0d5 2 282 5815
+a0d7 5 281 5815
+a0dc b 285 5815
+a0e7 5 291 5815
+a0ec a 298 5815
+a0f6 4 299 5815
+a0fa 11 306 5815
+a10b 20 307 5815
+a12b 5 308 5815
+a130 9 314 5815
+a139 3 315 5815
+a13c 2 316 5815
+a13e 7 322 5815
+a145 9 329 5815
+a14e c 330 5815
+a15a 3 337 5815
+a15d 6 338 5815
+a163 3 330 5815
+a166 9 331 5815
+FUNC a16f 53 4 __clean_type_info_names_internal
+a16f c 346 5815
+a17b 8 347 5815
+a183 4 348 5815
+a187 6 352 5815
+a18d 4 354 5815
+a191 3 356 5815
+a194 7 357 5815
+a19b 8 358 5815
+a1a3 4 354 5815
+a1a7 c 359 5815
+a1b3 6 363 5815
+a1b9 9 361 5815
+FUNC a1d0 88 8 strcmp
+a1d0 0 65 926
+a1d0 4 73 926
+a1d4 4 74 926
+a1d8 6 76 926
+a1de 2 77 926
+a1e0 2 81 926
+a1e2 2 83 926
+a1e4 2 84 926
+a1e6 2 85 926
+a1e8 2 86 926
+a1ea 3 87 926
+a1ed 2 88 926
+a1ef 2 89 926
+a1f1 2 90 926
+a1f3 3 92 926
+a1f6 3 94 926
+a1f9 2 95 926
+a1fb 2 96 926
+a1fd 2 97 926
+a1ff 3 98 926
+a202 2 99 926
+a204 3 100 926
+a207 3 101 926
+a20a 2 102 926
+a20c 4 103 926
+a210 2 107 926
+a212 2 108 926
+a214 2 115 926
+a216 2 116 926
+a218 3 117 926
+a21b 1 118 926
+a21c 6 122 926
+a222 2 123 926
+a224 2 125 926
+a226 3 126 926
+a229 2 127 926
+a22b 2 128 926
+a22d 3 129 926
+a230 2 130 926
+a232 2 131 926
+a234 6 133 926
+a23a 2 134 926
+a23c 3 139 926
+a23f 3 140 926
+a242 2 141 926
+a244 2 142 926
+a246 2 143 926
+a248 2 144 926
+a24a 3 145 926
+a24d 2 146 926
+a24f 2 147 926
+a251 2 148 926
+a253 3 149 926
+a256 2 150 926
+FUNC a258 65 c strcpy_s
+a258 0 13 781
+a258 30 18 781
+a288 c 19 781
+a294 2 21 781
+a296 d 23 781
+a2a3 4 27 781
+a2a7 2 29 781
+a2a9 e 30 781
+a2b7 5 33 781
+a2bc 1 34 781
+FUNC a2c0 7a c memset
+a2c0 0 59 934
+a2c0 4 68 934
+a2c4 4 69 934
+a2c8 2 71 934
+a2ca 2 72 934
+a2cc 2 74 934
+a2ce 4 75 934
+a2d2 2 78 934
+a2d4 2 79 934
+a2d6 6 80 934
+a2dc 2 81 934
+a2de 7 82 934
+a2e5 2 83 934
+a2e7 5 85 934
+a2ec 1 91 934
+a2ed 2 92 934
+a2ef 3 94 934
+a2f2 2 95 934
+a2f4 2 97 934
+a2f6 3 98 934
+a2f9 2 99 934
+a2fb 2 101 934
+a2fd 2 103 934
+a2ff 3 104 934
+a302 3 105 934
+a305 2 106 934
+a307 2 110 934
+a309 3 111 934
+a30c 2 113 934
+a30e 2 115 934
+a310 3 117 934
+a313 2 119 934
+a315 2 122 934
+a317 3 123 934
+a31a 3 124 934
+a31d 2 125 934
+a31f 2 127 934
+a321 2 129 934
+a323 2 130 934
+a325 2 134 934
+a327 3 135 934
+a32a 3 137 934
+a32d 2 138 934
+a32f 4 142 934
+a333 1 143 934
+a334 1 145 934
+a335 4 148 934
+a339 1 150 934
+FUNC a340 365 c memcpy
+a340 3 101 1027
+a343 1 113 1027
+a344 1 114 1027
+a345 3 116 1027
+a348 3 117 1027
+a34b 3 119 1027
+a34e 2 129 1027
+a350 2 131 1027
+a352 2 132 1027
+a354 2 134 1027
+a356 2 135 1027
+a358 2 137 1027
+a35a 6 138 1027
+a360 6 147 1027
+a366 2 148 1027
+a368 7 150 1027
+a36f 2 151 1027
+a371 1 153 1027
+a372 1 154 1027
+a373 3 155 1027
+a376 3 156 1027
+a379 2 157 1027
+a37b 1 158 1027
+a37c 1 159 1027
+a37d 2 160 1027
+a37f 1 163 1027
+a380 1 164 1027
+a381 1 165 1027
+a382 5 166 1027
+a387 6 179 1027
+a38d 2 180 1027
+a38f 3 182 1027
+a392 3 183 1027
+a395 3 185 1027
+a398 2 186 1027
+a39a 2 188 1027
+a39c 8 190 1027
+a3a4 2 208 1027
+a3a6 5 209 1027
+a3ab 3 211 1027
+a3ae 2 212 1027
+a3b0 3 214 1027
+a3b3 2 215 1027
+a3b5 7 217 1027
+a3bc 8 221 1027
+a3c4 14 225 1027
+a3d8 2 232 1027
+a3da 2 233 1027
+a3dc 2 235 1027
+a3de 3 236 1027
+a3e1 3 238 1027
+a3e4 3 239 1027
+a3e7 3 241 1027
+a3ea 3 242 1027
+a3ed 3 244 1027
+a3f0 3 245 1027
+a3f3 3 247 1027
+a3f6 2 248 1027
+a3f8 2 250 1027
+a3fa a 252 1027
+a404 2 256 1027
+a406 2 257 1027
+a408 2 259 1027
+a40a 3 260 1027
+a40d 3 262 1027
+a410 3 263 1027
+a413 3 265 1027
+a416 3 266 1027
+a419 3 268 1027
+a41c 2 269 1027
+a41e 2 271 1027
+a420 8 273 1027
+a428 2 277 1027
+a42a 2 278 1027
+a42c 2 280 1027
+a42e 3 281 1027
+a431 3 283 1027
+a434 3 284 1027
+a437 3 286 1027
+a43a 2 287 1027
+a43c 2 289 1027
+a43e 2a 291 1027
+a468 4 298 1027
+a46c 4 300 1027
+a470 4 302 1027
+a474 4 304 1027
+a478 4 306 1027
+a47c 4 308 1027
+a480 4 310 1027
+a484 4 312 1027
+a488 4 314 1027
+a48c 4 316 1027
+a490 4 318 1027
+a494 4 320 1027
+a498 4 322 1027
+a49c 4 324 1027
+a4a0 7 326 1027
+a4a7 2 328 1027
+a4a9 2 329 1027
+a4ab 19 331 1027
+a4c4 3 340 1027
+a4c7 1 341 1027
+a4c8 1 342 1027
+a4c9 3 344 1027
+a4cc 2 348 1027
+a4ce 2 350 1027
+a4d0 3 351 1027
+a4d3 1 352 1027
+a4d4 1 353 1027
+a4d5 3 354 1027
+a4d8 2 358 1027
+a4da 2 360 1027
+a4dc 3 361 1027
+a4df 3 362 1027
+a4e2 3 363 1027
+a4e5 1 364 1027
+a4e6 1 365 1027
+a4e7 5 366 1027
+a4ec 2 370 1027
+a4ee 2 372 1027
+a4f0 3 373 1027
+a4f3 3 374 1027
+a4f6 3 375 1027
+a4f9 3 376 1027
+a4fc 3 377 1027
+a4ff 1 378 1027
+a500 1 379 1027
+a501 3 380 1027
+a504 4 391 1027
+a508 4 392 1027
+a50c 6 397 1027
+a512 2 398 1027
+a514 3 400 1027
+a517 3 401 1027
+a51a 3 403 1027
+a51d 2 404 1027
+a51f 1 406 1027
+a520 2 407 1027
+a522 1 408 1027
+a523 9 410 1027
+a52c 2 414 1027
+a52e a 417 1027
+a538 2 422 1027
+a53a 5 423 1027
+a53f 3 425 1027
+a542 2 426 1027
+a544 3 428 1027
+a547 2 429 1027
+a549 7 431 1027
+a550 14 435 1027
+a564 3 442 1027
+a567 2 443 1027
+a569 3 445 1027
+a56c 3 446 1027
+a56f 3 448 1027
+a572 3 449 1027
+a575 3 451 1027
+a578 2 452 1027
+a57a 1 454 1027
+a57b 2 455 1027
+a57d 1 456 1027
+a57e a 458 1027
+a588 3 462 1027
+a58b 2 463 1027
+a58d 3 465 1027
+a590 3 466 1027
+a593 3 468 1027
+a596 3 469 1027
+a599 3 471 1027
+a59c 3 472 1027
+a59f 3 474 1027
+a5a2 2 475 1027
+a5a4 1 477 1027
+a5a5 2 478 1027
+a5a7 1 479 1027
+a5a8 8 481 1027
+a5b0 3 485 1027
+a5b3 2 486 1027
+a5b5 3 488 1027
+a5b8 3 489 1027
+a5bb 3 491 1027
+a5be 3 492 1027
+a5c1 3 494 1027
+a5c4 3 495 1027
+a5c7 3 497 1027
+a5ca 3 498 1027
+a5cd 3 500 1027
+a5d0 6 501 1027
+a5d6 1 503 1027
+a5d7 2 504 1027
+a5d9 1 505 1027
+a5da 2a 507 1027
+a604 4 516 1027
+a608 4 518 1027
+a60c 4 520 1027
+a610 4 522 1027
+a614 4 524 1027
+a618 4 526 1027
+a61c 4 528 1027
+a620 4 530 1027
+a624 4 532 1027
+a628 4 534 1027
+a62c 4 536 1027
+a630 4 538 1027
+a634 4 540 1027
+a638 4 542 1027
+a63c 7 544 1027
+a643 2 546 1027
+a645 2 547 1027
+a647 19 549 1027
+a660 3 558 1027
+a663 1 560 1027
+a664 1 561 1027
+a665 3 562 1027
+a668 3 566 1027
+a66b 3 568 1027
+a66e 3 569 1027
+a671 1 570 1027
+a672 1 571 1027
+a673 5 572 1027
+a678 3 576 1027
+a67b 3 578 1027
+a67e 3 579 1027
+a681 3 580 1027
+a684 3 581 1027
+a687 1 582 1027
+a688 1 583 1027
+a689 3 584 1027
+a68c 3 588 1027
+a68f 3 590 1027
+a692 3 591 1027
+a695 3 592 1027
+a698 3 593 1027
+a69b 3 594 1027
+a69e 3 595 1027
+a6a1 1 596 1027
+a6a2 1 597 1027
+a6a3 2 598 1027
+FUNC a6b0 365 c memmove
+a6b0 3 101 977
+a6b3 1 113 977
+a6b4 1 114 977
+a6b5 3 116 977
+a6b8 3 117 977
+a6bb 3 119 977
+a6be 2 129 977
+a6c0 2 131 977
+a6c2 2 132 977
+a6c4 2 134 977
+a6c6 2 135 977
+a6c8 2 137 977
+a6ca 6 138 977
+a6d0 6 147 977
+a6d6 2 148 977
+a6d8 7 150 977
+a6df 2 151 977
+a6e1 1 153 977
+a6e2 1 154 977
+a6e3 3 155 977
+a6e6 3 156 977
+a6e9 2 157 977
+a6eb 1 158 977
+a6ec 1 159 977
+a6ed 2 160 977
+a6ef 1 163 977
+a6f0 1 164 977
+a6f1 1 165 977
+a6f2 5 166 977
+a6f7 6 179 977
+a6fd 2 180 977
+a6ff 3 182 977
+a702 3 183 977
+a705 3 185 977
+a708 2 186 977
+a70a 2 188 977
+a70c 8 190 977
+a714 2 208 977
+a716 5 209 977
+a71b 3 211 977
+a71e 2 212 977
+a720 3 214 977
+a723 2 215 977
+a725 7 217 977
+a72c 8 221 977
+a734 14 225 977
+a748 2 232 977
+a74a 2 233 977
+a74c 2 235 977
+a74e 3 236 977
+a751 3 238 977
+a754 3 239 977
+a757 3 241 977
+a75a 3 242 977
+a75d 3 244 977
+a760 3 245 977
+a763 3 247 977
+a766 2 248 977
+a768 2 250 977
+a76a a 252 977
+a774 2 256 977
+a776 2 257 977
+a778 2 259 977
+a77a 3 260 977
+a77d 3 262 977
+a780 3 263 977
+a783 3 265 977
+a786 3 266 977
+a789 3 268 977
+a78c 2 269 977
+a78e 2 271 977
+a790 8 273 977
+a798 2 277 977
+a79a 2 278 977
+a79c 2 280 977
+a79e 3 281 977
+a7a1 3 283 977
+a7a4 3 284 977
+a7a7 3 286 977
+a7aa 2 287 977
+a7ac 2 289 977
+a7ae 2a 291 977
+a7d8 4 298 977
+a7dc 4 300 977
+a7e0 4 302 977
+a7e4 4 304 977
+a7e8 4 306 977
+a7ec 4 308 977
+a7f0 4 310 977
+a7f4 4 312 977
+a7f8 4 314 977
+a7fc 4 316 977
+a800 4 318 977
+a804 4 320 977
+a808 4 322 977
+a80c 4 324 977
+a810 7 326 977
+a817 2 328 977
+a819 2 329 977
+a81b 19 331 977
+a834 3 340 977
+a837 1 341 977
+a838 1 342 977
+a839 3 344 977
+a83c 2 348 977
+a83e 2 350 977
+a840 3 351 977
+a843 1 352 977
+a844 1 353 977
+a845 3 354 977
+a848 2 358 977
+a84a 2 360 977
+a84c 3 361 977
+a84f 3 362 977
+a852 3 363 977
+a855 1 364 977
+a856 1 365 977
+a857 5 366 977
+a85c 2 370 977
+a85e 2 372 977
+a860 3 373 977
+a863 3 374 977
+a866 3 375 977
+a869 3 376 977
+a86c 3 377 977
+a86f 1 378 977
+a870 1 379 977
+a871 3 380 977
+a874 4 391 977
+a878 4 392 977
+a87c 6 397 977
+a882 2 398 977
+a884 3 400 977
+a887 3 401 977
+a88a 3 403 977
+a88d 2 404 977
+a88f 1 406 977
+a890 2 407 977
+a892 1 408 977
+a893 9 410 977
+a89c 2 414 977
+a89e a 417 977
+a8a8 2 422 977
+a8aa 5 423 977
+a8af 3 425 977
+a8b2 2 426 977
+a8b4 3 428 977
+a8b7 2 429 977
+a8b9 7 431 977
+a8c0 14 435 977
+a8d4 3 442 977
+a8d7 2 443 977
+a8d9 3 445 977
+a8dc 3 446 977
+a8df 3 448 977
+a8e2 3 449 977
+a8e5 3 451 977
+a8e8 2 452 977
+a8ea 1 454 977
+a8eb 2 455 977
+a8ed 1 456 977
+a8ee a 458 977
+a8f8 3 462 977
+a8fb 2 463 977
+a8fd 3 465 977
+a900 3 466 977
+a903 3 468 977
+a906 3 469 977
+a909 3 471 977
+a90c 3 472 977
+a90f 3 474 977
+a912 2 475 977
+a914 1 477 977
+a915 2 478 977
+a917 1 479 977
+a918 8 481 977
+a920 3 485 977
+a923 2 486 977
+a925 3 488 977
+a928 3 489 977
+a92b 3 491 977
+a92e 3 492 977
+a931 3 494 977
+a934 3 495 977
+a937 3 497 977
+a93a 3 498 977
+a93d 3 500 977
+a940 6 501 977
+a946 1 503 977
+a947 2 504 977
+a949 1 505 977
+a94a 2a 507 977
+a974 4 516 977
+a978 4 518 977
+a97c 4 520 977
+a980 4 522 977
+a984 4 524 977
+a988 4 526 977
+a98c 4 528 977
+a990 4 530 977
+a994 4 532 977
+a998 4 534 977
+a99c 4 536 977
+a9a0 4 538 977
+a9a4 4 540 977
+a9a8 4 542 977
+a9ac 7 544 977
+a9b3 2 546 977
+a9b5 2 547 977
+a9b7 19 549 977
+a9d0 3 558 977
+a9d3 1 560 977
+a9d4 1 561 977
+a9d5 3 562 977
+a9d8 3 566 977
+a9db 3 568 977
+a9de 3 569 977
+a9e1 1 570 977
+a9e2 1 571 977
+a9e3 5 572 977
+a9e8 3 576 977
+a9eb 3 578 977
+a9ee 3 579 977
+a9f1 3 580 977
+a9f4 3 581 977
+a9f7 1 582 977
+a9f8 1 583 977
+a9f9 3 584 977
+a9fc 3 588 977
+a9ff 3 590 977
+aa02 3 591 977
+aa05 3 592 977
+aa08 3 593 977
+aa0b 3 594 977
+aa0e 3 595 977
+aa11 1 596 977
+aa12 1 597 977
+aa13 2 598 977
+FUNC aa15 3d 4 __CxxUnhandledExceptionFilter(_EXCEPTION_POINTERS *)
+aa15 0 67 5721
+aa15 33 68 5721
+aa48 5 69 5721
+aa4d 2 72 5721
+aa4f 3 73 5721
+FUNC aa52 e 0 __CxxSetUnhandledExceptionFilter
+aa52 0 86 5721
+aa52 b 89 5721
+aa5d 2 90 5721
+aa5f 1 91 5721
+FUNC aa60 1a0 4 _NMSG_WRITE
+aa60 2 174 2418
+aa62 a 178 2418
+aa6c f 179 2418
+aa7b a 182 2418
+aa85 2a 203 2418
+aaaf c 215 2418
+aabb 2a 224 2418
+aae5 1e 227 2418
+ab03 26 228 2418
+ab29 d 231 2418
+ab36 b 233 2418
+ab41 2f 234 2418
+ab70 20 237 2418
+ab90 22 238 2418
+abb2 15 242 2418
+abc7 a 205 2418
+abd1 9 206 2418
+abda 24 212 2418
+abfe 2 245 2418
+FUNC ac00 20 4 _GET_RTERRMSG
+ac00 0 268 2418
+ac00 2 271 2418
+ac02 13 272 2418
+ac15 2 275 2418
+ac17 1 276 2418
+ac18 7 273 2418
+ac1f 1 276 2418
+FUNC ac20 39 0 _FF_MSGBANNER
+ac20 0 141 2418
+ac20 22 145 2418
+ac42 a 147 2418
+ac4c c 148 2418
+ac58 1 150 2418
+FUNC ac59 1 4 _initp_misc_winxfltr
+ac59 0 105 2752
+ac59 1 106 2752
+FUNC ac5a 32 4 xcptlookup
+ac5a 0 410 2752
+ac5a b 411 2752
+ac65 14 418 2752
+ac79 e 425 2752
+ac87 2 428 2752
+ac89 2 426 2752
+ac8b 1 429 2752
+FUNC ac8c 15e 8 _XcptFilter
+ac8c 6 206 2752
+ac92 7 213 2752
+ac99 8 214 2752
+aca1 34 219 2752
+acd5 2 221 2752
+acd7 2 225 2752
+acd9 3 227 2752
+acdc 7 234 2752
+ace3 7 235 2752
+acea 5 243 2752
+acef 4 248 2752
+acf3 8 249 2752
+acfb 3 255 2752
+acfe 6 259 2752
+ad04 6 273 2752
+ad0a 6 274 2752
+ad10 c 283 2752
+ad1c 17 291 2752
+ad33 1e 294 2752
+ad51 3 291 2752
+ad54 c 321 2752
+ad60 9 323 2752
+ad69 7 325 2752
+ad70 9 327 2752
+ad79 7 329 2752
+ad80 9 331 2752
+ad89 7 333 2752
+ad90 9 335 2752
+ad99 7 337 2752
+ada0 9 339 2752
+ada9 7 341 2752
+adb0 9 343 2752
+adb9 7 345 2752
+adc0 7 347 2752
+adc7 8 356 2752
+adcf 3 361 2752
+add2 2 363 2752
+add4 4 368 2752
+add8 3 369 2752
+addb 7 375 2752
+ade2 6 377 2752
+ade8 2 379 2752
+FUNC adea 1b 8 __CppXcptFilter
+adea 0 145 2752
+adea b 146 2752
+adf5 c 147 2752
+ae01 1 151 2752
+ae02 2 149 2752
+ae04 1 151 2752
+FUNC ae05 db 0 _setenvp
+ae05 1 77 2280
+ae06 c 85 2280
+ae12 5 86 2280
+ae17 8 91 2280
+ae1f 4 98 2280
+ae23 8 99 2280
+ae2b 4 110 2280
+ae2f 1 111 2280
+ae30 11 112 2280
+ae41 15 117 2280
+ae56 2 118 2280
+ae58 9 121 2280
+ae61 9 123 2280
+ae6a 6 125 2280
+ae70 10 127 2280
+ae80 1c 133 2280
+ae9c 3 134 2280
+ae9f 6 121 2280
+aea5 b 138 2280
+aeb0 6 139 2280
+aeb6 2 142 2280
+aeb8 a 149 2280
+aec2 7 152 2280
+aec9 17 153 2280
+FUNC aee0 a 4 _set_pgmptr
+aee0 a 334 2303
+FUNC aeea 198 c parse_cmdline
+aeea 4 218 2322
+aeee 6 226 2322
+aef4 8 230 2322
+aefc 14 231 2322
+af10 3 250 2322
+af13 5 252 2322
+af18 5 254 2322
+af1d 9 255 2322
+af26 2 256 2322
+af28 2 258 2322
+af2a 4 259 2322
+af2e 8 260 2322
+af36 2 262 2322
+af38 f 264 2322
+af47 2 265 2322
+af49 6 266 2322
+af4f a 267 2322
+af59 1 268 2322
+af5a 1a 272 2322
+af74 4 277 2322
+af78 4 278 2322
+af7c 4 281 2322
+af80 9 286 2322
+af89 a 287 2322
+af93 3 288 2322
+af96 1 275 2322
+af97 2 276 2322
+af99 9 291 2322
+afa2 6 295 2322
+afa8 9 296 2322
+afb1 2 297 2322
+afb3 3 311 2322
+afb6 4 315 2322
+afba 1 318 2322
+afbb 1 319 2322
+afbc 5 316 2322
+afc1 5 321 2322
+afc6 5 324 2322
+afcb e 325 2322
+afd9 2 326 2322
+afdb 2 327 2322
+afdd d 329 2322
+afea 2 332 2322
+afec 5 336 2322
+aff1 4 337 2322
+aff5 4 338 2322
+aff9 6 339 2322
+afff 3 338 2322
+b002 14 343 2322
+b016 4 348 2322
+b01a 2 349 2322
+b01c 10 350 2322
+b02c b 351 2322
+b037 2 352 2322
+b039 a 354 2322
+b043 2 355 2322
+b045 a 356 2322
+b04f 1 357 2322
+b050 2 358 2322
+b052 5 361 2322
+b057 1 363 2322
+b058 5 372 2322
+b05d 4 376 2322
+b061 7 377 2322
+b068 2 378 2322
+b06a 8 379 2322
+b072 9 382 2322
+b07b 3 383 2322
+b07e 2 384 2322
+b080 2 385 2322
+FUNC b082 b9 0 _setargv
+b082 7 88 2322
+b089 c 97 2322
+b095 5 98 2322
+b09a 18 104 2322
+b0b2 19 120 2322
+b0cb 11 127 2322
+b0dc 15 132 2322
+b0f1 a 136 2322
+b0fb 2 138 2322
+b0fd 8 140 2322
+b105 3 141 2322
+b108 2 142 2322
+b10a 13 149 2322
+b11d c 153 2322
+b129 6 157 2322
+b12f 4 172 2322
+b133 6 134 2322
+b139 2 173 2322
+FUNC b13b 135 0 __crtGetEnvironmentStringsA
+b13b 2 43 4307
+b13d 1a 57 4307
+b157 8 59 4307
+b15f c 60 4307
+b16b b 62 4307
+b176 e 63 4307
+b184 9 68 4307
+b18d 4 71 4307
+b191 8 72 4307
+b199 7 73 4307
+b1a0 7 77 4307
+b1a7 7 78 4307
+b1ae 7 79 4307
+b1b5 1b 93 4307
+b1d0 13 97 4307
+b1e3 11 111 4307
+b1f4 a 113 4307
+b1fe 8 114 4307
+b206 7 99 4307
+b20d 4 100 4307
+b211 6 123 4307
+b217 2 152 4307
+b219 a 126 4307
+b223 6 127 4307
+b229 4 133 4307
+b22d 5 134 4307
+b232 5 135 4307
+b237 5 138 4307
+b23c d 140 4307
+b249 7 141 4307
+b250 5 142 4307
+b255 b 145 4307
+b260 7 147 4307
+b267 6 149 4307
+b26d 3 153 4307
+FUNC b270 24 0 _RTC_Initialize
+FUNC b294 24 0 _RTC_Terminate
+FUNC b2b8 5b 0 __heap_select
+b2b8 6 70 5473
+b2be 23 143 5473
+b2e1 1b 144 5473
+b2fc d 145 5473
+b309 3 146 5473
+b30c 2 164 5473
+b30e 3 161 5473
+b311 2 164 5473
+FUNC b313 5a 4 _heap_init
+b313 0 192 5473
+b313 20 199 5473
+b333 2 200 5473
+b335 1 240 5473
+b336 5 204 5473
+b33b a 206 5473
+b345 f 209 5473
+b354 c 211 5473
+b360 7 212 5473
+b367 2 213 5473
+b369 3 239 5473
+b36c 1 240 5473
+FUNC b36d 74 0 _heap_term
+b36d 1 261 5473
+b36e c 264 5473
+b37a 1b 270 5473
+b395 f 273 5473
+b3a4 b 276 5473
+b3af d 278 5473
+b3bc 11 281 5473
+b3cd c 300 5473
+b3d9 7 301 5473
+b3e0 1 302 5473
+FUNC b3e1 6 0 _get_heap_handle
+b3e1 0 320 5473
+b3e1 5 322 5473
+b3e6 1 323 5473
+FUNC b3e7 94 0 __security_init_cookie
+b3e7 6 97 3689
+b3ed 21 114 3689
+b40e 7 116 3689
+b415 3 117 3689
+b418 a 127 3689
+b422 6 132 3689
+b428 8 135 3689
+b430 8 136 3689
+b438 8 137 3689
+b440 10 139 3689
+b450 2 144 3689
+b452 4 161 3689
+b456 7 163 3689
+b45d 4 166 3689
+b461 7 168 3689
+b468 6 172 3689
+b46e b 173 3689
+b479 2 175 3689
+FUNC b47b 8 4 _crt_debugger_hook
+b47b 0 62 3966
+b47b 7 65 3966
+b482 1 66 3966
+FUNC b483 160 8 _flsbuf
+b483 5 93 2041
+b488 c 104 2041
+b494 8 106 2041
+b49c b 107 2041
+b4a7 4 108 2041
+b4ab 8 109 2041
+b4b3 4 110 2041
+b4b7 b 111 2041
+b4c2 3 113 2041
+b4c5 6 124 2041
+b4cb b 126 2041
+b4d6 3 127 2041
+b4d9 8 128 2041
+b4e1 9 137 2041
+b4ea f 141 2041
+b4f9 25 151 2041
+b51e 7 153 2041
+b525 d 158 2041
+b532 5 162 2041
+b537 5 163 2041
+b53c 6 164 2041
+b542 7 166 2041
+b549 10 167 2041
+b559 2 168 2041
+b55b 6 131 2041
+b561 5 132 2041
+b566 2e 169 2041
+b594 12 171 2041
+b5a6 2 174 2041
+b5a8 8 179 2041
+b5b0 2 186 2041
+b5b2 3 187 2041
+b5b5 13 189 2041
+b5c8 5 201 2041
+b5cd 4 202 2041
+b5d1 5 203 2041
+b5d6 b 207 2041
+b5e1 2 212 2041
+FUNC b5e3 25 4 write_char
+b5e3 0 2433 1163
+b5e3 a 2434 1163
+b5ed 2 2437 1163
+b5ef 12 2440 1163
+b601 3 2444 1163
+b604 1 2447 1163
+b605 2 2446 1163
+b607 1 2447 1163
+FUNC b608 25 c write_multi_char
+b608 6 2498 1163
+b60e 2 2501 1163
+b610 e 2500 1163
+b61e 6 2501 1163
+b624 7 2499 1163
+b62b 2 2504 1163
+FUNC b62d 4f 4 write_string
+b62d 0 2563 1163
+b62d 12 2564 1163
+b63f 6 2566 1163
+b645 2 2567 1163
+b647 11 2570 1163
+b658 6 2571 1163
+b65e a 2573 1163
+b668 a 2574 1163
+b672 9 2569 1163
+b67b 1 2579 1163
+FUNC b67c 910 10 _woutput_l
+b67c 1b 975 1163
+b697 72 1031 1163
+b709 4 1036 1163
+b70d 2c 1073 1163
+b739 1a 1075 1163
+b753 8 1076 1163
+b75b 18 1131 1163
+b773 2 1171 1163
+b775 13 1173 1163
+b788 3 1174 1163
+b78b 5 1175 1163
+b790 1f 1179 1163
+b7af 4 1193 1163
+b7b3 5 1194 1163
+b7b8 4 1181 1163
+b7bc 5 1182 1163
+b7c1 4 1184 1163
+b7c5 5 1185 1163
+b7ca 7 1190 1163
+b7d1 5 1191 1163
+b7d6 3 1187 1163
+b7d9 5 1196 1163
+b7de 6 1200 1163
+b7e4 9 1206 1163
+b7ed b 1233 1163
+b7f8 4 1235 1163
+b7fc 3 1236 1163
+b7ff 5 1239 1163
+b804 10 1241 1163
+b814 5 1243 1163
+b819 4 1248 1163
+b81d 5 1249 1163
+b822 6 1253 1163
+b828 9 1259 1163
+b831 b 1284 1163
+b83c 4 1285 1163
+b840 5 1287 1163
+b845 10 1289 1163
+b855 5 1291 1163
+b85a 1b 1295 1163
+b875 7 1362 1163
+b87c 5 1363 1163
+b881 6 1301 1163
+b887 2 1303 1163
+b889 a 1304 1163
+b893 5 1306 1163
+b898 4 1308 1163
+b89c 5 1310 1163
+b8a1 4 1358 1163
+b8a5 5 1359 1163
+b8aa 10 1322 1163
+b8ba 3 1324 1163
+b8bd f 1325 1163
+b8cc d 1327 1163
+b8d9 3 1329 1163
+b8dc a 1330 1163
+b8e6 5 1332 1163
+b8eb 3c 1337 1163
+b927 4 1352 1163
+b92b 13 1166 1163
+b93e 5 1167 1163
+b943 32 1378 1163
+b975 d 1716 1163
+b982 4 1724 1163
+b986 18 1749 1163
+b99e c 1750 1163
+b9aa c 1381 1163
+b9b6 9 1383 1163
+b9bf 8 1564 1163
+b9c7 4 1565 1163
+b9cb d 1584 1163
+b9d8 3 1589 1163
+b9db 13 1610 1163
+b9ee 4 1611 1163
+b9f2 8 1612 1163
+b9fa 19 1614 1163
+ba13 13 1618 1163
+ba26 1 1620 1163
+ba27 9 1621 1163
+ba30 5 1622 1163
+ba35 1d 1378 1163
+ba52 9 1397 1163
+ba5b f 1415 1163
+ba6a 3 1420 1163
+ba6d 25 1430 1163
+ba92 3 1434 1163
+ba95 2 1436 1163
+ba97 4 1437 1163
+ba9b 6 1439 1163
+baa1 3 1440 1163
+baa4 5 1506 1163
+baa9 5 1523 1163
+baae e 1541 1163
+babc 6 1546 1163
+bac2 b 1548 1163
+bacd 7 1549 1163
+bad4 5 1550 1163
+bad9 4 1551 1163
+badd 5 1553 1163
+bae2 8 1543 1163
+baea 7 1544 1163
+baf1 5 1557 1163
+baf6 34 1378 1163
+bb2a d 1908 1163
+bb37 9 1910 1163
+bb40 8 1668 1163
+bb48 d 1688 1163
+bb55 6 1702 1163
+bb5b 7 1703 1163
+bb62 2 1704 1163
+bb64 5 1706 1163
+bb69 7 1708 1163
+bb70 5 1710 1163
+bb75 4 1864 1163
+bb79 7 1869 1163
+bb80 c 1933 1163
+bb8c 8 1939 1163
+bb94 5 1958 1163
+bb99 8 1751 1163
+bba1 9 1752 1163
+bbaa 5 1753 1163
+bbaf 3 1754 1163
+bbb2 9 1756 1163
+bbbb f 1759 1163
+bbca 2 1760 1163
+bbcc 13 1765 1163
+bbdf 7 1767 1163
+bbe6 e 1809 1163
+bbf4 27 1828 1163
+bc1b 14 1838 1163
+bc2f 15 1840 1163
+bc44 b 1844 1163
+bc4f 15 1846 1163
+bc64 5 1852 1163
+bc69 7 1853 1163
+bc70 4 1854 1163
+bc74 1 1857 1163
+bc75 5 1859 1163
+bc7a 7 1877 1163
+bc81 3 1887 1163
+bc84 2 1888 1163
+bc86 1a 1378 1163
+bca0 7 1892 1163
+bca7 11 1897 1163
+bcb8 10 1900 1163
+bcc8 3 1901 1163
+bccb 5 1903 1163
+bcd0 6 1961 1163
+bcd6 6 1987 1163
+bcdc 16 2026 1163
+bcf2 2 2045 1163
+bcf4 5 2051 1163
+bcf9 2 2071 1163
+bcfb 4 2074 1163
+bcff 6 2080 1163
+bd05 2 2099 1163
+bd07 5 2105 1163
+bd0c 10 2128 1163
+bd1c 7 2129 1163
+bd23 7 2130 1163
+bd2a c 2136 1163
+bd36 2 2142 1163
+bd38 6 2148 1163
+bd3e 7 2149 1163
+bd45 2 2150 1163
+bd47 4 2151 1163
+bd4b a 2152 1163
+bd55 3 2153 1163
+bd58 6 2157 1163
+bd5e 3 2158 1163
+bd61 6 2163 1163
+bd67 10 2165 1163
+bd77 10 2166 1163
+bd87 c 2168 1163
+bd93 3 2170 1163
+bd96 3 2172 1163
+bd99 2 2173 1163
+bd9b 8 2175 1163
+bda3 1 2176 1163
+bda4 19 2180 1163
+bdbd 9 2181 1163
+bdc6 1 2182 1163
+bdc7 2 2185 1163
+bdc9 4 1625 1163
+bdcd 8 1626 1163
+bdd5 c 1628 1163
+bde1 7 1629 1163
+bde8 2 1630 1163
+bdea 4 1629 1163
+bdee 8 1631 1163
+bdf6 a 2201 1163
+be00 7 2204 1163
+be07 6 2205 1163
+be0d 6 2207 1163
+be13 2 2208 1163
+be15 4 2210 1163
+be19 6 2212 1163
+be1f 2 2213 1163
+be21 4 2215 1163
+be25 6 2217 1163
+be2b 7 2218 1163
+be32 b 2224 1163
+be3d 6 2228 1163
+be43 11 2230 1163
+be54 11 2234 1163
+be65 d 2236 1163
+be72 f 2238 1163
+be81 a 2263 1163
+be8b 3 2267 1163
+be8e 3 2268 1163
+be91 3 2269 1163
+be94 1a 2276 1163
+beae 7 2278 1163
+beb5 e 2282 1163
+bec3 a 2283 1163
+becd 2 1690 1163
+becf 4 2279 1163
+bed3 2 2285 1163
+bed5 d 2286 1163
+bee2 c 2290 1163
+beee 11 2292 1163
+beff 6 2297 1163
+bf05 8 2298 1163
+bf0d 4 2299 1163
+bf11 1 2298 1163
+bf12 1b 1073 1163
+bf2d 17 1690 1163
+bf44 10 2376 1163
+bf54 38 2377 1163
+FUNC bf8c 97 10 _vswprintf_l
+bf8c 7 125 1425
+bf93 24 130 1425
+bfb7 8 135 1425
+bfbf 29 155 1425
+bfe8 1d 166 1425
+c005 18 167 1425
+c01d 4 169 1425
+c021 2 183 1425
+FUNC c023 17 c _vswprintf
+c023 0 192 1425
+c023 16 195 1425
+c039 1 197 1425
+FUNC c03a 5 10 __vswprintf_l
+c03a 0 205 1425
+c03a 5 208 1425
+FUNC c03f 55 10 _vscwprintf_helper
+c03f 7 430 1425
+c046 24 435 1425
+c06a 28 441 1425
+c092 2 443 1425
+FUNC c094 18 8 _vscwprintf
+c094 0 449 1425
+c094 17 450 1425
+c0ab 1 451 1425
+FUNC c0ac 1a c _vscwprintf_l
+c0ac 0 458 1425
+c0ac 19 459 1425
+c0c5 1 460 1425
+FUNC c0c6 18 8 _vscwprintf_p
+c0c6 0 466 1425
+c0c6 17 467 1425
+c0dd 1 468 1425
+FUNC c0de 1a c _vscwprintf_p_l
+c0de 0 475 1425
+c0de 19 476 1425
+c0f7 1 477 1425
+FUNC c0f8 14e 14 vfprintf_helper
+c0f8 c 51 1462
+c104 5 54 1462
+c109 2e 56 1462
+c137 c 57 1462
+c143 3 60 1462
+c146 7 62 1462
+c14d 3 63 1462
+c150 b0 65 1462
+c200 5 66 1462
+c205 8 68 1462
+c20d 10 69 1462
+c21d a 70 1462
+c227 c 74 1462
+c233 3 78 1462
+c236 6 79 1462
+c23c a 75 1462
+FUNC c246 1e 10 _vfprintf_l
+c246 0 87 1462
+c246 1d 88 1462
+c263 1 89 1462
+FUNC c264 1e 10 _vfprintf_s_l
+c264 0 97 1462
+c264 1d 98 1462
+c281 1 99 1462
+FUNC c282 1e 10 _vfprintf_p_l
+c282 0 107 1462
+c282 1d 108 1462
+c29f 1 109 1462
+FUNC c2a0 1c c vfprintf
+c2a0 0 116 1462
+c2a0 1b 117 1462
+c2bb 1 118 1462
+FUNC c2bc 1c c vfprintf_s
+c2bc 0 125 1462
+c2bc 1b 126 1462
+c2d7 1 127 1462
+FUNC c2d8 1c c _vfprintf_p
+c2d8 0 134 1462
+c2d8 1b 135 1462
+c2f3 1 136 1462
+FUNC c2f4 25 4 write_char
+c2f4 0 2433 1053
+c2f4 a 2434 1053
+c2fe 2 2437 1053
+c300 12 2440 1053
+c312 3 2444 1053
+c315 1 2447 1053
+c316 2 2446 1053
+c318 1 2447 1053
+FUNC c319 25 c write_multi_char
+c319 6 2498 1053
+c31f 2 2501 1053
+c321 e 2500 1053
+c32f 6 2501 1053
+c335 7 2499 1053
+c33c 2 2504 1053
+FUNC c33e 4f 4 write_string
+c33e 0 2563 1053
+c33e 12 2564 1053
+c350 6 2566 1053
+c356 2 2567 1053
+c358 11 2570 1053
+c369 6 2571 1053
+c36f a 2573 1053
+c379 a 2574 1053
+c383 9 2569 1053
+c38c 1 2579 1053
+FUNC c38d 91c 10 _woutput_s_l
+c38d 29 975 1053
+c3b6 3 976 1053
+c3b9 f 1007 1053
+c3c8 24 2172 1053
+c3ec 2f 1031 1053
+c41b 18 1036 1053
+c433 2e 1073 1053
+c461 16 1078 1053
+c477 e 1079 1053
+c485 11 1124 1053
+c496 10 1131 1053
+c4a6 2 1171 1053
+c4a8 13 1173 1053
+c4bb 3 1174 1053
+c4be 5 1175 1053
+c4c3 1e 1179 1053
+c4e1 3 1193 1053
+c4e4 5 1194 1053
+c4e9 4 1181 1053
+c4ed 5 1182 1053
+c4f2 4 1184 1053
+c4f6 5 1185 1053
+c4fb 7 1190 1053
+c502 5 1191 1053
+c507 3 1187 1053
+c50a 5 1196 1053
+c50f 6 1200 1053
+c515 5 1206 1053
+c51a e 1233 1053
+c528 4 1235 1053
+c52c 3 1236 1053
+c52f 5 1239 1053
+c534 10 1241 1053
+c544 5 1243 1053
+c549 4 1248 1053
+c54d 5 1249 1053
+c552 6 1253 1053
+c558 5 1259 1053
+c55d e 1284 1053
+c56b 4 1285 1053
+c56f 5 1287 1053
+c574 10 1289 1053
+c584 5 1291 1053
+c589 1b 1295 1053
+c5a4 7 1362 1053
+c5ab 5 1363 1053
+c5b0 6 1301 1053
+c5b6 2 1303 1053
+c5b8 7 1304 1053
+c5bf 5 1306 1053
+c5c4 4 1308 1053
+c5c8 5 1310 1053
+c5cd 4 1358 1053
+c5d1 5 1359 1053
+c5d6 10 1322 1053
+c5e6 3 1324 1053
+c5e9 c 1325 1053
+c5f5 d 1327 1053
+c602 3 1329 1053
+c605 7 1330 1053
+c60c 5 1332 1053
+c611 3c 1337 1053
+c64d 4 1352 1053
+c651 14 1166 1053
+c665 5 1167 1053
+c66a 32 1378 1053
+c69c d 1716 1053
+c6a9 4 1724 1053
+c6ad 18 1749 1053
+c6c5 c 1750 1053
+c6d1 c 1381 1053
+c6dd 9 1383 1053
+c6e6 8 1564 1053
+c6ee 4 1565 1053
+c6f2 d 1584 1053
+c6ff 3 1589 1053
+c702 13 1610 1053
+c715 4 1611 1053
+c719 8 1612 1053
+c721 19 1614 1053
+c73a 13 1618 1053
+c74d 1 1620 1053
+c74e 9 1621 1053
+c757 5 1622 1053
+c75c 1e 1378 1053
+c77a 9 1397 1053
+c783 f 1415 1053
+c792 3 1420 1053
+c795 25 1430 1053
+c7ba 3 1434 1053
+c7bd 2 1436 1053
+c7bf 4 1437 1053
+c7c3 6 1439 1053
+c7c9 3 1440 1053
+c7cc 5 1506 1053
+c7d1 5 1523 1053
+c7d6 e 1541 1053
+c7e4 6 1546 1053
+c7ea b 1548 1053
+c7f5 7 1549 1053
+c7fc 5 1550 1053
+c801 4 1551 1053
+c805 5 1553 1053
+c80a 8 1543 1053
+c812 7 1544 1053
+c819 5 1557 1053
+c81e 34 1378 1053
+c852 9 1908 1053
+c85b 9 1910 1053
+c864 8 1668 1053
+c86c d 1688 1053
+c879 6 1702 1053
+c87f 7 1703 1053
+c886 2 1704 1053
+c888 5 1706 1053
+c88d 7 1708 1053
+c894 5 1710 1053
+c899 4 1864 1053
+c89d 7 1869 1053
+c8a4 c 1933 1053
+c8b0 8 1939 1053
+c8b8 5 1958 1053
+c8bd 8 1751 1053
+c8c5 9 1752 1053
+c8ce 5 1753 1053
+c8d3 3 1754 1053
+c8d6 9 1756 1053
+c8df f 1759 1053
+c8ee 3 1760 1053
+c8f1 15 1765 1053
+c906 7 1767 1053
+c90d e 1809 1053
+c91b 27 1828 1053
+c942 14 1838 1053
+c956 15 1840 1053
+c96b b 1844 1053
+c976 15 1846 1053
+c98b 5 1852 1053
+c990 7 1853 1053
+c997 4 1854 1053
+c99b 1 1857 1053
+c99c 5 1859 1053
+c9a1 3 1877 1053
+c9a4 7 1887 1053
+c9ab 2 1888 1053
+c9ad 1a 1378 1053
+c9c7 7 1892 1053
+c9ce 11 1897 1053
+c9df 10 1900 1053
+c9ef 3 1901 1053
+c9f2 5 1903 1053
+c9f7 6 1961 1053
+c9fd 6 1987 1053
+ca03 16 2026 1053
+ca19 2 2045 1053
+ca1b 5 2051 1053
+ca20 2 2071 1053
+ca22 4 2074 1053
+ca26 6 2080 1053
+ca2c 2 2099 1053
+ca2e 5 2105 1053
+ca33 10 2128 1053
+ca43 7 2129 1053
+ca4a 7 2130 1053
+ca51 c 2136 1053
+ca5d 2 2142 1053
+ca5f 6 2148 1053
+ca65 7 2149 1053
+ca6c 2 2150 1053
+ca6e 4 2151 1053
+ca72 a 2152 1053
+ca7c 3 2153 1053
+ca7f 6 2157 1053
+ca85 3 2158 1053
+ca88 6 2163 1053
+ca8e 10 2165 1053
+ca9e 10 2166 1053
+caae c 2168 1053
+caba 3 2170 1053
+cabd 3 2172 1053
+cac0 2 2173 1053
+cac2 8 2175 1053
+caca 1 2176 1053
+cacb 19 2180 1053
+cae4 9 2181 1053
+caed 1 2182 1053
+caee 2 2185 1053
+caf0 4 1625 1053
+caf4 8 1626 1053
+cafc c 1628 1053
+cb08 7 1629 1053
+cb0f 2 1630 1053
+cb11 4 1629 1053
+cb15 8 1631 1053
+cb1d a 2201 1053
+cb27 7 2204 1053
+cb2e 6 2205 1053
+cb34 6 2207 1053
+cb3a 2 2208 1053
+cb3c 4 2210 1053
+cb40 6 2212 1053
+cb46 2 2213 1053
+cb48 4 2215 1053
+cb4c 6 2217 1053
+cb52 7 2218 1053
+cb59 b 2224 1053
+cb64 6 2228 1053
+cb6a 11 2230 1053
+cb7b 11 2234 1053
+cb8c d 2236 1053
+cb99 f 2238 1053
+cba8 a 2263 1053
+cbb2 3 2267 1053
+cbb5 3 2268 1053
+cbb8 3 2269 1053
+cbbb 1a 2276 1053
+cbd5 7 2278 1053
+cbdc e 2282 1053
+cbea a 2283 1053
+cbf4 2 1690 1053
+cbf6 4 2279 1053
+cbfa 2 2285 1053
+cbfc d 2286 1053
+cc09 c 2290 1053
+cc15 11 2292 1053
+cc26 6 2297 1053
+cc2c 8 2298 1053
+cc34 16 2299 1053
+cc4a 7 1073 1053
+cc51 10 2310 1053
+cc61 10 2376 1053
+cc71 38 2377 1053
+FUNC cca9 154 10 _validate_param_reuseW
+cca9 3 606 1108
+ccac 21 610 1108
+cccd 13 617 1108
+cce0 13 618 1108
+ccf3 10 620 1108
+cd03 4a 629 1108
+cd4d 54 632 1108
+cda1 2 633 1108
+cda3 1a 639 1108
+cdbd f 645 1108
+cdcc 23 626 1108
+cdef c 614 1108
+cdfb 2 646 1108
+FUNC cdfd 25 4 write_char
+cdfd 0 2433 1108
+cdfd a 2434 1108
+ce07 2 2437 1108
+ce09 12 2440 1108
+ce1b 3 2444 1108
+ce1e 1 2447 1108
+ce1f 2 2446 1108
+ce21 1 2447 1108
+FUNC ce22 25 c write_multi_char
+ce22 6 2498 1108
+ce28 2 2501 1108
+ce2a e 2500 1108
+ce38 6 2501 1108
+ce3e 7 2499 1108
+ce45 2 2504 1108
+FUNC ce47 4f 4 write_string
+ce47 0 2563 1108
+ce47 12 2564 1108
+ce59 6 2566 1108
+ce5f 2 2567 1108
+ce61 11 2570 1108
+ce72 6 2571 1108
+ce78 a 2573 1108
+ce82 a 2574 1108
+ce8c 9 2569 1108
+ce95 1 2579 1108
+FUNC ce96 f60 10 _woutput_p_l
+ce96 1b 975 1108
+ceb1 20 1013 1108
+ced1 28 2172 1108
+cef9 2c 1031 1108
+cf25 4 1036 1108
+cf29 3 1038 1108
+cf2c 3 1041 1108
+cf2f 3 1043 1108
+cf32 f 1046 1108
+cf41 44 1073 1108
+cf85 1a 1078 1108
+cf9f 11 1079 1108
+cfb0 16 1082 1108
+cfc6 6 1084 1108
+cfcc 1c 1087 1108
+cfe8 6 1089 1108
+cfee 16 1091 1108
+d004 7 1093 1108
+d00b 2 1095 1108
+d00d 7 1097 1108
+d014 6 1101 1108
+d01a c 1103 1108
+d026 7 1104 1108
+d02d f 1106 1108
+d03c 1d 1109 1108
+d059 8 1112 1108
+d061 5 1131 1108
+d066 3 1117 1108
+d069 7 1131 1108
+d070 9 1120 1108
+d079 b 1131 1108
+d084 24 1137 1108
+d0a8 5 1145 1108
+d0ad 2 1171 1108
+d0af 16 1173 1108
+d0c5 3 1174 1108
+d0c8 5 1175 1108
+d0cd 1f 1179 1108
+d0ec 7 1193 1108
+d0f3 5 1194 1108
+d0f8 7 1181 1108
+d0ff 5 1182 1108
+d104 7 1184 1108
+d10b 5 1185 1108
+d110 a 1190 1108
+d11a 5 1191 1108
+d11f 6 1187 1108
+d125 5 1196 1108
+d12a a 1200 1108
+d134 6 1203 1108
+d13a a 1206 1108
+d144 2 1209 1108
+d146 c 1211 1108
+d152 6 1212 1108
+d158 e 1214 1108
+d166 1c 1216 1108
+d182 8 1219 1108
+d18a 12 1221 1108
+d19c a 1274 1108
+d1a6 5 1275 1108
+d1ab c 1228 1108
+d1b7 b 1233 1108
+d1c2 7 1235 1108
+d1c9 3 1236 1108
+d1cc 5 1239 1108
+d1d1 10 1241 1108
+d1e1 5 1243 1108
+d1e6 4 1248 1108
+d1ea 5 1249 1108
+d1ef 6 1253 1108
+d1f5 6 1256 1108
+d1fb a 1259 1108
+d205 2 1262 1108
+d207 c 1264 1108
+d213 6 1265 1108
+d219 12 1267 1108
+d22b c 1280 1108
+d237 b 1284 1108
+d242 4 1285 1108
+d246 5 1287 1108
+d24b 22 1274 1108
+d26d 10 1289 1108
+d27d 5 1291 1108
+d282 1b 1295 1108
+d29d a 1362 1108
+d2a7 5 1363 1108
+d2ac 6 1301 1108
+d2b2 2 1303 1108
+d2b4 d 1304 1108
+d2c1 5 1306 1108
+d2c6 7 1308 1108
+d2cd 5 1310 1108
+d2d2 7 1358 1108
+d2d9 5 1359 1108
+d2de 10 1322 1108
+d2ee 3 1324 1108
+d2f1 12 1325 1108
+d303 d 1327 1108
+d310 3 1329 1108
+d313 d 1330 1108
+d320 5 1332 1108
+d325 24 1337 1108
+d349 4 1352 1108
+d34d 13 1166 1108
+d360 5 1167 1108
+d365 a 1342 1108
+d36f 5 1366 1108
+d374 36 1378 1108
+d3aa d 1716 1108
+d3b7 7 1724 1108
+d3be 14 1726 1108
+d3d2 9 1728 1108
+d3db 2a 1739 1108
+d405 b 1381 1108
+d410 9 1383 1108
+d419 b 1564 1108
+d424 7 1565 1108
+d42b d 1584 1108
+d438 b 1586 1108
+d443 a 1589 1108
+d44d 5 1592 1108
+d452 22 1378 1108
+d474 d 1394 1108
+d481 b 1397 1108
+d48c 2 1400 1108
+d48e 9 1402 1108
+d497 6 1404 1108
+d49d 24 1406 1108
+d4c1 5 1407 1108
+d4c6 d 1411 1108
+d4d3 c 1415 1108
+d4df 3 1420 1108
+d4e2 28 1430 1108
+d50a 7 1434 1108
+d511 2 1436 1108
+d513 7 1437 1108
+d51a 9 1439 1108
+d523 7 1440 1108
+d52a 5 1506 1108
+d52f 6 1520 1108
+d535 a 1523 1108
+d53f 2 1526 1108
+d541 9 1528 1108
+d54a 4 1530 1108
+d54e 6 1533 1108
+d554 c 1537 1108
+d560 b 1541 1108
+d56b 9 1546 1108
+d574 b 1548 1108
+d57f 7 1549 1108
+d586 5 1550 1108
+d58b 4 1551 1108
+d58f 5 1553 1108
+d594 8 1543 1108
+d59c 7 1544 1108
+d5a3 5 1557 1108
+d5a8 38 1378 1108
+d5e0 15 1908 1108
+d5f5 11 1910 1108
+d606 6 1665 1108
+d60c a 1668 1108
+d616 2 1671 1108
+d618 9 1673 1108
+d621 6 1675 1108
+d627 1f 1677 1108
+d646 5 1678 1108
+d64b c 1682 1108
+d657 d 1688 1108
+d664 9 1702 1108
+d66d 7 1703 1108
+d674 2 1704 1108
+d676 5 1706 1108
+d67b 7 1708 1108
+d682 5 1710 1108
+d687 7 1864 1108
+d68e 7 1869 1108
+d695 6 1910 1108
+d69b 9 1933 1108
+d6a4 a 1936 1108
+d6ae f 1939 1108
+d6bd 5 1942 1108
+d6c2 1a 1739 1108
+d6dc 21 1109 1108
+d6fd 17 1749 1108
+d714 9 1750 1108
+d71d 8 1751 1108
+d725 9 1752 1108
+d72e 5 1753 1108
+d733 3 1754 1108
+d736 a 1756 1108
+d740 f 1759 1108
+d74f 2 1760 1108
+d751 13 1765 1108
+d764 3 1767 1108
+d767 7 1806 1108
+d76e 9 1809 1108
+d777 2 1812 1108
+d779 a 1818 1108
+d783 6 1821 1108
+d789 16 1822 1108
+d79f 24 1828 1108
+d7c3 16 1838 1108
+d7d9 15 1840 1108
+d7ee b 1844 1108
+d7f9 15 1846 1108
+d80e 5 1852 1108
+d813 a 1853 1108
+d81d 4 1854 1108
+d821 1 1857 1108
+d822 5 1859 1108
+d827 7 1877 1108
+d82e 7 1887 1108
+d835 2 1888 1108
+d837 1a 1378 1108
+d851 7 1892 1108
+d858 14 1897 1108
+d86c 10 1900 1108
+d87c 3 1901 1108
+d87f 5 1903 1108
+d884 9 1944 1108
+d88d 28 1948 1108
+d8b5 5 1949 1108
+d8ba 7 1961 1108
+d8c1 4 1964 1108
+d8c5 6 1970 1108
+d8cb 9 1972 1108
+d8d4 28 1976 1108
+d8fc 5 1977 1108
+d901 c 1981 1108
+d90d 5 1987 1108
+d912 5 2019 1108
+d917 5 2020 1108
+d91c 6 2023 1108
+d922 b 2026 1108
+d92d 5 2029 1108
+d932 9 2031 1108
+d93b 4 2033 1108
+d93f 2 2036 1108
+d941 d 2040 1108
+d94e 5 2045 1108
+d953 6 2048 1108
+d959 b 2051 1108
+d964 5 2054 1108
+d969 9 2056 1108
+d972 4 2058 1108
+d976 2 2061 1108
+d978 d 2065 1108
+d985 2 2071 1108
+d987 5 2074 1108
+d98c 6 2077 1108
+d992 a 2080 1108
+d99c 2 2083 1108
+d99e 9 2085 1108
+d9a7 6 2087 1108
+d9ad 17 2089 1108
+d9c4 15 2114 1108
+d9d9 5 2115 1108
+d9de d 2094 1108
+d9eb 2 2099 1108
+d9ed 6 2102 1108
+d9f3 a 2105 1108
+d9fd 2 2108 1108
+d9ff 9 2110 1108
+da08 6 2112 1108
+da0e e 2119 1108
+da1c f 2128 1108
+da2b 7 2129 1108
+da32 c 2130 1108
+da3e c 2136 1108
+da4a 4 2142 1108
+da4e 6 2148 1108
+da54 7 2149 1108
+da5b 2 2150 1108
+da5d 1a 2114 1108
+da77 3 2151 1108
+da7a 10 2152 1108
+da8a 3 2153 1108
+da8d 7 2157 1108
+da94 3 2158 1108
+da97 6 2163 1108
+da9d 11 2165 1108
+daae 12 2166 1108
+dac0 d 2168 1108
+dacd 3 2170 1108
+dad0 b 2173 1108
+dadb 8 2175 1108
+dae3 1 2176 1108
+dae4 20 2180 1108
+db04 9 2181 1108
+db0d 1 2182 1108
+db0e 5 2185 1108
+db13 9 1594 1108
+db1c 9 1596 1108
+db25 c 1603 1108
+db31 c 1610 1108
+db3d 4 1611 1108
+db41 8 1612 1108
+db49 11 1614 1108
+db5a 13 1618 1108
+db6d 1 1620 1108
+db6e 9 1621 1108
+db77 2 1622 1108
+db79 19 1598 1108
+db92 5 1625 1108
+db97 8 1626 1108
+db9f c 1628 1108
+dbab 6 1629 1108
+dbb1 2 1630 1108
+dbb3 4 1629 1108
+dbb7 8 1631 1108
+dbbf 10 2189 1108
+dbcf a 2201 1108
+dbd9 a 2204 1108
+dbe3 6 2205 1108
+dbe9 6 2207 1108
+dbef 2 2208 1108
+dbf1 4 2210 1108
+dbf5 6 2212 1108
+dbfb 2 2213 1108
+dbfd 4 2215 1108
+dc01 6 2217 1108
+dc07 7 2218 1108
+dc0e b 2224 1108
+dc19 9 2228 1108
+dc22 11 2230 1108
+dc33 11 2234 1108
+dc44 13 2236 1108
+dc57 f 2238 1108
+dc66 a 2263 1108
+dc70 3 2267 1108
+dc73 3 2268 1108
+dc76 3 2269 1108
+dc79 1a 2276 1108
+dc93 7 2278 1108
+dc9a e 2282 1108
+dca8 a 2283 1108
+dcb2 2 2310 1108
+dcb4 4 2279 1108
+dcb8 2 2285 1108
+dcba d 2286 1108
+dcc7 f 2290 1108
+dcd6 11 2292 1108
+dce7 6 2297 1108
+dced 8 2298 1108
+dcf5 4 2299 1108
+dcf9 1 2298 1108
+dcfa 12 1073 1108
+dd0c c 2310 1108
+dd18 c 2314 1108
+dd24 10 2319 1108
+dd34 16 2321 1108
+dd4a 2 2360 1108
+dd4c 9 2361 1108
+dd55 6 2362 1108
+dd5b 2 2344 1108
+dd5d 3 2345 1108
+dd60 2 2346 1108
+dd62 2 2324 1108
+dd64 6 2325 1108
+dd6a 9 2319 1108
+dd73 13 1043 1108
+dd86 17 1121 1108
+dd9d f 1818 1108
+ddac 10 2376 1108
+ddbc 3a 2377 1108
+FUNC ddf6 1f 0 _initp_misc_cfltcvt_tab
+ddf6 2 54 4074
+ddf8 8 56 4074
+de00 14 58 4074
+de14 1 60 4074
+FUNC de20 29 4 _ValidateImageBase
+de20 0 44 3159
+de20 b 50 3159
+de2b 2 52 3159
+de2d 1 68 3159
+de2e 5 55 3159
+de33 6 56 3159
+de39 2 58 3159
+de3b d 62 3159
+de48 1 68 3159
+FUNC de50 42 8 _FindPESection
+de50 0 92 3159
+de50 9 99 3159
+de59 19 108 3159
+de72 10 111 3159
+de82 a 108 3159
+de8c 5 123 3159
+de91 1 124 3159
+FUNC dea0 bb 4 _IsNonwritableInCurrentImage
+dea0 33 149 3159
+ded3 7 156 3159
+deda f 164 3159
+dee9 2 166 3159
+deeb 8 174 3159
+def3 e 175 3159
+df01 2 176 3159
+df03 2 178 3159
+df05 12 185 3159
+df17 12 195 3159
+df29 17 187 3159
+df40 9 193 3159
+df49 12 195 3159
+FUNC df5b 19 4 _initp_misc_winsig
+df5b 0 57 2785
+df5b 9 58 2785
+df64 5 59 2785
+df69 5 60 2785
+df6e 5 61 2785
+df73 1 62 2785
+FUNC df74 9b 4 ctrlevent_capture
+df74 c 89 2785
+df80 9 94 2785
+df89 3 95 2785
+df8c 5 102 2785
+df91 5 103 2785
+df96 e 104 2785
+dfa4 7 105 2785
+dfab 2 107 2785
+dfad 5 108 2785
+dfb2 e 109 2785
+dfc0 7 110 2785
+dfc7 1 109 2785
+dfc8 9 113 2785
+dfd1 7 117 2785
+dfd8 c 120 2785
+dfe4 5 124 2785
+dfe9 4 128 2785
+dfed 2 120 2785
+dfef 8 121 2785
+dff7 6 130 2785
+dffd 7 131 2785
+e004 3 138 2785
+e007 8 139 2785
+FUNC e00f 34 4 siglookup
+e00f 0 634 2785
+e00f b 635 2785
+e01a 15 645 2785
+e02f f 649 2785
+e03e 2 653 2785
+e040 2 658 2785
+e042 1 659 2785
+FUNC e043 d 0 __get_sigabrt
+e043 0 676 2785
+e043 c 677 2785
+e04f 1 678 2785
+FUNC e050 9 0 __fpecode
+e050 0 699 2785
+e050 8 700 2785
+e058 1 701 2785
+FUNC e059 9 0 __pxcptinfoptrs
+e059 0 721 2785
+e059 8 722 2785
+e061 1 723 2785
+FUNC e062 23d 8 signal
+e062 c 219 2785
+e06e 4 224 2785
+e072 3 230 2785
+e075 3 244 2785
+e078 12 230 2785
+e08a 2f 244 2785
+e0b9 13 327 2785
+e0cc 7 334 2785
+e0d3 8 335 2785
+e0db a 342 2785
+e0e5 17 346 2785
+e0fc 10 352 2785
+e10c 13 367 2785
+e11f 3 380 2785
+e122 e 382 2785
+e130 3 395 2785
+e133 17 401 2785
+e14a 5 390 2785
+e14f 5 401 2785
+e154 8 246 2785
+e15c 4 247 2785
+e160 12 254 2785
+e172 14 257 2785
+e186 6 259 2785
+e18c 2 261 2785
+e18e f 263 2785
+e19d a 264 2785
+e1a7 18 268 2785
+e1bf f 288 2785
+e1ce 4 289 2785
+e1d2 b 291 2785
+e1dd 2 293 2785
+e1df f 279 2785
+e1ee 4 280 2785
+e1f2 b 282 2785
+e1fd 2 284 2785
+e1ff f 296 2785
+e20e 4 297 2785
+e212 b 299 2785
+e21d 2 301 2785
+e21f f 271 2785
+e22e 4 272 2785
+e232 c 274 2785
+e23e c 305 2785
+e24a 9 309 2785
+e253 4 407 2785
+e257 3 305 2785
+e25a 9 306 2785
+e263 19 410 2785
+e27c 1a 419 2785
+e296 3 417 2785
+e299 6 423 2785
+FUNC e29f 1b0 4 raise
+e29f c 452 2785
+e2ab 5 459 2785
+e2b0 3 460 2785
+e2b3 1f 462 2785
+e2d2 a 488 2785
+e2dc 4 489 2785
+e2e0 8 490 2785
+e2e8 a 465 2785
+e2f2 2 467 2785
+e2f4 11 492 2785
+e305 2 493 2785
+e307 f 462 2785
+e316 1c 500 2785
+e332 a 476 2785
+e33c 2 478 2785
+e33e a 470 2785
+e348 2 472 2785
+e34a a 481 2785
+e354 7 482 2785
+e35b a 502 2785
+e365 2 510 2785
+e367 4 509 2785
+e36b 6 510 2785
+e371 5 515 2785
+e376 7 520 2785
+e37d 5 527 2785
+e382 7 528 2785
+e389 5 530 2785
+e38e f 543 2785
+e39d 6 544 2785
+e3a3 3 545 2785
+e3a6 5 551 2785
+e3ab 6 552 2785
+e3b1 7 553 2785
+e3b8 5 561 2785
+e3bd 1c 568 2785
+e3d9 d 571 2785
+e3e6 5 568 2785
+e3eb 7 574 2785
+e3f2 c 577 2785
+e3fe 5 582 2785
+e403 8 588 2785
+e40b 2 589 2785
+e40d 6 577 2785
+e413 6 578 2785
+e419 9 579 2785
+e422 5 590 2785
+e427 f 597 2785
+e436 6 598 2785
+e43c 5 603 2785
+e441 6 604 2785
+e447 2 607 2785
+e449 6 608 2785
+FUNC e44f a 4 _initp_misc_rand_s
+e44f 0 58 3075
+e44f 9 59 3075
+e458 1 60 3075
+FUNC e459 104 4 rand_s
+e459 3 66 3075
+e45c b 67 3075
+e467 2b 68 3075
+e492 c 71 3075
+e49e d 77 3075
+e4ab 4 78 3075
+e4af 1e 80 3075
+e4cd e 83 3075
+e4db 4 84 3075
+e4df 2f 86 3075
+e50e 9 88 3075
+e517 5 89 3075
+e51c 16 94 3075
+e532 7 103 3075
+e539 9 107 3075
+e542 b 109 3075
+e54d 9 110 3075
+e556 6 112 3075
+e55c 1 113 3075
+FUNC e55d 15a 14 __getlocaleinfo
+e55d 1d 70 3523
+e57a 7 76 3523
+e581 87 109 3523
+e608 13 103 3523
+e61b 5 114 3523
+e620 7 115 3523
+e627 3 141 3523
+e62a 12 142 3523
+e63c 20 106 3523
+e65c 5 108 3523
+e661 7 109 3523
+e668 4 111 3523
+e66c 5 118 3523
+e671 1a 126 3523
+e68b 2 127 3523
+e68d 2 129 3523
+e68f 10 134 3523
+e69f 16 135 3523
+e6b5 2 139 3523
+FUNC e6b7 a 4 _initp_misc_purevirt
+e6b7 0 166 3523
+e6b7 9 167 3523
+e6c0 1 168 3523
+FUNC e6c1 a 4 _initp_misc_initcrit
+e6c1 0 47 3609
+e6c1 9 48 3609
+e6ca 1 49 3609
+FUNC e6cb 10 8 __crtInitCritSecNoSpinCount
+e6cb 0 76 3609
+e6cb a 77 3609
+e6d5 3 78 3609
+e6d8 3 79 3609
+FUNC e6db c5 8 __crtInitCritSecAndSpinCount
+e6db c 109 3609
+e6e7 5 111 3609
+e6ec e 112 3609
+e6fa 4 114 3609
+e6fe 1b 120 3609
+e719 4 121 3609
+e71d 2 129 3609
+e71f b 130 3609
+e72a 4 131 3609
+e72e e 134 3609
+e73c 4 136 3609
+e740 5 149 3609
+e745 c 152 3609
+e751 3 155 3609
+e754 b 161 3609
+e75f 2 162 3609
+e761 1a 163 3609
+e77b 9 170 3609
+e784 8 171 3609
+e78c 4 173 3609
+e790 7 174 3609
+e797 3 176 3609
+e79a 6 177 3609
+FUNC e7a0 5e 4 _isatty
+e7a0 0 37 4912
+e7a0 16 44 4912
+e7b6 2 59 4912
+e7b8 29 45 4912
+e7e1 1 59 4912
+e7e2 1b 58 4912
+e7fd 1 59 4912
+FUNC e7fe 2f 0 CPtoLCID
+e7fe 0 329 4615
+e7fe 14 330 4615
+e812 2 345 4615
+e814 1 346 4615
+e815 5 342 4615
+e81a 1 346 4615
+e81b 5 339 4615
+e820 1 346 4615
+e821 5 336 4615
+e826 1 346 4615
+e827 5 333 4615
+e82c 1 346 4615
+FUNC e82d 55 0 setSBCS
+e82d 4 363 4615
+e831 14 368 4615
+e845 3 371 4615
+e848 3 374 4615
+e84b 3 376 4615
+e84e 8 379 4615
+e856 a 381 4615
+e860 9 382 4615
+e869 b 384 4615
+e874 d 385 4615
+e881 1 386 4615
+FUNC e882 18a 0 setSBUpLow
+e882 1d 402 4615
+e89f f 412 4615
+e8ae d 415 4615
+e8bb c 416 4615
+e8c7 e 420 4615
+e8d5 3 419 4615
+e8d8 28 421 4615
+e900 1d 427 4615
+e91d 23 432 4615
+e940 25 437 4615
+e965 2 442 4615
+e967 a 443 4615
+e971 5 445 4615
+e976 9 446 4615
+e97f 5 448 4615
+e984 5 450 4615
+e989 e 451 4615
+e997 2 453 4615
+e999 8 454 4615
+e9a1 5 442 4615
+e9a6 8 456 4615
+e9ae 2c 472 4615
+e9da 5 466 4615
+e9df 5 468 4615
+e9e4 7 469 4615
+e9eb 2 471 4615
+e9ed 3 472 4615
+e9f0 5 460 4615
+e9f5 17 474 4615
+FUNC ea0c a4 0 __updatetmbcinfo
+ea0c c 496 4615
+ea18 7 499 4615
+ea1f 10 500 4615
+ea2f 3 533 4615
+ea32 4 536 4615
+ea36 8 538 4615
+ea3e 2 541 4615
+ea40 6 542 4615
+ea46 8 501 4615
+ea4e 4 503 4615
+ea52 e 506 4615
+ea60 17 512 4615
+ea77 7 517 4615
+ea7e 11 524 4615
+ea8f 7 525 4615
+ea96 11 528 4615
+eaa7 9 530 4615
+FUNC eab0 7a 0 getSystemCP
+eab0 7 282 4615
+eab7 b 284 4615
+eac2 b 289 4615
+eacd a 291 4615
+ead7 14 292 4615
+eaeb 5 295 4615
+eaf0 a 297 4615
+eafa 8 298 4615
+eb02 5 302 4615
+eb07 12 305 4615
+eb19 f 308 4615
+eb28 2 309 4615
+FUNC eb2a 1d9 8 _setmbcp_nolock
+eb2a 15 686 4615
+eb3f b 693 4615
+eb4a 9 696 4615
+eb53 7 698 4615
+eb5a 7 699 4615
+eb61 3 703 4615
+eb64 2 705 4615
+eb66 19 708 4615
+eb7f 2a 743 4615
+eba9 13 751 4615
+ebbc f 756 4615
+ebcb 15 761 4615
+ebe0 17 764 4615
+ebf7 c 766 4615
+ec03 f 712 4615
+ec12 15 715 4615
+ec27 9 720 4615
+ec30 8 723 4615
+ec38 12 724 4615
+ec4a 9 723 4615
+ec53 5 720 4615
+ec58 12 715 4615
+ec6a 20 731 4615
+ec8a d 733 4615
+ec97 7 736 4615
+ec9e 5 737 4615
+eca3 6 767 4615
+eca9 10 766 4615
+ecb9 8 771 4615
+ecc1 7 772 4615
+ecc8 b 775 4615
+ecd3 3 778 4615
+ecd6 2 780 4615
+ecd8 3 782 4615
+ecdb 8 785 4615
+ece3 2 789 4615
+ece5 6 794 4615
+eceb 6 797 4615
+ecf1 3 746 4615
+ecf4 f 802 4615
+FUNC ed03 3c 0 _getmbcp
+ed03 6 819 4615
+ed09 a 821 4615
+ed13 9 822 4615
+ed1c 10 823 4615
+ed2c 2 826 4615
+ed2e f 825 4615
+ed3d 2 826 4615
+FUNC ed3f 19a 4 _setmbcp
+ed3f c 574 4615
+ed4b 4 575 4615
+ed4f a 579 4615
+ed59 5 581 4615
+ed5e 3 582 4615
+ed61 b 585 4615
+ed6c 9 587 4615
+ed75 d 593 4615
+ed82 8 595 4615
+ed8a c 597 4615
+ed96 3 607 4615
+ed99 16 612 4615
+edaf 1a 614 4615
+edc9 7 615 4615
+edd0 3 619 4615
+edd3 9 620 4615
+eddc 17 622 4615
+edf3 8 624 4615
+edfb 4 625 4615
+edff 8 630 4615
+ee07 8 631 4615
+ee0f 8 632 4615
+ee17 a 633 4615
+ee21 d 634 4615
+ee2e 3 633 4615
+ee31 c 635 4615
+ee3d a 636 4615
+ee47 3 635 4615
+ee4a c 637 4615
+ee56 d 638 4615
+ee63 3 637 4615
+ee66 1c 640 4615
+ee82 7 641 4615
+ee89 6 645 4615
+ee8f 3 646 4615
+ee92 e 648 4615
+eea0 9 650 4615
+eea9 2 653 4615
+eeab 5 654 4615
+eeb0 8 660 4615
+eeb8 7 661 4615
+eebf b 662 4615
+eeca 2 668 4615
+eecc 4 673 4615
+eed0 3 682 4615
+eed3 6 683 4615
+FUNC eed9 1e 0 __initmbctable
+eed9 0 843 4615
+eed9 9 853 4615
+eee2 8 854 4615
+eeea a 855 4615
+eef4 2 860 4615
+eef6 1 861 4615
+FUNC eef7 6 0 ___setlc_active_func
+eef7 0 90 2995
+eef7 5 91 2995
+eefc 1 92 2995
+FUNC eefd 6 0 ___unguarded_readlc_active_add_func
+eefd 0 104 2995
+eefd 5 105 2995
+ef02 1 106 2995
+FUNC ef03 140 4 __freetlocinfo
+ef03 3 144 2995
+ef06 26 152 2995
+ef2c e 155 2995
+ef3a 6 157 2995
+ef40 d 158 2995
+ef4d e 162 2995
+ef5b 6 164 2995
+ef61 d 165 2995
+ef6e b 168 2995
+ef79 d 169 2995
+ef86 e 176 2995
+ef94 11 178 2995
+efa5 13 179 2995
+efb8 e 180 2995
+efc6 e 181 2995
+efd4 17 188 2995
+efeb 6 190 2995
+eff1 9 191 2995
+effa 6 194 2995
+f000 13 197 2995
+f013 7 199 2995
+f01a 10 205 2995
+f02a d 207 2995
+f037 b 214 2995
+f042 1 215 2995
+FUNC f043 86 4 __addlocaleref
+f043 3 225 2995
+f046 e 227 2995
+f054 a 228 2995
+f05e 3 229 2995
+f061 a 231 2995
+f06b 3 232 2995
+f06e a 234 2995
+f078 3 235 2995
+f07b a 237 2995
+f085 3 238 2995
+f088 6 240 2995
+f08e f 242 2995
+f09d 3 243 2995
+f0a0 d 245 2995
+f0ad 9 246 2995
+f0b6 12 248 2995
+f0c8 1 249 2995
+FUNC f0c9 8c 4 __removelocaleref
+f0c9 1 259 2995
+f0ca b 261 2995
+f0d5 9 263 2995
+f0de a 265 2995
+f0e8 3 266 2995
+f0eb a 268 2995
+f0f5 3 269 2995
+f0f8 a 271 2995
+f102 3 272 2995
+f105 a 274 2995
+f10f 3 275 2995
+f112 6 277 2995
+f118 f 279 2995
+f127 3 280 2995
+f12a d 282 2995
+f137 9 283 2995
+f140 11 285 2995
+f151 3 287 2995
+f154 1 288 2995
+FUNC f155 24 0 _copytlocinfo_nolock
+f155 3 302 2995
+f158 d 303 2995
+f165 7 304 2995
+f16c 3 305 2995
+f16f 9 306 2995
+f178 1 308 2995
+FUNC f179 3e 0 _updatetlocinfoEx_nolock
+f179 0 321 2995
+f179 9 324 2995
+f182 2 326 2995
+f184 4 327 2995
+f188 8 334 2995
+f190 5 339 2995
+f195 6 341 2995
+f19b e 350 2995
+f1a9 7 351 2995
+f1b0 3 355 2995
+f1b3 1 356 2995
+f1b4 2 325 2995
+f1b6 1 356 2995
+FUNC f1b7 76 0 __updatetlocinfo
+f1b7 c 382 2995
+f1c3 7 384 2995
+f1ca 10 386 2995
+f1da 8 397 2995
+f1e2 4 399 2995
+f1e6 8 401 2995
+f1ee 2 404 2995
+f1f0 6 405 2995
+f1f6 8 387 2995
+f1fe 4 388 2995
+f202 11 390 2995
+f213 e 392 2995
+f221 8 394 2995
+f229 4 395 2995
+FUNC f22d 66 4 _configthreadlocale
+f22d 2 420 2995
+f22f 5 434 2995
+f234 10 435 2995
+f244 19 437 2995
+f25d 1d 456 2995
+f27a 3 444 2995
+f27d 2 445 2995
+f27f 6 440 2995
+f285 2 441 2995
+f287 7 452 2995
+f28e 4 460 2995
+f292 1 462 2995
+FUNC f293 53 0 sync_legacy_variables_lk
+f293 0 489 2995
+f293 e 490 2995
+f2a1 9 491 2995
+f2aa c 492 2995
+f2b6 c 493 2995
+f2c2 c 494 2995
+f2ce c 495 2995
+f2da b 496 2995
+f2e5 1 497 2995
+FUNC f2e6 96 4 _free_locale
+f2e6 c 517 2995
+f2f2 9 518 2995
+f2fb 1c 522 2995
+f317 7 524 2995
+f31e 4 526 2995
+f322 8 534 2995
+f32a 3 535 2995
+f32d 8 537 2995
+f335 11 540 2995
+f346 7 541 2995
+f34d c 543 2995
+f359 7 552 2995
+f360 3 553 2995
+f363 7 554 2995
+f36a 6 556 2995
+f370 3 543 2995
+f373 9 545 2995
+FUNC f37c 5 4 __free_locale
+f37c 0 562 2995
+f37c 5 563 2995
+FUNC f381 88 0 _get_current_locale
+f381 c 687 2995
+f38d 7 689 2995
+f394 14 691 2995
+f3a8 b 693 2995
+f3b3 4 694 2995
+f3b7 5 697 2995
+f3bc 5 698 2995
+f3c1 5 706 2995
+f3c6 6 707 2995
+f3cc 8 708 2995
+f3d4 4 709 2995
+f3d8 8 710 2995
+f3e0 c 712 2995
+f3ec 9 715 2995
+f3f5 2 717 2995
+f3f7 6 718 2995
+f3fd 3 712 2995
+f400 9 713 2995
+FUNC f409 5 0 __get_current_locale
+f409 0 722 2995
+f409 5 723 2995
+FUNC f40e 3 4 __init_dummy
+f40e 0 1283 2995
+f40e 2 1284 2995
+f410 1 1285 2995
+FUNC f411 3e c _strcats
+f411 2 1288 2995
+f413 f 1294 2995
+f422 26 1296 2995
+f448 6 1294 2995
+f44e 1 1299 2995
+FUNC f44f 129 8 __lc_strtolc
+f44f 6 1302 2995
+f455 11 1307 2995
+f466 c 1309 2995
+f472 7 1310 2995
+f479 b 1313 2995
+f484 25 1315 2995
+f4a9 6 1317 2995
+f4af 2 1318 2995
+f4b1 15 1323 2995
+f4c6 1d 1328 2995
+f4e3 9 1329 2995
+f4ec 10 1331 2995
+f4fc c 1332 2995
+f508 14 1334 2995
+f51c 28 1335 2995
+f544 9 1340 2995
+f54d b 1348 2995
+f558 18 1350 2995
+f570 6 1338 2995
+f576 2 1353 2995
+FUNC f578 6b c __lc_lctostr
+f578 5 1356 2995
+f57d 25 1357 2995
+f5a2 7 1358 2995
+f5a9 16 1359 2995
+f5bf c 1360 2995
+f5cb 16 1361 2995
+f5e1 2 1362 2995
+FUNC f5e3 171 0 _setlocale_get_all
+f5e3 4 1124 2995
+f5e7 3 1126 2995
+f5ea 1d 1134 2995
+f607 3 1137 2995
+f60a 3 1139 2995
+f60d 2 1140 2995
+f60f 2f 1143 2995
+f63e 26 1146 2995
+f664 10 1147 2995
+f674 5 1148 2995
+f679 4 1141 2995
+f67d 2f 1143 2995
+f6ac a 1144 2995
+f6b6 8 1152 2995
+f6be 14 1154 2995
+f6d2 9 1156 2995
+f6db e 1159 2995
+f6e9 9 1161 2995
+f6f2 7 1165 2995
+f6f9 7 1166 2995
+f700 9 1168 2995
+f709 15 1170 2995
+f71e 9 1172 2995
+f727 e 1175 2995
+f735 9 1177 2995
+f73e 12 1183 2995
+f750 4 1187 2995
+FUNC f754 1d4 18 _expandlocale
+f754 15 1198 2995
+f769 41 1230 2995
+f7aa 14 1211 2995
+f7be b 1216 2995
+f7c9 26 1219 2995
+f7ef 4 1220 2995
+f7f3 3 1222 2995
+f7f6 4 1223 2995
+f7fa 4 1224 2995
+f7fe 7 1226 2995
+f805 2 1228 2995
+f807 8 1230 2995
+f80f 6 1234 2995
+f815 2f 1236 2995
+f844 4 1241 2995
+f848 e 1243 2995
+f856 6 1244 2995
+f85c 10 1246 2995
+f86c 6 1247 2995
+f872 9 1251 2995
+f87b 10 1253 2995
+f88b a 1255 2995
+f895 2 1260 2995
+f897 8 1263 2995
+f89f 26 1267 2995
+f8c5 5 1271 2995
+f8ca e 1272 2995
+f8d8 5 1273 2995
+f8dd 10 1274 2995
+f8ed 22 1276 2995
+f90f 5 1277 2995
+f914 2 1212 2995
+f916 12 1278 2995
+FUNC f928 2f6 4 _setlocale_set_cat
+f928 19 980 2995
+f941 5 993 2995
+f946 2f 998 2995
+f975 7 1000 2995
+f97c 19 1002 2995
+f995 6 1004 2995
+f99b c 1007 2995
+f9a7 16 1008 2995
+f9bd 2 1010 2995
+f9bf 3 1013 2995
+f9c2 d 1014 2995
+f9cf 2c 1015 2995
+f9fb 3 1016 2995
+f9fe 39 1019 2995
+fa37 6 1020 2995
+fa3d 15 1021 2995
+fa52 17 1022 2995
+fa69 a 1029 2995
+fa73 6 1031 2995
+fa79 18 1037 2995
+fa91 7 1039 2995
+fa98 8 1053 2995
+faa0 14 1054 2995
+fab4 18 1055 2995
+facc 2 1039 2995
+face a 1044 2995
+fad8 d 1046 2995
+fae5 b 1047 2995
+faf0 9 1058 2995
+faf9 26 1066 2995
+fb1f 2 1069 2995
+fb21 10 1071 2995
+fb31 22 1072 2995
+fb53 2 1081 2995
+fb55 4 1082 2995
+fb59 5 1083 2995
+fb5e 9 1085 2995
+fb67 6 1088 2995
+fb6d 9 1089 2995
+fb76 12 1091 2995
+fb88 6 1094 2995
+fb8e e 1095 2995
+fb9c f 1096 2995
+fbab 9 1097 2995
+fbb4 5 1099 2995
+fbb9 24 1106 2995
+fbdd 7 1109 2995
+fbe4 8 1110 2995
+fbec 6 1111 2995
+fbf2 18 1116 2995
+fc0a 3 1118 2995
+fc0d 11 1119 2995
+FUNC fc1e 1ce 4 _setlocale_nolock
+fc1e 1a 873 2995
+fc38 7 877 2995
+fc3f 5 904 2995
+fc44 17 880 2995
+fc5b 5 882 2995
+fc60 12 888 2995
+fc72 1d 890 2995
+fc8f 2 894 2995
+fc91 d 898 2995
+fc9e 1e 900 2995
+fcbc 11 904 2995
+fccd 1d 907 2995
+fcea e 904 2995
+fcf8 1b 913 2995
+fd13 6 916 2995
+fd19 24 918 2995
+fd3d 18 922 2995
+fd55 3 923 2995
+fd58 7 925 2995
+fd5f 1 926 2995
+fd60 9 928 2995
+fd69 c 930 2995
+fd75 4 901 2995
+fd79 19 935 2995
+fd92 3 937 2995
+fd95 4 939 2995
+fd99 11 941 2995
+fdaa c 943 2995
+fdb6 2 947 2995
+fdb8 3 949 2995
+fdbb 2 952 2995
+fdbd 3 953 2995
+fdc0 9 937 2995
+fdc9 5 956 2995
+fdce 2 961 2995
+fdd0 3 962 2995
+fdd3 2 965 2995
+fdd5 5 966 2995
+fdda 12 972 2995
+FUNC fdec f3 8 _create_locale
+fdec 0 605 2995
+fdec 10 609 2995
+fdfc 13 612 2995
+fe0f b 614 2995
+fe1a 4 610 2995
+fe1e c 658 2995
+fe2a 8 617 2995
+fe32 7 619 2995
+fe39 2 621 2995
+fe3b 14 623 2995
+fe4f 7 625 2995
+fe56 7 626 2995
+fe5d 2 628 2995
+fe5f c 630 2995
+fe6b 14 632 2995
+fe7f 7 634 2995
+fe86 7 635 2995
+fe8d 9 637 2995
+fe96 2 640 2995
+fe98 13 642 2995
+feab 8 644 2995
+feb3 7 645 2995
+feba 7 646 2995
+fec1 9 647 2995
+feca 2 648 2995
+fecc 2 650 2995
+fece 5 652 2995
+fed3 5 653 2995
+fed8 7 657 2995
+FUNC fedf 5 8 __create_locale
+fedf 0 665 2995
+fedf 5 666 2995
+FUNC fee4 170 8 setlocale
+fee4 c 791 2995
+fef0 5 792 2995
+fef5 25 797 2995
+ff1a a 799 2995
+ff24 5 801 2995
+ff29 4 806 2995
+ff2d 3 807 2995
+ff30 1b 808 2995
+ff4b 8 818 2995
+ff53 7 819 2995
+ff5a a 820 2995
+ff64 8 822 2995
+ff6c 19 826 2995
+ff85 18 834 2995
+ff9d a 836 2995
+ffa7 8 839 2995
+ffaf 7 840 2995
+ffb6 a 841 2995
+ffc0 7 842 2995
+ffc7 f 846 2995
+ffd6 c 847 2995
+ffe2 18 849 2995
+fffa 5 850 2995
+ffff b 852 2995
+1000a 8 822 2995
+10012 9 823 2995
+1001b 3 852 2995
+1001e 9 853 2995
+10027 2 855 2995
+10029 6 856 2995
+1002f 8 857 2995
+10037 c 860 2995
+10043 3 865 2995
+10046 6 866 2995
+1004c 3 860 2995
+1004f 5 862 2995
+FUNC 10054 15f 14 _wctomb_s_l
+10054 8 56 6128
+1005c 11 57 6128
+1006d 7 60 6128
+10074 2 62 6128
+10076 4 64 6128
+1007a 7 67 6128
+10081 3 69 6128
+10084 23 74 6128
+100a7 b 77 6128
+100b2 c 79 6128
+100be a 81 6128
+100c8 8 83 6128
+100d0 b 85 6128
+100db b 125 6128
+100e6 13 126 6128
+100f9 5 136 6128
+100fe 4 91 6128
+10102 2c 93 6128
+1012e 2 94 6128
+10130 7 96 6128
+10137 6 98 6128
+1013d 15 100 6128
+10152 27 115 6128
+10179 7 129 6128
+10180 2 131 6128
+10182 2 133 6128
+10184 f 117 6128
+10193 10 119 6128
+101a3 b 121 6128
+101ae 5 123 6128
+FUNC 101b3 1b 10 wctomb_s
+101b3 0 144 6128
+101b3 1a 145 6128
+101cd 1 146 6128
+FUNC 101ce 4f c _wctomb_l
+101ce 6 178 6128
+101d4 f 181 6128
+101e3 1f 183 6128
+10202 19 184 6128
+1021b 2 185 6128
+FUNC 1021d 30 8 wctomb
+1021d 4 191 6128
+10221 4 192 6128
+10225 1a 195 6128
+1023f 7 196 6128
+10246 2 197 6128
+10248 3 196 6128
+1024b 2 197 6128
+FUNC 1024d 36 8 _isleadbyte_l
+1024d 6 55 6490
+10253 b 56 6490
+1025e 23 57 6490
+10281 2 58 6490
+FUNC 10283 e 4 isleadbyte
+10283 0 63 6490
+10283 d 64 6490
+10290 1 65 6490
+FUNC 10291 16 8 _iswalpha_l
+10291 0 71 6490
+10291 15 72 6490
+102a6 1 73 6490
+FUNC 102a7 11 4 iswalpha
+102a7 0 78 6490
+102a7 10 79 6490
+102b7 1 80 6490
+FUNC 102b8 13 8 _iswupper_l
+102b8 0 86 6490
+102b8 12 87 6490
+102ca 1 88 6490
+FUNC 102cb e 4 iswupper
+102cb 0 93 6490
+102cb d 94 6490
+102d8 1 95 6490
+FUNC 102d9 13 8 _iswlower_l
+102d9 0 101 6490
+102d9 12 102 6490
+102eb 1 103 6490
+FUNC 102ec e 4 iswlower
+102ec 0 108 6490
+102ec d 109 6490
+102f9 1 110 6490
+FUNC 102fa 13 8 _iswdigit_l
+102fa 0 116 6490
+102fa 12 117 6490
+1030c 1 118 6490
+FUNC 1030d e 4 iswdigit
+1030d 0 123 6490
+1030d d 124 6490
+1031a 1 125 6490
+FUNC 1031b 16 8 _iswxdigit_l
+1031b 0 131 6490
+1031b 15 132 6490
+10330 1 133 6490
+FUNC 10331 11 4 iswxdigit
+10331 0 138 6490
+10331 10 139 6490
+10341 1 140 6490
+FUNC 10342 13 8 _iswspace_l
+10342 0 146 6490
+10342 12 147 6490
+10354 1 148 6490
+FUNC 10355 e 4 iswspace
+10355 0 153 6490
+10355 d 154 6490
+10362 1 155 6490
+FUNC 10363 13 8 _iswpunct_l
+10363 0 161 6490
+10363 12 162 6490
+10375 1 163 6490
+FUNC 10376 e 4 iswpunct
+10376 0 168 6490
+10376 d 169 6490
+10383 1 170 6490
+FUNC 10384 16 8 _iswalnum_l
+10384 0 176 6490
+10384 15 177 6490
+10399 1 178 6490
+FUNC 1039a 11 4 iswalnum
+1039a 0 183 6490
+1039a 10 184 6490
+103aa 1 185 6490
+FUNC 103ab 16 8 _iswprint_l
+103ab 0 191 6490
+103ab 15 192 6490
+103c0 1 193 6490
+FUNC 103c1 11 4 iswprint
+103c1 0 198 6490
+103c1 10 199 6490
+103d1 1 200 6490
+FUNC 103d2 16 8 _iswgraph_l
+103d2 0 206 6490
+103d2 15 207 6490
+103e7 1 208 6490
+FUNC 103e8 11 4 iswgraph
+103e8 0 213 6490
+103e8 10 214 6490
+103f8 1 215 6490
+FUNC 103f9 13 8 _iswcntrl_l
+103f9 0 221 6490
+103f9 12 222 6490
+1040b 1 223 6490
+FUNC 1040c e 4 iswcntrl
+1040c 0 228 6490
+1040c d 229 6490
+10419 1 230 6490
+FUNC 1041a c 4 iswascii
+1041a 0 235 6490
+1041a b 236 6490
+10425 1 237 6490
+FUNC 10426 26 8 _iswcsym_l
+10426 0 243 6490
+10426 21 244 6490
+10447 1 245 6490
+10448 3 244 6490
+1044b 1 245 6490
+FUNC 1044c 21 4 __iswcsym
+1044c 0 250 6490
+1044c 1c 251 6490
+10468 1 252 6490
+10469 3 251 6490
+1046c 1 252 6490
+FUNC 1046d 26 8 _iswcsymf_l
+1046d 0 258 6490
+1046d 21 259 6490
+1048e 1 260 6490
+1048f 3 259 6490
+10492 1 260 6490
+FUNC 10493 21 4 __iswcsymf
+10493 0 265 6490
+10493 1c 266 6490
+104af 1 267 6490
+104b0 3 266 6490
+104b3 1 267 6490
+FUNC 104c0 95 0 _aulldvrm
+104c0 0 45 5113
+104c0 1 47 5113
+104c1 4 79 5113
+104c5 2 80 5113
+104c7 2 81 5113
+104c9 4 82 5113
+104cd 4 83 5113
+104d1 2 84 5113
+104d3 2 85 5113
+104d5 2 86 5113
+104d7 4 87 5113
+104db 2 88 5113
+104dd 2 89 5113
+104df 2 94 5113
+104e1 4 95 5113
+104e5 2 96 5113
+104e7 2 97 5113
+104e9 4 98 5113
+104ed 2 99 5113
+104ef 2 100 5113
+104f1 2 107 5113
+104f3 4 108 5113
+104f7 4 109 5113
+104fb 4 110 5113
+104ff 2 112 5113
+10501 2 113 5113
+10503 2 114 5113
+10505 2 115 5113
+10507 2 116 5113
+10509 2 117 5113
+1050b 2 118 5113
+1050d 2 119 5113
+1050f 4 128 5113
+10513 2 129 5113
+10515 4 130 5113
+10519 2 131 5113
+1051b 2 132 5113
+1051d 2 133 5113
+1051f 4 141 5113
+10523 2 142 5113
+10525 2 143 5113
+10527 4 144 5113
+1052b 2 145 5113
+1052d 1 147 5113
+1052e 4 148 5113
+10532 4 149 5113
+10536 2 151 5113
+10538 4 160 5113
+1053c 4 161 5113
+10540 2 162 5113
+10542 2 163 5113
+10544 3 164 5113
+10547 2 169 5113
+10549 2 170 5113
+1054b 2 171 5113
+1054d 2 172 5113
+1054f 2 173 5113
+10551 1 179 5113
+10552 3 181 5113
+FUNC 10558 90 0 _local_unwind4
+FUNC 105e8 46 0 _unwind_handler4
+FUNC 1062e 1c 4 _seh_longjmp_unwind4
+FUNC 1064a 17 0 _EH4_CallFilterFunc
+FUNC 10661 19 0 _EH4_TransferToHandler
+FUNC 1067a 1a 0 _EH4_GlobalUnwind
+FUNC 10694 17 8 _EH4_LocalUnwind
+FUNC 106ab 33 0 write_char
+106ab 0 2433 1218
+106ab a 2434 1218
+106b5 2 2437 1218
+106b7 21 2442 1218
+106d8 2 2444 1218
+106da 1 2447 1218
+106db 2 2446 1218
+106dd 1 2447 1218
+FUNC 106de 24 c write_multi_char
+106de 6 2498 1218
+106e4 2 2501 1218
+106e6 e 2500 1218
+106f4 5 2501 1218
+106f9 7 2499 1218
+10700 2 2504 1218
+FUNC 10702 4a 4 write_string
+10702 0 2563 1218
+10702 12 2564 1218
+10714 6 2566 1218
+1071a 2 2567 1218
+1071c e 2570 1218
+1072a 5 2571 1218
+1072f a 2573 1218
+10739 9 2574 1218
+10742 9 2569 1218
+1074b 1 2579 1218
+FUNC 1074c 9b0 10 _output_s_l
+1074c 1b 975 1218
+10767 45 1036 1218
+107ac 2d 1031 1218
+107d9 b1 1033 1218
+1088a 8 1036 1218
+10892 28 1073 1218
+108ba 17 1078 1218
+108d1 e 1079 1218
+108df 11 1124 1218
+108f0 12 1131 1218
+10902 2 1171 1218
+10904 13 1173 1218
+10917 3 1174 1218
+1091a 5 1175 1218
+1091f 1e 1179 1218
+1093d 3 1193 1218
+10940 5 1194 1218
+10945 4 1181 1218
+10949 5 1182 1218
+1094e 4 1184 1218
+10952 5 1185 1218
+10957 7 1190 1218
+1095e 5 1191 1218
+10963 4 1187 1218
+10967 5 1196 1218
+1096c 5 1200 1218
+10971 9 1206 1218
+1097a b 1233 1218
+10985 4 1235 1218
+10989 3 1236 1218
+1098c 5 1239 1218
+10991 10 1241 1218
+109a1 5 1243 1218
+109a6 4 1248 1218
+109aa 5 1249 1218
+109af 5 1253 1218
+109b4 9 1259 1218
+109bd b 1284 1218
+109c8 4 1285 1218
+109cc 5 1287 1218
+109d1 10 1289 1218
+109e1 5 1291 1218
+109e6 18 1295 1218
+109fe 7 1362 1218
+10a05 5 1363 1218
+10a0a 5 1301 1218
+10a0f 1 1303 1218
+10a10 a 1304 1218
+10a1a 5 1306 1218
+10a1f 4 1308 1218
+10a23 5 1310 1218
+10a28 4 1358 1218
+10a2c 5 1359 1218
+10a31 c 1322 1218
+10a3d 2 1324 1218
+10a3f f 1325 1218
+10a4e a 1327 1218
+10a58 2 1329 1218
+10a5a a 1330 1218
+10a64 5 1332 1218
+10a69 30 1337 1218
+10a99 4 1352 1218
+10a9d 4 1154 1218
+10aa1 10 1158 1218
+10ab1 11 1160 1218
+10ac2 3 1161 1218
+10ac5 b 1163 1218
+10ad0 b 1166 1218
+10adb 5 1167 1218
+10ae0 32 1378 1218
+10b12 d 1716 1218
+10b1f 4 1724 1218
+10b23 18 1749 1218
+10b3b c 1750 1218
+10b47 8 1381 1218
+10b4f 9 1385 1218
+10b58 8 1561 1218
+10b60 7 1562 1218
+10b67 d 1584 1218
+10b74 3 1589 1218
+10b77 15 1635 1218
+10b8c 4 1636 1218
+10b90 8 1637 1218
+10b98 f 1639 1218
+10ba7 1d 1378 1218
+10bc4 12 1448 1218
+10bd6 16 1467 1218
+10bec 4 1470 1218
+10bf0 7 1471 1218
+10bf7 2 1472 1218
+10bf9 6 1499 1218
+10bff 7 1500 1218
+10c06 6 1503 1218
+10c0c 5 1506 1218
+10c11 5 1523 1218
+10c16 e 1541 1218
+10c24 6 1546 1218
+10c2a d 1548 1218
+10c37 7 1549 1218
+10c3e 5 1550 1218
+10c43 4 1551 1218
+10c47 5 1553 1218
+10c4c 8 1543 1218
+10c54 7 1544 1218
+10c5b 5 1557 1218
+10c60 34 1378 1218
+10c94 9 1908 1218
+10c9d 9 1910 1218
+10ca6 8 1668 1218
+10cae d 1688 1218
+10cbb 6 1702 1218
+10cc1 7 1703 1218
+10cc8 2 1704 1218
+10cca 5 1706 1218
+10ccf 7 1708 1218
+10cd6 5 1710 1218
+10cdb 4 1864 1218
+10cdf 7 1869 1218
+10ce6 c 1933 1218
+10cf2 8 1939 1218
+10cfa 5 1958 1218
+10cff 7 1751 1218
+10d06 9 1752 1218
+10d0f 5 1753 1218
+10d14 3 1754 1218
+10d17 9 1756 1218
+10d20 f 1759 1218
+10d2f 2 1760 1218
+10d31 15 1765 1218
+10d46 8 1767 1218
+10d4e e 1809 1218
+10d5c 27 1828 1218
+10d83 14 1838 1218
+10d97 15 1840 1218
+10dac a 1844 1218
+10db6 15 1846 1218
+10dcb 5 1852 1218
+10dd0 7 1853 1218
+10dd7 4 1854 1218
+10ddb 1 1857 1218
+10ddc 5 1859 1218
+10de1 3 1877 1218
+10de4 3 1887 1218
+10de7 2 1888 1218
+10de9 1a 1378 1218
+10e03 7 1892 1218
+10e0a 11 1897 1218
+10e1b c 1900 1218
+10e27 7 1901 1218
+10e2e 5 1903 1218
+10e33 5 1961 1218
+10e38 6 1987 1218
+10e3e 14 2026 1218
+10e52 2 2045 1218
+10e54 5 2051 1218
+10e59 2 2071 1218
+10e5b 3 2074 1218
+10e5e 6 2080 1218
+10e64 2 2099 1218
+10e66 5 2105 1218
+10e6b f 2128 1218
+10e7a 7 2129 1218
+10e81 7 2130 1218
+10e88 c 2136 1218
+10e94 2 2142 1218
+10e96 6 2148 1218
+10e9c 7 2149 1218
+10ea3 2 2150 1218
+10ea5 4 2151 1218
+10ea9 a 2152 1218
+10eb3 3 2153 1218
+10eb6 6 2157 1218
+10ebc 3 2158 1218
+10ebf 6 2163 1218
+10ec5 10 2165 1218
+10ed5 10 2166 1218
+10ee5 c 2168 1218
+10ef1 3 2170 1218
+10ef4 3 2172 1218
+10ef7 2 2173 1218
+10ef9 8 2175 1218
+10f01 1 2176 1218
+10f02 19 2180 1218
+10f1b 9 2181 1218
+10f24 1 2182 1218
+10f25 2 2185 1218
+10f27 7 1640 1218
+10f2e 2 1641 1218
+10f30 4 1640 1218
+10f34 5 1642 1218
+10f39 2 1644 1218
+10f3b 4 1645 1218
+10f3f 8 1646 1218
+10f47 5 1647 1218
+10f4c 6 1648 1218
+10f52 1 1649 1218
+10f53 4 1648 1218
+10f57 6 1650 1218
+10f5d a 2201 1218
+10f67 7 2204 1218
+10f6e 6 2205 1218
+10f74 4 2207 1218
+10f78 2 2208 1218
+10f7a 4 2210 1218
+10f7e 4 2212 1218
+10f82 2 2213 1218
+10f84 4 2215 1218
+10f88 4 2217 1218
+10f8c 7 2218 1218
+10f93 9 2224 1218
+10f9c 6 2228 1218
+10fa2 11 2230 1218
+10fb3 11 2234 1218
+10fc4 d 2236 1218
+10fd1 f 2238 1218
+10fe0 d 2243 1218
+10fed 3 2249 1218
+10ff0 3 2250 1218
+10ff3 1e 2252 1218
+11011 9 2253 1218
+1101a 18 2257 1218
+11032 2 1690 1218
+11034 4 2254 1218
+11038 2 2259 1218
+1103a d 2260 1218
+11047 c 2290 1218
+11053 f 2292 1218
+11062 6 2297 1218
+11068 8 2298 1218
+11070 1b 2299 1218
+1108b 17 1125 1218
+110a2 2 1690 1218
+110a4 f 2310 1218
+110b3 10 2376 1218
+110c3 39 2377 1218
+FUNC 110fc 129 10 _validate_param_reuseA
+110fc 3 606 1271
+110ff 1c 610 1271
+1111b f 617 1271
+1112a 11 618 1271
+1113b 10 620 1271
+1114b 36 629 1271
+11181 46 632 1271
+111c7 2 633 1271
+111c9 17 639 1271
+111e0 c 645 1271
+111ec 2c 626 1271
+11218 b 614 1271
+11223 2 646 1271
+FUNC 11225 33 0 write_char
+11225 0 2433 1271
+11225 a 2434 1271
+1122f 2 2437 1271
+11231 21 2442 1271
+11252 2 2444 1271
+11254 1 2447 1271
+11255 2 2446 1271
+11257 1 2447 1271
+FUNC 11258 24 c write_multi_char
+11258 6 2498 1271
+1125e 2 2501 1271
+11260 e 2500 1271
+1126e 5 2501 1271
+11273 7 2499 1271
+1127a 2 2504 1271
+FUNC 1127c 4a 4 write_string
+1127c 0 2563 1271
+1127c 12 2564 1271
+1128e 6 2566 1271
+11294 2 2567 1271
+11296 e 2570 1271
+112a4 5 2571 1271
+112a9 a 2573 1271
+112b3 9 2574 1271
+112bc 9 2569 1271
+112c5 1 2579 1271
+FUNC 112c6 10 4 get_crtdouble_arg
+112c6 0 2684 1271
+112c6 f 2685 1271
+112d5 1 2686 1271
+FUNC 112d6 f88 10 _output_p_l
+112d6 1b 975 1271
+112f1 15 986 1271
+11306 b 1007 1271
+11311 2b 2172 1271
+1133c 2c 1031 1271
+11368 9b 1033 1271
+11403 8 1036 1271
+1140b 3 1038 1271
+1140e 3 1041 1271
+11411 3 1043 1271
+11414 11 1046 1271
+11425 7 1061 1271
+1142c 4 1062 1271
+11430 7 1069 1271
+11437 32 1073 1271
+11469 19 1078 1271
+11482 e 1079 1271
+11490 1a 1082 1271
+114aa 6 1084 1271
+114b0 1b 1087 1271
+114cb 5 1089 1271
+114d0 15 1091 1271
+114e5 3 1093 1271
+114e8 2 1095 1271
+114ea 6 1097 1271
+114f0 5 1101 1271
+114f5 c 1103 1271
+11501 7 1104 1271
+11508 e 1106 1271
+11516 1a 1109 1271
+11530 8 1112 1271
+11538 f 1131 1271
+11547 9 1120 1271
+11550 b 1131 1271
+1155b 21 1137 1271
+1157c 5 1145 1271
+11581 16 1173 1271
+11597 3 1174 1271
+1159a 5 1175 1271
+1159f 1f 1179 1271
+115be 7 1193 1271
+115c5 5 1194 1271
+115ca 7 1181 1271
+115d1 5 1182 1271
+115d6 6 1184 1271
+115dc 5 1185 1271
+115e1 a 1190 1271
+115eb 5 1191 1271
+115f0 7 1187 1271
+115f7 5 1196 1271
+115fc 9 1200 1271
+11605 5 1203 1271
+1160a a 1206 1271
+11614 2 1209 1271
+11616 c 1211 1271
+11622 7 1212 1271
+11629 b 1214 1271
+11634 1b 1216 1271
+1164f 8 1219 1271
+11657 12 1221 1271
+11669 9 1274 1271
+11672 5 1275 1271
+11677 c 1228 1271
+11683 b 1233 1271
+1168e 7 1235 1271
+11695 3 1236 1271
+11698 5 1239 1271
+1169d 10 1241 1271
+116ad 5 1243 1271
+116b2 3 1248 1271
+116b5 5 1249 1271
+116ba 5 1253 1271
+116bf 5 1256 1271
+116c4 a 1259 1271
+116ce 2 1262 1271
+116d0 c 1264 1271
+116dc 7 1265 1271
+116e3 f 1267 1271
+116f2 c 1280 1271
+116fe b 1284 1271
+11709 4 1285 1271
+1170d 5 1287 1271
+11712 1c 1274 1271
+1172e 10 1289 1271
+1173e 5 1291 1271
+11743 18 1295 1271
+1175b a 1362 1271
+11765 5 1363 1271
+1176a 5 1301 1271
+1176f 1 1303 1271
+11770 d 1304 1271
+1177d 5 1306 1271
+11782 7 1308 1271
+11789 5 1310 1271
+1178e 7 1358 1271
+11795 5 1359 1271
+1179a c 1322 1271
+117a6 2 1324 1271
+117a8 12 1325 1271
+117ba a 1327 1271
+117c4 2 1329 1271
+117c6 d 1330 1271
+117d3 5 1332 1271
+117d8 18 1337 1271
+117f0 3 1352 1271
+117f3 13 1158 1271
+11806 11 1160 1271
+11817 8 1161 1271
+1181f 8 1163 1271
+11827 b 1166 1271
+11832 5 1167 1271
+11837 a 1342 1271
+11841 5 1366 1271
+11846 39 1378 1271
+1187f 9 1716 1271
+11888 7 1724 1271
+1188f 12 1726 1271
+118a1 a 1728 1271
+118ab 27 1739 1271
+118d2 b 1381 1271
+118dd c 1385 1271
+118e9 b 1561 1271
+118f4 a 1562 1271
+118fe d 1584 1271
+1190b 9 1586 1271
+11914 a 1589 1271
+1191e 5 1592 1271
+11923 25 1378 1271
+11948 b 1442 1271
+11953 5 1445 1271
+11958 b 1448 1271
+11963 2 1451 1271
+11965 a 1453 1271
+1196f 27 1457 1271
+11996 5 1458 1271
+1199b a 1462 1271
+119a5 19 1467 1271
+119be 4 1470 1271
+119c2 3 1471 1271
+119c5 2 1472 1271
+119c7 5 1477 1271
+119cc b 1480 1271
+119d7 2 1483 1271
+119d9 a 1485 1271
+119e3 f 1489 1271
+119f2 a 1494 1271
+119fc 6 1499 1271
+11a02 3 1500 1271
+11a05 9 1503 1271
+11a0e 5 1506 1271
+11a13 5 1520 1271
+11a18 a 1523 1271
+11a22 2 1526 1271
+11a24 a 1528 1271
+11a2e 9 1532 1271
+11a37 6 1533 1271
+11a3d 9 1537 1271
+11a46 b 1541 1271
+11a51 9 1546 1271
+11a5a d 1548 1271
+11a67 3 1549 1271
+11a6a 5 1550 1271
+11a6f 3 1551 1271
+11a72 5 1553 1271
+11a77 8 1543 1271
+11a7f 7 1544 1271
+11a86 5 1557 1271
+11a8b 38 1378 1271
+11ac3 14 1908 1271
+11ad7 f 1910 1271
+11ae6 5 1665 1271
+11aeb a 1668 1271
+11af5 2 1671 1271
+11af7 a 1673 1271
+11b01 25 1677 1271
+11b26 5 1678 1271
+11b2b 9 1682 1271
+11b34 9 1688 1271
+11b3d 9 1702 1271
+11b46 7 1703 1271
+11b4d 2 1704 1271
+11b4f 5 1706 1271
+11b54 3 1708 1271
+11b57 5 1710 1271
+11b5c 7 1864 1271
+11b63 7 1869 1271
+11b6a f 1933 1271
+11b79 9 1936 1271
+11b82 e 1939 1271
+11b90 5 1942 1271
+11b95 1c 1739 1271
+11bb1 21 1109 1271
+11bd2 16 1749 1271
+11be8 9 1750 1271
+11bf1 7 1751 1271
+11bf8 3 1767 1271
+11bfb 5 1806 1271
+11c00 9 1809 1271
+11c09 2 1812 1271
+11c0b 5 1753 1271
+11c10 3 1754 1271
+11c13 a 1756 1271
+11c1d f 1759 1271
+11c2c 2 1760 1271
+11c2e 11 1765 1271
+11c3f a 1818 1271
+11c49 6 1821 1271
+11c4f 16 1822 1271
+11c65 26 1828 1271
+11c8b 16 1838 1271
+11ca1 17 1840 1271
+11cb8 a 1844 1271
+11cc2 17 1846 1271
+11cd9 8 1852 1271
+11ce1 a 1853 1271
+11ceb 3 1854 1271
+11cee 3 1857 1271
+11cf1 5 1859 1271
+11cf6 7 1877 1271
+11cfd 7 1887 1271
+11d04 2 1888 1271
+11d06 1a 1378 1271
+11d20 7 1892 1271
+11d27 14 1897 1271
+11d3b c 1900 1271
+11d47 7 1901 1271
+11d4e 5 1903 1271
+11d53 a 1944 1271
+11d5d 2c 1948 1271
+11d89 5 1949 1271
+11d8e 6 1961 1271
+11d94 3 1964 1271
+11d97 6 1970 1271
+11d9d a 1972 1271
+11da7 2c 1976 1271
+11dd3 5 1977 1271
+11dd8 c 1981 1271
+11de4 5 1987 1271
+11de9 4 2019 1271
+11ded 4 2020 1271
+11df1 5 2023 1271
+11df6 b 2026 1271
+11e01 5 2029 1271
+11e06 a 2031 1271
+11e10 f 2035 1271
+11e1f a 2040 1271
+11e29 2 2045 1271
+11e2b 5 2048 1271
+11e30 b 2051 1271
+11e3b 2 2054 1271
+11e3d a 2056 1271
+11e47 b 2060 1271
+11e52 a 2065 1271
+11e5c 2 2071 1271
+11e5e 4 2074 1271
+11e62 5 2077 1271
+11e67 a 2080 1271
+11e71 2 2083 1271
+11e73 a 2085 1271
+11e7d b 2089 1271
+11e88 a 2094 1271
+11e92 2 2099 1271
+11e94 5 2102 1271
+11e99 a 2105 1271
+11ea3 2 2108 1271
+11ea5 a 2110 1271
+11eaf 38 2114 1271
+11ee7 5 2115 1271
+11eec b 2119 1271
+11ef7 13 2128 1271
+11f0a 7 2129 1271
+11f11 a 2130 1271
+11f1b f 2136 1271
+11f2a 2 2142 1271
+11f2c 6 2148 1271
+11f32 7 2149 1271
+11f39 2 2150 1271
+11f3b 7 2151 1271
+11f42 a 2152 1271
+11f4c 3 2153 1271
+11f4f 6 2157 1271
+11f55 3 2158 1271
+11f58 6 2163 1271
+11f5e 10 2165 1271
+11f6e 10 2166 1271
+11f7e c 2168 1271
+11f8a 3 2170 1271
+11f8d 3 2172 1271
+11f90 2 2173 1271
+11f92 8 2175 1271
+11f9a 1 2176 1271
+11f9b 24 2180 1271
+11fbf 9 2181 1271
+11fc8 1 2182 1271
+11fc9 5 2185 1271
+11fce c 1594 1271
+11fda c 1598 1271
+11fe6 9 1603 1271
+11fef e 1635 1271
+11ffd 4 1636 1271
+12001 8 1637 1271
+12009 8 1639 1271
+12011 1c 1598 1271
+1202d 6 1640 1271
+12033 2 1641 1271
+12035 4 1640 1271
+12039 5 1642 1271
+1203e 2 1644 1271
+12040 5 1645 1271
+12045 8 1646 1271
+1204d 5 1647 1271
+12052 6 1648 1271
+12058 1 1649 1271
+12059 4 1648 1271
+1205d 6 1650 1271
+12063 10 2189 1271
+12073 a 2201 1271
+1207d a 2204 1271
+12087 6 2205 1271
+1208d 4 2207 1271
+12091 2 2208 1271
+12093 4 2210 1271
+12097 4 2212 1271
+1209b 2 2213 1271
+1209d 4 2215 1271
+120a1 4 2217 1271
+120a5 7 2218 1271
+120ac 9 2224 1271
+120b5 4 2228 1271
+120b9 11 2230 1271
+120ca 11 2234 1271
+120db 13 2236 1271
+120ee f 2238 1271
+120fd d 2243 1271
+1210a 3 2249 1271
+1210d 3 2250 1271
+12110 1e 2252 1271
+1212e 9 2253 1271
+12137 18 2257 1271
+1214f 2 2310 1271
+12151 4 2254 1271
+12155 2 2259 1271
+12157 d 2260 1271
+12164 f 2290 1271
+12173 f 2292 1271
+12182 6 2297 1271
+12188 8 2298 1271
+12190 15 2299 1271
+121a5 2 1073 1271
+121a7 f 2310 1271
+121b6 b 2314 1271
+121c1 10 2319 1271
+121d1 1d 2321 1271
+121ee 2 2360 1271
+121f0 3 2361 1271
+121f3 2 2362 1271
+121f5 2 2324 1271
+121f7 f 2325 1271
+12206 10 1043 1271
+12216 10 2376 1271
+12226 38 2377 1271
+FUNC 1225e c2 4 _putwch_nolock
+1225e 11 84 4721
+1226f a 89 4721
+12279 9 91 4721
+12282 5 92 4721
+12287 a 96 4721
+12291 6 97 4721
+12297 16 103 4721
+122ad 14 105 4721
+122c1 6 106 4721
+122c7 1c 123 4721
+122e3 1e 129 4721
+12301 2 131 4721
+12303 4 133 4721
+12307 d 134 4721
+12314 a 110 4721
+1231e 2 113 4721
+FUNC 12320 9b 4 _cputws
+12320 c 151 4721
+1232c 5 153 4721
+12331 30 155 4721
+12361 b 157 4721
+1236c 9 158 4721
+12375 3 159 4721
+12378 a 160 4721
+12382 17 162 4721
+12399 4 164 4721
+1239d c 169 4721
+123a9 3 172 4721
+123ac 6 173 4721
+123b2 9 170 4721
+FUNC 123bb 46 4 _putwch
+123bb c 49 4721
+123c7 8 52 4721
+123cf 4 53 4721
+123d3 f 55 4721
+123e2 c 58 4721
+123ee 4 62 4721
+123f2 6 63 4721
+123f8 9 59 4721
+FUNC 12401 113 10 _mbtowc_l
+12401 8 55 6355
+12409 e 56 6355
+12417 4 61 6355
+1241b 7 64 6355
+12422 3 65 6355
+12425 4 59 6355
+12429 2 116 6355
+1242b b 70 6355
+12436 8 73 6355
+1243e 7 75 6355
+12445 7 76 6355
+1244c 11 77 6355
+1245d 13 80 6355
+12470 33 90 6355
+124a3 10 93 6355
+124b3 1b 99 6355
+124ce b 95 6355
+124d9 14 96 6355
+124ed 25 108 6355
+12512 2 111 6355
+FUNC 12514 17 c mbtowc
+12514 0 123 6355
+12514 16 124 6355
+1252a 1 125 6355
+FUNC 1252b 83 10 _lseeki64_nolock
+1252b 5 120 4872
+12530 4 126 4872
+12534 1b 134 4872
+1254f b 136 4872
+1255a 6 138 4872
+12560 22 146 4872
+12582 7 148 4872
+12589 2 149 4872
+1258b 19 152 4872
+125a4 8 153 4872
+125ac 2 154 4872
+FUNC 125ae 119 10 _lseeki64
+125ae c 73 4872
+125ba 9 74 4872
+125c3 24 77 4872
+125e7 2f 78 4872
+12616 46 79 4872
+1265c 7 81 4872
+12663 3 82 4872
+12666 9 84 4872
+1266f 1a 85 4872
+12689 2 86 4872
+1268b b 87 4872
+12696 7 88 4872
+1269d 8 89 4872
+126a5 c 93 4872
+126b1 6 97 4872
+126b7 6 98 4872
+126bd a 94 4872
+FUNC 126c7 7d 8 _set_osfhnd
+126c7 0 213 4825
+126c7 2e 216 4825
+126f5 e 217 4825
+12703 b 218 4825
+1270e 3 226 4825
+12711 2 227 4825
+12713 3 223 4825
+12716 2 224 4825
+12718 9 220 4825
+12721 5 231 4825
+12726 5 232 4825
+1272b b 234 4825
+12736 8 235 4825
+1273e 5 236 4825
+12743 1 238 4825
+FUNC 12744 81 4 _free_osfhnd
+12744 0 263 4825
+12744 38 266 4825
+1277c 9 268 4825
+12785 a 269 4825
+1278f 3 277 4825
+12792 2 278 4825
+12794 3 274 4825
+12797 2 275 4825
+12799 9 271 4825
+127a2 6 282 4825
+127a8 4 283 4825
+127ac b 285 4825
+127b7 7 286 4825
+127be 6 287 4825
+127c4 1 289 4825
+FUNC 127c5 71 4 _get_osfhandle
+127c5 0 312 4825
+127c5 1f 313 4825
+127e4 2 318 4825
+127e6 e 314 4825
+127f4 3d 315 4825
+12831 1 318 4825
+12832 3 317 4825
+12835 1 318 4825
+FUNC 12836 a0 4 __lock_fhandle
+12836 c 437 4825
+12842 17 438 4825
+12859 7 439 4825
+12860 7 444 4825
+12867 8 446 4825
+1286f 3 447 4825
+12872 5 448 4825
+12877 14 449 4825
+1288b 3 453 4825
+1288e 3 455 4825
+12891 c 457 4825
+1289d 5 462 4825
+128a2 1d 464 4825
+128bf 3 467 4825
+128c2 6 468 4825
+128c8 5 457 4825
+128cd 9 458 4825
+FUNC 128d6 22 4 _unlock_fhandle
+128d6 0 489 4825
+128d6 21 490 4825
+128f7 1 491 4825
+FUNC 128f8 19f 0 _alloc_osfhnd
+128f8 c 52 4825
+12904 4 53 4825
+12908 5 56 4825
+1290d c 58 4825
+12919 8 59 4825
+12921 8 61 4825
+12929 3 62 4825
+1292c c 71 4825
+12938 f 77 4825
+12947 17 83 4825
+1295e 6 85 4825
+12964 6 89 4825
+1296a 8 90 4825
+12972 6 91 4825
+12978 6 92 4825
+1297e 14 93 4825
+12992 3 99 4825
+12995 2 101 4825
+12997 3 103 4825
+1299a 9 106 4825
+129a3 6 111 4825
+129a9 a 113 4825
+129b3 6 119 4825
+129b9 7 120 4825
+129c0 5 83 4825
+129c5 6 106 4825
+129cb 9 107 4825
+129d4 6 124 4825
+129da 4 126 4825
+129de 3 127 4825
+129e1 19 128 4825
+129fa 6 137 4825
+12a00 6 71 4825
+12a06 12 145 4825
+12a18 9 151 4825
+12a21 7 152 4825
+12a28 c 154 4825
+12a34 4 155 4825
+12a38 3 156 4825
+12a3b 4 157 4825
+12a3f 4 158 4825
+12a43 8 154 4825
+12a4b 6 165 4825
+12a51 19 166 4825
+12a6a b 167 4825
+12a75 4 171 4825
+12a79 c 178 4825
+12a85 3 186 4825
+12a88 6 187 4825
+12a8e 9 179 4825
+FUNC 12a97 115 8 _open_osfhandle
+12a97 c 343 4825
+12aa3 5 347 4825
+12aa8 2 351 4825
+12aaa 6 353 4825
+12ab0 3 354 4825
+12ab3 8 356 4825
+12abb 3 357 4825
+12abe 6 359 4825
+12ac4 3 360 4825
+12ac7 9 364 4825
+12ad0 4 365 4825
+12ad4 d 367 4825
+12ae1 3 409 4825
+12ae4 6 410 4825
+12aea 5 372 4825
+12aef 5 373 4825
+12af4 5 374 4825
+12af9 3 375 4825
+12afc f 380 4825
+12b0b b 381 4825
+12b16 7 382 4825
+12b1d 2 383 4825
+12b1f 3 385 4825
+12b22 b 391 4825
+12b2d 3 393 4825
+12b30 1a 395 4825
+12b4a 9 396 4825
+12b53 9 397 4825
+12b5c 7 399 4825
+12b63 c 401 4825
+12b6f 10 409 4825
+12b7f 5 401 4825
+12b84 5 402 4825
+12b89 1b 404 4825
+12ba4 8 406 4825
+FUNC 12bac 11e c _calloc_impl
+12bac c 23 5592
+12bb8 9 28 5592
+12bc1 2e 30 5592
+12bef 9 32 5592
+12bf8 4 36 5592
+12bfc 3 37 5592
+12bff 5 41 5592
+12c04 5 43 5592
+12c09 9 46 5592
+12c12 9 50 5592
+12c1b b 52 5592
+12c26 8 56 5592
+12c2e 3 57 5592
+12c31 c 58 5592
+12c3d c 60 5592
+12c49 7 64 5592
+12c50 d 65 5592
+12c5d 4 93 5592
+12c61 11 94 5592
+12c72 c 97 5592
+12c7e f 109 5592
+12c8d b 111 5592
+12c98 6 112 5592
+12c9e 5 113 5592
+12ca3 5 60 5592
+12ca8 9 61 5592
+12cb1 4 100 5592
+12cb5 7 102 5592
+12cbc 6 103 5592
+12cc2 2 105 5592
+12cc4 6 119 5592
+FUNC 12cca 3f 8 calloc
+12cca 4 145 5592
+12cce 5 146 5592
+12cd3 14 147 5592
+12ce7 15 149 5592
+12cfc 8 151 5592
+12d04 3 153 5592
+12d07 2 154 5592
+FUNC 12d09 21b 8 realloc
+12d09 c 64 5338
+12d15 7 69 5338
+12d1c e 70 5338
+12d2a 7 73 5338
+12d31 7 75 5338
+12d38 5 76 5338
+12d3d d 81 5338
+12d4a 5 88 5338
+12d4f 9 89 5338
+12d58 8 91 5338
+12d60 3 92 5338
+12d63 12 96 5338
+12d75 8 100 5338
+12d7d f 102 5338
+12d8c 5 103 5338
+12d91 e 104 5338
+12d9f 4 107 5338
+12da3 10 108 5338
+12db3 9 110 5338
+12dbc a 111 5338
+12dc6 5 118 5338
+12dcb 4 120 5338
+12dcf 6 121 5338
+12dd5 9 123 5338
+12dde 15 124 5338
+12df3 4 127 5338
+12df7 10 128 5338
+12e07 c 129 5338
+12e13 c 135 5338
+12e1f 6 142 5338
+12e25 4 144 5338
+12e29 1 145 5338
+12e2a 9 147 5338
+12e33 14 148 5338
+12e47 6 135 5338
+12e4d 9 137 5338
+12e56 3 148 5338
+12e59 10 158 5338
+12e69 f 181 5338
+12e78 5 186 5338
+12e7d 5 183 5338
+12e82 11 186 5338
+12e93 2 188 5338
+12e95 8 160 5338
+12e9d 5 170 5338
+12ea2 3 167 5338
+12ea5 2 172 5338
+12ea7 6 174 5338
+12ead 2 155 5338
+12eaf 4 321 5338
+12eb3 1 322 5338
+12eb4 12 323 5338
+12ec6 c 332 5338
+12ed2 b 347 5338
+12edd 5 319 5338
+12ee2 7 327 5338
+12ee9 b 328 5338
+12ef4 2 329 5338
+12ef6 6 356 5338
+12efc 5 349 5338
+12f01 5 350 5338
+12f06 4 334 5338
+12f0a 16 341 5338
+12f20 4 343 5338
+FUNC 12f24 79 c _recalloc
+12f24 3 744 5338
+12f27 a 749 5338
+12f31 28 751 5338
+12f59 4 753 5338
+12f5d 9 754 5338
+12f66 b 755 5338
+12f71 b 756 5338
+12f7c a 757 5338
+12f86 10 759 5338
+12f96 5 761 5338
+12f9b 2 762 5338
+FUNC 12f9d 21 0 _get_sbh_threshold
+12f9d 0 61 5281
+12f9d 9 64 5281
+12fa6 2 66 5281
+12fa8 1 81 5281
+12fa9 14 69 5281
+12fbd 1 81 5281
+FUNC 12fbe 46 4 _set_amblksiz
+12fbe 0 214 5281
+12fbe 2b 216 5281
+12fe9 1 224 5281
+12fea 11 217 5281
+12ffb 5 220 5281
+13000 3 223 5281
+13003 1 224 5281
+FUNC 13004 3c 4 _get_amblksiz
+13004 0 243 5281
+13004 27 245 5281
+1302b 1 253 5281
+1302c 8 246 5281
+13034 8 249 5281
+1303c 3 252 5281
+1303f 1 253 5281
+FUNC 13040 48 4 __sbh_heap_init
+13040 0 274 5281
+13040 1c 275 5281
+1305c 1 285 5281
+1305d 4 278 5281
+13061 7 280 5281
+13068 c 281 5281
+13074 13 284 5281
+13087 1 285 5281
+FUNC 13088 2b 4 __sbh_find_block
+13088 0 306 5281
+13088 12 307 5281
+1309a 7 316 5281
+130a1 8 317 5281
+130a9 3 319 5281
+130ac 4 314 5281
+130b0 2 321 5281
+130b2 1 322 5281
+FUNC 130b3 314 8 __sbh_free_block
+130b3 6 381 5281
+130b9 7 399 5281
+130c0 9 402 5281
+130c9 18 407 5281
+130e1 3 408 5281
+130e4 d 412 5281
+130f1 3 416 5281
+130f4 5 417 5281
+130f9 6 420 5281
+130ff b 424 5281
+1310a 4 429 5281
+1310e 5 430 5281
+13113 3 431 5281
+13116 8 434 5281
+1311e 3 439 5281
+13121 b 441 5281
+1312c e 442 5281
+1313a 5 443 5281
+1313f 2 445 5281
+13141 5 448 5281
+13146 11 449 5281
+13157 9 450 5281
+13160 9 455 5281
+13169 15 459 5281
+1317e 6 463 5281
+13184 5 464 5281
+13189 3 465 5281
+1318c f 468 5281
+1319b 3 474 5281
+1319e 6 477 5281
+131a4 b 478 5281
+131af 2 479 5281
+131b1 3 483 5281
+131b4 6 484 5281
+131ba 7 485 5281
+131c1 2 486 5281
+131c3 4 489 5281
+131c7 b 493 5281
+131d2 3 498 5281
+131d5 11 501 5281
+131e6 6 502 5281
+131ec 5 503 5281
+131f1 2 505 5281
+131f3 e 508 5281
+13201 6 509 5281
+13207 6 511 5281
+1320d c 516 5281
+13219 c 517 5281
+13225 8 520 5281
+1322d e 524 5281
+1323b 6 528 5281
+13241 3 529 5281
+13244 6 530 5281
+1324a 3 531 5281
+1324d 6 532 5281
+13253 8 535 5281
+1325b 18 541 5281
+13273 e 542 5281
+13281 f 543 5281
+13290 2 545 5281
+13292 6 547 5281
+13298 10 548 5281
+132a8 13 550 5281
+132bb 5 556 5281
+132c0 4 558 5281
+132c4 b 561 5281
+132cf d 564 5281
+132dc 6 568 5281
+132e2 1a 569 5281
+132fc 15 573 5281
+13311 16 577 5281
+13327 19 578 5281
+13340 9 579 5281
+13349 6 583 5281
+1334f 8 586 5281
+13357 16 589 5281
+1336d 25 595 5281
+13392 14 599 5281
+133a6 4 600 5281
+133aa a 603 5281
+133b4 8 608 5281
+133bc 9 609 5281
+133c5 2 611 5281
+FUNC 133c7 b0 0 __sbh_alloc_new_region
+133c7 0 891 5281
+133c7 13 897 5281
+133da 1e 900 5281
+133f8 4 901 5281
+133fc 12 905 5281
+1340e 9 909 5281
+13417 18 913 5281
+1342f 2 914 5281
+13431 1a 918 5281
+1344b 10 920 5281
+1345b 2 921 5281
+1345d 9 927 5281
+13466 6 930 5281
+1346c 6 933 5281
+13472 4 935 5281
+13476 1 936 5281
+FUNC 13477 106 4 __sbh_alloc_new_group
+13477 5 958 5281
+1347c 3 959 5281
+1347f 9 972 5281
+13488 4 973 5281
+1348c 2 976 5281
+1348e 1 977 5281
+1348f 4 974 5281
+13493 15 981 5281
+134a8 c 986 5281
+134b4 1f 993 5281
+134d3 8 994 5281
+134db 6 998 5281
+134e1 12 1001 5281
+134f3 4 1004 5281
+134f7 7 1005 5281
+134fe 8 1011 5281
+13506 10 1013 5281
+13516 12 1016 5281
+13528 3 1001 5281
+1352b 8 1021 5281
+13533 6 1023 5281
+13539 3 1024 5281
+1353c 6 1027 5281
+13542 3 1028 5281
+13545 5 1030 5281
+1354a a 1031 5281
+13554 9 1032 5281
+1355d b 1033 5281
+13568 e 1036 5281
+13576 5 1038 5281
+1357b 2 1039 5281
+FUNC 1357d 2df c __sbh_resize_block
+1357d 6 1061 5281
+13583 c 1080 5281
+1358f b 1083 5281
+1359a 3 1084 5281
+1359d 12 1085 5281
+135af 7 1089 5281
+135b6 14 1096 5281
+135ca 13 1099 5281
+135dd 7 1105 5281
+135e4 8 1106 5281
+135ec 6 1107 5281
+135f2 8 1110 5281
+135fa 3 1115 5281
+135fd 9 1117 5281
+13606 11 1118 5281
+13617 5 1119 5281
+1361c 2 1121 5281
+1361e 5 1124 5281
+13623 14 1125 5281
+13637 6 1126 5281
+1363d 9 1131 5281
+13646 9 1132 5281
+1364f 12 1135 5281
+13661 a 1141 5281
+1366b 9 1142 5281
+13674 3 1143 5281
+13677 9 1147 5281
+13680 6 1148 5281
+13686 6 1149 5281
+1368c 3 1150 5281
+1368f 6 1151 5281
+13695 8 1154 5281
+1369d 18 1160 5281
+136b5 e 1161 5281
+136c3 6 1162 5281
+136c9 2 1164 5281
+136cb 6 1166 5281
+136d1 10 1167 5281
+136e1 13 1169 5281
+136f4 c 1174 5281
+13700 9 1176 5281
+13709 6 1180 5281
+1370f 9 1182 5281
+13718 7 1100 5281
+1371f 6 1186 5281
+13725 3 1189 5281
+13728 d 1195 5281
+13735 7 1198 5281
+1373c b 1199 5281
+13747 3 1200 5281
+1374a a 1203 5281
+13754 7 1208 5281
+1375b 5 1209 5281
+13760 3 1210 5281
+13763 8 1213 5281
+1376b 3 1218 5281
+1376e b 1221 5281
+13779 e 1222 5281
+13787 5 1223 5281
+1378c 2 1225 5281
+1378e 5 1228 5281
+13793 11 1229 5281
+137a4 9 1231 5281
+137ad 9 1236 5281
+137b6 9 1237 5281
+137bf 9 1240 5281
+137c8 4 1241 5281
+137cc 5 1242 5281
+137d1 3 1243 5281
+137d4 6 1249 5281
+137da 3 1250 5281
+137dd 6 1251 5281
+137e3 3 1252 5281
+137e6 6 1253 5281
+137ec 8 1256 5281
+137f4 18 1262 5281
+1380c e 1263 5281
+1381a 6 1264 5281
+13820 2 1266 5281
+13822 6 1268 5281
+13828 10 1269 5281
+13838 13 1271 5281
+1384b 5 1276 5281
+13850 4 1278 5281
+13854 6 1281 5281
+1385a 2 1282 5281
+FUNC 1385c cd 0 __sbh_heapmin
+1385c 0 1302 5281
+1385c d 1306 5281
+13869 6 1310 5281
+1386f 17 1311 5281
+13886 15 1314 5281
+1389b 16 1318 5281
+138b1 19 1319 5281
+138ca 9 1320 5281
+138d3 f 1325 5281
+138e2 11 1328 5281
+138f3 28 1333 5281
+1391b 6 1334 5281
+13921 7 1338 5281
+13928 1 1340 5281
+FUNC 13929 2e2 0 __sbh_heap_check
+13929 3 1361 5281
+1392c 12 1391 5281
+1393e 8 1393 5281
+13946 16 1398 5281
+1395c 3 1401 5281
+1395f 8 1402 5281
+13967 6 1406 5281
+1396d 9 1407 5281
+13976 c 1408 5281
+13982 3 1409 5281
+13985 3 1410 5281
+13988 6 1411 5281
+1398e 4 1418 5281
+13992 1b 1421 5281
+139ad 9 1424 5281
+139b6 9 1428 5281
+139bf 1c 1438 5281
+139db 2 1445 5281
+139dd 7 1446 5281
+139e4 1 1449 5281
+139e5 c 1452 5281
+139f1 3 1456 5281
+139f4 2 1458 5281
+139f6 6 1462 5281
+139fc 5 1463 5281
+13a01 3 1464 5281
+13a04 9 1465 5281
+13a0d 1e 1470 5281
+13a2b c 1475 5281
+13a37 2 1479 5281
+13a39 4 1481 5281
+13a3d 6 1484 5281
+13a43 10 1488 5281
+13a53 e 1492 5281
+13a61 2 1498 5281
+13a63 4 1502 5281
+13a67 20 1505 5281
+13a87 19 1509 5281
+13aa0 8 1514 5281
+13aa8 3 1518 5281
+13aab 6 1520 5281
+13ab1 8 1524 5281
+13ab9 4 1527 5281
+13abd e 1532 5281
+13acb 8 1536 5281
+13ad3 6 1541 5281
+13ad9 5 1542 5281
+13ade 3 1543 5281
+13ae1 8 1544 5281
+13ae9 c 1549 5281
+13af5 11 1554 5281
+13b06 6 1559 5281
+13b0c 3 1561 5281
+13b0f e 1563 5281
+13b1d 3 1564 5281
+13b20 2 1566 5281
+13b22 8 1568 5281
+13b2a 3 1569 5281
+13b2d 1c 1575 5281
+13b49 c 1580 5281
+13b55 10 1585 5281
+13b65 17 1591 5281
+13b7c 7 1595 5281
+13b83 7 1596 5281
+13b8a 16 1597 5281
+13ba0 f 1602 5281
+13baf 18 1606 5281
+13bc7 5 1608 5281
+13bcc 2 1609 5281
+13bce 4 1403 5281
+13bd2 4 1425 5281
+13bd6 4 1453 5281
+13bda 4 1485 5281
+13bde 4 1471 5281
+13be2 4 1439 5281
+13be6 4 1493 5281
+13bea 4 1537 5281
+13bee 4 1545 5281
+13bf2 4 1550 5281
+13bf6 4 1510 5281
+13bfa 4 1581 5281
+13bfe 4 1576 5281
+13c02 4 1592 5281
+13c06 5 1603 5281
+FUNC 13c0b a8 4 _set_sbh_threshold
+13c0b 1 102 5281
+13c0c a 104 5281
+13c16 3 106 5281
+13c19 1 195 5281
+13c1a a 109 5281
+13c24 25 112 5281
+13c49 5 113 5281
+13c4e 4 114 5281
+13c52 2 195 5281
+13c54 6 173 5281
+13c5a 2 175 5281
+13c5c 5 179 5281
+13c61 2d 185 5281
+13c8e 6 186 5281
+13c94 a 187 5281
+13c9e 5 188 5281
+13ca3 b 193 5281
+13cae 4 194 5281
+13cb2 1 195 5281
+FUNC 13cb3 2e3 4 __sbh_alloc_block
+13cb3 6 632 5281
+13cb9 5 633 5281
+13cbe 15 650 5281
+13cd3 5 668 5281
+13cd8 7 669 5281
+13cdf 5 671 5281
+13ce4 4 672 5281
+13ce8 2 674 5281
+13cea d 677 5281
+13cf7 a 682 5281
+13d01 e 686 5281
+13d0f 3 688 5281
+13d12 2 683 5281
+13d14 5 688 5281
+13d19 4 692 5281
+13d1d 8 694 5281
+13d25 e 698 5281
+13d33 3 700 5281
+13d36 2 695 5281
+13d38 5 700 5281
+13d3d 6 705 5281
+13d43 6 709 5281
+13d49 6 711 5281
+13d4f 4 707 5281
+13d53 4 715 5281
+13d57 8 717 5281
+13d5f 6 720 5281
+13d65 3 722 5281
+13d68 2 718 5281
+13d6a 5 722 5281
+13d6f 4 726 5281
+13d73 e 727 5281
+13d81 7 728 5281
+13d88 12 733 5281
+13d9a 2 734 5281
+13d9c 6 737 5281
+13da2 3 739 5281
+13da5 2 740 5281
+13da7 1c 745 5281
+13dc3 4 749 5281
+13dc7 14 751 5281
+13ddb e 752 5281
+13de9 3 751 5281
+13dec 12 754 5281
+13dfe a 760 5281
+13e08 d 763 5281
+13e15 2 768 5281
+13e17 2 767 5281
+13e19 1 768 5281
+13e1a 4 765 5281
+13e1e 7 770 5281
+13e25 5 775 5281
+13e2a 6 776 5281
+13e30 8 777 5281
+13e38 3 778 5281
+13e3b 8 781 5281
+13e43 8 784 5281
+13e4b 3 788 5281
+13e4e e 791 5281
+13e5c 15 792 5281
+13e71 8 793 5281
+13e79 2 795 5281
+13e7b f 798 5281
+13e8a f 799 5281
+13e99 e 800 5281
+13ea7 1c 809 5281
+13ec3 6 813 5281
+13ec9 3 814 5281
+13ecc 6 815 5281
+13ed2 3 816 5281
+13ed5 6 817 5281
+13edb 8 820 5281
+13ee3 18 826 5281
+13efb b 827 5281
+13f06 10 829 5281
+13f16 2 831 5281
+13f18 6 833 5281
+13f1e d 835 5281
+13f2b 16 837 5281
+13f41 3 831 5281
+13f44 4 844 5281
+13f48 2 846 5281
+13f4a 9 848 5281
+13f53 a 853 5281
+13f5d 4 855 5281
+13f61 e 858 5281
+13f6f 13 862 5281
+13f82 7 863 5281
+13f89 5 866 5281
+13f8e 6 868 5281
+13f94 2 869 5281
+FUNC 13f96 72 4 _fclose_nolock
+13f96 2 86 1752
+13f98 2a 90 1752
+13fc2 6 96 1752
+13fc8 6 105 1752
+13fce 8 106 1752
+13fd6 13 108 1752
+13fe9 5 109 1752
+13fee 7 111 1752
+13ff5 7 120 1752
+13ffc 3 121 1752
+13fff 3 126 1752
+14002 5 127 1752
+14007 1 128 1752
+FUNC 14008 7c 4 fclose
+14008 c 44 1752
+14014 4 45 1752
+14018 2d 47 1752
+14045 6 50 1752
+1404b 3 51 1752
+1404e 3 64 1752
+14051 6 65 1752
+14057 7 55 1752
+1405e 3 56 1752
+14061 a 57 1752
+1406b 11 59 1752
+1407c 8 60 1752
+FUNC 14084 d 8 _ValidateRead(void const *,unsigned int)
+14084 0 63 5683
+14084 3 64 5683
+14087 7 65 5683
+1408e 2 68 5683
+14090 1 71 5683
+FUNC 14091 d 8 _ValidateWrite(void *,unsigned int)
+14091 0 74 5683
+14091 3 75 5683
+14094 7 76 5683
+1409b 2 79 5683
+1409d 1 82 5683
+FUNC 1409e d 4 _ValidateExecute(int (*)(void))
+1409e 0 85 5683
+1409e 3 86 5683
+140a1 7 87 5683
+140a8 2 90 5683
+140aa 1 93 5683
+FUNC 140ab f3 0 abort
+140ab 1b 53 4119
+140c6 a 56 4119
+140d0 8 59 4119
+140d8 5 68 4119
+140dd 4 69 4119
+140e1 8 71 4119
+140e9 d 78 4119
+140f6 6 87 4119
+140fc 6 88 4119
+14102 6 89 4119
+14108 3 90 4119
+1410b 3 91 4119
+1410e 3 92 4119
+14111 7 93 4119
+14118 7 94 4119
+1411f 4 95 4119
+14123 4 96 4119
+14127 4 97 4119
+1412b 4 98 4119
+1412f 1 99 4119
+14130 6 100 4119
+14136 6 106 4119
+1413c 19 107 4119
+14155 3 109 4119
+14158 13 117 4119
+1416b 9 122 4119
+14174 3 123 4119
+14177 15 126 4119
+1418c a 128 4119
+14196 8 137 4119
+FUNC 1419e 1e 8 _set_abort_behavior
+1419e 0 158 4119
+1419e 1d 160 4119
+141bb 1 162 4119
+FUNC 141bc 20 0 _global_unwind2
+FUNC 141dc 45 0 __unwind_handler
+FUNC 14221 84 0 _local_unwind2
+FUNC 142a5 23 0 _abnormal_termination
+FUNC 142c8 9 0 _NLG_Notify1
+FUNC 142d1 1f 0 _NLG_Notify
+PUBLIC 142e8 0 _NLG_Dispatch2
+FUNC 142f0 3 0 _NLG_Call
+PUBLIC 142f2 0 _NLG_Return2
+FUNC 142f3 a3 4 _msize
+142f3 c 43 5383
+142ff 2d 47 5383
+1432c 9 51 5383
+14335 8 55 5383
+1433d 3 56 5383
+14340 e 57 5383
+1434e e 59 5383
+1435c c 61 5383
+14368 5 64 5383
+1436d 10 88 5383
+1437d 2 91 5383
+1437f 6 93 5383
+14385 8 61 5383
+1438d 9 62 5383
+FUNC 14396 6 0 HeapManager::Block::Block()
+14396 6 90 5771
+FUNC 1439c 1b 8 HeapManager::Constructor(void * (*)(unsigned int),void (*)(void *))
+1439c 6 100 5771
+143a2 7 101 5771
+143a9 5 102 5771
+143ae 3 103 5771
+143b1 3 104 5771
+143b4 3 105 5771
+FUNC 143b7 26 0 HeapManager::Destructor()
+143b7 9 110 5771
+143c0 2 111 5771
+143c2 5 113 5771
+143c7 15 115 5771
+143dc 1 118 5771
+FUNC 143dd 63 0 UnDecorator::getNumberOfDimensions()
+143dd 0 1663 5771
+143dd c 1664 5771
+143e9 2 1665 5771
+143eb 1 1696 5771
+143ec a 1666 5771
+143f6 d 1667 5771
+14403 1 1696 5771
+14404 4 1670 5771
+14408 4 1677 5771
+1440c a 1679 5771
+14416 6 1680 5771
+1441c d 1684 5771
+14429 5 1675 5771
+1442e e 1690 5771
+1443c 3 1691 5771
+1443f 1 1696 5771
+FUNC 14440 474 0 UnDecorator::getTypeEncoding()
+14440 f 2335 5771
+1444f 2 2336 5771
+14451 5 2341 5771
+14456 9 2345 5771
+1445f c 2351 5771
+1446b 9 2423 5771
+14474 2 2426 5771
+14476 2a 2427 5771
+144a0 8 2450 5771
+144a8 2 2451 5771
+144aa 24 2454 5771
+144ce 7 2462 5771
+144d5 5 2463 5771
+144da 6 2353 5771
+144e0 8 2358 5771
+144e8 b 2362 5771
+144f3 5 2363 5771
+144f8 2 2364 5771
+144fa 5 2365 5771
+144ff 9 2369 5771
+14508 1b 2373 5771
+14523 11 2377 5771
+14534 a 2393 5771
+1453e 10 2388 5771
+1454e 2 2389 5771
+14550 18 2384 5771
+14568 2 2385 5771
+1456a 12 2380 5771
+1457c 16 2399 5771
+14592 11 2418 5771
+145a3 a 2406 5771
+145ad 5 2407 5771
+145b2 15 2410 5771
+145c7 5 2422 5771
+145cc 1b 2427 5771
+145e7 a 2430 5771
+145f1 5 2431 5771
+145f6 7 2472 5771
+145fd a 2478 5771
+14607 c 2483 5771
+14613 5 2485 5771
+14618 5 2486 5771
+1461d 5 2487 5771
+14622 5 2490 5771
+14627 5 2505 5771
+1462c 5 2508 5771
+14631 5 2509 5771
+14636 5 2434 5771
+1463b 5 2435 5771
+14640 1a 2427 5771
+1465a 30 2568 5771
+1468a 5 2529 5771
+1468f 4 2530 5771
+14693 a 2531 5771
+1469d 2 2532 5771
+1469f a 2533 5771
+146a9 5 2537 5771
+146ae 5 2538 5771
+146b3 2 2539 5771
+146b5 5 2540 5771
+146ba e 2544 5771
+146c8 6 2560 5771
+146ce 10 2555 5771
+146de 2 2556 5771
+146e0 18 2551 5771
+146f8 2 2552 5771
+146fa 12 2547 5771
+1470c 2 2564 5771
+1470e a 2442 5771
+14718 2 2443 5771
+1471a a 2438 5771
+14724 2 2439 5771
+14726 5 2445 5771
+1472b c 2574 5771
+14737 14 2577 5771
+1474b a 2579 5771
+14755 18 2586 5771
+1476d 1a 2589 5771
+14787 1b 2590 5771
+147a2 5 2591 5771
+147a7 1a 2594 5771
+147c1 1b 2595 5771
+147dc 5 2596 5771
+147e1 1a 2599 5771
+147fb 10 2600 5771
+1480b 2 2601 5771
+1480d 7 2604 5771
+14814 2 2605 5771
+14816 a 2608 5771
+14820 2 2609 5771
+14822 a 2612 5771
+1482c 2 2613 5771
+1482e a 2616 5771
+14838 2 2617 5771
+1483a a 2620 5771
+14844 2 2621 5771
+14846 a 2624 5771
+14850 7 2634 5771
+14857 7 2635 5771
+1485e 7 2637 5771
+14865 10 2639 5771
+14875 3f 2648 5771
+FUNC 148b4 b 0 UnDecorator::doUnderScore()
+148b4 b 4259 5771
+FUNC 148bf d 0 UnDecorator::doMSKeywords()
+148bf d 4260 5771
+FUNC 148cc e 0 UnDecorator::doPtr64()
+148cc e 4261 5771
+FUNC 148da e 0 UnDecorator::doFunctionReturns()
+148da e 4262 5771
+FUNC 148e8 e 0 UnDecorator::doAllocationModel()
+148e8 e 4263 5771
+FUNC 148f6 e 0 UnDecorator::doAllocationLanguage()
+148f6 e 4264 5771
+FUNC 14904 12 0 UnDecorator::doThisTypes()
+14904 12 4271 5771
+FUNC 14916 e 0 UnDecorator::doAccessSpecifiers()
+14916 e 4272 5771
+FUNC 14924 e 0 UnDecorator::doThrowTypes()
+14924 e 4273 5771
+FUNC 14932 e 0 UnDecorator::doMemberTypes()
+14932 e 4274 5771
+FUNC 14940 b 0 UnDecorator::doNameOnly()
+14940 b 4279 5771
+FUNC 1494b b 0 UnDecorator::doTypeOnly()
+1494b b 4280 5771
+FUNC 14956 b 0 UnDecorator::haveTemplateParameters()
+14956 b 4281 5771
+FUNC 14961 e 0 UnDecorator::doEcsu()
+14961 e 4282 5771
+FUNC 1496f b 0 UnDecorator::doNoIdentCharCheck()
+1496f b 4283 5771
+FUNC 1497a e 0 UnDecorator::doEllipsis()
+1497a e 4284 5771
+FUNC 14988 19 4 UnDecorator::UScore(Tokens)
+14988 0 4288 5771
+14988 9 4293 5771
+14991 d 4294 5771
+1499e 2 4296 5771
+149a0 1 4298 5771
+FUNC 149a1 84 8 HeapManager::getMemory(unsigned int,int)
+149a1 2 134 5804
+149a3 a 137 5804
+149ad 9 139 5804
+149b6 6 140 5804
+149bc 4 146 5804
+149c0 3 147 5804
+149c3 8 149 5804
+149cb 7 153 5804
+149d2 2 154 5804
+149d4 1c 159 5804
+149f0 4 164 5804
+149f4 7 168 5804
+149fb 2 169 5804
+149fd 2 170 5804
+149ff 3 171 5804
+14a02 8 175 5804
+14a0a 2 182 5804
+14a0c 4 179 5804
+14a10 5 183 5804
+14a15 d 187 5804
+14a22 3 190 5804
+FUNC 14a25 d 0 DName::DName()
+14a25 2 210 5804
+14a27 3 211 5804
+14a2a 7 220 5804
+14a31 1 221 5804
+FUNC 14a32 12 4 DName::DName(DNameNode *)
+14a32 2 224 5804
+14a34 4 225 5804
+14a38 9 234 5804
+14a41 3 235 5804
+FUNC 14a44 9c 4 DName::DName(DName const &)
+14a44 2 259 5804
+14a46 17 260 5804
+14a5d 10 261 5804
+14a6d d 262 5804
+14a7a d 263 5804
+14a87 10 264 5804
+14a97 4 265 5804
+14a9b e 266 5804
+14aa9 13 267 5804
+14abc 10 268 5804
+14acc 11 269 5804
+14add 3 270 5804
+FUNC 14ae0 a 0 DName::status()
+14ae0 a 481 5804
+FUNC 14aea 5 0 DName::clearStatus()
+14aea 5 482 5804
+FUNC 14aef 7 0 DName::setPtrRef()
+14aef 7 484 5804
+FUNC 14af6 a 0 DName::isPtrRef()
+14af6 a 485 5804
+FUNC 14b00 8 0 DName::setIsArray()
+14b00 8 490 5804
+FUNC 14b08 a 0 DName::isArray()
+14b08 a 491 5804
+FUNC 14b12 a 0 DName::isNoTE()
+14b12 a 492 5804
+FUNC 14b1c 8 0 DName::setIsNoTE()
+14b1c 8 493 5804
+FUNC 14b24 a 0 DName::isPinPtr()
+14b24 a 494 5804
+FUNC 14b2e 8 0 DName::setIsPinPtr()
+14b2e 8 495 5804
+FUNC 14b36 a 0 DName::isComArray()
+14b36 a 496 5804
+FUNC 14b40 8 0 DName::setIsComArray()
+14b40 8 497 5804
+FUNC 14b48 a 0 DName::isVCallThunk()
+14b48 a 498 5804
+FUNC 14b52 8 0 DName::setIsVCallThunk()
+14b52 8 499 5804
+FUNC 14b5a 7b 4 DName::operator=(DName const &)
+14b5a 3 879 5804
+14b5d 12 880 5804
+14b6f 17 882 5804
+14b86 d 883 5804
+14b93 d 884 5804
+14ba0 d 885 5804
+14bad 10 886 5804
+14bbd 10 887 5804
+14bcd 5 889 5804
+14bd2 3 897 5804
+FUNC 14bd5 9 0 Replicator::isFull()
+14bd5 9 1001 5804
+FUNC 14bde 25 4 Replicator::operator[](int)
+14bde 0 1028 5804
+14bde 9 1029 5804
+14be7 b 1031 5804
+14bf2 6 1034 5804
+14bf8 5 1032 5804
+14bfd 3 1030 5804
+14c00 3 1036 5804
+FUNC 14c03 d 0 DNameNode::DNameNode()
+14c03 d 1048 5804
+FUNC 14c10 4 0 DNameNode::nextNode()
+14c10 4 1052 5804
+FUNC 14c14 29 4 DNameNode::operator+=(DNameNode *)
+14c14 2 1131 5804
+14c16 8 1132 5804
+14c1e 8 1134 5804
+14c26 b 1139 5804
+14c31 4 1144 5804
+14c35 2 1147 5804
+14c37 3 1148 5804
+14c3a 3 1156 5804
+FUNC 14c3d 16 4 charNode::charNode(char)
+14c3d 16 1166 5804
+FUNC 14c53 4 0 charNode::length()
+14c53 4 1168 5804
+FUNC 14c57 4 0 charNode::getLastChar()
+14c57 4 1170 5804
+FUNC 14c5b 1b 8 charNode::getString(char *,int)
+14c5b 0 1173 5804
+14c5b f 1174 5804
+14c6a 5 1175 5804
+14c6f 2 1176 5804
+14c71 2 1177 5804
+14c73 3 1183 5804
+FUNC 14c76 4 0 pcharNode::length()
+14c76 4 1189 5804
+FUNC 14c7a 2f 4 pDNameNode::pDNameNode(DName *)
+14c7a 2f 1244 5804
+FUNC 14ca9 25 4 DNameStatusNode::DNameStatusNode(DNameStatus)
+14ca9 25 1261 5804
+FUNC 14cce 4 0 DNameStatusNode::length()
+14cce 4 1263 5804
+FUNC 14cd2 d 0 DNameStatusNode::getLastChar()
+14cd2 d 1266 5804
+FUNC 14cdf e 0 und_strlen
+14cdf 0 1283 5804
+14cdf 6 1286 5804
+14ce5 7 1287 5804
+14cec 1 1291 5804
+FUNC 14ced 20 8 und_strncpy
+14ced 0 1295 5804
+14ced 1b 1296 5804
+14d08 4 1299 5804
+14d0c 1 1301 5804
+FUNC 14d0d 25 4 und_strncmp
+14d0d 0 1304 5804
+14d0d 7 1305 5804
+14d14 2 1306 5804
+14d16 1 1315 5804
+14d17 a 1308 5804
+14d21 1 1310 5804
+14d22 1 1311 5804
+14d23 6 1308 5804
+14d29 8 1314 5804
+14d31 1 1315 5804
+FUNC 14d32 33 0 UnDecorator::getDataIndirectType()
+14d32 33 4033 5771
+FUNC 14d65 34 0 UnDecorator::getThisType()
+14d65 34 4034 5771
+FUNC 14d99 13 c operator new(unsigned int,HeapManager &,int)
+14d99 13 131 5804
+FUNC 14dac 56 4 DName::DName(DName *)
+14dac 0 274 5804
+14dac a 275 5804
+14db6 23 277 5804
+14dd9 13 278 5804
+14dec 2 281 5804
+14dee 4 283 5804
+14df2 3 284 5804
+14df5 7 295 5804
+14dfc 6 296 5804
+FUNC 14e02 61 4 DName::DName(DNameStatus)
+14e02 2 457 5804
+14e04 21 458 5804
+14e25 1e 459 5804
+14e43 7 467 5804
+14e4a 9 469 5804
+14e53 a 470 5804
+14e5d 6 472 5804
+FUNC 14e63 17 0 DName::isValid()
+14e63 17 478 5804
+FUNC 14e7a 15 0 DName::isEmpty()
+14e7a 15 479 5804
+FUNC 14e8f 14 0 DName::isUDC()
+14e8f 14 486 5804
+FUNC 14ea3 e 0 DName::setIsUDC()
+14ea3 e 487 5804
+FUNC 14eb1 14 0 DName::isUDTThunk()
+14eb1 14 488 5804
+FUNC 14ec5 25 0 DName::length()
+14ec5 1 502 5804
+14ec6 2 503 5804
+14ec8 a 506 5804
+14ed2 4 507 5804
+14ed6 b 508 5804
+14ee1 5 507 5804
+14ee6 3 510 5804
+14ee9 1 512 5804
+FUNC 14eea 38 0 DName::getLastChar()
+14eea 2 516 5804
+14eec 2 517 5804
+14eee 9 519 5804
+14ef7 6 520 5804
+14efd a 521 5804
+14f07 2 522 5804
+14f09 7 520 5804
+14f10 11 524 5804
+14f21 1 526 5804
+FUNC 14f22 91 8 DName::getString(char *,int)
+14f22 7 530 5804
+14f29 9 531 5804
+14f32 5 535 5804
+14f37 7 537 5804
+14f3e e 538 5804
+14f4c c 544 5804
+14f58 d 550 5804
+14f65 4 553 5804
+14f69 8 555 5804
+14f71 4 561 5804
+14f75 6 565 5804
+14f7b 2 566 5804
+14f7d b 570 5804
+14f88 4 574 5804
+14f8c 2 578 5804
+14f8e 3 579 5804
+14f91 3 586 5804
+14f94 4 553 5804
+14f98 4 590 5804
+14f9c 2 593 5804
+14f9e 6 594 5804
+14fa4 6 595 5804
+14faa 5 599 5804
+14faf 4 601 5804
+FUNC 14fb3 35 4 DName::operator|=(DName const &)
+14fb3 3 832 5804
+14fb6 19 835 5804
+14fcf 13 836 5804
+14fe2 3 840 5804
+14fe5 3 842 5804
+FUNC 14fe8 81 4 DName::operator=(DNameStatus)
+14fe8 2 928 5804
+14fea 10 929 5804
+14ffa 12 937 5804
+1500c 26 945 5804
+15032 6 947 5804
+15038 e 948 5804
+15046 10 933 5804
+15056 d 934 5804
+15063 3 954 5804
+15066 3 956 5804
+FUNC 15069 1e 0 Replicator::Replicator()
+15069 1e 1004 5804
+FUNC 15087 47 4 Replicator::operator+=(DName const &)
+15087 3 1009 5804
+1508a 12 1010 5804
+1509c 20 1012 5804
+150bc 4 1017 5804
+150c0 8 1018 5804
+150c8 3 1022 5804
+150cb 3 1024 5804
+FUNC 150ce 47 0 DNameNode::clone()
+150ce 3 1055 5804
+150d1 43 1056 5804
+15114 1 1057 5804
+FUNC 15115 65 8 pcharNode::pcharNode(char const *,int)
+15115 1 1197 5804
+15116 1f 1200 5804
+15135 c 1201 5804
+15141 8 1205 5804
+15149 c 1207 5804
+15155 a 1210 5804
+1515f b 1211 5804
+1516a 2 1214 5804
+1516c 3 1216 5804
+1516f 4 1217 5804
+15173 7 1220 5804
+FUNC 1517a 12 0 pcharNode::getLastChar()
+1517a 12 1191 5804
+FUNC 1518c 31 8 pcharNode::getString(char *,int)
+1518c 0 1224 5804
+1518c b 1227 5804
+15197 2 1228 5804
+15199 21 1232 5804
+151ba 3 1234 5804
+FUNC 151bd f 0 pDNameNode::length()
+151bd f 1246 5804
+FUNC 151cc f 0 pDNameNode::getLastChar()
+151cc f 1248 5804
+FUNC 151db 1d 8 pDNameNode::getString(char *,int)
+151db 1d 1251 5804
+FUNC 151f8 33 8 DNameStatusNode::getString(char *,int)
+151f8 0 1269 5804
+151f8 b 1272 5804
+15203 2 1273 5804
+15205 23 1277 5804
+15228 3 1279 5804
+FUNC 1522b 73 14 UnDecorator::UnDecorator(char *,char const *,int,char * (*)(long),unsigned long)
+1522b 16 736 5771
+15241 8 737 5771
+15249 5 738 5771
+1524e 9 740 5771
+15257 a 741 5771
+15261 5 745 5771
+15266 2 747 5771
+15268 6 748 5771
+1526e 6 749 5771
+15274 8 754 5771
+1527c 15 755 5771
+15291 d 758 5771
+FUNC 1529e 2f 4 UnDecorator::getReturnType(DName *)
+1529e 3 2906 5771
+152a1 8 2907 5771
+152a9 15 2911 5771
+152be d 2915 5771
+152cb 2 2917 5771
+FUNC 152cd f 0 UnDecorator::getStorageConvention()
+152cd f 4032 5771
+FUNC 152dc 79 4 DName::operator+=(DNameStatus)
+152dc 4 799 5804
+152e0 17 800 5804
+152f7 20 804 5804
+15317 4 807 5804
+1531b 7 809 5804
+15322 6 811 5804
+15328 8 812 5804
+15330 2 815 5804
+15332 3 816 5804
+15335 5 818 5804
+1533a e 819 5804
+15348 7 801 5804
+1534f 3 825 5804
+15352 3 827 5804
+FUNC 15355 68 4 DName::operator=(DName *)
+15355 3 901 5804
+15358 12 902 5804
+1536a 7 903 5804
+15371 29 911 5804
+1539a 6 913 5804
+153a0 c 914 5804
+153ac 2 917 5804
+153ae 9 918 5804
+153b7 3 922 5804
+153ba 3 924 5804
+FUNC 153bd a6 8 DName::doPchar(char const *,int)
+153bd 3 962 5804
+153c0 1e 963 5804
+153de 6 964 5804
+153e4 c 965 5804
+153f0 10 966 5804
+15400 5 970 5804
+15405 23 984 5804
+15428 6 986 5804
+1542e 9 987 5804
+15437 2 988 5804
+15439 1b 977 5804
+15454 c 993 5804
+15460 3 995 5804
+FUNC 15463 26 4 DName::DName(char)
+15463 3 238 5804
+15466 3 244 5804
+15469 7 248 5804
+15470 7 252 5804
+15477 c 253 5804
+15483 6 255 5804
+FUNC 15489 31 4 DName::DName(char const *)
+15489 0 300 5804
+15489 16 312 5804
+1549f 15 313 5804
+154b4 6 315 5804
+FUNC 154ba d0 8 DName::DName(char const * &,char)
+154ba 7 319 5804
+154c1 d 329 5804
+154ce f 333 5804
+154dd 8 334 5804
+154e5 9 342 5804
+154ee 40 343 5804
+1552e b 344 5804
+15539 9 355 5804
+15542 8 359 5804
+1554a 8 361 5804
+15552 9 363 5804
+1555b 3 364 5804
+1555e 2 367 5804
+15560 3 347 5804
+15563 a 378 5804
+1556d 8 380 5804
+15575 6 368 5804
+1557b 7 371 5804
+15582 6 372 5804
+15588 2 375 5804
+FUNC 1558a 69 8 DName::DName(unsigned __int64)
+1558a 15 384 5804
+1559f 3 390 5804
+155a2 a 398 5804
+155ac 4 402 5804
+155b0 13 406 5804
+155c3 3 407 5804
+155c6 c 409 5804
+155d2 e 411 5804
+155e0 13 413 5804
+FUNC 155f3 96 8 DName::DName(__int64)
+155f3 10 416 5804
+15603 26 436 5804
+15629 15 438 5804
+1563e 10 443 5804
+1564e 5 444 5804
+15653 c 446 5804
+1565f 6 448 5804
+15665 4 449 5804
+15669 e 452 5804
+15677 12 453 5804
+FUNC 15689 2e 4 DName::operator+(DNameStatus)
+15689 1 675 5804
+1568a c 676 5804
+15696 9 679 5804
+1569f b 680 5804
+156aa 2 681 5804
+156ac 5 682 5804
+156b1 3 686 5804
+156b4 3 688 5804
+FUNC 156b7 62 4 DName::operator+=(DName const &)
+156b7 2 739 5804
+156b9 f 740 5804
+156c8 13 741 5804
+156db 2 742 5804
+156dd 9 743 5804
+156e6 6 744 5804
+156ec 2 745 5804
+156ee 7 747 5804
+156f5 6 749 5804
+156fb 9 750 5804
+15704 2 751 5804
+15706 d 752 5804
+15713 3 758 5804
+15716 3 760 5804
+FUNC 15719 8b 4 DName::operator+=(DName *)
+15719 2 764 5804
+1571b a 765 5804
+15725 9 766 5804
+1572e 8 767 5804
+15736 10 768 5804
+15746 8 789 5804
+1574e 20 770 5804
+1576e 4 773 5804
+15772 7 775 5804
+15779 6 777 5804
+1577f 8 778 5804
+15787 2 781 5804
+15789 3 782 5804
+1578c 5 784 5804
+15791 d 785 5804
+1579e 3 793 5804
+157a1 3 795 5804
+FUNC 157a4 1c 4 DName::operator=(char)
+157a4 1 847 5804
+157a5 15 854 5804
+157ba 3 856 5804
+157bd 3 858 5804
+FUNC 157c0 2a 4 DName::operator=(char const *)
+157c0 0 862 5804
+157c0 24 869 5804
+157e4 3 873 5804
+157e7 3 875 5804
+FUNC 157ea a6 0 UnDecorator::getCallingConvention()
+157ea 5 2825 5771
+157ef f 2826 5771
+157fe c 2828 5771
+1580a 5 2835 5771
+1580f 1a 2845 5771
+15829 20 2852 5771
+15849 2 2875 5771
+1584b 2 2876 5771
+1584d 2 2871 5771
+1584f 2 2872 5771
+15851 2 2867 5771
+15853 2 2868 5771
+15855 2 2863 5771
+15857 2 2864 5771
+15859 1 2859 5771
+1585a 2 2860 5771
+1585c 13 2855 5771
+1586f e 2891 5771
+1587d 4 2895 5771
+15881 d 2899 5771
+1588e 2 2901 5771
+FUNC 15890 37 0 UnDecorator::getVCallThunkType()
+15890 3 4057 5771
+15893 9 4059 5771
+1589c 5 4066 5771
+158a1 4 4059 5771
+158a5 4 4066 5771
+158a9 6 4061 5771
+158af c 4062 5771
+158bb a 4064 5771
+158c5 2 4170 5771
+FUNC 158c7 51 4 DName::operator+(DName const &)
+158c7 1 639 5804
+158c8 c 640 5804
+158d4 b 643 5804
+158df b 644 5804
+158ea d 645 5804
+158f7 11 646 5804
+15908 2 647 5804
+1590a 8 648 5804
+15912 3 652 5804
+15915 3 654 5804
+FUNC 15918 2e 4 DName::operator+(DName *)
+15918 1 658 5804
+15919 c 659 5804
+15925 9 662 5804
+1592e b 663 5804
+15939 2 664 5804
+1593b 5 665 5804
+15940 3 669 5804
+15943 3 671 5804
+FUNC 15946 6a 4 DName::operator+=(char)
+15946 1 693 5804
+15947 b 694 5804
+15952 9 695 5804
+1595b 6 696 5804
+15961 2 697 5804
+15963 7 699 5804
+1596a 6 701 5804
+15970 2b 702 5804
+1599b 2 703 5804
+1599d c 704 5804
+159a9 4 710 5804
+159ad 3 712 5804
+FUNC 159b0 6c 4 DName::operator+=(char const *)
+159b0 2 716 5804
+159b2 f 717 5804
+159c1 9 718 5804
+159ca 6 719 5804
+159d0 2 720 5804
+159d2 7 722 5804
+159d9 6 724 5804
+159df 28 725 5804
+15a07 2 726 5804
+15a09 d 727 5804
+15a16 3 733 5804
+15a19 3 735 5804
+FUNC 15a1c e0 0 UnDecorator::getArgumentList()
+15a1c 7 3076 5771
+15a23 12 3078 5771
+15a35 29 3081 5771
+15a5e 6 3085 5771
+15a64 4 3086 5771
+15a68 2 3087 5771
+15a6a e 3088 5771
+15a78 6 3093 5771
+15a7e 6 3095 5771
+15a84 5 3100 5771
+15a89 1 3102 5771
+15a8a 11 3106 5771
+15a9b 2 3109 5771
+15a9d 16 3116 5771
+15ab3 19 3121 5771
+15acc 9 3122 5771
+15ad5 17 3126 5771
+15aec b 3132 5771
+15af7 3 3141 5771
+15afa 2 3143 5771
+FUNC 15afc 4f 4 UnDecorator::getVdispMapType(DName const &)
+15afc 6 4230 5771
+15b02 d 4231 5771
+15b0f c 4232 5771
+15b1b 12 4233 5771
+15b2d 9 4234 5771
+15b36 a 4236 5771
+15b40 6 4237 5771
+15b46 3 4238 5771
+15b49 2 4239 5771
+FUNC 15b4b 22 8 operator+(char,DName const &)
+15b4b 22 198 5804
+FUNC 15b6d 22 8 operator+(DNameStatus,DName const &)
+15b6d 22 201 5804
+FUNC 15b8f 22 8 operator+(char const *,DName const &)
+15b8f 22 204 5804
+FUNC 15bb1 2e 4 DName::operator+(char)
+15bb1 1 605 5804
+15bb2 c 606 5804
+15bbe 9 609 5804
+15bc7 b 610 5804
+15bd2 2 611 5804
+15bd4 5 612 5804
+15bd9 3 616 5804
+15bdc 3 618 5804
+FUNC 15bdf 2e 4 DName::operator+(char const *)
+15bdf 1 622 5804
+15be0 c 623 5804
+15bec 9 626 5804
+15bf5 b 627 5804
+15c00 2 628 5804
+15c02 5 629 5804
+15c07 3 633 5804
+15c0a 3 635 5804
+FUNC 15c0d 141 4 UnDecorator::getDimension(bool)
+15c0d 7 1616 5771
+15c14 10 1618 5771
+15c24 e 1620 5771
+15c32 6 1623 5771
+15c38 f 1624 5771
+15c47 8 1625 5771
+15c4f 47 1626 5771
+15c96 4 1629 5771
+15c9a 4 1636 5771
+15c9e 8 1638 5771
+15ca6 20 1639 5771
+15cc6 d 1643 5771
+15cd3 4 1634 5771
+15cd7 b 1649 5771
+15ce2 2 1650 5771
+15ce4 5 1652 5771
+15ce9 13 1653 5771
+15cfc c 1637 5771
+15d08 4 1641 5771
+15d0c a 1653 5771
+15d16 36 1655 5771
+15d4c 2 1659 5771
+FUNC 15d4e d4 0 UnDecorator::getEnumType()
+15d4e 6 2762 5771
+15d54 1a 2766 5771
+15d6e 12 2770 5771
+15d80 5 2774 5771
+15d85 2 2775 5771
+15d87 5 2779 5771
+15d8c 2 2780 5771
+15d8e 5 2786 5771
+15d93 2 2787 5771
+15d95 d 2791 5771
+15da2 1f 2801 5771
+15dc1 1e 2807 5771
+15ddf e 2814 5771
+15ded 4 2795 5771
+15df1 d 2818 5771
+15dfe 24 2820 5771
+FUNC 15e22 c4 0 UnDecorator::getArgumentTypes()
+15e22 3 3035 5771
+15e25 18 3036 5771
+15e3d 9 3046 5771
+15e46 7 3051 5771
+15e4d 13 3052 5771
+15e60 c 3064 5771
+15e6c 36 3058 5771
+15ea2 b 3061 5771
+15ead 21 3039 5771
+15ece 16 3042 5771
+15ee4 2 3072 5771
+FUNC 15ee6 7e 0 UnDecorator::getThrowTypes()
+15ee6 3 3148 5771
+15ee9 e 3149 5771
+15ef7 2 3150 5771
+15ef9 21 3151 5771
+15f1a 1f 3153 5771
+15f39 29 3155 5771
+15f62 2 3157 5771
+FUNC 15f64 125 c UnDecorator::getExtendedDataIndirectType(char &,bool &,int)
+15f64 6 3636 5771
+15f6a 1a 3641 5771
+15f84 1c 3643 5771
+15fa0 a 3669 5771
+15faa 6 3670 5771
+15fb0 b 3672 5771
+15fbb a 3674 5771
+15fc5 21 3675 5771
+15fe6 17 3678 5771
+15ffd a 3680 5771
+16007 6 3689 5771
+1600d 2 3691 5771
+1600f 17 3693 5771
+16026 1e 3700 5771
+16044 6 3663 5771
+1604a 2 3665 5771
+1604c 3 3656 5771
+1604f d 3657 5771
+1605c 2 3659 5771
+1605e 6 3647 5771
+16064 13 3649 5771
+16077 10 3703 5771
+16087 2 3704 5771
+FUNC 16089 15f 4 UnDecorator::getArrayType(DName const &)
+16089 3 3986 5771
+1608c 12 3987 5771
+1609e 7 3989 5771
+160a5 4 3991 5771
+160a9 2 3992 5771
+160ab 4 3994 5771
+160af 9 3995 5771
+160b8 2a 4026 5771
+160e2 2 4028 5771
+160e4 c 3998 5771
+160f0 9 4000 5771
+160f9 d 4001 5771
+16106 35 4005 5771
+1613b b 4009 5771
+16146 4 4010 5771
+1614a 8 4011 5771
+16152 2 4012 5771
+16154 2c 4013 5771
+16180 d 4017 5771
+1618d 9 4018 5771
+16196 12 4019 5771
+161a8 a 4023 5771
+161b2 36 4024 5771
+FUNC 161e8 31 0 UnDecorator::getLexicalFrame()
+161e8 31 4031 5771
+FUNC 16219 12 0 UnDecorator::getDisplacement()
+16219 12 4048 5771
+FUNC 1622b 12 0 UnDecorator::getCallIndex()
+1622b 12 4049 5771
+FUNC 1623d 12 0 UnDecorator::getGuardNumber()
+1623d 12 4050 5771
+FUNC 1624f 150 4 UnDecorator::getVfTableType(DName const &)
+1624f 7 4174 5771
+16256 d 4175 5771
+16263 1d 4178 5771
+16280 2c 4180 5771
+162ac f 4182 5771
+162bb e 4184 5771
+162c9 5 4186 5771
+162ce 11 4188 5771
+162df 2d 4190 5771
+1630c b 4194 5771
+16317 7 4195 5771
+1631e 10 4199 5771
+1632e a 4200 5771
+16338 b 4188 5771
+16343 b 4204 5771
+1634e a 4206 5771
+16358 7 4207 5771
+1635f 9 4209 5771
+16368 a 4216 5771
+16372 6 4217 5771
+16378 2 4220 5771
+1637a 9 4221 5771
+16383 17 4222 5771
+1639a 3 4224 5771
+1639d 2 4226 5771
+FUNC 1639f a0 8 UnDecorator::getStringEncoding(char *,int)
+1639f 6 1447 5771
+163a5 b 1448 5771
+163b0 22 1451 5771
+163d2 6 1456 5771
+163d8 b 1459 5771
+163e3 b 1462 5771
+163ee 13 1464 5771
+16401 c 1466 5771
+1640d 5 1469 5771
+16412 6 1470 5771
+16418 4 1471 5771
+1641c 14 1477 5771
+16430 d 1452 5771
+1643d 2 1478 5771
+FUNC 1643f 50 0 UnDecorator::getSignedDimension()
+1643f 5 1603 5771
+16444 b 1604 5771
+1644f c 1605 5771
+1645b 2 1606 5771
+1645d 23 1608 5771
+16480 d 1611 5771
+1648d 2 1612 5771
+FUNC 1648f 2bb 0 UnDecorator::getTemplateConstant()
+1648f 15 1877 5771
+164a4 f 1884 5771
+164b3 32 1885 5771
+164e5 9 1921 5771
+164ee b 1922 5771
+164f9 20 1924 5771
+16519 12 1931 5771
+1652b e 1932 5771
+16539 3 1937 5771
+1653c 7 1939 5771
+16543 6 1941 5771
+16549 4 1942 5771
+1654d 2 1944 5771
+1654f 4 1945 5771
+16553 2a 1950 5771
+1657d a 1900 5771
+16587 6 1902 5771
+1658d 11 1903 5771
+1659e 1b 1906 5771
+165b9 b 1892 5771
+165c4 6 2034 5771
+165ca 7 1954 5771
+165d1 26 1885 5771
+165f7 b 1990 5771
+16602 c 1991 5771
+1660e 10 1992 5771
+1661e 9 1966 5771
+16627 c 1968 5771
+16633 e 1971 5771
+16641 10 1973 5771
+16651 6 1975 5771
+16657 6 1976 5771
+1665d 3 1980 5771
+16660 29 1981 5771
+16689 a 1983 5771
+16693 a 2001 5771
+1669d a 2003 5771
+166a7 13 2007 5771
+166ba a 2008 5771
+166c4 11 2012 5771
+166d5 13 2015 5771
+166e8 a 2016 5771
+166f2 13 2021 5771
+16705 a 2022 5771
+1670f 13 2026 5771
+16722 d 2029 5771
+1672f 7 1913 5771
+16736 14 2041 5771
+FUNC 1674a d9 8 UnDecorator::getPtrRefDataType(DName const &,int)
+1674a 3 3937 5771
+1674d 11 3940 5771
+1675e b 3944 5771
+16769 12 3948 5771
+1677b 12 3949 5771
+1678d 10 3951 5771
+1679d 5 3957 5771
+167a2 16 3961 5771
+167b8 d 3967 5771
+167c5 c 3968 5771
+167d1 b 3970 5771
+167dc 6 3972 5771
+167e2 1e 3974 5771
+16800 e 3976 5771
+1680e 13 3980 5771
+16821 2 3982 5771
+FUNC 16823 14 4 UnDecorator::getVbTableType(DName const &)
+16823 14 4053 5771
+FUNC 16837 1b8 0 UnDecorator::getTemplateArgumentList()
+16837 14 1775 5771
+1684b c 1777 5771
+16857 7 1778 5771
+1685e 2a 1781 5771
+16888 6 1785 5771
+1688e 4 1786 5771
+16892 2 1787 5771
+16894 e 1788 5771
+168a2 8 1793 5771
+168aa 5 1798 5771
+168af 1 1800 5771
+168b0 11 1804 5771
+168c1 5 1807 5771
+168c6 7 1810 5771
+168cd 7 1816 5771
+168d4 6 1817 5771
+168da 12 1818 5771
+168ec a 1820 5771
+168f6 5 1821 5771
+168fb e 1822 5771
+16909 5 1824 5771
+1690e 9 1830 5771
+16917 c 1832 5771
+16923 e 1835 5771
+16931 10 1837 5771
+16941 6 1839 5771
+16947 1 1840 5771
+16948 2 1842 5771
+1694a 25 1843 5771
+1696f 2 1846 5771
+16971 10 1847 5771
+16981 2 1850 5771
+16983 1f 1851 5771
+169a2 17 1857 5771
+169b9 9 1858 5771
+169c2 16 1862 5771
+169d8 17 1873 5771
+FUNC 169ef 56f 8 UnDecorator::getOperatorName(bool,bool *)
+169ef b 1095 5771
+169fa 53 1103 5771
+16a4d 13 1183 5771
+16a60 c 1439 5771
+16a6c 1d 1440 5771
+16a89 11 1442 5771
+16a9a 5 1444 5771
+16a9f 3 1124 5771
+16aa2 8 1126 5771
+16aaa 21 1127 5771
+16acb c 1129 5771
+16ad7 a 1130 5771
+16ae1 a 1133 5771
+16aeb 7 1135 5771
+16af2 3 1136 5771
+16af5 9 1144 5771
+16afe 5 1145 5771
+16b03 6 1148 5771
+16b09 2 1154 5771
+16b0b 15 1156 5771
+16b20 18 1160 5771
+16b38 1a 1161 5771
+16b52 10 1166 5771
+16b62 b 1167 5771
+16b6d 5 1170 5771
+16b72 6 1106 5771
+16b78 f 1108 5771
+16b87 21 1103 5771
+16ba8 3d 1220 5771
+16be5 18 1240 5771
+16bfd b 1234 5771
+16c08 5 1235 5771
+16c0d 13 1245 5771
+16c20 7 1247 5771
+16c27 8 1249 5771
+16c2f 18 1220 5771
+16c47 13 1255 5771
+16c5a 7 1256 5771
+16c61 2 1257 5771
+16c63 16 1335 5771
+16c79 7 1356 5771
+16c80 6 1350 5771
+16c86 2 1352 5771
+16c88 25 1220 5771
+16cad 13 1290 5771
+16cc0 17 1291 5771
+16cd7 24 1292 5771
+16cfb 14 1313 5771
+16d0f 6 1316 5771
+16d15 5 1317 5771
+16d1a 10 1302 5771
+16d2a 20 1303 5771
+16d4a 20 1304 5771
+16d6a 20 1305 5771
+16d8a 22 1306 5771
+16dac 12 1307 5771
+16dbe c 1296 5771
+16dca 2b 1297 5771
+16df5 13 1281 5771
+16e08 17 1282 5771
+16e1f 1a 1283 5771
+16e39 5 1284 5771
+16e3e 2d 1220 5771
+16e6b 25 1364 5771
+16e90 10 1373 5771
+16ea0 13 1378 5771
+16eb3 a 1397 5771
+16ebd 13 1399 5771
+16ed0 a 1403 5771
+16eda 6 1405 5771
+16ee0 2 1408 5771
+16ee2 13 1410 5771
+16ef5 d 1413 5771
+16f02 5 1415 5771
+16f07 10 1278 5771
+16f17 b 1330 5771
+16f22 5 1428 5771
+16f27 3 1187 5771
+16f2a 13 1216 5771
+16f3d 8 1437 5771
+16f45 19 1438 5771
+FUNC 16f5e 153 4 UnDecorator::getTemplateName(bool)
+16f5e 5 1700 5771
+16f63 1f 1704 5771
+16f82 16 1714 5771
+16f98 1d 1716 5771
+16fb5 23 1725 5771
+16fd8 e 1729 5771
+16fe6 6 1730 5771
+16fec 12 1732 5771
+16ffe 2 1734 5771
+17000 16 1735 5771
+17016 c 1738 5771
+17022 7 1739 5771
+17029 6 1746 5771
+1702f 21 1747 5771
+17050 c 1749 5771
+1705c a 1750 5771
+17066 a 1753 5771
+17070 6 1755 5771
+17076 6 1756 5771
+1707c 23 1769 5771
+1709f d 1705 5771
+170ac 5 1771 5771
+FUNC 170b1 1ea 4 UnDecorator::getZName(bool)
+170b1 10 1007 5771
+170c1 11 1008 5771
+170d2 3 1013 5771
+170d5 26 1043 5771
+170fb b 1024 5771
+17106 5 1026 5771
+1710b 16 1028 5771
+17121 16 1030 5771
+17137 17 1031 5771
+1714e 7 1033 5771
+17155 25 1040 5771
+1717a 5 1042 5771
+1717f 29 1043 5771
+171a8 8 1045 5771
+171b0 b 1051 5771
+171bb c 1053 5771
+171c7 e 1056 5771
+171d5 10 1058 5771
+171e5 4 1060 5771
+171e9 b 1061 5771
+171f4 2 1063 5771
+171f6 a 1064 5771
+17200 10 1065 5771
+17210 2 1068 5771
+17212 d 1069 5771
+1721f 2a 1070 5771
+17249 2 1073 5771
+1724b 1a 1076 5771
+17265 11 1083 5771
+17276 9 1084 5771
+1727f f 1087 5771
+1728e d 1090 5771
+FUNC 1729b e4 0 UnDecorator::getScopedName()
+1729b 7 2727 5771
+172a2 e 2728 5771
+172b0 15 2733 5771
+172c5 1a 2737 5771
+172df 2a 2738 5771
+17309 b 2742 5771
+17314 8 2743 5771
+1731c 4 2744 5771
+17320 1b 2745 5771
+1733b b 2746 5771
+17346 7 2747 5771
+1734d 2 2748 5771
+1734f 2b 2749 5771
+1737a 3 2753 5771
+1737d 2 2755 5771
+FUNC 1737f f 0 UnDecorator::getECSUName()
+1737f f 2758 5771
+FUNC 1738e 100 0 UnDecorator::getECSUDataType()
+1738e 3 3392 5771
+17391 20 3395 5771
+173b1 37 3399 5771
+173e8 5 3424 5771
+173ed 2 3425 5771
+173ef 5 3420 5771
+173f4 2 3421 5771
+173f6 26 3431 5771
+1741c 2 3432 5771
+1741e 5 3415 5771
+17423 2 3416 5771
+17425 5 3411 5771
+1742a 2 3412 5771
+1742c d 3407 5771
+17439 7 3439 5771
+17440 4 3441 5771
+17444 c 3442 5771
+17450 16 3446 5771
+17466 e 3450 5771
+17474 18 3404 5771
+1748c 2 3452 5771
+FUNC 1748e 46 0 UnDecorator::getSymbolName()
+1748e 3 989 5771
+17491 a 990 5771
+1749b 6 991 5771
+174a1 c 992 5771
+174ad 16 997 5771
+174c3 f 1001 5771
+174d2 2 1003 5771
+FUNC 174d4 92 0 UnDecorator::getBasedType()
+174d4 6 2653 5771
+174da 13 2654 5771
+174ed a 2659 5771
+174f7 17 2661 5771
+1750e c 2707 5771
+1751a 13 2699 5771
+1752d 2 2700 5771
+1752f d 2674 5771
+1753c 2 2711 5771
+1753e a 2712 5771
+17548 d 2716 5771
+17555 f 2720 5771
+17564 2 2722 5771
+FUNC 17566 b42 4 UnDecorator::composeDeclaration(DName const &)
+17566 6 2045 5771
+1756c e 2046 5771
+1757a 5 2047 5771
+1757f a 2048 5771
+17589 b 2053 5771
+17594 f 2054 5771
+175a3 8 2055 5771
+175ab 15 2056 5771
+175c0 8 2057 5771
+175c8 10 2058 5771
+175d8 83 2075 5771
+1765b 7 2081 5771
+17662 19 2082 5771
+1767b 21 2083 5771
+1769c 2 2084 5771
+1769e 15 2085 5771
+176b3 27 2090 5771
+176da 33 2092 5771
+1770d 9 2094 5771
+17716 9 2096 5771
+1771f 2b 2098 5771
+1774a d 2101 5771
+17757 9 2103 5771
+17760 2d 2105 5771
+1778d 2e 2107 5771
+177bb 5 2111 5771
+177c0 3 2114 5771
+177c3 3 2115 5771
+177c6 3 2116 5771
+177c9 3 2117 5771
+177cc 3 2118 5771
+177cf 26 2121 5771
+177f5 12 2123 5771
+17807 19 2125 5771
+17820 19 2126 5771
+17839 2 2127 5771
+1783b 12 2129 5771
+1784d 19 2131 5771
+17866 1b 2134 5771
+17881 13 2141 5771
+17894 a 2142 5771
+1789e 15 2143 5771
+178b3 2 2144 5771
+178b5 f 2145 5771
+178c4 10 2147 5771
+178d4 9 2151 5771
+178dd 22 2152 5771
+178ff 2 2153 5771
+17901 13 2168 5771
+17914 c 2172 5771
+17920 14 2173 5771
+17934 1a 2174 5771
+1794e 2 2175 5771
+17950 b 2176 5771
+1795b 5 2182 5771
+17960 6 2185 5771
+17966 27 2187 5771
+1798d b 2189 5771
+17998 5 2190 5771
+1799d 1b 2194 5771
+179b8 15 2195 5771
+179cd 1d 2202 5771
+179ea 16 2204 5771
+17a00 55 2205 5771
+17a55 12 2206 5771
+17a67 2b 2207 5771
+17a92 2 2208 5771
+17a94 d 2209 5771
+17aa1 1a 2211 5771
+17abb 2e 2218 5771
+17ae9 12 2222 5771
+17afb c 2223 5771
+17b07 c 2227 5771
+17b13 15 2228 5771
+17b28 2 2229 5771
+17b2a f 2230 5771
+17b39 1a 2235 5771
+17b53 b 2237 5771
+17b5e 3 2238 5771
+17b61 5 2243 5771
+17b66 b 2245 5771
+17b71 1c 2250 5771
+17b8d 13 2251 5771
+17ba0 e 2252 5771
+17bae 2 2253 5771
+17bb0 10 2254 5771
+17bc0 3d 2255 5771
+17bfd c 2256 5771
+17c09 e 2257 5771
+17c17 4c 2258 5771
+17c63 a 2259 5771
+17c6d 4b 2260 5771
+17cb8 7 2261 5771
+17cbf 4b 2262 5771
+17d0a f 2263 5771
+17d19 f 2264 5771
+17d28 6 2268 5771
+17d2e 61 2277 5771
+17d8f 15 2281 5771
+17da4 2 2283 5771
+17da6 18 2285 5771
+17dbe 2d 2292 5771
+17deb 12 2294 5771
+17dfd 37 2296 5771
+17e34 23 2297 5771
+17e57 b7 2299 5771
+17f0e 23 2300 5771
+17f31 12 2306 5771
+17f43 37 2307 5771
+17f7a b 2308 5771
+17f85 37 2309 5771
+17fbc b 2310 5771
+17fc7 30 2311 5771
+17ff7 23 2312 5771
+1801a 36 2319 5771
+18050 1e 2320 5771
+1806e 8 2325 5771
+18076 1e 2326 5771
+18094 12 2329 5771
+180a6 2 2331 5771
+FUNC 180a8 211 0 UnDecorator::getDecoratedName()
+180a8 7 861 5771
+180af e 864 5771
+180bd a 868 5771
+180c7 b 873 5771
+180d2 8 874 5771
+180da 11 876 5771
+180eb 10 878 5771
+180fb 6 882 5771
+18101 9 903 5771
+1810a 9 906 5771
+18113 8 910 5771
+1811b 6 912 5771
+18121 5 910 5771
+18126 2 915 5771
+18128 a 918 5771
+18132 19 919 5771
+1814b 6 920 5771
+18151 f 924 5771
+18160 8 925 5771
+18168 17 929 5771
+1817f a 930 5771
+18189 c 932 5771
+18195 8 933 5771
+1819d 5 934 5771
+181a2 18 935 5771
+181ba a 936 5771
+181c4 13 937 5771
+181d7 b 938 5771
+181e2 2 940 5771
+181e4 29 941 5771
+1820d 4 945 5771
+18211 10 946 5771
+18221 9 948 5771
+1822a 3 950 5771
+1822d 1c 955 5771
+18249 f 959 5771
+18258 4 976 5771
+1825c 6 962 5771
+18262 14 964 5771
+18276 19 967 5771
+1828f 5 968 5771
+18294 10 971 5771
+182a4 2 979 5771
+182a6 2 980 5771
+182a8 f 982 5771
+182b7 2 984 5771
+FUNC 182b9 28b 0 UnDecorator::getScope()
+182b9 d 1482 5771
+182c6 f 1483 5771
+182d5 2a 1489 5771
+182ff 14 1492 5771
+18313 b 1495 5771
+1831e 16 1496 5771
+18334 5 1498 5771
+18339 17 1499 5771
+18350 3 1500 5771
+18353 f 1506 5771
+18362 2a 1507 5771
+1838c 10 1566 5771
+1839c 5 1567 5771
+183a1 34 1561 5771
+183d5 4 1562 5771
+183d9 5 1563 5771
+183de e 1510 5771
+183ec 5 1514 5771
+183f1 22 1515 5771
+18413 e 1518 5771
+18421 6 1519 5771
+18427 5 1522 5771
+1842c 2a 1523 5771
+18456 2 1524 5771
+18458 f 1546 5771
+18467 1a 1548 5771
+18481 b 1550 5771
+1848c 9 1551 5771
+18495 2 1554 5771
+18497 f 1530 5771
+184a6 2 1570 5771
+184a8 21 1571 5771
+184c9 a 1489 5771
+184d3 f 1577 5771
+184e2 18 1590 5771
+184fa 2 1591 5771
+184fc b 1580 5771
+18507 7 1581 5771
+1850e 2 1582 5771
+18510 2b 1583 5771
+1853b 4 1597 5771
+1853f 5 1599 5771
+FUNC 18544 341 4 UnDecorator::getFunctionIndirectType(DName const &)
+18544 3 3461 5771
+18547 e 3462 5771
+18555 15 3463 5771
+1856a f 3465 5771
+18579 10 3466 5771
+18589 7 3469 5771
+18590 a 3471 5771
+1859a 6 3473 5771
+185a0 7 3475 5771
+185a7 d 3477 5771
+185b4 17 3482 5771
+185cb 9 3485 5771
+185d4 3 3486 5771
+185d7 5 3490 5771
+185dc f 3491 5771
+185eb 6 3496 5771
+185f1 13 3497 5771
+18604 b 3501 5771
+1860f 1e 3503 5771
+1862d 8 3505 5771
+18635 29 3506 5771
+1865e 2 3507 5771
+18660 17 3508 5771
+18677 f 3510 5771
+18686 4 3511 5771
+1868a 10 3518 5771
+1869a 15 3519 5771
+186af 9 3527 5771
+186b8 d 3528 5771
+186c5 30 3529 5771
+186f5 2 3530 5771
+186f7 11 3521 5771
+18708 7 3514 5771
+1870f 16 3516 5771
+18725 13 3531 5771
+18738 d 3535 5771
+18745 22 3537 5771
+18767 2 3546 5771
+18769 13 3547 5771
+1877c c 3551 5771
+18788 28 3552 5771
+187b0 1e 3557 5771
+187ce c 3558 5771
+187da 2e 3561 5771
+18808 10 3563 5771
+18818 c 3564 5771
+18824 c 3566 5771
+18830 15 3567 5771
+18845 2 3568 5771
+18847 f 3569 5771
+18856 4 3573 5771
+1885a b 3574 5771
+18865 e 3580 5771
+18873 10 3576 5771
+18883 2 3581 5771
+FUNC 18885 4e4 10 UnDecorator::getDataIndirectType(DName const &,char,DName const &,int)
+18885 6 3707 5771
+1888b 23 3711 5771
+188ae 4 3713 5771
+188b2 17 3715 5771
+188c9 c 3717 5771
+188d5 10 3719 5771
+188e5 e 3723 5771
+188f3 6 3725 5771
+188f9 15 3726 5771
+1890e 17 3732 5771
+18925 11 3751 5771
+18936 a 3752 5771
+18940 32 3753 5771
+18972 5 3754 5771
+18977 11 3743 5771
+18988 a 3744 5771
+18992 25 3745 5771
+189b7 2 3746 5771
+189b9 8 3747 5771
+189c1 2 3749 5771
+189c3 19 3735 5771
+189dc a 3736 5771
+189e6 14 3737 5771
+189fa 5 3738 5771
+189ff 11 3739 5771
+18a10 6 3766 5771
+18a16 a 3768 5771
+18a20 17 3770 5771
+18a37 10 3772 5771
+18a47 1a 3778 5771
+18a61 5 3780 5771
+18a66 6 3782 5771
+18a6c 9 3787 5771
+18a75 b 3789 5771
+18a80 19 3791 5771
+18a99 c 3793 5771
+18aa5 24 3794 5771
+18ac9 c 3796 5771
+18ad5 22 3797 5771
+18af7 9 3801 5771
+18b00 5 3805 5771
+18b05 7 3806 5771
+18b0c 6 3810 5771
+18b12 1e 3812 5771
+18b30 8 3814 5771
+18b38 1b 3815 5771
+18b53 2 3816 5771
+18b55 16 3817 5771
+18b6b a 3819 5771
+18b75 13 3828 5771
+18b88 b 3833 5771
+18b93 c 3834 5771
+18b9f 8 3835 5771
+18ba7 6 3836 5771
+18bad b 3842 5771
+18bb8 b 3843 5771
+18bc3 3 3863 5771
+18bc6 6 3864 5771
+18bcc 22 3866 5771
+18bee 9 3871 5771
+18bf7 13 3872 5771
+18c0a 5 3876 5771
+18c0f 1e 3877 5771
+18c2d 5 3879 5771
+18c32 1e 3880 5771
+18c50 5 3884 5771
+18c55 e 3885 5771
+18c63 14 3889 5771
+18c77 28 3895 5771
+18c9f 2 3890 5771
+18ca1 b 3891 5771
+18cac 2 3892 5771
+18cae c 3898 5771
+18cba 17 3899 5771
+18cd1 4 3902 5771
+18cd5 6 3904 5771
+18cdb 7 3906 5771
+18ce2 8 3774 5771
+18cea 13 3918 5771
+18cfd 12 3922 5771
+18d0f 29 3925 5771
+18d38 10 3923 5771
+18d48 c 3928 5771
+18d54 3 3929 5771
+18d57 10 3931 5771
+18d67 2 3933 5771
+FUNC 18d69 14c 0 UnDecorator::operator char *()
+18d69 6 762 5771
+18d6f 4 763 5771
+18d73 f 764 5771
+18d82 9 770 5771
+18d8b c 772 5771
+18d97 7 775 5771
+18d9e 1d 776 5771
+18dbb 4 782 5771
+18dbf 16 783 5771
+18dd5 9 785 5771
+18dde 5 794 5771
+18de3 9 795 5771
+18dec 13 799 5771
+18dff e 808 5771
+18e0d 2 809 5771
+18e0f 2 848 5771
+18e11 1a 810 5771
+18e2b e 813 5771
+18e39 e 811 5771
+18e47 9 817 5771
+18e50 e 819 5771
+18e5e d 820 5771
+18e6b a 824 5771
+18e75 f 825 5771
+18e84 5 828 5771
+18e89 2 829 5771
+18e8b 2 830 5771
+18e8d 5 831 5771
+18e92 1 832 5771
+18e93 5 833 5771
+18e98 1 835 5771
+18e99 5 834 5771
+18e9e 2 838 5771
+18ea0 a 839 5771
+18eaa 9 841 5771
+18eb3 2 848 5771
+FUNC 18eb5 116 c UnDecorator::getPtrRefType(DName const &,DName const &,char)
+18eb5 5 3585 5771
+18eba f 3588 5771
+18ec9 d 3589 5771
+18ed6 b 3591 5771
+18ee1 20 3594 5771
+18f01 b 3595 5771
+18f0c b 3597 5771
+18f17 9 3598 5771
+18f20 14 3600 5771
+18f34 14 3606 5771
+18f48 1b 3608 5771
+18f63 a 3612 5771
+18f6d b 3615 5771
+18f78 c 3617 5771
+18f84 9 3618 5771
+18f8d c 3620 5771
+18f99 c 3622 5771
+18fa5 a 3623 5771
+18faf b 3625 5771
+18fba f 3629 5771
+18fc9 2 3632 5771
+FUNC 18fcb 1b 8 UnDecorator::getPointerType(DName const &,DName const &)
+18fcb 1b 4037 5771
+FUNC 18fe6 1b 8 UnDecorator::getPointerTypeArray(DName const &,DName const &)
+18fe6 1b 4040 5771
+FUNC 19001 1b 8 UnDecorator::getReferenceType(DName const &,DName const &)
+19001 1b 4043 5771
+FUNC 1901c a3 18 __unDName
+1901c f 604 5771
+1902b 9 606 5771
+19034 4 607 5771
+19038 a 612 5771
+19042 2 613 5771
+19044 8 614 5771
+1904c 3 615 5771
+1904f 20 618 5771
+1906f 1a 627 5771
+19089 e 628 5771
+19097 a 633 5771
+190a1 c 636 5771
+190ad 3 643 5771
+190b0 6 645 5771
+190b6 9 637 5771
+FUNC 190bf a3 1c __unDNameEx
+190bf f 684 5771
+190ce 9 687 5771
+190d7 4 688 5771
+190db a 693 5771
+190e5 2 694 5771
+190e7 8 695 5771
+190ef 3 696 5771
+190f2 20 699 5771
+19112 1a 708 5771
+1912c e 709 5771
+1913a a 714 5771
+19144 c 717 5771
+19150 3 724 5771
+19153 6 726 5771
+19159 9 718 5771
+FUNC 19162 387 4 UnDecorator::getBasicDataType(DName const &)
+19162 3 3162 5771
+19165 15 3163 5771
+1917a 6 3165 5771
+19180 4 3168 5771
+19184 35 3173 5771
+191b9 5 3178 5771
+191be 5 3179 5771
+191c3 5 3183 5771
+191c8 5 3184 5771
+191cd 5 3188 5771
+191d2 5 3189 5771
+191d7 5 3193 5771
+191dc 5 3194 5771
+191e1 5 3203 5771
+191e6 5 3204 5771
+191eb 2a 3173 5771
+19215 3c 3222 5771
+19251 5 3231 5771
+19256 5 3232 5771
+1925b 22 3273 5771
+1927d 5 3235 5771
+19282 5 3236 5771
+19287 f 3222 5771
+19296 5 3243 5771
+1929b 5 3244 5771
+192a0 5 3239 5771
+192a5 5 3240 5771
+192aa 5 3247 5771
+192af 5 3248 5771
+192b4 1b 3222 5771
+192cf 3 3264 5771
+192d2 6 3262 5771
+192d8 10 3264 5771
+192e8 10 3266 5771
+192f8 11 3267 5771
+19309 5 3275 5771
+1930e 2 3276 5771
+19310 5 3255 5771
+19315 2 3257 5771
+19317 3 3224 5771
+1931a 12 3343 5771
+1932c 9 3345 5771
+19335 7 3347 5771
+1933c 16 3348 5771
+19352 6 3352 5771
+19358 d 3353 5771
+19365 5 3355 5771
+1936a 5 3227 5771
+1936f 2 3278 5771
+19371 d 3281 5771
+1937e 2 3282 5771
+19380 5 3219 5771
+19385 2 3220 5771
+19387 3 3287 5771
+1938a 5 3290 5771
+1938f d 3207 5771
+1939c d 3212 5771
+193a9 9 3297 5771
+193b2 1f 3301 5771
+193d1 19 3314 5771
+193ea c 3322 5771
+193f6 2 3326 5771
+193f8 c 3307 5771
+19404 2 3308 5771
+19406 1e 3311 5771
+19424 10 3332 5771
+19434 18 3333 5771
+1944c 5 3337 5771
+19451 c 3360 5771
+1945d 5 3367 5771
+19462 d 3369 5771
+1946f 5 3371 5771
+19474 d 3372 5771
+19481 2 3373 5771
+19483 5 3374 5771
+19488 d 3375 5771
+19495 17 3380 5771
+194ac 16 3385 5771
+194c2 27 3387 5771
+FUNC 194e9 13e 4 UnDecorator::getPrimaryDataType(DName const &)
+194e9 7 2962 5771
+194f0 2b 2966 5771
+1951b 12 3027 5771
+1952d d 2972 5771
+1953a c 2974 5771
+19546 a 2975 5771
+19550 b 2981 5771
+1955b 6 2984 5771
+19561 1e 2986 5771
+1957f 7 2996 5771
+19586 2 2997 5771
+19588 6 2998 5771
+1958e f 3000 5771
+1959d 8 3002 5771
+195a5 10 3004 5771
+195b5 2f 3022 5771
+195e4 16 3012 5771
+195fa 17 3008 5771
+19611 14 2969 5771
+19625 2 3030 5771
+FUNC 19627 b1 4 UnDecorator::getDataType(DName *)
+19627 6 2922 5771
+1962d b 2923 5771
+19638 15 2928 5771
+1964d 10 2954 5771
+1965d 6 2934 5771
+19663 c 2936 5771
+1966f f 2937 5771
+1967e 13 2939 5771
+19691 6 2944 5771
+19697 29 2946 5771
+196c0 2 2947 5771
+196c2 14 2931 5771
+196d6 2 2957 5771
+FUNC 196d8 64 4 UnDecorator::getExternalDataType(DName const &)
+196d8 7 4244 5771
+196df 1e 4247 5771
+196fd 9 4248 5771
+19706 30 4253 5771
+19736 4 4255 5771
+1973a 2 4257 5771
+FUNC 1973c 57 8 fastzero_I
+FUNC 19793 8f c _VEC_memzero
+FUNC 19822 14 0 _sse2_mathfcns_init
+FUNC 19836 14 4 _set_SSE2_enable
+FUNC 1984a 87 c fastcopy_I
+FUNC 198d1 e3 c _VEC_memcpy
+FUNC 199b4 1bd c __crtMessageBoxA
+199b4 9 41 4033
+199bd 5 49 4033
+199c2 2 56 4033
+199c4 18 64 4033
+199dc d 66 4033
+199e9 2 67 4033
+199eb 6 69 4033
+199f1 10 76 4033
+19a01 6 78 4033
+19a07 6 80 4033
+19a0d 15 83 4033
+19a22 1a 86 4033
+19a3c 1c 88 4033
+19a58 6 89 4033
+19a5e 8 95 4033
+19a66 6 98 4033
+19a6c a 100 4033
+19a76 14 102 4033
+19a8a 14 116 4033
+19a9e 6 119 4033
+19aa4 d 120 4033
+19ab1 c 122 4033
+19abd 1f 127 4033
+19adc 1b 136 4033
+19af7 6 137 4033
+19afd 7 138 4033
+19b04 2 139 4033
+19b06 7 140 4033
+19b0d 2 142 4033
+19b0f a 144 4033
+19b19 6 146 4033
+19b1f 5 147 4033
+19b24 2 149 4033
+19b26 11 153 4033
+19b37 6 155 4033
+19b3d 5 156 4033
+19b42 8 158 4033
+19b4a b 165 4033
+19b55 5 166 4033
+19b5a 10 168 4033
+19b6a 5 173 4033
+19b6f 2 176 4033
+FUNC 19b71 71 c strcat_s
+19b71 0 13 823
+19b71 30 18 823
+19ba1 c 19 823
+19bad 2 21 823
+19baf 4 23 823
+19bb3 1 25 823
+19bb4 3 26 823
+19bb7 2 29 823
+19bb9 2 32 823
+19bbb d 35 823
+19bc8 4 39 823
+19bcc 2 41 823
+19bce e 42 823
+19bdc 5 45 823
+19be1 1 46 823
+FUNC 19be2 b3 10 strncpy_s
+19be2 5 13 739
+19be7 14 17 739
+19bfb 5 65 739
+19c00 2 66 739
+19c02 26 24 739
+19c28 5 25 739
+19c2d 2 28 739
+19c2f 2 29 739
+19c31 b 31 739
+19c3c 8 35 739
+19c44 d 37 739
+19c51 2 41 739
+19c53 12 45 739
+19c65 5 48 739
+19c6a 2 50 739
+19c6c 4 54 739
+19c70 6 56 739
+19c76 3 58 739
+19c79 c 59 739
+19c85 2 61 739
+19c87 e 62 739
+FUNC 19c95 46 4 _set_error_mode
+19c95 0 43 3937
+19c95 15 50 3937
+19caa 6 58 3937
+19cb0 1 65 3937
+19cb1 5 54 3937
+19cb6 7 55 3937
+19cbd 1 65 3937
+19cbe 1c 61 3937
+19cda 1 65 3937
+FUNC 19cdb a 4 __set_app_type
+19cdb 0 91 3937
+19cdb 9 96 3937
+19ce4 1 97 3937
+FUNC 19ce5 6 0 __get_app_type
+19ce5 0 120 3937
+19ce5 5 125 3937
+19cea 1 126 3937
+FUNC 19ceb 51 10 x_ismbbtype_l
+19ceb 6 213 4669
+19cf1 b 214 4669
+19cfc 4 219 4669
+19d00 3a 222 4669
+19d3a 2 223 4669
+FUNC 19d3c 15 8 _ismbbkalnum_l
+19d3c 0 80 4669
+19d3c 14 81 4669
+19d50 1 82 4669
+FUNC 19d51 13 4 _ismbbkalnum
+19d51 0 85 4669
+19d51 12 86 4669
+19d63 1 87 4669
+FUNC 19d64 15 8 _ismbbkprint_l
+19d64 0 90 4669
+19d64 14 91 4669
+19d78 1 92 4669
+FUNC 19d79 13 4 _ismbbkprint
+19d79 0 95 4669
+19d79 12 96 4669
+19d8b 1 97 4669
+FUNC 19d8c 15 8 _ismbbkpunct_l
+19d8c 0 100 4669
+19d8c 14 101 4669
+19da0 1 102 4669
+FUNC 19da1 13 4 _ismbbkpunct
+19da1 0 105 4669
+19da1 12 106 4669
+19db3 1 107 4669
+FUNC 19db4 18 8 _ismbbalnum_l
+19db4 0 113 4669
+19db4 17 114 4669
+19dcb 1 115 4669
+FUNC 19dcc 16 4 _ismbbalnum
+19dcc 0 118 4669
+19dcc 15 119 4669
+19de1 1 120 4669
+FUNC 19de2 18 8 _ismbbalpha_l
+19de2 0 123 4669
+19de2 17 124 4669
+19df9 1 125 4669
+FUNC 19dfa 16 4 _ismbbalpha
+19dfa 0 128 4669
+19dfa 15 129 4669
+19e0f 1 130 4669
+FUNC 19e10 18 8 _ismbbgraph_l
+19e10 0 133 4669
+19e10 17 134 4669
+19e27 1 135 4669
+FUNC 19e28 16 4 _ismbbgraph
+19e28 0 138 4669
+19e28 15 139 4669
+19e3d 1 140 4669
+FUNC 19e3e 18 8 _ismbbprint_l
+19e3e 0 143 4669
+19e3e 17 144 4669
+19e55 1 145 4669
+FUNC 19e56 16 4 _ismbbprint
+19e56 0 148 4669
+19e56 15 149 4669
+19e6b 1 150 4669
+FUNC 19e6c 15 8 _ismbbpunct_l
+19e6c 0 153 4669
+19e6c 14 154 4669
+19e80 1 155 4669
+FUNC 19e81 13 4 _ismbbpunct
+19e81 0 158 4669
+19e81 12 159 4669
+19e93 1 160 4669
+FUNC 19e94 15 8 _ismbblead_l
+19e94 0 166 4669
+19e94 14 167 4669
+19ea8 1 168 4669
+FUNC 19ea9 13 4 _ismbblead
+19ea9 0 171 4669
+19ea9 12 172 4669
+19ebb 1 173 4669
+FUNC 19ebc 15 8 _ismbbtrail_l
+19ebc 0 176 4669
+19ebc 14 177 4669
+19ed0 1 178 4669
+FUNC 19ed1 13 4 _ismbbtrail
+19ed1 0 181 4669
+19ed1 12 182 4669
+19ee3 1 183 4669
+FUNC 19ee4 53 8 _ismbbkana_l
+19ee4 6 189 4669
+19eea b 190 4669
+19ef5 10 192 4669
+19f05 1f 194 4669
+19f24 2 197 4669
+19f26 f 196 4669
+19f35 2 197 4669
+FUNC 19f37 e 4 _ismbbkana
+19f37 0 200 4669
+19f37 d 201 4669
+19f44 1 202 4669
+FUNC 19f45 44 4 _getbuf
+19f45 0 43 1893
+19f45 6 50 1893
+19f4b 16 58 1893
+19f61 4 61 1893
+19f65 7 62 1893
+19f6c 2 65 1893
+19f6e 4 69 1893
+19f72 6 70 1893
+19f78 7 71 1893
+19f7f 3 75 1893
+19f82 6 76 1893
+19f88 1 79 1893
+FUNC 19f89 1de 8 _fputwc_nolock
+19f89 15 90 2124
+19f9e b 93 2124
+19fa9 48 95 2124
+19ff1 6 101 2124
+19ff7 45 104 2124
+1a03c 27 115 2124
+1a063 9 116 2124
+1a06c 22 120 2124
+1a08e 2 121 2124
+1a090 8 124 2124
+1a098 42 127 2124
+1a0da 17 133 2124
+1a0f1 6 139 2124
+1a0f7 7 141 2124
+1a0fe 34 143 2124
+1a132 6 146 2124
+1a138 6 150 2124
+1a13e d 151 2124
+1a14b d 153 2124
+1a158 f 154 2124
+FUNC 1a167 78 8 fputwc
+1a167 c 48 2124
+1a173 2e 52 2124
+1a1a1 3 55 2124
+1a1a4 7 57 2124
+1a1ab 3 58 2124
+1a1ae 11 60 2124
+1a1bf c 63 2124
+1a1cb 4 67 2124
+1a1cf 6 68 2124
+1a1d5 a 64 2124
+FUNC 1a1df 5 8 putwc
+1a1df 0 162 2124
+1a1df 5 163 2124
+FUNC 1a1e4 1f7 14 wcstoxl
+1a1e4 8 82 6173
+1a1ec b 88 6173
+1a1f7 3 92 6173
+1a1fa b 95 6173
+1a205 2f 97 6173
+1a234 12 98 6173
+1a246 9 103 6173
+1a24f 2 105 6173
+1a251 18 106 6173
+1a269 6 108 6173
+1a26f 4 109 6173
+1a273 2 110 6173
+1a275 6 112 6173
+1a27b 5 113 6173
+1a280 5 115 6173
+1a285 b 118 6173
+1a290 9 119 6173
+1a299 f 120 6173
+1a2a8 9 123 6173
+1a2b1 7 121 6173
+1a2b8 6 126 6173
+1a2be 1a 128 6173
+1a2d8 2 129 6173
+1a2da 5 130 6173
+1a2df d 135 6173
+1a2ec c 141 6173
+1a2f8 15 143 6173
+1a30d 12 144 6173
+1a31f 5 148 6173
+1a324 4 152 6173
+1a328 c 159 6173
+1a334 4 165 6173
+1a338 6 166 6173
+1a33e 9 178 6173
+1a347 6 181 6173
+1a34d 3 183 6173
+1a350 4 184 6173
+1a354 2 186 6173
+1a356 c 161 6173
+1a362 5 173 6173
+1a367 2 174 6173
+1a369 24 189 6173
+1a38d 5 192 6173
+1a392 c 193 6173
+1a39e 6 194 6173
+1a3a4 10 195 6173
+1a3b4 8 201 6173
+1a3bc 2 203 6173
+1a3be 6 205 6173
+1a3c4 3 207 6173
+1a3c7 12 209 6173
+1a3d9 2 210 6173
+FUNC 1a3db 29 c wcstol
+1a3db 3 217 6173
+1a3de 8 218 6173
+1a3e6 13 220 6173
+1a3f9 9 224 6173
+1a402 2 226 6173
+FUNC 1a404 1b 10 _wcstol_l
+1a404 0 234 6173
+1a404 1a 235 6173
+1a41e 1 236 6173
+FUNC 1a41f 2a c wcstoul
+1a41f 3 243 6173
+1a422 7 244 6173
+1a429 14 246 6173
+1a43d a 250 6173
+1a447 2 252 6173
+FUNC 1a449 1b 10 _wcstoul_l
+1a449 0 260 6173
+1a449 1a 261 6173
+1a463 1 262 6173
+FUNC 1a464 9 0 _fptrap
+1a464 0 46 2503
+1a464 8 47 2503
+1a46c 1 48 2503
+FUNC 1a46d 54 8 _isalpha_l
+1a46d 6 57 6535
+1a473 b 58 6535
+1a47e 41 60 6535
+1a4bf 2 61 6535
+FUNC 1a4c1 2b 4 isalpha
+1a4c1 0 66 6535
+1a4c1 9 67 6535
+1a4ca 13 69 6535
+1a4dd 1 75 6535
+1a4de d 73 6535
+1a4eb 1 75 6535
+FUNC 1a4ec 4f 8 _isupper_l
+1a4ec 6 81 6535
+1a4f2 b 82 6535
+1a4fd 3c 84 6535
+1a539 2 85 6535
+FUNC 1a53b 29 4 isupper
+1a53b 0 90 6535
+1a53b 9 91 6535
+1a544 11 93 6535
+1a555 1 99 6535
+1a556 d 97 6535
+1a563 1 99 6535
+FUNC 1a564 4f 8 _islower_l
+1a564 6 105 6535
+1a56a b 106 6535
+1a575 3c 108 6535
+1a5b1 2 109 6535
+FUNC 1a5b3 29 4 islower
+1a5b3 0 114 6535
+1a5b3 9 115 6535
+1a5bc 11 117 6535
+1a5cd 1 123 6535
+1a5ce d 121 6535
+1a5db 1 123 6535
+FUNC 1a5dc 4f 8 _isdigit_l
+1a5dc 6 129 6535
+1a5e2 b 130 6535
+1a5ed 3c 132 6535
+1a629 2 133 6535
+FUNC 1a62b 29 4 isdigit
+1a62b 0 138 6535
+1a62b 9 139 6535
+1a634 11 141 6535
+1a645 1 147 6535
+1a646 d 145 6535
+1a653 1 147 6535
+FUNC 1a654 54 8 _isxdigit_l
+1a654 6 153 6535
+1a65a b 154 6535
+1a665 41 156 6535
+1a6a6 2 157 6535
+FUNC 1a6a8 2b 4 isxdigit
+1a6a8 0 162 6535
+1a6a8 9 163 6535
+1a6b1 13 165 6535
+1a6c4 1 171 6535
+1a6c5 d 169 6535
+1a6d2 1 171 6535
+FUNC 1a6d3 4f 8 _isspace_l
+1a6d3 6 177 6535
+1a6d9 b 178 6535
+1a6e4 3c 180 6535
+1a720 2 181 6535
+FUNC 1a722 29 4 isspace
+1a722 0 186 6535
+1a722 9 187 6535
+1a72b 11 189 6535
+1a73c 1 195 6535
+1a73d d 193 6535
+1a74a 1 195 6535
+FUNC 1a74b 4f 8 _ispunct_l
+1a74b 6 201 6535
+1a751 b 202 6535
+1a75c 3c 204 6535
+1a798 2 205 6535
+FUNC 1a79a 29 4 ispunct
+1a79a 0 210 6535
+1a79a 9 211 6535
+1a7a3 11 213 6535
+1a7b4 1 219 6535
+1a7b5 d 217 6535
+1a7c2 1 219 6535
+FUNC 1a7c3 54 8 _isalnum_l
+1a7c3 6 225 6535
+1a7c9 b 226 6535
+1a7d4 41 228 6535
+1a815 2 229 6535
+FUNC 1a817 2b 4 isalnum
+1a817 0 234 6535
+1a817 9 235 6535
+1a820 13 237 6535
+1a833 1 243 6535
+1a834 d 241 6535
+1a841 1 243 6535
+FUNC 1a842 54 8 _isprint_l
+1a842 6 249 6535
+1a848 b 250 6535
+1a853 41 252 6535
+1a894 2 253 6535
+FUNC 1a896 2b 4 isprint
+1a896 0 258 6535
+1a896 9 259 6535
+1a89f 13 261 6535
+1a8b2 1 267 6535
+1a8b3 d 265 6535
+1a8c0 1 267 6535
+FUNC 1a8c1 54 8 _isgraph_l
+1a8c1 6 273 6535
+1a8c7 b 274 6535
+1a8d2 41 276 6535
+1a913 2 277 6535
+FUNC 1a915 2b 4 isgraph
+1a915 0 282 6535
+1a915 9 283 6535
+1a91e 13 285 6535
+1a931 1 291 6535
+1a932 d 289 6535
+1a93f 1 291 6535
+FUNC 1a940 4f 8 _iscntrl_l
+1a940 6 297 6535
+1a946 b 298 6535
+1a951 3c 300 6535
+1a98d 2 301 6535
+FUNC 1a98f 29 4 iscntrl
+1a98f 0 306 6535
+1a98f 9 307 6535
+1a998 11 309 6535
+1a9a9 1 315 6535
+1a9aa d 313 6535
+1a9b7 1 315 6535
+FUNC 1a9b8 d 4 __isascii
+1a9b8 0 320 6535
+1a9b8 c 321 6535
+1a9c4 1 322 6535
+FUNC 1a9c5 8 4 __toascii
+1a9c5 0 327 6535
+1a9c5 7 328 6535
+1a9cc 1 329 6535
+FUNC 1a9cd 1f 8 _iscsymf_l
+1a9cd 0 335 6535
+1a9cd 1a 336 6535
+1a9e7 1 337 6535
+1a9e8 3 336 6535
+1a9eb 1 337 6535
+FUNC 1a9ec 1a 4 __iscsymf
+1a9ec 0 341 6535
+1a9ec 15 342 6535
+1aa01 1 343 6535
+1aa02 3 342 6535
+1aa05 1 343 6535
+FUNC 1aa06 1f 8 _iscsym_l
+1aa06 0 349 6535
+1aa06 1a 350 6535
+1aa20 1 351 6535
+1aa21 3 350 6535
+1aa24 1 351 6535
+FUNC 1aa25 1c 4 __iscsym
+1aa25 0 356 6535
+1aa25 17 357 6535
+1aa3c 1 358 6535
+1aa3d 3 357 6535
+1aa40 1 358 6535
+FUNC 1aa41 12 8 _MarkAllocaS
+1aa41 0 207 2895
+1aa41 8 208 2895
+1aa49 6 210 2895
+1aa4f 3 211 2895
+1aa52 1 214 2895
+FUNC 1aa53 1b 4 _freea
+1aa53 0 249 2895
+1aa53 8 251 2895
+1aa5b 3 253 2895
+1aa5e 8 255 2895
+1aa66 7 257 2895
+1aa6d 1 266 2895
+FUNC 1aa6e 13b 18 __crtGetLocaleInfoW_stat
+1aa6e f 60 2876
+1aa7d 14 68 2876
+1aa91 d 70 2876
+1aa9e 8 71 2876
+1aaa6 b 73 2876
+1aab1 f 74 2876
+1aac0 5 79 2876
+1aac5 13 81 2876
+1aad8 7 86 2876
+1aadf 2 140 2876
+1aae1 8 96 2876
+1aae9 b 97 2876
+1aaf4 16 100 2876
+1ab0a 7 101 2876
+1ab11 48 104 2876
+1ab59 2 105 2876
+1ab5b 2 106 2876
+1ab5d e 110 2876
+1ab6b 7 113 2876
+1ab72 2 121 2876
+1ab74 2 123 2876
+1ab76 17 130 2876
+1ab8d 6 134 2876
+1ab93 4 136 2876
+1ab97 12 141 2876
+FUNC 1aba9 3b 18 __crtGetLocaleInfoW
+1aba9 6 151 2876
+1abaf b 152 2876
+1abba 28 161 2876
+1abe2 2 162 2876
+FUNC 1abe4 13d 18 __crtGetLocaleInfoA_stat
+1abe4 f 60 4251
+1abf3 17 68 4251
+1ac0a a 70 4251
+1ac14 8 71 4251
+1ac1c b 73 4251
+1ac27 f 74 4251
+1ac36 11 79 4251
+1ac47 4 86 4251
+1ac4b 5 96 4251
+1ac50 b 97 4251
+1ac5b 13 100 4251
+1ac6e 7 101 4251
+1ac75 49 104 4251
+1acbe 2 105 4251
+1acc0 2 106 4251
+1acc2 10 110 4251
+1acd2 3 114 4251
+1acd5 6 124 4251
+1acdb 2 126 4251
+1acdd 15 135 4251
+1acf2 7 139 4251
+1acf9 4 141 4251
+1acfd 12 81 4251
+1ad0f 12 145 4251
+FUNC 1ad21 3b 18 __crtGetLocaleInfoA
+1ad21 6 155 4251
+1ad27 b 156 4251
+1ad32 28 165 4251
+1ad5a 2 166 4251
+FUNC 1ad5c 1a 4 strncnt
+1ad5c 0 48 4203
+1ad5c 6 49 4203
+1ad62 6 52 4203
+1ad68 1 53 4203
+1ad69 5 52 4203
+1ad6e 7 55 4203
+1ad75 1 56 4203
+FUNC 1ad76 3a2 20 __crtLCMapStringA_stat
+1ad76 12 99 4203
+1ad88 d 108 4203
+1ad95 1b 109 4203
+1adb0 8 110 4203
+1adb8 b 111 4203
+1adc3 a 112 4203
+1adcd 5 119 4203
+1add2 19 120 4203
+1adeb 5 124 4203
+1adf0 1 125 4203
+1adf1 3 127 4203
+1adf4 16 133 4203
+1ae0a 9 213 4203
+1ae13 8 235 4203
+1ae1b 8 236 4203
+1ae23 27 247 4203
+1ae4a 6 248 4203
+1ae50 48 251 4203
+1ae98 3 252 4203
+1ae9b 6 253 4203
+1aea1 19 262 4203
+1aeba 21 271 4203
+1aedb 8 274 4203
+1aee3 9 277 4203
+1aeec 9 279 4203
+1aef5 12 288 4203
+1af07 5 292 4203
+1af0c 4b 298 4203
+1af57 4 299 4203
+1af5b 18 309 4203
+1af73 3 312 4203
+1af76 6 322 4203
+1af7c 2 325 4203
+1af7e 17 335 4203
+1af95 7 342 4203
+1af9c 8 344 4203
+1afa4 9 346 4203
+1afad b 141 4203
+1afb8 8 142 4203
+1afc0 5 143 4203
+1afc5 8 144 4203
+1afcd 11 146 4203
+1afde 7 147 4203
+1afe5 9 153 4203
+1afee 15 155 4203
+1b003 5 156 4203
+1b008 2 157 4203
+1b00a 1b 164 4203
+1b025 7 166 4203
+1b02c 41 169 4203
+1b06d 2 170 4203
+1b06f 28 196 4203
+1b097 2 183 4203
+1b099 2 184 4203
+1b09b 25 190 4203
+1b0c0 7 198 4203
+1b0c7 2 199 4203
+1b0c9 1a 202 4203
+1b0e3 5 204 4203
+1b0e8 9 205 4203
+1b0f1 c 206 4203
+1b0fd 7 207 4203
+1b104 2 208 4203
+1b106 12 350 4203
+FUNC 1b118 43 24 __crtLCMapStringA
+1b118 6 363 4203
+1b11e b 364 4203
+1b129 30 376 4203
+1b159 2 377 4203
+FUNC 1b15b 1b8 1c __crtGetStringTypeA_stat
+1b15b f 66 4155
+1b16a 10 75 4155
+1b17a 18 79 4155
+1b192 8 80 4155
+1b19a b 82 4155
+1b1a5 f 83 4155
+1b1b4 11 88 4155
+1b1c5 9 120 4155
+1b1ce 8 141 4155
+1b1d6 8 142 4155
+1b1de 27 153 4155
+1b205 6 154 4155
+1b20b 3e 157 4155
+1b249 2 158 4155
+1b24b 2 159 4155
+1b24d f 161 4155
+1b25c 13 169 4155
+1b26f 11 174 4155
+1b280 6 176 4155
+1b286 6 178 4155
+1b28c 2 90 4155
+1b28e 5 94 4155
+1b293 8 95 4155
+1b29b 5 96 4155
+1b2a0 8 97 4155
+1b2a8 e 99 4155
+1b2b6 4 100 4155
+1b2ba 5 104 4155
+1b2bf 17 106 4155
+1b2d6 2 107 4155
+1b2d8 2 108 4155
+1b2da 3 109 4155
+1b2dd 15 112 4155
+1b2f2 6 113 4155
+1b2f8 7 114 4155
+1b2ff 2 115 4155
+1b301 12 182 4155
+FUNC 1b313 40 20 __crtGetStringTypeA
+1b313 6 194 4155
+1b319 b 195 4155
+1b324 2d 206 4155
+1b351 2 207 4155
+FUNC 1b353 6 0 __pwctype_func
+1b353 0 24 3986
+1b353 5 25 3986
+1b358 1 26 3986
+FUNC 1b359 29 0 __pctype_func
+1b359 0 29 3986
+1b359 7 35 3986
+1b360 3 36 3986
+1b363 18 38 3986
+1b37b 6 39 3986
+1b381 1 40 3986
+FUNC 1b382 419 0 _get_lc_time
+1b382 6 94 3379
+1b388 12 104 3379
+1b39a 3 105 3379
+1b39d 2 170 3379
+1b39f 9 108 3379
+1b3a8 16 112 3379
+1b3be 15 113 3379
+1b3d3 15 114 3379
+1b3e8 18 115 3379
+1b400 15 116 3379
+1b415 13 117 3379
+1b428 14 118 3379
+1b43c 18 120 3379
+1b454 15 121 3379
+1b469 15 122 3379
+1b47e 15 123 3379
+1b493 18 124 3379
+1b4ab 15 125 3379
+1b4c0 15 126 3379
+1b4d5 15 128 3379
+1b4ea 18 129 3379
+1b502 15 130 3379
+1b517 15 131 3379
+1b52c 15 132 3379
+1b541 18 133 3379
+1b559 15 134 3379
+1b56e 15 135 3379
+1b583 15 136 3379
+1b598 18 137 3379
+1b5b0 15 138 3379
+1b5c5 15 139 3379
+1b5da 15 141 3379
+1b5ef 18 142 3379
+1b607 15 143 3379
+1b61c 15 144 3379
+1b631 15 145 3379
+1b646 18 146 3379
+1b65e 18 147 3379
+1b676 18 148 3379
+1b68e 18 149 3379
+1b6a6 1b 150 3379
+1b6c1 18 151 3379
+1b6d9 18 152 3379
+1b6f1 18 154 3379
+1b709 1b 155 3379
+1b724 18 160 3379
+1b73c 18 161 3379
+1b754 1b 163 3379
+1b76f 20 165 3379
+1b78f a 169 3379
+1b799 2 170 3379
+FUNC 1b79b 190 4 __free_lc_time
+1b79b 1 179 3379
+1b79c c 180 3379
+1b7a8 8 183 3379
+1b7b0 8 184 3379
+1b7b8 8 185 3379
+1b7c0 8 186 3379
+1b7c8 8 187 3379
+1b7d0 8 188 3379
+1b7d8 7 189 3379
+1b7df 8 191 3379
+1b7e7 8 192 3379
+1b7ef 8 193 3379
+1b7f7 8 194 3379
+1b7ff 8 195 3379
+1b807 8 196 3379
+1b80f 8 197 3379
+1b817 8 199 3379
+1b81f b 200 3379
+1b82a 8 201 3379
+1b832 8 202 3379
+1b83a 8 203 3379
+1b842 8 204 3379
+1b84a 8 205 3379
+1b852 8 206 3379
+1b85a 8 207 3379
+1b862 8 208 3379
+1b86a 8 209 3379
+1b872 8 210 3379
+1b87a 8 212 3379
+1b882 8 213 3379
+1b88a 8 214 3379
+1b892 8 215 3379
+1b89a 8 216 3379
+1b8a2 b 217 3379
+1b8ad b 218 3379
+1b8b8 b 219 3379
+1b8c3 b 220 3379
+1b8ce b 221 3379
+1b8d9 b 222 3379
+1b8e4 b 223 3379
+1b8ef b 225 3379
+1b8fa b 226 3379
+1b905 b 228 3379
+1b910 b 229 3379
+1b91b f 230 3379
+1b92a 1 232 3379
+FUNC 1b92b 73 4 __init_time
+1b92b 4 56 3379
+1b92f f 60 3379
+1b93e 16 64 3379
+1b954 4 65 3379
+1b958 b 67 3379
+1b963 6 69 3379
+1b969 8 70 3379
+1b971 2 71 3379
+1b973 6 73 3379
+1b979 2 74 3379
+1b97b 2 75 3379
+1b97d 18 78 3379
+1b995 2 82 3379
+1b997 6 83 3379
+1b99d 1 84 3379
+FUNC 1b99e 33 0 fix_grouping
+1b99e 0 32 3427
+1b99e 8 40 3427
+1b9a6 a 43 3427
+1b9b0 4 45 3427
+1b9b4 1 61 3427
+1b9b5 6 40 3427
+1b9bb 1 63 3427
+1b9bc 4 50 3427
+1b9c0 2 52 3427
+1b9c2 7 55 3427
+1b9c9 6 56 3427
+1b9cf 2 60 3427
+FUNC 1b9d1 40 4 __free_lconv_num
+1b9d1 1 211 3427
+1b9d2 8 212 3427
+1b9da a 215 3427
+1b9e4 7 216 3427
+1b9eb b 218 3427
+1b9f6 7 219 3427
+1b9fd b 221 3427
+1ba08 8 222 3427
+1ba10 1 223 3427
+FUNC 1ba11 1c8 4 __init_numeric
+1ba11 7 84 3427
+1ba18 4 92 3427
+1ba1c 2 93 3427
+1ba1e 11 96 3427
+1ba2f 3 177 3427
+1ba32 3 178 3427
+1ba35 c 179 3427
+1ba41 14 102 3427
+1ba55 8 103 3427
+1ba5d 9 108 3427
+1ba66 13 113 3427
+1ba79 9 115 3427
+1ba82 2 116 3427
+1ba84 2 118 3427
+1ba86 9 120 3427
+1ba8f 12 125 3427
+1baa1 8 127 3427
+1baa9 a 128 3427
+1bab3 7 129 3427
+1baba 2 131 3427
+1babc 19 140 3427
+1bad5 15 142 3427
+1baea 1b 144 3427
+1bb05 2 146 3427
+1bb07 c 148 3427
+1bb13 1e 154 3427
+1bb31 2 156 3427
+1bb33 17 154 3427
+1bb4a b 164 3427
+1bb55 9 165 3427
+1bb5e c 166 3427
+1bb6a 8 168 3427
+1bb72 7 169 3427
+1bb79 2 170 3427
+1bb7b 13 186 3427
+1bb8e 11 191 3427
+1bb9f b 193 3427
+1bbaa d 194 3427
+1bbb7 9 197 3427
+1bbc0 9 198 3427
+1bbc9 9 200 3427
+1bbd2 5 201 3427
+1bbd7 2 202 3427
+FUNC 1bbd9 33 0 fix_grouping
+1bbd9 0 214 3470
+1bbd9 8 222 3470
+1bbe1 a 225 3470
+1bbeb 4 227 3470
+1bbef 1 243 3470
+1bbf0 6 222 3470
+1bbf6 1 245 3470
+1bbf7 4 232 3470
+1bbfb 2 234 3470
+1bbfd 7 237 3470
+1bc04 6 238 3470
+1bc0a 2 242 3470
+FUNC 1bc0c 89 4 __free_lconv_mon
+1bc0c 1 255 3470
+1bc0d 8 256 3470
+1bc15 b 259 3470
+1bc20 7 260 3470
+1bc27 b 262 3470
+1bc32 7 263 3470
+1bc39 b 265 3470
+1bc44 7 266 3470
+1bc4b b 268 3470
+1bc56 7 269 3470
+1bc5d b 271 3470
+1bc68 7 272 3470
+1bc6f b 274 3470
+1bc7a 7 275 3470
+1bc81 b 277 3470
+1bc8c 8 278 3470
+1bc94 1 279 3470
+FUNC 1bc95 2c4 4 __init_monetary
+1bc95 8 65 3470
+1bc9d 6 73 3470
+1bca3 13 77 3470
+1bcb6 3 187 3470
+1bcb9 3 188 3470
+1bcbc a 189 3470
+1bcc6 11 83 3470
+1bcd7 8 84 3470
+1bcdf f 89 3470
+1bcee 7 91 3470
+1bcf5 2 92 3470
+1bcf7 2 94 3470
+1bcf9 9 96 3470
+1bd02 f 101 3470
+1bd11 6 103 3470
+1bd17 9 104 3470
+1bd20 2 105 3470
+1bd22 2 107 3470
+1bd24 4 112 3470
+1bd28 14 117 3470
+1bd3c 14 119 3470
+1bd50 14 121 3470
+1bd64 17 123 3470
+1bd7b 14 125 3470
+1bd8f 14 128 3470
+1bda3 14 130 3470
+1bdb7 17 133 3470
+1bdce 14 135 3470
+1bde2 14 137 3470
+1bdf6 14 139 3470
+1be0a 17 141 3470
+1be21 14 143 3470
+1be35 14 145 3470
+1be49 17 147 3470
+1be60 2 149 3470
+1be62 6 150 3470
+1be68 6 151 3470
+1be6e 8 152 3470
+1be76 b 153 3470
+1be81 5 154 3470
+1be86 1c 157 3470
+1bea2 2 159 3470
+1bea4 17 157 3470
+1bebb c 169 3470
+1bec7 3 175 3470
+1beca 32 181 3470
+1befc 11 194 3470
+1bf0d 15 199 3470
+1bf22 b 201 3470
+1bf2d d 202 3470
+1bf3a 9 204 3470
+1bf43 9 205 3470
+1bf4c 6 206 3470
+1bf52 5 208 3470
+1bf57 2 209 3470
+FUNC 1bf59 395 4 __init_ctype
+1bf59 11 59 3562
+1bf6a 6 60 3562
+1bf70 1f 82 3562
+1bf8f 7 84 3562
+1bf96 20 89 3562
+1bfb6 7 94 3562
+1bfbd 10 98 3562
+1bfcd b 100 3562
+1bfd8 b 102 3562
+1bfe3 12 104 3562
+1bff5 2f 106 3562
+1c024 5 109 3562
+1c029 2 112 3562
+1c02b e 113 3562
+1c039 15 115 3562
+1c04e a 118 3562
+1c058 4 121 3562
+1c05c 8 124 3562
+1c064 e 126 3562
+1c072 9 128 3562
+1c07b b 129 3562
+1c086 b 128 3562
+1c091 2c 140 3562
+1c0bd 33 155 3562
+1c0f0 2d 166 3562
+1c11d 37 178 3562
+1c154 11 180 3562
+1c165 17 182 3562
+1c17c 15 183 3562
+1c191 d 180 3562
+1c19e 12 189 3562
+1c1b0 f 190 3562
+1c1bf 12 191 3562
+1c1d1 18 195 3562
+1c1e9 11 198 3562
+1c1fa 13 199 3562
+1c20d e 200 3562
+1c21b e 201 3562
+1c229 9 203 3562
+1c232 6 204 3562
+1c238 9 206 3562
+1c241 9 207 3562
+1c24a 9 208 3562
+1c253 9 209 3562
+1c25c 9 210 3562
+1c265 9 213 3562
+1c26e 4 214 3562
+1c272 8 217 3562
+1c27a 8 218 3562
+1c282 8 219 3562
+1c28a 10 220 3562
+1c29a 13 227 3562
+1c2ad 2 231 3562
+1c2af 6 232 3562
+1c2b5 a 233 3562
+1c2bf a 234 3562
+1c2c9 a 235 3562
+1c2d3 a 236 3562
+1c2dd 2 238 3562
+1c2df f 240 3562
+FUNC 1c2ee 29 0 ___mb_cur_max_func
+1c2ee 0 248 3562
+1c2ee 7 254 3562
+1c2f5 3 255 3562
+1c2f8 18 257 3562
+1c310 6 259 3562
+1c316 1 260 3562
+FUNC 1c317 16 4 ___mb_cur_max_l_func
+1c317 0 263 3562
+1c317 15 264 3562
+1c32c 1 265 3562
+FUNC 1c32d 26 0 ___lc_codepage_func
+1c32d 0 268 3562
+1c32d 7 274 3562
+1c334 3 275 3562
+1c337 18 277 3562
+1c34f 3 279 3562
+1c352 1 280 3562
+FUNC 1c353 26 0 ___lc_collate_cp_func
+1c353 0 284 3562
+1c353 7 290 3562
+1c35a 3 291 3562
+1c35d 18 293 3562
+1c375 3 295 3562
+1c378 1 296 3562
+FUNC 1c379 26 0 ___lc_handle_func
+1c379 0 300 3562
+1c379 7 306 3562
+1c380 3 307 3562
+1c383 18 309 3562
+1c39b 3 311 3562
+1c39e 1 312 3562
+FUNC 1c39f 3 4 __init_collate
+1c39f 0 41 3650
+1c39f 2 42 3650
+1c3a1 1 43 3650
+FUNC 1c3a2 fe 4 _Getdays_l
+1c3a2 9 111 516
+1c3ab d 115 516
+1c3b8 9 117 516
+1c3c1 9 119 516
+1c3ca 28 120 516
+1c3f2 b 121 516
+1c3fd c 123 516
+1c409 4 126 516
+1c40d 30 128 516
+1c43d 8 129 516
+1c445 31 131 516
+1c476 12 132 516
+1c488 3 134 516
+1c48b 13 137 516
+1c49e 2 138 516
+FUNC 1c4a0 9 0 _Getdays
+1c4a0 0 142 516
+1c4a0 8 143 516
+1c4a8 1 144 516
+FUNC 1c4a9 fe 4 _Getmonths_l
+1c4a9 9 150 516
+1c4b2 d 154 516
+1c4bf 16 156 516
+1c4d5 2b 159 516
+1c500 b 160 516
+1c50b 8 162 516
+1c513 a 163 516
+1c51d 2d 167 516
+1c54a 8 168 516
+1c552 2c 170 516
+1c57e 11 171 516
+1c58f 3 173 516
+1c592 13 176 516
+1c5a5 2 177 516
+FUNC 1c5a7 9 0 _Getmonths
+1c5a7 0 181 516
+1c5a7 8 182 516
+1c5af 1 183 516
+FUNC 1c5b0 355 4 _Gettnames_l
+1c5b0 9 189 516
+1c5b9 d 193 516
+1c5c6 9 195 516
+1c5cf 9 197 516
+1c5d8 28 198 516
+1c600 d 199 516
+1c60d 29 200 516
+1c636 18 201 516
+1c64e 11 202 516
+1c65f f 203 516
+1c66e f 204 516
+1c67d 7 205 516
+1c684 e 206 516
+1c692 8 208 516
+1c69a 12 212 516
+1c6ac 13 213 516
+1c6bf 6 214 516
+1c6c5 2a 215 516
+1c6ef 6 216 516
+1c6f5 d 217 516
+1c702 26 218 516
+1c728 1c 219 516
+1c744 18 221 516
+1c75c 6 222 516
+1c762 26 223 516
+1c788 a 224 516
+1c792 5 225 516
+1c797 2a 226 516
+1c7c1 18 227 516
+1c7d9 30 230 516
+1c809 a 231 516
+1c813 30 233 516
+1c843 a 234 516
+1c84d 30 236 516
+1c87d a 237 516
+1c887 30 239 516
+1c8b7 a 240 516
+1c8c1 30 242 516
+1c8f1 12 245 516
+1c903 2 246 516
+FUNC 1c905 9 0 _Gettnames
+1c905 0 250 516
+1c905 8 251 516
+1c90d 1 252 516
+FUNC 1c90e 20 0 _store_str
+1c90e 0 869 516
+1c90e f 871 516
+1c91d 7 872 516
+1c924 9 873 516
+1c92d 1 875 516
+FUNC 1c92e 36 0 _store_number
+1c92e 0 965 516
+1c92e 8 973 516
+1c936 c 976 516
+1c942 2 977 516
+1c944 b 978 516
+1c94f 2 981 516
+1c951 2 982 516
+1c953 1 983 516
+1c954 7 988 516
+1c95b 3 989 516
+1c95e 5 990 516
+1c963 1 991 516
+FUNC 1c964 79 4 _store_num
+1c964 8 909 516
+1c96c 2 910 516
+1c96e 8 912 516
+1c976 33 913 516
+1c9a9 2 914 516
+1c9ab 4 917 516
+1c9af 8 918 516
+1c9b7 b 919 516
+1c9c2 c 921 516
+1c9ce 5 923 516
+1c9d3 2 924 516
+1c9d5 2 926 516
+1c9d7 4 927 516
+1c9db 2 928 516
+FUNC 1c9dd 3e6 10 _expandtime
+1c9dd 5 548 516
+1c9e2 4f 558 516
+1ca31 16 659 516
+1ca47 5 662 516
+1ca4c 16 587 516
+1ca62 7 589 516
+1ca69 5 590 516
+1ca6e 16 571 516
+1ca84 7 573 516
+1ca8b 5 574 516
+1ca90 5 822 516
+1ca95 7 823 516
+1ca9c 5 824 516
+1caa1 16 667 516
+1cab7 10 668 516
+1cac7 2 669 516
+1cac9 5 672 516
+1cace 23 558 516
+1caf1 6 787 516
+1caf7 5 789 516
+1cafc 15 736 516
+1cb11 2 737 516
+1cb13 2 739 516
+1cb15 5 740 516
+1cb1a 15 722 516
+1cb2f 2 723 516
+1cb31 16 742 516
+1cb47 4 743 516
+1cb4b 2 744 516
+1cb4d 5 745 516
+1cb52 6 746 516
+1cb58 8 747 516
+1cb60 1 748 516
+1cb61 5 752 516
+1cb66 f 715 516
+1cb75 5 718 516
+1cb7a 3 696 516
+1cb7d 2 699 516
+1cb7f 1d 804 516
+1cb9c 6 806 516
+1cba2 d 808 516
+1cbaf 2 809 516
+1cbb1 37 558 516
+1cbe8 19 678 516
+1cc01 8 680 516
+1cc09 2 681 516
+1cc0b 15 650 516
+1cc20 13 652 516
+1cc33 5 653 516
+1cc38 1e 601 516
+1cc56 2 603 516
+1cc58 5 606 516
+1cc5d 2 607 516
+1cc5f 2 608 516
+1cc61 25 615 516
+1cc86 2 617 516
+1cc88 1 627 516
+1cc89 2 642 516
+1cc8b e 579 516
+1cc99 7 581 516
+1cca0 5 582 516
+1cca5 2d 562 516
+1ccd2 6 564 516
+1ccd8 5 565 516
+1ccdd e 687 516
+1cceb 3 689 516
+1ccee 5 690 516
+1ccf3 15 558 516
+1cd08 2 834 516
+1cd0a 5 814 516
+1cd0f 19 817 516
+1cd28 5 819 516
+1cd2d d 795 516
+1cd3a b 798 516
+1cd45 5 799 516
+1cd4a 11 762 516
+1cd5b 5 764 516
+1cd60 1 774 516
+1cd61 5 776 516
+1cd66 16 729 516
+1cd7c 6 731 516
+1cd82 5 732 516
+1cd87 16 704 516
+1cd9d 3 705 516
+1cda0 b 706 516
+1cdab 2 707 516
+1cdad e 708 516
+1cdbb 6 839 516
+1cdc1 2 840 516
+FUNC 1cdc3 45d 18 _store_winword
+1cdc3 10 1035 516
+1cdd3 5 1043 516
+1cdd8 a 1053 516
+1cde2 3 1043 516
+1cde5 6 1053 516
+1cdeb 2 1054 516
+1cded 6 1049 516
+1cdf3 2 1050 516
+1cdf5 6 1046 516
+1cdfb 10 1057 516
+1ce0b 4 1066 516
+1ce0f 8 1067 516
+1ce17 6 1069 516
+1ce1d d 1075 516
+1ce2a a 1076 516
+1ce34 8 1077 516
+1ce3c 4 1078 516
+1ce40 2a 1085 516
+1ce6a b 1087 516
+1ce75 31 1092 516
+1cea6 7 1093 516
+1cead 3 1097 516
+1ceb0 13 1100 516
+1cec3 10 1101 516
+1ced3 b 1102 516
+1cede b 1103 516
+1cee9 9 1106 516
+1cef2 3 1291 516
+1cef5 12 1292 516
+1cf07 11 1114 516
+1cf18 5 1117 516
+1cf1d b 1120 516
+1cf28 37 1125 516
+1cf5f 14 1274 516
+1cf73 c 1277 516
+1cf7f 8 1283 516
+1cf87 4 1284 516
+1cf8b 9 1286 516
+1cf94 c 1287 516
+1cfa0 5 1277 516
+1cfa5 e 1128 516
+1cfb3 7 1133 516
+1cfba 7 1132 516
+1cfc1 7 1130 516
+1cfc8 2 1131 516
+1cfca 5 1134 516
+1cfcf a 1156 516
+1cfd9 7 1158 516
+1cfe0 2 1159 516
+1cfe2 5 1160 516
+1cfe7 11 1175 516
+1cff8 5 1176 516
+1cffd 11 1177 516
+1d00e 6 1178 516
+1d014 2 1179 516
+1d016 5 1180 516
+1d01b b 1225 516
+1d026 13 1226 516
+1d039 4 1228 516
+1d03d 1a 1233 516
+1d057 9 1236 516
+1d060 8 1242 516
+1d068 4 1243 516
+1d06c 9 1246 516
+1d075 8 1247 516
+1d07d 5 1277 516
+1d082 1 1230 516
+1d083 5 1250 516
+1d088 12 1136 516
+1d09a 7 1141 516
+1d0a1 7 1140 516
+1d0a8 7 1138 516
+1d0af 2 1139 516
+1d0b1 5 1142 516
+1d0b6 29 1125 516
+1d0df e 1144 516
+1d0ed 7 1147 516
+1d0f4 2 1146 516
+1d0f6 5 1148 516
+1d0fb 7 1182 516
+1d102 b 1183 516
+1d10d 2 1184 516
+1d10f 6 1185 516
+1d115 12 1187 516
+1d127 17 1188 516
+1d13e c 1191 516
+1d14a 8 1197 516
+1d152 4 1198 516
+1d156 8 1201 516
+1d15e 2 1202 516
+1d160 5 1203 516
+1d165 9 1204 516
+1d16e 1a 1205 516
+1d188 9 1207 516
+1d191 8 1212 516
+1d199 4 1213 516
+1d19d 9 1215 516
+1d1a6 8 1216 516
+1d1ae 2 1220 516
+1d1b0 d 1168 516
+1d1bd 7 1170 516
+1d1c4 2 1171 516
+1d1c6 2 1172 516
+1d1c8 d 1162 516
+1d1d5 7 1164 516
+1d1dc 2 1165 516
+1d1de 2 1166 516
+1d1e0 d 1150 516
+1d1ed 7 1152 516
+1d1f4 2 1153 516
+1d1f6 1b 1268 516
+1d211 3 1272 516
+1d214 5 1273 516
+1d219 7 1194 516
+FUNC 1d220 1af 18 _Strftime_l
+1d220 6 356 516
+1d226 4 361 516
+1d22a 13 362 516
+1d23d 33 364 516
+1d270 33 365 516
+1d2a3 d 368 516
+1d2b0 10 375 516
+1d2c0 e 385 516
+1d2ce a 387 516
+1d2d8 1e 435 516
+1d2f6 4 438 516
+1d2fa a 446 516
+1d304 5 447 516
+1d309 b 452 516
+1d314 3 453 516
+1d317 2 454 516
+1d319 7 400 516
+1d320 1 405 516
+1d321 2 408 516
+1d323 5 409 516
+1d328 1 411 516
+1d329 1 412 516
+1d32a 1d 415 516
+1d347 1 428 516
+1d348 5 385 516
+1d34d 5 464 516
+1d352 5 469 516
+1d357 13 470 516
+1d36a 3 441 516
+1d36d f 478 516
+1d37c b 481 516
+1d387 2 483 516
+1d389 b 402 516
+1d394 2 403 516
+1d396 5 421 516
+1d39b 7 423 516
+1d3a2 2 464 516
+1d3a4 18 485 516
+1d3bc 11 488 516
+1d3cd 2 490 516
+FUNC 1d3cf 1e 14 _strftime_l
+1d3cf 3 291 516
+1d3d2 19 292 516
+1d3eb 2 293 516
+FUNC 1d3ed 1d 10 strftime
+1d3ed 0 300 516
+1d3ed 1c 301 516
+1d409 1 302 516
+FUNC 1d40a 1e 14 _Strftime
+1d40a 3 343 516
+1d40d 19 345 516
+1d426 2 346 516
+FUNC 1d428 26 0 localeconv
+1d428 0 69 3302
+1d428 5 75 3302
+1d42d 1b 78 3302
+1d448 5 79 3302
+1d44d 1 80 3302
+FUNC 1d450 46 8 strcspn
+1d450 4 191 924
+1d454 2 198 924
+1d456 1 199 924
+1d457 1 200 924
+1d458 1 201 924
+1d459 1 202 924
+1d45a 1 203 924
+1d45b 1 204 924
+1d45c 1 205 924
+1d45d 1 206 924
+1d45e 6 212 924
+1d464 2 216 924
+1d466 2 217 924
+1d468 2 218 924
+1d46a 3 219 924
+1d46d 4 220 924
+1d471 2 221 924
+1d473 3 227 924
+1d476 6 229 924
+1d47c 3 234 924
+1d47f 2 236 924
+1d481 2 237 924
+1d483 2 238 924
+1d485 3 239 924
+1d488 4 240 924
+1d48c 2 245 924
+1d48e 2 255 924
+1d490 3 257 924
+1d493 3 259 924
+FUNC 1d496 60 c TranslateName
+1d496 3 340 3849
+1d499 3 342 3849
+1d49c 3 343 3849
+1d49f b 346 3849
+1d4aa a 348 3849
+1d4b4 14 349 3849
+1d4c8 6 351 3849
+1d4ce a 352 3849
+1d4d8 2 353 3849
+1d4da 4 354 3849
+1d4de 2 355 3849
+1d4e0 3 356 3849
+1d4e3 7 346 3849
+1d4ea a 359 3849
+1d4f4 2 360 3849
+FUNC 1d4f6 14 0 GetLcidFromDefault
+1d4f6 0 761 3849
+1d4f6 7 762 3849
+1d4fd c 763 3849
+1d509 1 764 3849
+FUNC 1d50a 77 0 ProcessCodePage
+1d50a 13 784 3849
+1d51d 1a 787 3849
+1d537 11 795 3849
+1d548 8 799 3849
+1d550 2 801 3849
+1d552 18 791 3849
+1d56a 3 793 3849
+1d56d 7 805 3849
+1d574 d 806 3849
+FUNC 1d581 1e 4 TestDefaultCountry
+1d581 0 826 3849
+1d581 2 830 3849
+1d583 15 832 3849
+1d598 3 835 3849
+1d59b 1 836 3849
+1d59c 2 833 3849
+1d59e 1 836 3849
+FUNC 1d59f 32 0 LcidFromHexString
+1d59f 1 893 3849
+1d5a0 2 895 3849
+1d5a2 2 897 3849
+1d5a4 9 899 3849
+1d5ad 5 900 3849
+1d5b2 8 901 3849
+1d5ba 3 902 3849
+1d5bd 10 903 3849
+1d5cd 3 906 3849
+1d5d0 1 907 3849
+FUNC 1d5d1 1b 0 GetPrimaryLen
+1d5d1 0 926 3849
+1d5d1 2 927 3849
+1d5d3 3 930 3849
+1d5d6 12 931 3849
+1d5e8 1 933 3849
+1d5e9 2 935 3849
+1d5eb 1 938 3849
+FUNC 1d5ec 96 4 CountryEnumProc
+1d5ec 15 717 3849
+1d601 7 718 3849
+1d608 f 719 3849
+1d617 23 725 3849
+1d63a 3 728 3849
+1d63d 3 729 3849
+1d640 12 731 3849
+1d652 b 734 3849
+1d65d a 738 3849
+1d667 b 741 3849
+1d672 10 742 3849
+FUNC 1d682 72 8 TestDefaultLanguage
+1d682 11 858 3849
+1d693 22 864 3849
+1d6b5 4 865 3849
+1d6b9 d 867 3849
+1d6c6 1c 871 3849
+1d6e2 2 872 3849
+1d6e4 3 874 3849
+1d6e7 d 875 3849
+FUNC 1d6f4 1d0 4 LangCountryEnumProc
+1d6f4 16 435 3849
+1d70a 7 436 3849
+1d711 d 437 3849
+1d71e 27 444 3849
+1d745 4 447 3849
+1d749 8 448 3849
+1d751 16 450 3849
+1d767 1d 456 3849
+1d784 2 460 3849
+1d786 11 462 3849
+1d797 7 467 3849
+1d79e 5 468 3849
+1d7a3 6 472 3849
+1d7a9 1a 475 3849
+1d7c3 14 482 3849
+1d7d7 3 483 3849
+1d7da a 487 3849
+1d7e4 b 490 3849
+1d7ef 6 493 3849
+1d7f5 3 494 3849
+1d7f8 12 501 3849
+1d80a 1d 506 3849
+1d827 6 510 3849
+1d82d c 513 3849
+1d839 16 518 3849
+1d84f 8 522 3849
+1d857 14 528 3849
+1d86b 2 531 3849
+1d86d 2 540 3849
+1d86f 1b 550 3849
+1d88a f 553 3849
+1d899 7 557 3849
+1d8a0 5 558 3849
+1d8a5 3 559 3849
+1d8a8 b 566 3849
+1d8b3 11 567 3849
+FUNC 1d8c4 bf 4 LanguageEnumProc
+1d8c4 15 624 3849
+1d8d9 7 625 3849
+1d8e0 f 626 3849
+1d8ef 23 632 3849
+1d912 3 635 3849
+1d915 3 636 3849
+1d918 11 639 3849
+1d929 7 643 3849
+1d930 2 650 3849
+1d932 1d 651 3849
+1d94f f 654 3849
+1d95e a 658 3849
+1d968 b 662 3849
+1d973 10 663 3849
+FUNC 1d983 2c 0 GetLcidFromCountry
+1d983 0 686 3849
+1d983 10 687 3849
+1d993 11 689 3849
+1d9a4 6 693 3849
+1d9aa 4 694 3849
+1d9ae 1 695 3849
+FUNC 1d9af 65 0 GetLcidFromLangCountry
+1d9af 0 386 3849
+1d9af 7 388 3849
+1d9b6 1a 389 3849
+1d9d0 5 390 3849
+1d9d5 17 392 3849
+1d9ec 10 394 3849
+1d9fc 13 402 3849
+1da0f 4 403 3849
+1da13 1 404 3849
+FUNC 1da14 3c 0 GetLcidFromLanguage
+1da14 0 591 3849
+1da14 13 593 3849
+1da27 e 594 3849
+1da35 10 596 3849
+1da45 6 600 3849
+1da4b 4 601 3849
+1da4f 1 602 3849
+FUNC 1da50 1e3 c __get_qualified_locale
+1da50 4 205 3849
+1da54 5 208 3849
+1da59 12 212 3849
+1da6b 7 215 3849
+1da72 5 217 3849
+1da77 3 222 3849
+1da7a f 223 3849
+1da89 10 226 3849
+1da99 d 230 3849
+1daa6 a 232 3849
+1dab0 5 235 3849
+1dab5 2 237 3849
+1dab7 5 240 3849
+1dabc 5 243 3849
+1dac1 14 248 3849
+1dad5 a 250 3849
+1dadf 5 252 3849
+1dae4 2 254 3849
+1dae6 5 256 3849
+1daeb 2 261 3849
+1daed a 263 3849
+1daf7 28 266 3849
+1db1f 2 268 3849
+1db21 13 271 3849
+1db34 3 277 3849
+1db37 6 278 3849
+1db3d 17 281 3849
+1db54 32 285 3849
+1db86 d 289 3849
+1db93 6 290 3849
+1db99 8 293 3849
+1dba1 7 295 3849
+1dba8 8 296 3849
+1dbb0 4 297 3849
+1dbb4 8 301 3849
+1dbbc d 305 3849
+1dbc9 23 306 3849
+1dbec 2 307 3849
+1dbee f 308 3849
+1dbfd 2 309 3849
+1dbff 12 311 3849
+1dc11 2 312 3849
+1dc13 14 313 3849
+1dc27 5 315 3849
+1dc2c 6 286 3849
+1dc32 1 316 3849
+FUNC 1dc33 12 0 cmpResult
+FUNC 1dc45 18 0 cmpBYTE
+FUNC 1dc5d 40 0 cmpWORD
+FUNC 1dc9d 78 0 cmpDWORD
+FUNC 1dd15 1490 0 unaligned_memcmp
+FUNC 1f1a5 1680 c memcmp
+FUNC 20825 be c strncmp
+20825 4 42 876
+20829 5 43 876
+2082e 7 45 876
+20835 7 46 876
+2083c 6 48 876
+20842 d 51 876
+2084f 11 56 876
+20860 c 61 876
+2086c c 66 876
+20878 15 71 876
+2088d 2 81 876
+2088f a 73 876
+20899 a 68 876
+208a3 a 63 876
+208ad 10 58 876
+208bd 2 79 876
+208bf a 81 876
+208c9 1 85 876
+208ca 4 86 876
+208ce 5 79 876
+208d3 4 89 876
+208d7 2 90 876
+208d9 a 83 876
+FUNC 208f0 40 8 strpbrk
+208f0 4 191 869
+208f4 2 198 869
+208f6 1 199 869
+208f7 1 200 869
+208f8 1 201 869
+208f9 1 202 869
+208fa 1 203 869
+208fb 1 204 869
+208fc 1 205 869
+208fd 1 206 869
+208fe 6 212 869
+20904 2 216 869
+20906 2 217 869
+20908 2 218 869
+2090a 3 219 869
+2090d 4 220 869
+20911 2 221 869
+20913 5 227 869
+20918 2 236 869
+2091a 2 237 869
+2091c 2 238 869
+2091e 3 239 869
+20921 4 240 869
+20925 2 247 869
+20927 3 248 869
+2092a 3 257 869
+2092d 3 259 869
+FUNC 20930 82 c _iswctype_l
+20930 6 66 6445
+20936 8 69 6445
+2093e 6 70 6445
+20944 8 71 6445
+2094c 18 72 6445
+20964 2 73 6445
+20966 b 75 6445
+20971 25 85 6445
+20996 3 86 6445
+20999 d 87 6445
+209a6 a 89 6445
+209b0 2 90 6445
+FUNC 209b2 6e 8 iswctype
+209b2 4 96 6445
+209b6 8 97 6445
+209be 2 99 6445
+209c0 2 122 6445
+209c2 8 101 6445
+209ca 14 103 6445
+209de 2 122 6445
+209e0 9 106 6445
+209e9 25 117 6445
+20a0e 10 121 6445
+20a1e 2 122 6445
+FUNC 20a20 5 8 is_wctype
+20a20 0 148 6445
+20a20 5 149 6445
+FUNC 20a25 22b 14 strtoxl
+20a25 8 80 6309
+20a2d b 86 6309
+20a38 3 89 6309
+20a3b b 92 6309
+20a46 30 94 6309
+20a76 11 95 6309
+20a87 c 100 6309
+20a93 34 101 6309
+20ac7 5 102 6309
+20acc 5 104 6309
+20ad1 4 105 6309
+20ad5 2 106 6309
+20ad7 5 108 6309
+20adc 3 109 6309
+20adf 1d 111 6309
+20afc 4 118 6309
+20b00 5 121 6309
+20b05 9 122 6309
+20b0e a 123 6309
+20b18 9 126 6309
+20b21 7 124 6309
+20b28 2 129 6309
+20b2a 5 140 6309
+20b2f f 142 6309
+20b3e 1 143 6309
+20b3f 9 144 6309
+20b48 8 149 6309
+20b50 c 154 6309
+20b5c 8 155 6309
+20b64 7 156 6309
+20b6b 13 157 6309
+20b7e 5 160 6309
+20b83 4 164 6309
+20b87 b 171 6309
+20b92 4 177 6309
+20b96 6 178 6309
+20b9c 8 190 6309
+20ba4 6 193 6309
+20baa 3 195 6309
+20bad 4 196 6309
+20bb1 2 198 6309
+20bb3 c 173 6309
+20bbf 3 185 6309
+20bc2 2 186 6309
+20bc4 24 201 6309
+20be8 5 204 6309
+20bed c 205 6309
+20bf9 6 206 6309
+20bff 10 207 6309
+20c0f 7 213 6309
+20c16 2 215 6309
+20c18 6 217 6309
+20c1e 3 219 6309
+20c21 12 221 6309
+20c33 7 113 6309
+20c3a 2 115 6309
+20c3c 12 116 6309
+20c4e 2 222 6309
+FUNC 20c50 29 c strtol
+20c50 3 229 6309
+20c53 8 230 6309
+20c5b 13 232 6309
+20c6e 9 236 6309
+20c77 2 238 6309
+FUNC 20c79 1b 10 _strtol_l
+20c79 0 246 6309
+20c79 1a 247 6309
+20c93 1 248 6309
+FUNC 20c94 2a c strtoul
+20c94 3 255 6309
+20c97 7 256 6309
+20c9e 14 258 6309
+20cb2 a 262 6309
+20cbc 2 264 6309
+FUNC 20cbe 1b 10 _strtoul_l
+20cbe 0 272 6309
+20cbe 1a 273 6309
+20cd8 1 274 6309
+FUNC 20cd9 1f 0 __initconin
+20cd9 0 58 5008
+20cd9 1e 65 5008
+20cf7 1 67 5008
+FUNC 20cf8 1f 0 __initconout
+20cf8 0 90 5008
+20cf8 1e 97 5008
+20d16 1 98 5008
+FUNC 20d17 2d 0 __termcon
+20d17 0 120 5008
+20d17 16 121 5008
+20d2d 3 122 5008
+20d30 f 125 5008
+20d3f 4 126 5008
+20d43 1 128 5008
+FUNC 20d44 94 4 _close_nolock
+20d44 1 72 5094
+20d45 54 93 5094
+20d99 a 99 5094
+20da3 2 96 5094
+20da5 6 101 5094
+20dab b 103 5094
+20db6 11 105 5094
+20dc7 7 107 5094
+20dce 5 108 5094
+20dd3 4 111 5094
+20dd7 1 112 5094
+FUNC 20dd8 cd 4 _close
+20dd8 c 42 5094
+20de4 23 46 5094
+20e07 2f 47 5094
+20e36 20 48 5094
+20e56 7 50 5094
+20e5d 3 52 5094
+20e60 9 53 5094
+20e69 c 54 5094
+20e75 2 55 5094
+20e77 b 56 5094
+20e82 4 57 5094
+20e86 c 61 5094
+20e92 3 65 5094
+20e95 6 66 5094
+20e9b a 62 5094
+FUNC 20ea5 2c 4 _freebuf
+20ea5 1 47 1927
+20ea6 f 50 1927
+20eb5 8 52 1927
+20ebd 7 54 1927
+20ec4 8 55 1927
+20ecc 4 56 1927
+20ed0 1 58 1927
+FUNC 20ed1 2a 0 _purecall
+20ed1 0 43 3119
+20ed1 b 44 3119
+20edc 5 45 3119
+20ee1 2 47 3119
+20ee3 7 54 3119
+20eea c 56 3119
+20ef6 5 57 3119
+FUNC 20efb 22 4 _set_purecall_handler
+20efb 1 82 3119
+20efc b 85 3119
+20f07 12 86 3119
+20f19 3 88 3119
+20f1c 1 89 3119
+FUNC 20f1d d 0 _get_purecall_handler
+20f1d 0 92 3119
+20f1d c 93 3119
+20f29 1 94 3119
+FUNC 20f30 34 0 _allmul
+20f30 0 47 5116
+20f30 4 62 5116
+20f34 4 63 5116
+20f38 2 64 5116
+20f3a 4 65 5116
+20f3e 2 66 5116
+20f40 4 68 5116
+20f44 2 69 5116
+20f46 3 71 5116
+20f49 1 74 5116
+20f4a 2 81 5116
+20f4c 2 82 5116
+20f4e 4 84 5116
+20f52 4 85 5116
+20f56 2 86 5116
+20f58 4 88 5116
+20f5c 2 89 5116
+20f5e 2 90 5116
+20f60 1 92 5116
+20f61 3 94 5116
+FUNC 20f64 11 4 atol
+20f64 0 55 6631
+20f64 10 56 6631
+20f74 1 57 6631
+FUNC 20f75 15 8 _atol_l
+20f75 0 64 6631
+20f75 14 65 6631
+20f89 1 66 6631
+FUNC 20f8a 5 4 atoi
+20f8a 0 99 6631
+20f8a 5 100 6631
+FUNC 20f8f 5 8 _atoi_l
+20f8f 0 107 6631
+20f8f 5 108 6631
+FUNC 20f94 11 4 _atoi64
+20f94 0 143 6631
+20f94 10 144 6631
+20fa4 1 145 6631
+FUNC 20fa5 15 8 _atoi64_l
+20fa5 0 151 6631
+20fa5 14 152 6631
+20fb9 1 153 6631
+FUNC 20fba 50 0 has_osfxsr_set
+FUNC 2100a 60 0 _get_sse2_info
+FUNC 2106a d 0 __sse2_available_init
+FUNC 21077 170 8 _flswbuf
+21077 5 93 1980
+2107c c 104 1980
+21088 8 106 1980
+21090 b 107 1980
+2109b 4 108 1980
+2109f a 109 1980
+210a9 4 110 1980
+210ad b 111 1980
+210b8 2 113 1980
+210ba 4 124 1980
+210be 4 125 1980
+210c2 8 126 1980
+210ca 3 127 1980
+210cd 8 128 1980
+210d5 3 137 1980
+210d8 11 138 1980
+210e9 9 141 1980
+210f2 25 151 1980
+21117 7 153 1980
+2111e d 158 1980
+2112b 5 162 1980
+21130 5 163 1980
+21135 7 164 1980
+2113c 7 166 1980
+21143 10 167 1980
+21153 2 168 1980
+21155 6 131 1980
+2115b 5 132 1980
+21160 2e 169 1980
+2118e 13 171 1980
+211a1 2 174 1980
+211a3 9 181 1980
+211ac 2 186 1980
+211ae 1d 195 1980
+211cb 5 201 1980
+211d0 4 202 1980
+211d4 7 203 1980
+211db a 209 1980
+211e5 2 212 1980
+FUNC 211e7 182 4 _wchartodigit
+211e7 0 32 6613
+211e7 1b 41 6613
+21202 1 73 6613
+21203 e 42 6613
+21211 19 44 6613
+2122a 1 73 6613
+2122b 14 45 6613
+2123f 14 46 6613
+21253 14 47 6613
+21267 14 48 6613
+2127b 14 49 6613
+2128f 14 50 6613
+212a3 18 51 6613
+212bb 18 52 6613
+212d3 18 53 6613
+212eb 14 54 6613
+212ff 14 55 6613
+21313 12 56 6613
+21325 14 57 6613
+21339 14 58 6613
+2134d c 59 6613
+21359 2 62 6613
+2135b 4 67 6613
+2135f 6 69 6613
+21365 3 71 6613
+21368 1 73 6613
+FUNC 21369 b6 c _isctype_l
+21369 7 114 6399
+21370 b 118 6399
+2137b d 121 6399
+21388 f 122 6399
+21397 1f 124 6399
+213b6 3 126 6399
+213b9 d 129 6399
+213c6 2 130 6399
+213c8 a 133 6399
+213d2 26 144 6399
+213f8 10 146 6399
+21408 15 149 6399
+2141d 2 150 6399
+FUNC 2141f 2f 8 _isctype
+2141f 0 156 6399
+2141f 9 157 6399
+21428 12 159 6399
+2143a 1 165 6399
+2143b 12 163 6399
+2144d 1 165 6399
+FUNC 21450 2c 0 _alloca_probe_16
+21450 0 44 2632
+21450 1 46 2632
+21451 4 47 2632
+21455 2 48 2632
+21457 3 49 2632
+2145a 2 50 2632
+2145c 2 51 2632
+2145e 2 52 2632
+21460 1 53 2632
+21461 5 54 2632
+21466 1 59 2632
+21467 4 60 2632
+2146b 2 61 2632
+2146d 3 62 2632
+21470 2 63 2632
+21472 2 64 2632
+21474 2 65 2632
+21476 1 66 2632
+21477 5 67 2632
+PUBLIC 21466 0 _alloca_probe_8
+FUNC 2147c 47 4 __ansicp
+2147c 10 39 2934
+2148c 1c 44 2934
+214a8 3 45 2934
+214ab 2 46 2934
+214ad a 47 2934
+214b7 c 49 2934
+FUNC 214c3 1b2 18 __convertcp
+214c3 16 79 2934
+214d9 10 83 2934
+214e9 18 85 2934
+21501 17 90 2934
+21518 13 92 2934
+2152b 6 93 2934
+21531 d 99 2934
+2153e 2 101 2934
+21540 c 103 2934
+2154c 2a 115 2934
+21576 15 111 2934
+2158b 7 112 2934
+21592 1c 115 2934
+215ae 3 116 2934
+215b1 2 117 2934
+215b3 10 119 2934
+215c3 15 127 2934
+215d8 7 129 2934
+215df 18 138 2934
+215f7 3 139 2934
+215fa 2 140 2934
+215fc 1f 149 2934
+2161b 11 151 2934
+2162c 12 160 2934
+2163e 9 162 2934
+21647 3 163 2934
+2164a 2 164 2934
+2164c 6 165 2934
+21652 5 166 2934
+21657 9 174 2934
+21660 3 177 2934
+21663 12 178 2934
+FUNC 21675 34 4 _get_daylight
+21675 0 35 487
+21675 27 36 487
+2169c 1 41 487
+2169d 8 39 487
+216a5 3 40 487
+216a8 1 41 487
+FUNC 216a9 34 4 _get_dstbias
+216a9 0 44 487
+216a9 27 45 487
+216d0 1 50 487
+216d1 8 48 487
+216d9 3 49 487
+216dc 1 50 487
+FUNC 216dd 34 4 _get_timezone
+216dd 0 53 487
+216dd 27 54 487
+21704 1 59 487
+21705 8 57 487
+2170d 3 58 487
+21710 1 59 487
+FUNC 21711 a2 10 _get_tzname
+21711 3 62 487
+21714 10 63 487
+21724 4 64 487
+21728 3 66 487
+2172b 7 68 487
+21732 27 69 487
+21759 20 63 487
+21779 f 72 487
+21788 8 73 487
+21790 4 76 487
+21794 5 78 487
+21799 5 80 487
+2179e 13 82 487
+217b1 2 83 487
+FUNC 217b3 6 0 __daylight
+217b3 0 118 487
+217b3 5 119 487
+217b8 1 120 487
+FUNC 217b9 6 0 __dstbias
+217b9 0 123 487
+217b9 5 124 487
+217be 1 125 487
+FUNC 217bf 6 0 __timezone
+217bf 0 128 487
+217bf 5 129 487
+217c4 1 130 487
+FUNC 217c5 6 0 __tzname
+217c5 0 133 487
+217c5 5 134 487
+217ca 1 135 487
+FUNC 217cb c 4 _set_daylight
+217cb c 189 418
+FUNC 217d7 c 4 _set_dstbias
+217d7 c 190 418
+FUNC 217e3 c 4 _set_timezone
+217e3 c 191 418
+FUNC 217ef 349 0 _tzset_nolock
+217ef c 124 440
+217fb 5 127 440
+21800 3 129 440
+21803 3 130 440
+21806 3 131 440
+21809 3 132 440
+2180c 3 133 440
+2180f 8 135 440
+21817 3 136 440
+2181a 8 139 440
+21822 1b 142 440
+2183d 1b 143 440
+21858 1b 144 440
+21873 8 149 440
+2187b 6 154 440
+21881 f 160 440
+21890 18 165 440
+218a8 14 260 440
+218bc b 268 440
+218c7 4 274 440
+218cb 7 275 440
+218d2 16 277 440
+218e8 6 281 440
+218ee 32 283 440
+21920 9 174 440
+21929 7 175 440
+21930 6 176 440
+21936 13 179 440
+21949 9 183 440
+21952 b 188 440
+2195d 9 190 440
+21966 e 191 440
+21974 12 199 440
+21986 3 201 440
+21989 c 203 440
+21995 2 205 440
+21997 3 206 440
+2199a 3 214 440
+2199d 27 234 440
+219c4 8 235 440
+219cc 2 236 440
+219ce 7 237 440
+219d5 23 247 440
+219f8 9 248 440
+21a01 2 249 440
+21a03 8 250 440
+21a0b 7 256 440
+21a12 a 288 440
+21a1c a 289 440
+21a26 a 290 440
+21a30 c 292 440
+21a3c 9 296 440
+21a45 23 301 440
+21a68 8 310 440
+21a70 7 311 440
+21a77 1 312 440
+21a78 10 318 440
+21a88 11 320 440
+21a99 5 292 440
+21a9e 9 293 440
+21aa7 5 325 440
+21aac e 329 440
+21aba d 330 440
+21ac7 5 335 440
+21acc b 339 440
+21ad7 d 340 440
+21ae4 5 344 440
+21ae9 3 345 440
+21aec 6 350 440
+21af2 4 351 440
+21af6 21 352 440
+21b17 2 354 440
+21b19 5 355 440
+21b1e a 357 440
+21b28 a 358 440
+21b32 6 360 440
+FUNC 21b38 1f5 24 cvtdate
+21b38 6 409 440
+21b3e 4 412 440
+21b42 c 414 440
+21b4e 52 424 440
+21ba0 4c 430 440
+21bec 14 436 440
+21c00 2 437 440
+21c02 2 438 440
+21c04 46 447 440
+21c4a 3 449 440
+21c4d 2 452 440
+21c4f 3c 457 440
+21c8b 3 459 440
+21c8e 27 467 440
+21cb5 6 472 440
+21cbb 2 474 440
+21cbd 29 485 440
+21ce6 11 486 440
+21cf7 a 487 440
+21d01 8 488 440
+21d09 d 490 440
+21d16 6 491 440
+21d1c 6 492 440
+21d22 9 499 440
+21d2b 2 503 440
+FUNC 21d2d 1ae 0 _isindst_nolock
+21d2d 5 554 440
+21d32 20 558 440
+21d52 5 560 440
+21d57 7 561 440
+21d5e 1b 568 440
+21d79 c 569 440
+21d85 7 573 440
+21d8c 34 584 440
+21dc0 2 585 440
+21dc2 19 596 440
+21ddb 40 611 440
+21e1b 2 612 440
+21e1d 1e 623 440
+21e3b 2 626 440
+21e3d 14 641 440
+21e51 1a 653 440
+21e6b d 660 440
+21e78 d 664 440
+21e85 8 666 440
+21e8d 4 674 440
+21e91 2 697 440
+21e93 8 673 440
+21e9b 8 675 440
+21ea3 4 676 440
+21ea7 14 679 440
+21ebb 4 681 440
+21ebf b 682 440
+21eca 2 685 440
+21ecc d 691 440
+21ed9 2 694 440
+FUNC 21edb 4f 0 __tzset
+21edb c 85 440
+21ee7 a 88 440
+21ef1 8 90 440
+21ef9 3 91 440
+21efc 8 93 440
+21f04 5 94 440
+21f09 6 95 440
+21f0f c 98 440
+21f1b 6 103 440
+21f21 9 99 440
+FUNC 21f2a 38 0 _tzset
+21f2a c 109 440
+21f36 8 110 440
+21f3e 4 111 440
+21f42 5 113 440
+21f47 c 115 440
+21f53 6 118 440
+21f59 9 116 440
+FUNC 21f62 41 4 _isindst
+21f62 c 538 440
+21f6e 8 541 440
+21f76 4 542 440
+21f7a b 543 440
+21f85 c 544 440
+21f91 3 548 440
+21f94 6 549 440
+21f9a 9 545 440
+FUNC 21fa3 35 8 __ascii_stricmp
+21fa3 a 75 693
+21fad c 80 693
+21fb9 3 81 693
+21fbc c 82 693
+21fc8 3 83 693
+21fcb 9 85 693
+21fd4 3 87 693
+21fd7 1 88 693
+FUNC 21fd8 d3 c _stricmp_l
+21fd8 7 47 693
+21fdf b 49 693
+21fea 36 52 693
+22020 32 53 693
+22052 8 55 693
+2205a e 57 693
+22068 15 63 693
+2207d 11 64 693
+2208e 8 65 693
+22096 13 68 693
+220a9 2 69 693
+FUNC 220ab 50 8 _stricmp
+220ab 4 94 693
+220af a 95 693
+220b9 24 98 693
+220dd 6 99 693
+220e3 1 107 693
+220e4 5 101 693
+220e9 10 105 693
+220f9 2 107 693
+FUNC 220fb f0 10 _strnicmp_l
+220fb 7 51 650
+22102 d 54 650
+2210f b 56 650
+2211a 33 59 650
+2214d 7 60 650
+22154 32 61 650
+22186 8 63 650
+2218e 1d 65 650
+221ab 15 71 650
+221c0 11 72 650
+221d1 d 74 650
+221de 6 76 650
+221e4 5 79 650
+221e9 2 80 650
+FUNC 221eb 5c c _strnicmp
+221eb 4 125 650
+221ef a 127 650
+221f9 24 130 650
+2221d 5 131 650
+22222 a 132 650
+2222c 1 141 650
+2222d 5 134 650
+22232 13 138 650
+22245 2 141 650
+FUNC 22247 db c xtoa_s
+22247 8 93 6581
+2224f 24 102 6581
+22273 24 103 6581
+22297 19 105 6581
+222b0 b 106 6581
+222bb a 112 6581
+222c5 6 114 6581
+222cb 7 116 6581
+222d2 2 118 6581
+222d4 2 121 6581
+222d6 5 124 6581
+222db 5 128 6581
+222e0 3 129 6581
+222e3 2 130 6581
+222e5 6 131 6581
+222eb 3 135 6581
+222ee e 136 6581
+222fc 8 139 6581
+22304 2 141 6581
+22306 2 142 6581
+22308 3 148 6581
+2230b 6 152 6581
+22311 3 154 6581
+22314 1 155 6581
+22315 4 156 6581
+22319 5 158 6581
+2231e 4 160 6581
+FUNC 22322 28 10 _itoa_s
+22322 3 172 6581
+22325 d 175 6581
+22332 4 176 6581
+22336 2 177 6581
+22338 10 178 6581
+22348 2 181 6581
+FUNC 2234a 25 10 _ltoa_s
+2234a 3 189 6581
+2234d 20 190 6581
+2236d 2 191 6581
+FUNC 2236f 18 10 _ultoa_s
+2236f 0 199 6581
+2236f 17 200 6581
+22386 1 201 6581
+FUNC 22387 f6 14 x64toa_s
+22387 7 309 6581
+2238e 25 318 6581
+223b3 5 319 6581
+223b8 19 321 6581
+223d1 b 322 6581
+223dc 3 327 6581
+223df 20 333 6581
+223ff 3 336 6581
+22402 1e 352 6581
+22420 3 344 6581
+22423 2 345 6581
+22425 5 346 6581
+2242a 5 351 6581
+2242f 13 352 6581
+22442 5 355 6581
+22447 3 357 6581
+2244a 13 358 6581
+2245d 4 364 6581
+22461 9 368 6581
+2246a 3 370 6581
+2246d 1 371 6581
+2246e 7 372 6581
+22475 4 375 6581
+22479 4 377 6581
+FUNC 2247d 33 14 _i64toa_s
+2247d 3 390 6581
+22480 2e 391 6581
+224ae 2 392 6581
+FUNC 224b0 1d 14 _ui64toa_s
+224b0 4 400 6581
+224b4 17 401 6581
+224cb 2 402 6581
+FUNC 224cd 224 1c __crtGetStringTypeW_stat
+224cd 10 64 2828
+224dd 9 72 2828
+224e6 7 73 2828
+224ed 14 75 2828
+22501 11 79 2828
+22512 8 80 2828
+2251a b 82 2828
+22525 f 83 2828
+22534 4 88 2828
+22538 13 90 2828
+2254b 7 95 2828
+22552 2 199 2828
+22554 8 119 2828
+2255c b 120 2828
+22567 5 121 2828
+2256c b 122 2828
+22577 e 128 2828
+22585 5 130 2828
+2258a 3 131 2828
+2258d 1d 142 2828
+225aa 6 143 2828
+225b0 40 146 2828
+225f0 3 147 2828
+225f3 6 148 2828
+225f9 d 150 2828
+22606 1a 160 2828
+22620 4d 164 2828
+2266d 4 165 2828
+22671 5 170 2828
+22676 b 171 2828
+22681 3 174 2828
+22684 23 178 2828
+226a7 12 186 2828
+226b9 f 189 2828
+226c8 4 187 2828
+226cc 7 191 2828
+226d3 8 194 2828
+226db 4 196 2828
+226df 12 200 2828
+FUNC 226f1 3e 1c __crtGetStringTypeW
+226f1 6 211 2828
+226f7 b 212 2828
+22702 2b 222 2828
+2272d 2 223 2828
+FUNC 2272f 294 14 strtoxq
+2272f 8 80 6264
+22737 b 86 6264
+22742 3 89 6264
+22745 b 92 6264
+22750 31 94 6264
+22781 12 95 6264
+22793 c 100 6264
+2279f 37 102 6264
+227d6 2 103 6264
+227d8 9 105 6264
+227e1 4 106 6264
+227e5 2 107 6264
+227e7 6 109 6264
+227ed 9 110 6264
+227f6 8 112 6264
+227fe 6 115 6264
+22804 9 116 6264
+2280d a 117 6264
+22817 9 120 6264
+22820 3 118 6264
+22823 5 123 6264
+22828 10 125 6264
+22838 1 126 6264
+22839 9 127 6264
+22842 26 132 6264
+22868 e 137 6264
+22876 8 138 6264
+2287e 6 139 6264
+22884 11 140 6264
+22895 5 143 6264
+2289a 31 154 6264
+228cb 4 160 6264
+228cf 6 161 6264
+228d5 a 173 6264
+228df 7 176 6264
+228e6 6 178 6264
+228ec 6 179 6264
+228f2 5 181 6264
+228f7 19 156 6264
+22910 b 168 6264
+2291b 5 169 6264
+22920 35 184 6264
+22955 5 187 6264
+2295a c 188 6264
+22966 a 189 6264
+22970 6 190 6264
+22976 7 191 6264
+2297d 2 192 6264
+2297f 7 193 6264
+22986 8 195 6264
+2298e 5 197 6264
+22993 6 199 6264
+22999 13 201 6264
+229ac 15 203 6264
+229c1 2 204 6264
+FUNC 229c3 29 c _strtoi64
+229c3 3 211 6264
+229c6 8 212 6264
+229ce 13 214 6264
+229e1 9 218 6264
+229ea 2 220 6264
+FUNC 229ec 1b 10 _strtoi64_l
+229ec 0 227 6264
+229ec 1a 228 6264
+22a06 1 229 6264
+FUNC 22a07 2a c _strtoui64
+22a07 3 236 6264
+22a0a 7 237 6264
+22a11 14 239 6264
+22a25 a 243 6264
+22a2f 2 245 6264
+FUNC 22a31 1b 10 _strtoui64_l
+22a31 0 253 6264
+22a31 1a 254 6264
+22a4b 1 255 6264
+FUNC 22a50 2b 0 _chkstk
+22a50 0 65 2634
+22a50 1 69 2634
+22a51 4 73 2634
+22a55 2 74 2634
+22a57 2 79 2634
+22a59 2 80 2634
+22a5b 2 81 2634
+22a5d 2 83 2634
+22a5f 5 84 2634
+22a64 2 87 2634
+22a66 2 88 2634
+22a68 2 89 2634
+22a6a 1 90 2634
+22a6b 1 91 2634
+22a6c 2 92 2634
+22a6e 3 93 2634
+22a71 1 94 2634
+22a72 5 98 2634
+22a77 2 99 2634
+22a79 2 100 2634
+FUNC 22a7b 81 4 _getenv_helper_nolock
+22a7b 0 95 3904
+22a7b 10 103 3904
+22a8b 3 104 3904
+22a8e 1 169 3904
+22a8f e 128 3904
+22a9d 7 131 3904
+22aa4 2 132 3904
+22aa6 6 135 3904
+22aac c 140 3904
+22ab8 9 142 3904
+22ac1 2 150 3904
+22ac3 22 154 3904
+22ae5 3 164 3904
+22ae8 6 150 3904
+22aee 5 168 3904
+22af3 9 169 3904
+FUNC 22afc 93 c _getenv_s_helper
+22afc 7 220 3904
+22b03 21 224 3904
+22b24 15 226 3904
+22b39 4 227 3904
+22b3d 3 229 3904
+22b40 a 233 3904
+22b4a 3 234 3904
+22b4d 2 236 3904
+22b4f 7 239 3904
+22b56 6 240 3904
+22b5c 2 243 3904
+22b5e 5 246 3904
+22b63 5 251 3904
+22b68 20 254 3904
+22b88 5 256 3904
+22b8d 2 257 3904
+FUNC 22b8f a2 8 _dupenv_s_helper
+22b8f 6 339 3904
+22b95 21 344 3904
+22bb6 9 346 3904
+22bbf 2 348 3904
+22bc1 5 350 3904
+22bc6 8 352 3904
+22bce 6 353 3904
+22bd4 2 355 3904
+22bd6 9 358 3904
+22bdf b 362 3904
+22bea 6 364 3904
+22bf0 b 366 3904
+22bfb 9 367 3904
+22c04 1e 370 3904
+22c22 7 371 3904
+22c29 2 373 3904
+22c2b 4 375 3904
+22c2f 2 376 3904
+FUNC 22c31 83 4 getenv
+22c31 c 75 3904
+22c3d 2a 78 3904
+22c67 18 79 3904
+22c7f 8 81 3904
+22c87 3 82 3904
+22c8a c 83 3904
+22c96 c 85 3904
+22ca2 3 89 3904
+22ca5 6 90 3904
+22cab 9 86 3904
+FUNC 22cb4 d8 10 getenv_s
+22cb4 c 198 3904
+22cc0 8 201 3904
+22cc8 5 202 3904
+22ccd a1 203 3904
+22d6e c 205 3904
+22d7a 3 209 3904
+22d7d 6 210 3904
+22d83 9 206 3904
+FUNC 22d8c e6 c _dupenv_s
+22d8c c 303 3904
+22d98 8 306 3904
+22da0 5 307 3904
+22da5 af 311 3904
+22e54 c 314 3904
+22e60 3 318 3904
+22e63 6 319 3904
+22e69 9 315 3904
+FUNC 22e72 8 4 _tolower
+22e72 0 48 6218
+22e72 7 49 6218
+22e79 1 50 6218
+FUNC 22e7a 117 8 _tolower_l
+22e7a 8 70 6218
+22e82 b 74 6218
+22e8d c 77 6218
+22e99 31 79 6218
+22eca f 80 6218
+22ed9 14 82 6218
+22eed 2b 86 6218
+22f18 3 88 6218
+22f1b d 91 6218
+22f28 2 92 6218
+22f2a b 94 6218
+22f35 a 97 6218
+22f3f 25 110 6218
+22f64 6 112 6218
+22f6a 5 116 6218
+22f6f 6 117 6218
+22f75 1a 119 6218
+22f8f 2 120 6218
+FUNC 22f91 27 4 tolower
+22f91 0 143 6218
+22f91 9 145 6218
+22f9a f 147 6218
+22fa9 1 153 6218
+22faa d 151 6218
+22fb7 1 153 6218
+FUNC 22fc0 61 c __ascii_strnicmp
+22fc0 6 69 871
+22fc6 3 75 871
+22fc9 2 76 871
+22fcb 2 77 871
+22fcd 3 79 871
+22fd0 3 80 871
+22fd3 2 82 871
+22fd5 2 83 871
+22fd7 5 84 871
+22fdc 2 89 871
+22fde 2 91 871
+22fe0 2 93 871
+22fe2 2 95 871
+22fe4 2 97 871
+22fe6 2 98 871
+22fe8 3 100 871
+22feb 3 101 871
+22fee 2 103 871
+22ff0 2 104 871
+22ff2 2 106 871
+22ff4 2 107 871
+22ff6 2 109 871
+22ff8 2 112 871
+22ffa 2 113 871
+22ffc 2 115 871
+22ffe 2 116 871
+23000 2 118 871
+23002 2 121 871
+23004 2 122 871
+23006 3 124 871
+23009 2 125 871
+2300b 2 128 871
+2300d 2 129 871
+2300f 2 130 871
+23011 5 133 871
+23016 2 134 871
+23018 2 135 871
+2301a 2 138 871
+2301c 5 140 871
+FUNC 23021 ec 10 _mbsnbicoll_l
+23021 7 53 4518
+23028 b 55 4518
+23033 9 57 4518
+2303c 13 58 4518
+2304f 33 61 4518
+23082 6 62 4518
+23088 23 63 4518
+230ab 8 65 4518
+230b3 14 66 4518
+230c7 23 74 4518
+230ea 10 75 4518
+230fa 11 77 4518
+2310b 2 79 4518
+FUNC 2310d 17 c _mbsnbicoll
+2310d 0 85 4518
+2310d 16 86 4518
+23123 1 87 4518
+FUNC 23124 95 0 __wtomb_environ
+23124 7 43 2699
+2312b 3 44 2699
+2312e 9 45 2699
+23137 c 52 2699
+23143 12 57 2699
+23155 11 61 2699
+23166 12 65 2699
+23178 10 72 2699
+23188 5 74 2699
+2318d 9 76 2699
+23196 3 77 2699
+23199 9 81 2699
+231a2 5 84 2699
+231a7 2 85 2699
+231a9 5 58 2699
+231ae 9 67 2699
+231b7 2 68 2699
+FUNC 231b9 1a 8 strnlen
+231b9 0 38 864
+231b9 19 45 864
+231d2 1 49 864
+FUNC 231d3 1a 4 strncnt
+231d3 0 50 4345
+231d3 6 51 4345
+231d9 6 54 4345
+231df 1 55 4345
+231e0 5 54 4345
+231e5 7 57 4345
+231ec 1 58 4345
+FUNC 231ed 389 18 __crtCompareStringA_stat
+231ed 10 96 4345
+231fd 31 280 4345
+2322e c 107 4345
+2323a b 109 4345
+23245 a 110 4345
+2324f 5 118 4345
+23254 1b 119 4345
+2326f 7 122 4345
+23276 1f 123 4345
+23295 6 120 4345
+2329b 7 121 4345
+232a2 3 124 4345
+232a5 2 125 4345
+232a7 17 130 4345
+232be 7 189 4345
+232c5 8 201 4345
+232cd 8 202 4345
+232d5 d 208 4345
+232e2 5 214 4345
+232e7 8 215 4345
+232ef 2 218 4345
+232f1 6 219 4345
+232f7 5 222 4345
+232fc 4 223 4345
+23300 f 231 4345
+2330f 2 232 4345
+23311 5 237 4345
+23316 4 239 4345
+2331a 2 240 4345
+2331c 10 244 4345
+2332c a 246 4345
+23336 7 244 4345
+2333d 2 262 4345
+2333f 5 253 4345
+23344 6 255 4345
+2334a 8 256 4345
+23352 10 260 4345
+23362 11 262 4345
+23373 7 260 4345
+2337a 2 262 4345
+2337c 1a 280 4345
+23396 6 281 4345
+2339c 4d 284 4345
+233e9 4 285 4345
+233ed 6 286 4345
+233f3 19 295 4345
+2340c 17 305 4345
+23423 46 309 4345
+23469 4 310 4345
+2346d 13 320 4345
+23480 17 326 4345
+23497 7 328 4345
+2349e 8 331 4345
+234a6 9 333 4345
+234af 4 132 4345
+234b3 5 137 4345
+234b8 8 138 4345
+234c0 5 139 4345
+234c5 8 140 4345
+234cd e 142 4345
+234db 6 143 4345
+234e1 5 148 4345
+234e6 19 155 4345
+234ff 2 156 4345
+23501 6 157 4345
+23507 19 163 4345
+23520 4 164 4345
+23524 7 166 4345
+2352b 5 167 4345
+23530 3 169 4345
+23533 3 170 4345
+23536 18 178 4345
+2354e 6 179 4345
+23554 6 181 4345
+2355a 8 182 4345
+23562 2 184 4345
+23564 12 337 4345
+FUNC 23576 40 20 __crtCompareStringA
+23576 6 349 4345
+2357c b 350 4345
+23587 2d 361 4345
+235b4 2 362 4345
+FUNC 235b6 f8 10 _strnicoll_l
+235b6 7 55 603
+235bd b 57 603
+235c8 9 59 603
+235d1 13 60 603
+235e4 33 63 603
+23617 6 64 603
+2361d 23 65 603
+23640 a 67 603
+2364a 15 68 603
+2365f 21 78 603
+23680 b 80 603
+2368b 10 81 603
+2369b 11 84 603
+236ac 2 85 603
+FUNC 236ae 27 c _strnicoll
+236ae 3 92 603
+236b1 9 93 603
+236ba 1 101 603
+236bb 5 95 603
+236c0 13 99 603
+236d3 2 101 603
+FUNC 236d5 4d 4 findenv
+236d5 1 387 3036
+236d6 8 390 3036
+236de 12 394 3036
+236f0 d 399 3036
+236fd 9 390 3036
+23706 e 407 3036
+23714 1 408 3036
+23715 c 400 3036
+23721 1 408 3036
+FUNC 23722 5d 0 copy_environ
+23722 4 428 3036
+23726 2 429 3036
+23728 6 434 3036
+2372e 2 464 3036
+23730 7 438 3036
+23737 8 439 3036
+2373f 14 443 3036
+23753 8 444 3036
+2375b 6 448 3036
+23761 11 458 3036
+23772 4 448 3036
+23776 2 461 3036
+23778 5 463 3036
+2377d 2 464 3036
+FUNC 2377f 24c 8 __crtsetenv
+2377f 6 76 3036
+23785 2c 89 3036
+237b1 2 91 3036
+237b3 1c 98 3036
+237cf 5 114 3036
+237d4 13 125 3036
+237e7 c 126 3036
+237f3 4 130 3036
+237f7 d 153 3036
+23804 9 155 3036
+2380d b 100 3036
+23818 6 101 3036
+2381e 2 356 3036
+23820 3 164 3036
+23823 6 165 3036
+23829 f 171 3036
+23838 2 172 3036
+2383a 2 173 3036
+2383c 8 176 3036
+23844 f 178 3036
+23853 2 179 3036
+23855 2 180 3036
+23857 6 196 3036
+2385d 5 197 3036
+23862 2 200 3036
+23864 10 207 3036
+23874 9 210 3036
+2387d a 216 3036
+23887 6 218 3036
+2388d 5 235 3036
+23892 5 238 3036
+23897 5 241 3036
+2389c c 222 3036
+238a8 4 221 3036
+238ac 1d 230 3036
+238c9 2 233 3036
+238cb 9 245 3036
+238d4 4 250 3036
+238d8 2 251 3036
+238da 2f 255 3036
+23909 8 258 3036
+23911 3 259 3036
+23914 5 262 3036
+23919 5 264 3036
+2391e 21 287 3036
+2393f 25 289 3036
+23964 21 338 3036
+23985 4 339 3036
+23989 b 343 3036
+23994 7 346 3036
+2399b 5 349 3036
+239a0 8 351 3036
+239a8 6 352 3036
+239ae 8 355 3036
+239b6 8 271 3036
+239be 6 274 3036
+239c4 7 276 3036
+FUNC 239cb 50 4 _strdup
+239cb 1 66 901
+239cc b 70 901
+239d7 6 71 901
+239dd 9 73 901
+239e6 e 77 901
+239f4 1c 80 901
+23a10 4 81 901
+23a14 6 84 901
+23a1a 1 85 901
+FUNC 23a1b ba c _mbschr_l
+23a1b 7 53 4568
+23a22 b 55 4568
+23a2d 32 58 4568
+23a5f 8 60 4568
+23a67 d 61 4568
+23a74 a 65 4568
+23a7e 7 67 4568
+23a85 10 69 4568
+23a95 3 70 4568
+23a98 8 72 4568
+23aa0 d 63 4568
+23aad 8 76 4568
+23ab5 e 77 4568
+23ac3 10 79 4568
+23ad3 2 80 4568
+FUNC 23ad5 13 8 _mbschr
+23ad5 0 86 4568
+23ad5 12 87 4568
+23ae7 1 88 4568
+FUNC 23b00 be 8 strchr
+23b00 0 60 928
+23b00 2 68 928
+23b02 4 69 928
+23b06 1 73 928
+23b07 2 74 928
+23b09 3 75 928
+23b0c 4 76 928
+23b10 6 77 928
+23b16 2 78 928
+23b18 2 81 928
+23b1a 3 82 928
+23b1d 2 83 928
+23b1f 2 84 928
+23b21 2 85 928
+23b23 2 86 928
+23b25 6 87 928
+23b2b 2 88 928
+23b2d 2 91 928
+23b2f 1 92 928
+23b30 2 93 928
+23b32 3 94 928
+23b35 1 95 928
+23b36 2 96 928
+23b38 2 101 928
+23b3a 5 102 928
+23b3f 2 104 928
+23b41 2 105 928
+23b43 2 107 928
+23b45 2 108 928
+23b47 2 110 928
+23b49 3 111 928
+23b4c 3 113 928
+23b4f 2 114 928
+23b51 2 116 928
+23b53 3 117 928
+23b56 6 119 928
+23b5c 2 120 928
+23b5e 5 124 928
+23b63 2 125 928
+23b65 5 127 928
+23b6a 2 128 928
+23b6c 6 130 928
+23b72 2 131 928
+23b74 1 134 928
+23b75 1 135 928
+23b76 1 137 928
+23b77 2 138 928
+23b79 1 139 928
+23b7a 3 142 928
+23b7d 2 143 928
+23b7f 2 144 928
+23b81 2 145 928
+23b83 2 146 928
+23b85 2 147 928
+23b87 2 148 928
+23b89 2 149 928
+23b8b 2 150 928
+23b8d 3 151 928
+23b90 2 152 928
+23b92 2 153 928
+23b94 2 154 928
+23b96 2 155 928
+23b98 2 156 928
+23b9a 2 157 928
+23b9c 2 158 928
+23b9e 2 159 928
+23ba0 2 160 928
+23ba2 1 163 928
+23ba3 1 164 928
+23ba4 3 165 928
+23ba7 1 166 928
+23ba8 1 167 928
+23ba9 3 170 928
+23bac 1 171 928
+23bad 1 172 928
+23bae 1 173 928
+23baf 1 174 928
+23bb0 3 177 928
+23bb3 1 178 928
+23bb4 1 179 928
+23bb5 1 180 928
+23bb6 1 181 928
+23bb7 3 184 928
+23bba 1 185 928
+23bbb 1 186 928
+23bbc 1 187 928
+23bbd 1 188 928
+PUBLIC 23b06 0 __from_strstr_to_strchr
+FUNC 240b9 14 0 `operator new'::`6'::`dynamic atexit destructor for 'nomem''
+STACK WIN 4 41b0 86 13 0 8 0 e0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4240 41 3 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4290 18 4 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 42ae 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 42af 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 42c6 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 42d1 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 42d2 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 42f3 3f c 0 0 c 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4332 3f c 0 0 c 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4371 3f c 0 0 c 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 43b0 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 43b1 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 43c8 af c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4464 12 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 4477 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 448d 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 44a3 14 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 44b7 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 44cd 14 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 44e1 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4506 16 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 451c f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 452b 62 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 452c 60 1 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 452d 5c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 454a 35 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 458d 42 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 458e 40 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 45cf da c 0 4 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 466c 15 0 0 4 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 46a0 8 0 0 4 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 46a9 53 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 46f2 9 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 46fc 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4705 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 470b b1 8 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4713 a8 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4785 33 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 47bc 20 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 47dc 3c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 47dd 3a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4818 2e 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4846 36 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 487c 2a 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 48a6 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 48bc 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 48c1 30 5 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 48c6 2b 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 48f1 7 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 48f8 7 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 48ff 7 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4906 52 8 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 490c 4c 2 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 4958 36 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 498e 36 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 49c4 36 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 49fa 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4a14 30 1 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4a15 2e 0 0 10 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4a44 d5 7 0 1c 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4a4b ce 0 0 1c 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ =
+STACK WIN 4 4b19 9d 5 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4b1e 98 0 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 4bb6 73 7 0 14 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4bbb 6c 2 0 14 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 4bbc 6a 1 0 14 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 4bbd 68 0 0 14 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 4c29 28 5 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4c2e 22 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4c51 21 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4c72 4c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4c73 4a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4cbe 5e 6 0 14 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4d1c 4a b 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4d26 1b 1 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4d27 16 0 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4d66 19 a 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4d67 17 9 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4d7f 6a 6 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 4de9 f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4df8 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4e06 1c 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4e07 18 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4e22 f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4e31 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4e39 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4e54 1c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4e70 1f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4e8f 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4e93 b 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4e9e 5 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4ea3 11 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4eb4 4e 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4eb5 4a 8 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 4eba 44 3 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 4ebb 42 2 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 4f02 18 2 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4f1a 58 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4f1b 54 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 4f20 4e 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 4f34 37 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 4f72 56 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4f73 52 8 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 4f78 4c 3 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 4f79 4a 2 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 4fc8 16 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4fde d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4feb 19 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 4fec 15 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5004 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5005 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 501c b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5027 19 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5028 15 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5040 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5041 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5058 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5063 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5064 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 507b 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 507c 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5093 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 509e 1c 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 509f 18 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 50ba 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 50bb 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 50dc 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 50dd 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 50fe 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 50ff 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5120 7b 8 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 5124 75 4 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 5128 70 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 519b 5b 8 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 51a2 52 1 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 51a3 50 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 51f6 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5200 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 520a a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5214 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 521e a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5228 24 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 524c 41 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 528d 1b6 c 0 0 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 5405 14 0 0 0 c 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 5443 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 544d a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5457 fc 1c 0 14 4 328 0 1 $T0 $ebp 680 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 5553 22 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5554 20 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5575 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5582 9 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 558b 24 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 55af 10 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 55bf 9 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 55c8 96 7 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 55cf 8d 0 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 55fb 60 0 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 565e 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5678 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5694 1f 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 56b3 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 56cf 1d 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 56ec 20 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 570c 1d 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 5729 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 573a 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 574b 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5761 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5777 14f c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 58bc 9 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 58c6 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 58e0 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 58fa 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5912 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 592c 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5944 f6 7 0 18 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 594b ed 0 0 18 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 5973 c4 0 0 18 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 5977 bf 0 0 18 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 5a3a 27 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5a61 28 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 5a89 87 4 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 5a8d 81 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 5ab2 5b 0 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 5b10 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5b2b 107 5 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 5b30 100 0 0 18 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 5b5b d4 0 0 18 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 5b5f cf 0 0 18 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 5c32 1e 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 5c50 27 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5c77 28 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 5c9f 24 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5cc3 26 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5ce9 15 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5cfe 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5d07 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5d10 18 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5d11 16 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5d28 20 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5d29 1e 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5d48 37 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5d4d 31 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5d7f 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5d84 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5dbb 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5dc0 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5df7 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5dfc 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5e33 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5e38 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5e6f 37 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5e74 31 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5ea6 37 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5eab 31 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5edd 92 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5f1b 34 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5f1c 32 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 5f6f e2 c 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 6039 11 0 0 c c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 6051 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6062 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6073 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6082 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6091 4c 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6092 4a 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 616b 33 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 619e 36 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 61d4 36 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 620a 39 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6243 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6257 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6266 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6275 96 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6276 94 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 62ba 4a 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ =
+STACK WIN 4 62bb 46 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ =
+STACK WIN 4 630b 2f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6313 26 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 633a 82 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6341 78 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 63bc e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 63ca 3 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 63cd 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6400 24 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 6404 1e 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 6424 4a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6429 44 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 642a 42 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 646e d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 647b 10 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 648b e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6499 994 2c 0 10 0 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 64bb 945 a 0 10 4 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ =
+STACK WIN 4 64c2 93b 3 0 10 8 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ =
+STACK WIN 4 64c5 937 0 0 10 c 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ =
+STACK WIN 4 6e2d 3b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6e68 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6e7b 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6e8e 1e 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6e8f 1c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6eac 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6ec7 2a 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6ec8 28 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6ef1 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6f0c 2a 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6f0d 28 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6fa0 24 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6fd0 196 14 0 10 0 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 6fd4 d3 10 0 10 4 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 24 - ^ =
+STACK WIN 4 6fd9 cd b 0 10 8 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 28 - ^ = $ebx $T0 24 - ^ =
+STACK WIN 4 6fda cb a 0 10 c 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 28 - ^ = $ebx $T0 24 - ^ =
+STACK WIN 4 6fe4 c0 0 0 10 10 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 28 - ^ = $ebx $T0 24 - ^ =
+STACK WIN 4 7166 90 c 0 10 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 71eb a 0 0 10 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 71f6 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7210 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 722a 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7244 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 725c 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7274 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 728c 104 9 0 0 0 328 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 7390 5c6 22 0 c 0 594 0 1 $T0 $ebp 1304 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 73b2 597 0 0 c 4 594 0 1 $T0 $ebp 1304 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 73fe 542 0 0 c 8 594 0 1 $T0 $ebp 1304 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1436 - ^ =
+STACK WIN 4 740c 533 0 0 c c 594 0 1 $T0 $ebp 1304 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1436 - ^ =
+STACK WIN 4 7956 dc c 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 7a28 9 0 0 c c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 7a32 2d 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7a37 27 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7a5f e1 c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 7b36 9 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 7b40 49 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7b41 3b 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7b42 39 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7b89 55 8 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7b8a 53 7 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 7b91 4b 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 7b97 2a 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 7bde 15 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 7bf3 18 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7c0b c3 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 7cc5 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 7cce 31 7 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 7cd5 28 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 7cff 240 c 0 0 c 64 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 7f28 4 0 0 0 c 64 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 7f3f 4c 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7f40 4a 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7f41 48 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7f8b 21 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7f8c 1f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7fac 10 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7fbc 40 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7fbd 3e 1 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7fbe 3c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7ffc 48 2 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7ffd 46 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 7ffe 44 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 8044 4b 2 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 8045 49 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 8046 47 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 808f 50 2 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 8090 4e 1 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 8091 4c 0 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 80df 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 80e7 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 80f1 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 80fb 8e c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8151 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 8189 9f c 0 0 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 821f 8 0 0 0 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 8228 19 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 8229 15 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 8241 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 824c 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 824d 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 826e 5c 2 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 826f 5a 1 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 8270 58 0 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 82ca 44 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 830e e1 c 0 10 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8390 a 0 0 10 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 83ce 20 0 0 10 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 83ef 45 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 8434 54 c 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8477 9 0 0 8 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 8488 25 7 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 848f 1d 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 84ad 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 84c0 b3 8 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 84c7 9a 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 84c8 98 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 8573 4c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 85bf 139 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 85c0 137 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 85cf 127 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ =
+STACK WIN 4 85d0 11f 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 85d1 11d 0 0 8 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 86f8 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 86fc 32 c 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8714 a 0 0 8 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 872e 33 c 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8747 a 0 0 8 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 8761 32 c 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8779 a 0 0 8 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 8793 3b c 0 14 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 87b4 a 0 0 14 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 87ce 79 6 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 87f0 52 0 0 4 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 87f1 50 0 0 4 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 8847 49 c 0 4 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8890 30 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 8891 2a 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 8892 28 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 88c0 82 8 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 88c1 7b 7 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 88c8 73 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 8942 19c 14 0 18 c 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 89d2 9 0 0 18 c 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 8a62 7b 0 0 18 c 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 8ade 17f c 0 10 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8c49 4 0 0 10 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 8c5d 91 c 0 10 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8ce2 4 0 0 10 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 8cee 143 9 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8cfe 131 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 8d02 12c 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 8d05 128 0 0 10 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 8e31 6c 3 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8e9d f2 6 0 20 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8ea3 ea 0 0 20 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8eb3 d9 0 0 20 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8f31 5a 0 0 20 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ =
+STACK WIN 4 8f8f 356 17 0 20 0 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 8f99 34a d 0 20 4 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ =
+STACK WIN 4 8fa5 33d 1 0 20 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ =
+STACK WIN 4 8fa6 33b 0 0 20 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ =
+STACK WIN 4 92e5 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 92e6 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 92fd e4 6 0 20 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 9301 de 2 0 20 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 9302 dc 1 0 20 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 9303 da 0 0 20 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 93e1 6c 7 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 93e7 64 1 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 93e8 62 0 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 9408 41 0 0 0 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 944d 6e 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 944e 6c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 94bb 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 94c4 6e 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 94c5 6c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9532 9 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 953b 15 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9550 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9556 32 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9557 30 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9588 19 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 95a1 3d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 95de bf c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 9694 8 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 969d 77 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 969e 75 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 969f 71 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9714 18 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9715 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 972c 121 c 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 9835 b 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 9841 b 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 984d 69 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9857 4b 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9860 25 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 98b6 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 98bc 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 98c2 184 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 98c3 182 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 98de 166 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9a46 39 c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 9a66 4 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 9a7f 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9a92 37 c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 9ab6 4 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 9ac9 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9b2c b9 5 0 4 0 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9b2e b5 3 0 4 4 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ =
+STACK WIN 4 9b2f b3 2 0 4 8 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 9b30 b1 1 0 4 c 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 9b31 af 0 0 4 10 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 9be5 2f 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9be6 2d 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9c14 3c c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 9c4a 5 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 9c50 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9c62 4f c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 9ca8 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 9cb1 75 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9cf9 2c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9d26 c3 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9d27 c1 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ =
+STACK WIN 4 9d35 9c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 9d3c 94 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 9d3d 90 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 9de9 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9df3 31 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9df4 2f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9e24 9 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9e2d d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9e3a 22 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 9e5c 22 3 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 9e7e 70 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 9ee5 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 9eee f5 c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 9fd7 b 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 9fe3 70 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 a04a 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 a053 31 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 a084 eb c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 a163 b 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 a16f 53 c 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 a1b9 8 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 a258 65 b 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 a25d 5f 6 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 a262 59 1 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 a263 57 0 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 aa15 3d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 aa52 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 aa60 1a0 8 0 4 0 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 aa62 19c 6 0 4 4 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ =
+STACK WIN 4 aa67 196 1 0 4 8 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ =
+STACK WIN 4 aa68 194 0 0 4 c 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ =
+STACK WIN 4 aa85 176 0 0 4 10 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 20 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 ac00 20 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ac20 39 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ac59 1 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ac5a 32 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ac65 1c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ac8c 15e 6 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 ac92 156 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 acaa 13d 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 acb0 136 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 adea 1b 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ae05 db b 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ae06 c3 a 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 ae0f b9 1 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 ae10 b7 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 ae5f 67 0 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 aee0 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 aeea 198 e 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 aef2 187 6 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 aef8 180 0 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 b082 b9 11 0 0 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 b089 b0 a 0 0 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 b092 a6 1 0 0 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 b093 a4 0 0 0 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 b13b 135 b 0 0 0 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b143 12a 3 0 0 4 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 12 - ^ =
+STACK WIN 4 b144 128 2 0 0 8 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 12 - ^ =
+STACK WIN 4 b145 126 1 0 0 c 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 12 - ^ =
+STACK WIN 4 b146 124 0 0 0 10 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 12 - ^ =
+STACK WIN 4 b270 24 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b271 22 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b272 20 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b294 24 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b295 22 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b296 20 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b2b8 5b 6 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 b2be 43 0 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 b313 5a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b36d 74 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b36e 72 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ =
+STACK WIN 4 b37a 53 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 b381 4b 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 b38c 30 0 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 b3e1 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b3e7 94 15 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 b3fb 7e 1 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 b3fc 7c 0 0 0 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 b418 5f 0 0 0 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 b47b 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b483 160 5 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 b488 159 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 b4c5 11b 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 b52c b3 0 0 8 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 b5e3 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b608 25 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 b60c 1f 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 b62d 4f a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 b632 49 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 b633 47 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 b67c 910 30 0 10 0 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 b69e 8c1 e 0 10 4 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ =
+STACK WIN 4 b6a5 8b7 7 0 10 8 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ =
+STACK WIN 4 b6ac 8af 0 0 10 c 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ =
+STACK WIN 4 bf8c 97 7 0 10 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 bf93 8e 0 0 10 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 bfbf 61 0 0 10 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 c023 17 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c03a 5 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c03f 55 7 0 10 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 c046 4c 0 0 10 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 c094 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c0ac 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c0c6 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c0de 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c0f8 14e c 0 14 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 c23c 9 0 0 14 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 c246 1e 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c264 1e 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c282 1e 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c2a0 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c2bc 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c2d8 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c2f4 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c319 25 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 c31d 1f 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 c33e 4f a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 c343 49 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 c344 47 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 c38d 91c 2c 0 10 0 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 c3a9 8d3 10 0 10 4 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ =
+STACK WIN 4 c3b0 8c9 9 0 10 8 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ =
+STACK WIN 4 c3b9 8bf 0 0 10 c 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ =
+STACK WIN 4 cca9 154 9 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 ccb1 14a 1 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 ccb2 148 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 cdfd 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ce22 25 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 ce26 1f 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 ce47 4f a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ce4c 49 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 ce4d 47 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 ce96 f60 2a 0 10 0 ad4 0 1 $T0 $ebp 1160 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 ceb8 f0f 8 0 10 4 ad4 0 1 $T0 $ebp 1160 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2776 - ^ =
+STACK WIN 4 ceb9 f0b 7 0 10 8 ad4 0 1 $T0 $ebp 1160 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2776 - ^ =
+STACK WIN 4 cec0 f03 0 0 10 c ad4 0 1 $T0 $ebp 1160 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2776 - ^ =
+STACK WIN 4 ddf6 1f 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ddf7 1d 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ddf8 1b 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 de20 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 de50 42 18 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 de5e 33 a 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 de5f 31 9 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 de68 27 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 dea0 bb 33 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 deba a1 19 0 4 10 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 df29 14 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 df5b 19 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 df74 9b c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 dfed 9 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 e00f 34 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e01a 1d 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e043 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e050 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e059 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e062 23d c 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 e257 b 0 0 8 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 e29f 1b0 c 0 4 c 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 e40d 14 0 0 4 c 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 e44f a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e459 104 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e45a 102 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ =
+STACK WIN 4 e45b 100 1 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ =
+STACK WIN 4 e45c fe 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ =
+STACK WIN 4 e495 c4 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 16 - ^ =
+STACK WIN 4 e55d 15a 24 0 14 0 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 e576 bc b 0 14 4 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 152 - ^ =
+STACK WIN 4 e577 b8 a 0 14 8 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 152 - ^ =
+STACK WIN 4 e581 ad 0 0 14 c 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 152 - ^ =
+STACK WIN 4 e6b7 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e6c1 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e6cb 10 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e6db c5 c 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 e761 17 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 e7a0 5e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e7b8 45 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e7fe 2f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e82d 55 b 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 e82e 53 a 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 e82f 51 9 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 e830 4f 8 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 e831 4d 7 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 e882 18a 1d 0 0 0 51c 0 1 $T0 $ebp 1180 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 e89e 161 1 0 0 4 51c 0 1 $T0 $ebp 1180 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1312 - ^ =
+STACK WIN 4 e89f 15d 0 0 0 8 51c 0 1 $T0 $ebp 1180 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1312 - ^ =
+STACK WIN 4 ea0c a4 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 eaa4 b 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 eab0 7a 7 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 eab7 71 0 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 eb2a 1d9 19 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 eb3b 1c1 8 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 eb3f 1ba 4 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 eb43 1b5 0 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 ed03 3c 6 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 ed3f 19a c 0 4 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 eea0 8 0 0 4 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 eed9 1e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 eef7 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 eefd 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ef03 140 12 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 ef04 13e 11 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 ef05 13c 10 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 ef06 13a f 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 ef15 12a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 f043 86 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f044 84 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 f045 82 6 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 f046 80 5 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 f04b 7a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 f0c9 8c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f0ca 8a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f0d3 7e 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ =
+STACK WIN 4 f0d4 7c 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 f0d5 7a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ =
+STACK WIN 4 f155 24 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f156 22 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f165 12 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f179 3e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f182 31 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f1b7 76 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 f221 8 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 f22d 66 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f22e 64 1 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f22f 62 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f293 53 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f2e6 96 c 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 f370 b 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 f37c 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f381 88 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 f3fd b 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 f409 5 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f40e 3 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f411 3e 2 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f412 3c 1 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 f413 3a 0 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 f41e 2e 0 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 f44f 129 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 f453 123 2 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 f454 121 1 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 f455 11f 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 f578 6b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 f57c 4d 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 f57d 4b 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 f5e3 171 4 0 0 0 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 f5e7 169 0 0 0 4 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 20 - ^ =
+STACK WIN 4 f606 149 0 0 0 8 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 24 - ^ = $ebx $T0 20 - ^ =
+STACK WIN 4 f607 141 0 0 0 c 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 24 - ^ = $ebx $T0 20 - ^ =
+STACK WIN 4 f754 1d4 1e 0 18 0 b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 f76d 1b1 5 0 18 4 b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 184 - ^ =
+STACK WIN 4 f76e 1ad 4 0 18 8 b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 184 - ^ =
+STACK WIN 4 f772 1a8 0 0 18 c b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 184 - ^ =
+STACK WIN 4 f928 2f6 17 0 4 0 1c4 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 f93e 2d6 1 0 4 4 1c4 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 456 - ^ =
+STACK WIN 4 f93f 2d2 0 0 4 8 1c4 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 456 - ^ =
+STACK WIN 4 fc1e 1ce 18 0 4 0 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 fc37 1ab 0 0 4 4 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ =
+STACK WIN 4 fc38 1a7 0 0 4 8 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ =
+STACK WIN 4 fc3f 19f 0 0 4 c 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ =
+STACK WIN 4 fdec f3 7 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 fdf2 2c 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 fdf3 2a 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 fedf 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 fee4 170 c 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1000a 10 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 1001b b 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 1004c 7 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 10054 15f 10 0 14 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1005b a1 9 0 14 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 1005c b2 8 0 14 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 10064 96 0 0 14 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 101b3 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 101ce 4f 6 0 c 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1021d 30 4 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1024d 36 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 10283 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 10291 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 102a7 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 102b8 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 102cb e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 102d9 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 102ec e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 102fa 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1030d e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1031b 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 10331 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 10342 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 10355 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 10363 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 10376 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 10384 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1039a 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 103ab 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 103c1 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 103d2 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 103e8 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 103f9 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1040c e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1041a c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 10426 26 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1044c 21 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1046d 26 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 10493 21 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 106ab 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 106de 24 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 106e2 1e 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 10702 4a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 10707 44 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 10708 42 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1074c 9b0 2c 0 10 0 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1076e 960 a 0 10 4 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ =
+STACK WIN 4 10775 956 3 0 10 8 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ =
+STACK WIN 4 10778 952 0 0 10 c 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ =
+STACK WIN 4 110fc 129 8 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 11103 120 1 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 11104 11e 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 11225 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 11258 24 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1125c 1e 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1127c 4a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 11281 44 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 11282 42 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 112c6 10 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 112d6 f88 2a 0 10 0 8d0 0 1 $T0 $ebp 656 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 112f8 f39 8 0 10 4 8d0 0 1 $T0 $ebp 656 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2260 - ^ =
+STACK WIN 4 112f9 f35 7 0 10 8 8d0 0 1 $T0 $ebp 656 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2260 - ^ =
+STACK WIN 4 11300 f2d 0 0 10 c 8d0 0 1 $T0 $ebp 656 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2260 - ^ =
+STACK WIN 4 1225e c2 11 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1226f 9e 0 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 12320 9b c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 123b2 8 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 123bb 46 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 123f8 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 12401 113 8 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 12408 21 1 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 12409 1f 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 12514 17 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1252b 83 13 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 12534 78 a 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1253e 6d 0 0 10 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 125ae 119 c 0 10 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 126bd 9 0 0 10 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 126c7 7d 8 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 126ce 75 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 126cf 73 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 126fd 2c 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 12 - ^ =
+STACK WIN 4 12744 81 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 12749 7b 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1274e 75 1 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1274f 73 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 127c5 71 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 127e6 4f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 12836 a0 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 128c8 d 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 128d6 22 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 128f8 19f c 0 0 c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 129c5 e 0 0 0 c 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 12a8e 8 0 0 0 c 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 12a97 115 c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 12b7f 2c 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 12bac 11e c 0 c c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 12ca3 d 0 0 c c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 12cca 3f 9 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 12cd3 34 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 12cec 18 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 12d09 21b c 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 12e47 e 0 0 8 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 12f24 79 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 12f2b 70 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 12f61 39 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 12f62 37 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 12f9d 21 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 12fbe 46 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 12fc9 3a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 13004 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 13009 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 13040 48 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 13088 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 130b3 314 11 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 130c0 305 4 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 130c4 300 0 0 8 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 130f1 2d2 0 0 8 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 133c7 b0 d 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 133cd a9 7 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 133d4 a1 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 13477 106 11 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 13483 f8 5 0 4 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 13484 f6 4 0 4 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 13488 f1 0 0 4 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 1357d 2df 12 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1358a 2d0 5 0 c 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 1358b 2ce 4 0 c 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 1358f 2c9 0 0 c c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 1385c cd 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 13929 2e2 f 0 0 0 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 13938 294 0 0 0 4 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 316 - ^ =
+STACK WIN 4 1394d 27e 0 0 0 8 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 316 - ^ =
+STACK WIN 4 13950 27a 0 0 0 c 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 316 - ^ =
+STACK WIN 4 13c0b a8 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 13c0c a6 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 13c54 5d 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 13cb3 2e3 2a 0 4 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 13cd7 2bd 6 0 4 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ =
+STACK WIN 4 13cdc 2b7 1 0 4 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ =
+STACK WIN 4 13cdd 2b5 0 0 4 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ =
+STACK WIN 4 13f96 72 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 13f97 70 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 13f98 6e 5 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 13f9d 68 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 14008 7c c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 14079 a 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 14084 d 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14091 d 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1409e d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 140ab f3 23 0 0 4 328 0 1 $T0 $ebp 680 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1419e 1e 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 142f3 a3 c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 14385 10 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 14396 6 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1439c 1b 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 143b7 26 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 143b8 24 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 143dd 63 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14440 474 a 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14447 42e 3 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 14448 42c 2 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 14449 42a 1 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 1444a 428 0 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 148b4 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 148bf d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 148cc e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 148da e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 148e8 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 148f6 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14904 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14916 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14924 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14932 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14940 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1494b b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14956 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14961 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1496f b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1497a e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14988 19 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 149a1 84 13 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 149a2 80 12 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 149a3 7e 11 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 149c9 57 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 12 - ^ =
+STACK WIN 4 14a25 d 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14a32 12 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14a44 9c 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14a57 86 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14ae0 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14aea 5 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14aef 7 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14af6 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14b00 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14b08 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14b12 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14b1c 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14b24 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14b2e 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14b36 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14b40 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14b48 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14b52 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14b5a 7b 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14b5d 75 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14bd5 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14bde 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14c03 d 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14c10 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14c14 29 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14c26 f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14c3d 16 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14c53 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14c57 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14c5b 1b 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14c76 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14c7a 2f 6 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14ca9 25 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14cce 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14cd2 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14cdf e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14ced 20 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14d0d 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14d32 33 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 14d65 34 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 14d99 13 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14dac 56 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14db2 4d 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14e02 61 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14e03 5d a 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14e04 59 9 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14e63 17 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14e7a 15 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14e8f 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14ea3 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14eb1 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14ec5 25 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14ec6 23 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14ed2 14 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14eea 38 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14eeb 36 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14eec 32 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14f22 91 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 14f26 89 3 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 14f27 87 2 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 14f5c 40 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 14fb3 35 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14fb6 2f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14fe8 81 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14fe9 7d a 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 14fea 79 9 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15069 1e 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1506a 1c 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15087 47 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15088 43 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 150ce 47 7 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 150cf 45 6 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 150d0 43 5 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 150d1 41 4 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 15115 65 11 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15116 61 10 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1511b 5b b 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1511c 57 a 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1517a 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1518c 31 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 151bd f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 151cc f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 151db 1d 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 151f8 33 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1522b 73 7 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1522f 6b 3 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15230 5b 2 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1529e 2f 3 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 152cd f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 152dc 79 4 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 152dd 75 3 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 152de 71 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15355 68 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15356 64 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 153bd a6 3 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 153be a2 2 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 153de 81 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ =
+STACK WIN 4 153f0 6e 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ =
+STACK WIN 4 15463 26 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15464 22 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15489 31 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1548e 29 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 154ba d0 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 154be b3 3 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 154bf b1 2 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 154ce 9f 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 1558a 69 13 0 8 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1559b 4f 2 0 8 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ =
+STACK WIN 4 1559c 4b 1 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ =
+STACK WIN 4 1559d 49 0 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ =
+STACK WIN 4 155f3 96 22 0 8 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15607 79 e 0 8 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15615 66 0 0 8 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1563a 29 0 0 8 c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ =
+STACK WIN 4 15689 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1568a 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 156b7 62 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 156b8 5e 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 156b9 5a 6 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15719 8b a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1571a 87 9 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1571b 83 8 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 157a4 1c 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 157a5 18 8 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 157c0 2a 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 157c5 22 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 157ea a6 5 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15890 37 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 158c7 51 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 158c8 4d 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15918 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15919 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15946 6a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15947 66 9 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1594e 5e 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 159b0 6c a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 159b1 68 9 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 159b2 64 8 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15a1c e0 e 0 4 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15a23 d7 7 0 4 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15a2a cd 0 0 4 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15a45 b1 0 0 4 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ =
+STACK WIN 4 15afc 4f 6 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15b02 47 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15b4b 22 5 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15b6d 22 5 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15b8f 22 5 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15bb1 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15bb2 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15bdf 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15be0 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 15c0d 141 7 0 8 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15c14 138 0 0 8 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15c95 b3 0 0 8 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 15c96 b1 0 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 15d4e d4 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15e22 c4 e 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15ee6 7e d 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15f64 125 11 0 10 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 15f75 112 0 0 10 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 16089 15f f 0 8 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 16098 4a 0 0 8 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 160f0 b3 0 0 8 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 161e8 31 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 16219 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1622b 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1623d 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1624f 150 7 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 16256 147 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1639f a0 6 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1643f 50 5 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1648f 2bb 2b 0 4 0 d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 164aa 296 10 0 4 4 d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ =
+STACK WIN 4 164b3 28a 7 0 4 8 d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ =
+STACK WIN 4 164ba 282 0 0 4 c d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ =
+STACK WIN 4 1674a d9 b 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 167b8 17 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 16823 14 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 16837 1b8 18 0 4 0 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 16848 1a0 7 0 4 4 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1684f 18d 0 0 4 8 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 16870 168 0 0 4 c 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 108 - ^ =
+STACK WIN 4 169ef 56f 22 0 c 0 a0 0 1 $T0 $ebp 108 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 16a03 97 e 0 c 4 a0 0 1 $T0 $ebp 108 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 164 - ^ =
+STACK WIN 4 16a11 88 0 0 c 8 a0 0 1 $T0 $ebp 108 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 164 - ^ =
+STACK WIN 4 16f5e 153 10 0 8 0 d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 16f82 11b 0 0 8 4 d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ =
+STACK WIN 4 16f89 113 0 0 8 8 d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ =
+STACK WIN 4 16f92 109 0 0 8 c d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ =
+STACK WIN 4 170b1 1ea 1b 0 8 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 170cc 1c8 0 0 8 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 17154 111 0 0 8 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 64 - ^ =
+STACK WIN 4 17155 10f 0 0 8 c 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 64 - ^ =
+STACK WIN 4 1729b e4 15 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 172a2 db e 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 172b0 ca 0 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1737f f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1738e 100 19 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1739a f2 d 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 173a7 e4 0 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 1748e 46 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 174d4 92 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 17566 b42 14 0 8 0 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 17571 b35 9 0 8 4 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1757a b2b 0 0 8 8 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 175e3 abe 0 0 8 c 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 120 - ^ =
+STACK WIN 4 180a8 211 13 0 4 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 180af 208 c 0 4 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 180bb 1fb 0 0 4 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 182b9 28b 1f 0 4 0 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 182c5 27a 13 0 4 4 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ =
+STACK WIN 4 182c6 278 12 0 4 8 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ =
+STACK WIN 4 182d8 263 0 0 4 c 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ =
+STACK WIN 4 18544 341 d 0 8 0 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 18589 2f7 0 0 8 4 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ =
+STACK WIN 4 185f0 28f 0 0 8 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ =
+STACK WIN 4 185f1 28d 0 0 8 c 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ =
+STACK WIN 4 18885 4e4 18 0 14 0 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 18893 4d4 a 0 14 4 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 88 - ^ =
+STACK WIN 4 18894 4d2 9 0 14 8 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 88 - ^ =
+STACK WIN 4 1889d 4c8 0 0 14 c 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 88 - ^ =
+STACK WIN 4 18d69 14c 6 0 0 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 18eb5 116 5 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 18ed6 59 0 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 18fcb 1b 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 18fe6 1b 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19001 1b 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1901c a3 f 0 18 c 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 190b6 8 0 0 18 c 94 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 190bf a3 f 0 1c c 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 19159 8 0 0 1c c 94 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 19162 387 12 0 8 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 19172 350 2 0 8 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ =
+STACK WIN 4 19173 34e 1 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ =
+STACK WIN 4 19174 34c 0 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ =
+STACK WIN 4 194e9 13e 7 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 194f0 135 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 19627 b1 6 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 196d8 64 7 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 196df 5b 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1973c 57 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19793 8f 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19822 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19836 14 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1984a 87 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 198d1 e3 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 199b4 1bd 9 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 199bb 1b4 2 0 c 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 199bc 1b2 1 0 c 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 199bd 1b0 0 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 19b71 71 b 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19b76 6b 6 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 19b7b 65 1 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 19b7c 63 0 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 19be2 b3 e 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 19be6 1a a 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 19be7 2e 9 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 19bf0 e 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 19c95 46 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19c9a 40 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19cdb a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19ce5 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19ceb 51 6 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 19d3c 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19d51 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19d64 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19d79 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19d8c 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19da1 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19db4 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19dcc 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19de2 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19dfa 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19e10 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19e28 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19e3e 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19e56 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19e6c 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19e81 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19e94 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19ea9 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19ebc 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19ed1 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19ee4 53 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 19f37 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19f45 44 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 19f89 1de 1a 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 19f9a 1c6 9 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 19f9b 1c2 8 0 8 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 19fa3 1b9 0 0 8 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 1a167 78 c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a1d5 9 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 1a1df 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a1e4 1f7 8 0 14 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a1eb 1ee 1 0 14 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 1a1ec 1ec 0 0 14 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 1a246 174 0 0 14 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 1a3db 29 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a404 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a41f 2a 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a449 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a464 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a46d 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a4c1 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a4ec 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a53b 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a564 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a5b3 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a5dc 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a62b 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a654 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a6a8 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a6d3 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a722 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a74b 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a79a 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a7c3 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a817 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a842 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a896 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a8c1 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a915 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a940 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1a98f 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a9b8 d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a9c5 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a9cd 1f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1a9ec 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1aa06 1f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1aa25 1c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1aa41 12 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1aa53 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1aa6e 13b 1d 0 18 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1aa83 126 8 0 18 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 1aba9 3b 6 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1abe4 13d 1d 0 18 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1abf9 128 8 0 18 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 1ad21 3b 6 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1ad5c 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1ad76 3a2 1d 0 20 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1ad87 391 c 0 20 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ =
+STACK WIN 4 1b118 43 6 0 24 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1b15b 1b8 1d 0 1c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1b170 1a3 8 0 1c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 1b313 40 6 0 20 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1b353 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1b359 29 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1b382 419 6 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1b3a4 3f5 0 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 1b3a5 3ed 0 0 0 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 1b79b 190 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1b79c 18e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1b92b 73 4 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1b92c 71 3 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1b92d 6f 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 1b92e 6d 1 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 1b92f 6b 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 1b99e 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1b9a5 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1b9a6 14 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1b9d1 40 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1b9d2 3e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1ba11 1c8 11 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1ba18 1bf a 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 1ba1c 1ba 6 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 1ba22 1b3 0 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 1bbd9 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1bbe0 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1bbe1 14 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1bc0c 89 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1bc0d 87 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1bc95 2c4 c 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1bc9c 2bb 5 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 1bc9d 2b9 4 0 4 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 1bca1 2b4 0 0 4 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 1bf59 395 1b 0 4 0 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1bf6a 37d a 0 4 4 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 76 - ^ =
+STACK WIN 4 1bf6d 377 7 0 4 8 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 76 - ^ =
+STACK WIN 4 1bf74 36f 0 0 4 c 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 76 - ^ =
+STACK WIN 4 1c2ee 29 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c317 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c32d 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c353 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c379 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c39f 3 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c3a2 fe 9 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1c3a9 e9 2 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 1c3aa e7 1 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 1c3ab e5 0 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 1c4a0 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c4a9 fe 9 0 4 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1c4b0 e9 2 0 4 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ =
+STACK WIN 4 1c4b1 e7 1 0 4 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ =
+STACK WIN 4 1c4b2 e5 0 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ =
+STACK WIN 4 1c5a7 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c5b0 355 9 0 4 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1c5b7 34c 2 0 4 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ =
+STACK WIN 4 1c5b8 348 1 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ =
+STACK WIN 4 1c5b9 346 0 0 4 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ =
+STACK WIN 4 1c905 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c90e 20 6 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c912 1b 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c917 15 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c92e 36 6 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1c934 2f 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1c964 79 8 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1c969 72 3 0 4 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 1c96a 70 2 0 4 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 1c9dd 3e6 11 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1c9e2 3df c 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 1c9e9 3d7 5 0 10 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 1c9ea 3d5 4 0 10 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 1cdc3 45d 1d 0 18 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1cdd7 449 9 0 18 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 1d220 1af a 0 18 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d22a 1a3 0 0 18 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 1d270 15c 0 0 18 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 1d2a3 128 0 0 18 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ =
+STACK WIN 4 1d3cf 1e 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d3ed 1d 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1d40a 1e 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d428 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1d496 60 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d49c 56 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 1d4a5 45 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 1d4a6 43 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 1d4f6 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1d50a 77 11 0 0 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d51b 5f 0 0 0 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d581 1e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1d59f 32 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1d5a0 30 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1d5d1 1b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1d5ec 96 12 0 4 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d5fd 7c 1 0 4 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d5fe 78 0 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d682 72 11 0 8 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d693 5a 0 0 8 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d6cf 13 0 0 8 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d6f4 1d0 13 0 4 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d705 1b6 2 0 4 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 128 - ^ =
+STACK WIN 4 1d706 1b2 1 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 128 - ^ =
+STACK WIN 4 1d707 1b0 0 0 4 c 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 128 - ^ =
+STACK WIN 4 1d8c4 bf 12 0 4 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d8d5 a5 1 0 4 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d8d6 a1 0 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1d983 2c 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1d9af 65 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1da14 3c 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1da50 1e3 4 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1da51 1e1 3 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 1da52 1df 2 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 1da53 1dd 1 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 1da54 1db 0 0 c 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 1dc33 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1dc45 18 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1dc5d 40 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1dc9d 78 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1dd15 1490 4 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1dd16 83f 3 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1dd17 83d 2 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 1f1a5 1680 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1f1a9 15f8 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1f1aa 15f6 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 1f1db 86c 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 20825 be 9 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 2082e a9 0 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 20840 96 0 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 20930 82 6 0 c 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 209b2 6e 4 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 20a20 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20a25 22b 8 0 14 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 20a2c 222 1 0 14 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 20a2d 220 0 0 14 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 20a8b 1c1 0 0 14 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ =
+STACK WIN 4 20c50 29 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 20c79 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20c94 2a 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 20cbe 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20cd9 1f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20cf8 1f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20d17 2d 9 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20d20 23 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20d44 94 6 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20d45 92 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20d4a 8c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20dd8 cd c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 20e9b 9 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 20ea5 2c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20ea6 2a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20ed1 2a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20efb 22 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20efc 20 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20f1d d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20f64 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20f75 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20f8a 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20f8f 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20f94 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20fa5 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 20fba 50 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 20fd7 1c 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 2100a 60 9 0 0 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 21013 57 0 0 0 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 2106a d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 21077 170 5 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 2107c 169 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 210e1 103 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 21125 be 0 0 8 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 211e7 182 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 21369 b6 7 0 c 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 21370 ad 0 0 c 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 2141f 2f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 2147c 47 10 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 214c3 1b2 2a 0 18 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 214e0 195 d 0 18 c 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 56 - ^ =
+STACK WIN 4 21675 34 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 2167a 2e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 216a9 34 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 216ae 2e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 216dd 34 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 216e2 2e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 21711 a2 c 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 21718 99 5 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 2171d 93 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 2172b 84 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 217b3 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 217b9 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 217bf 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 217c5 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 217cb c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 217d7 c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 217e3 c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 217ef 349 c 0 0 c 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 21a99 d 0 0 0 c 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 21b38 1f5 14 0 24 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 21b47 1e4 5 0 24 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 21b48 1e2 4 0 24 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 21b49 1e0 3 0 24 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 21d2d 1ae 5 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 21d32 15f 0 0 0 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 21d62 12e 0 0 0 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 21edb 4f c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 21f21 8 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 21f2a 38 c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 21f59 8 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 21f62 41 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 21f9a 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 21fa3 35 a 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 21fa8 2f 5 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 21fad 27 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 21fd8 d3 7 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 21fdf ca 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 22020 88 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 22068 33 0 0 c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 220ab 50 4 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 220af 4a 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 220fb f0 e 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22102 e7 7 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 22108 e0 1 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 22109 de 0 0 10 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 221eb 5c 4 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 221ef 56 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22247 db 8 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 2224c d2 3 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 2224d d0 2 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 22277 a5 0 0 c c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 22322 28 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 2234a 25 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 2236f 18 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 22387 f6 c 0 14 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 2238e eb 5 0 14 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 22393 e5 0 0 14 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ =
+STACK WIN 4 2247d 33 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22498 16 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 224b0 1d 4 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 224b4 17 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 224cd 224 17 0 1c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 224e2 20f 2 0 1c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 226f1 3e 6 0 1c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 2272f 294 8 0 14 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22736 28b 1 0 14 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ =
+STACK WIN 4 22737 289 0 0 14 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ =
+STACK WIN 4 22793 1f9 0 0 14 c 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ =
+STACK WIN 4 229c3 29 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 229ec 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 22a07 2a 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22a31 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 22a7b 81 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 22a83 70 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 22a92 60 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ =
+STACK WIN 4 22a93 5e 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ =
+STACK WIN 4 22afc 93 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22b00 8d 3 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 22b01 8b 2 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 22b40 4b 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ =
+STACK WIN 4 22b8f a2 6 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22b94 9b 1 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22b95 99 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22c31 83 c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22cab 8 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 22cb4 d8 c 0 10 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22d83 8 0 0 10 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 22d8c e6 c 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22e69 8 0 0 c c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + =
+STACK WIN 4 22e72 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 22e7a 117 8 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 22e81 10e 1 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 22e82 10c 0 0 8 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =
+STACK WIN 4 22f91 27 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 23021 ec 7 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 23028 e3 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 23088 82 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 2310d 17 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 23124 95 a 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 2312a 7d 4 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 2312b 7b 3 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 2312e 77 0 0 0 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ =
+STACK WIN 4 231b9 1a 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 231d3 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 231ed 389 16 0 18 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 23201 375 2 0 18 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ =
+STACK WIN 4 23576 40 6 0 20 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 235b6 f8 7 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 235bd ef 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 2361d 8e 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 236ae 27 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 236d5 4d 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 236d6 48 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 23722 5d 4 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 2373e 3f 0 0 0 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 2373f 3d 0 0 0 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ =
+STACK WIN 4 2377f 24c f 0 8 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 23789 95 5 0 8 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ =
+STACK WIN 4 2378e 8f 0 0 8 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ =
+STACK WIN 4 237b1 6b 0 0 8 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ =
+STACK WIN 4 239cb 50 6 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 239cc 4e 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
+STACK WIN 4 239d1 48 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 239dc 3c 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 239dd 3a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ =
+STACK WIN 4 23a1b ba 7 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =
+STACK WIN 4 23a22 b1 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 23a5f 73 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ =
+STACK WIN 4 23ad5 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 4 240b9 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + =
+STACK WIN 0 1000 13 0 0 4 0 0 0 0 0
+STACK WIN 0 1020 1b 0 0 10 0 0 0 0 0
+STACK WIN 0 1040 1b 0 0 10 0 0 0 0 0
+STACK WIN 0 1060 19 8 0 4 0 0 0 0 0
+STACK WIN 0 1080 b 0 0 0 0 0 0 0 0
+STACK WIN 0 1090 24 3 0 4 0 0 0 0 0
+STACK WIN 0 10c0 f 0 0 8 0 0 0 0 0
+STACK WIN 0 10d0 17 0 0 4 0 0 0 0 0
+STACK WIN 0 10f0 27 9 0 10 0 0 0 0 0
+STACK WIN 0 1120 27 9 0 10 0 0 0 0 0
+STACK WIN 0 1150 d 0 0 8 0 0 0 0 0
+STACK WIN 0 1160 13 0 0 4 0 0 0 0 0
+STACK WIN 0 1180 21 d 0 10 0 0 0 0 0
+STACK WIN 0 11b0 21 d 0 10 0 0 0 0 0
+STACK WIN 0 11e0 7 0 0 0 0 0 0 0 0
+STACK WIN 0 11f0 6b 28 0 4 8 10 0 0 0
+STACK WIN 0 1260 32 3 0 0 0 0 0 0 0
+STACK WIN 0 12a0 e 0 0 0 0 0 0 0 0
+STACK WIN 0 12b0 47 3 0 4 0 0 0 0 0
+STACK WIN 0 1300 19 8 0 4 0 0 0 0 0
+STACK WIN 0 1320 32 3 0 0 0 0 0 0 0
+STACK WIN 0 1360 47 3 0 4 0 0 0 0 0
+STACK WIN 0 13b0 19 8 0 4 0 0 0 0 0
+STACK WIN 0 13d0 32 3 0 0 0 0 0 0 0
+STACK WIN 0 1410 47 3 0 4 0 0 0 0 0
+STACK WIN 0 1460 19 8 0 4 0 0 0 0 0
+STACK WIN 0 1480 71 29 0 4 c 10 0 0 0
+STACK WIN 0 1500 1b 0 0 8 0 0 0 0 0
+STACK WIN 0 1520 35 4 0 0 0 0 0 0 0
+STACK WIN 0 1560 20b 2d 0 14 14 14 0 0 1
+STACK WIN 0 19f0 31 0 0 0 0 0 0 0 0
+STACK WIN 0 1a30 51 d 0 4 c 0 0 0 0
+STACK WIN 0 1a90 c7 7 0 4 10 8 0 0 1
+STACK WIN 0 1b60 36 0 0 0 0 0 0 0 0
+STACK WIN 0 1ba0 3 0 0 0 0 0 0 0 0
+STACK WIN 0 1db0 81 2 0 8 0 0 0 0 0
+STACK WIN 0 1e40 1d 7 0 0 0 0 0 0 0
+STACK WIN 0 1e60 a2 3a 0 4 10 c4 0 0 0
+STACK WIN 0 1f10 142 c 0 c 0 38 0 0 1
+STACK WIN 0 2060 138 38 0 0 8 244 0 0 0
+STACK WIN 0 21a0 3b 7 0 4 0 0 0 0 0
+STACK WIN 0 21e0 25 5 0 4 0 0 0 0 0
+STACK WIN 0 2210 26 3 0 0 0 0 0 0 0
+STACK WIN 0 2240 e 0 0 0 0 0 0 0 0
+STACK WIN 0 2250 4 0 0 0 0 0 0 0 0
+STACK WIN 0 2260 11 0 0 0 0 0 0 0 0
+STACK WIN 0 2280 27 3 0 0 0 0 0 0 0
+STACK WIN 0 22b0 b 0 0 0 0 0 0 0 0
+STACK WIN 0 22c0 24 3 0 4 0 0 0 0 0
+STACK WIN 0 22f0 e 0 0 0 0 0 0 0 0
+STACK WIN 0 2300 c 0 0 0 0 0 0 0 0
+STACK WIN 0 2310 26 0 0 0 0 0 0 0 0
+STACK WIN 0 2340 1d 1 0 0 0 0 0 0 0
+STACK WIN 0 2360 1d 1 0 0 0 0 0 0 0
+STACK WIN 0 2380 13 0 0 0 0 0 0 0 0
+STACK WIN 0 23a0 23 0 0 0 0 0 0 0 0
+STACK WIN 0 23d0 56 5 0 0 8 c 0 0 0
+STACK WIN 0 2430 47 c 0 0 c 8 0 0 0
+STACK WIN 0 24f0 23 1 0 0 0 4 0 0 0
+STACK WIN 0 2520 3f b 0 8 0 0 0 0 0
+STACK WIN 0 2560 20 0 0 0 0 0 0 0 0
+STACK WIN 0 2580 20 0 0 0 0 0 0 0 0
+STACK WIN 0 25a0 1d 0 0 0 0 0 0 0 0
+STACK WIN 0 25c0 da 11 0 c 0 0 0 0 1
+STACK WIN 0 26a0 27 8 0 4 0 0 0 0 0
+STACK WIN 0 26d0 4a d 0 8 0 0 0 0 0
+STACK WIN 0 2720 e 0 0 0 0 0 0 0 0
+STACK WIN 0 2730 5 2 0 4 0 0 0 0 0
+STACK WIN 0 2740 5 2 0 4 0 0 0 0 0
+STACK WIN 0 2750 3 2 0 0 0 0 0 0 0
+STACK WIN 0 2760 b 0 0 0 0 0 0 0 0
+STACK WIN 0 2770 ef 11 0 c 0 0 0 0 1
+STACK WIN 0 2860 2b 8 0 4 0 0 0 0 0
+STACK WIN 0 2890 4f d 0 8 0 0 0 0 0
+STACK WIN 0 28e0 e 0 0 0 0 0 0 0 0
+STACK WIN 0 28f0 5 2 0 4 0 0 0 0 0
+STACK WIN 0 2900 3 2 0 0 0 0 0 0 0
+STACK WIN 0 2910 13 0 0 0 0 0 0 0 0
+STACK WIN 0 2930 86 a 0 10 10 4 0 0 1
+STACK WIN 0 29c0 23 0 0 0 0 0 0 0 0
+STACK WIN 0 29f0 1 0 0 0 0 0 0 0 0
+STACK WIN 0 2a00 26 0 0 0 0 0 0 0 0
+STACK WIN 0 2a30 23 0 0 0 0 0 0 0 0
+STACK WIN 0 2a60 76 23 0 0 4 50 0 0 0
+STACK WIN 0 2ae0 3 0 0 4 0 0 0 0 0
+STACK WIN 0 2af0 1 0 0 0 0 0 0 0 0
+STACK WIN 0 2b00 21 0 0 0 0 0 0 0 0
+STACK WIN 0 2b30 32 6 0 4 8 0 0 0 0
+STACK WIN 0 2b70 2f 6 0 0 8 0 0 0 0
+STACK WIN 0 2ba0 20 0 0 0 0 0 0 0 0
+STACK WIN 0 2bc0 20 0 0 0 0 0 0 0 0
+STACK WIN 0 2be0 1d 0 0 0 0 0 0 0 0
+STACK WIN 0 2c00 c1 5 0 8 0 0 0 0 1
+STACK WIN 0 2cd0 83 8 0 8 0 0 0 0 1
+STACK WIN 0 2d60 1f 0 0 4 0 0 0 0 0
+STACK WIN 0 2d80 bc b 0 8 0 0 0 0 1
+STACK WIN 0 2e40 e 0 0 0 0 0 0 0 0
+STACK WIN 0 2e50 5 2 0 4 0 0 0 0 0
+STACK WIN 0 2e60 e 0 0 8 0 0 0 0 0
+STACK WIN 0 2e70 da 4 0 8 0 0 0 0 1
+STACK WIN 0 2f50 97 8 0 8 0 0 0 0 1
+STACK WIN 0 2ff0 4 0 0 0 0 0 0 0 0
+STACK WIN 0 3000 23 0 0 4 0 0 0 0 0
+STACK WIN 0 3030 c7 e 0 8 0 0 0 0 1
+STACK WIN 0 3100 e 0 0 0 0 0 0 0 0
+STACK WIN 0 3110 5 2 0 4 0 0 0 0 0
+STACK WIN 0 3120 e 0 0 8 0 0 0 0 0
+STACK WIN 0 3130 6 0 0 0 0 0 0 0 0
+STACK WIN 0 3140 208 6 0 8 10 8 0 0 1
+STACK WIN 0 33d0 1 0 0 0 0 0 0 0 0
+STACK WIN 0 33e0 8 0 0 0 0 0 0 0 0
+STACK WIN 0 33f0 56 3 0 0 0 10 0 0 0
+STACK WIN 0 3450 32 0 0 4 0 0 0 0 0
+STACK WIN 0 3490 28 0 0 0 0 0 0 0 0
+STACK WIN 0 34c0 19 0 0 0 0 0 0 0 0
+STACK WIN 0 34e0 21 0 0 0 0 0 0 0 0
+STACK WIN 0 3510 19 8 0 4 0 0 0 0 0
+STACK WIN 0 3530 7 0 0 0 0 0 0 0 0
+STACK WIN 0 3540 6 0 0 0 0 0 0 0 0
+STACK WIN 0 36d0 39 8 0 4 0 0 0 0 0
+STACK WIN 0 3710 6 0 0 0 0 0 0 0 0
+STACK WIN 0 38a0 3a 8 0 4 0 0 0 0 0
+STACK WIN 0 38e0 6 0 0 0 0 0 0 0 0
+STACK WIN 0 38f0 32 0 0 4 0 0 0 0 0
+STACK WIN 0 3930 19 0 0 0 0 0 0 0 0
+STACK WIN 0 3950 56 7 0 4 0 c 0 0 0
+STACK WIN 0 39b0 4 0 0 0 0 0 0 0 0
+STACK WIN 0 39c0 59 7 0 4 0 c 0 0 0
+STACK WIN 0 3a20 6 0 0 0 0 0 0 0 0
+STACK WIN 0 3a30 21 d 0 10 0 0 0 0 0
+STACK WIN 0 3a60 27 9 0 10 0 0 0 0 0
+STACK WIN 0 3a90 24 f 0 0 0 0 0 0 0
+STACK WIN 0 3ac0 1 0 0 0 0 0 0 0 0
+STACK WIN 0 3ad0 15 0 0 0 0 0 0 0 0
+STACK WIN 0 3af0 21 d 0 10 0 0 0 0 0
+STACK WIN 0 3b20 27 9 0 10 0 0 0 0 0
+STACK WIN 0 3b50 22 d 0 0 0 0 0 0 0
+STACK WIN 0 3b80 10 0 0 0 0 0 0 0 0
+STACK WIN 0 3b90 25 11 0 0 0 0 0 0 0
+STACK WIN 0 3bc0 4f a 0 0 0 10 0 0 0
+STACK WIN 0 3c10 54 7 0 8 0 c 0 0 0
+STACK WIN 0 3c70 57 7 0 8 0 c 0 0 0
+STACK WIN 0 3cd0 19 8 0 4 0 0 0 0 0
+STACK WIN 0 3cf0 7 1 0 0 0 4 0 0 0
+STACK WIN 0 3d00 21 d 0 14 0 0 0 0 0
+STACK WIN 0 3d30 7 1 0 0 0 4 0 0 0
+STACK WIN 0 3d40 27 9 0 14 0 0 0 0 0
+STACK WIN 0 3d70 3 0 0 0 0 0 0 0 0
+STACK WIN 0 3d80 1 0 0 0 0 0 0 0 0
+STACK WIN 0 3d90 7 1 0 0 0 4 0 0 0
+STACK WIN 0 3da0 15 0 0 4 0 0 0 0 0
+STACK WIN 0 3dc0 1 0 0 4 0 0 0 0 0
+STACK WIN 0 3dd0 15 0 0 8 0 0 0 0 0
+STACK WIN 0 3df0 21 d 0 14 0 0 0 0 0
+STACK WIN 0 3e20 27 9 0 14 0 0 0 0 0
+STACK WIN 0 3e50 22 d 0 0 0 0 0 0 0
+STACK WIN 0 3e80 10 0 0 0 0 0 0 0 0
+STACK WIN 0 3e90 7 1 0 0 0 4 0 0 0
+STACK WIN 0 3ea0 25 11 0 c 0 0 0 0 0
+STACK WIN 0 3ed0 3 0 0 4 0 0 0 0 0
+STACK WIN 0 3ee0 15 0 0 0 0 0 0 0 0
+STACK WIN 0 3f00 22 d 0 8 0 0 0 0 0
+STACK WIN 0 3f30 13 0 0 0 0 0 0 0 0
+STACK WIN 0 3f50 1 0 0 0 0 0 0 0 0
+STACK WIN 0 3f60 15 0 0 8 0 0 0 0 0
+STACK WIN 0 3f80 22 d 0 0 0 0 0 0 0
+STACK WIN 0 3fb0 15 0 0 4 0 0 0 0 0
+STACK WIN 0 3fd0 15 0 0 4 0 0 0 0 0
+STACK WIN 0 3ff0 13 0 0 4 0 0 0 0 0
+STACK WIN 0 4010 ae e 0 4 0 54 0 0 0
+STACK WIN 0 40c0 ae e 0 4 0 4c 0 0 0
+STACK WIN 0 4170 40 7 0 4 0 0 0 0 0
+STACK WIN 0 4464 13 0 0 0 0 0 0 0 0
+STACK WIN 0 466c 16 0 0 0 0 0 0 0 0
+STACK WIN 0 46a0 9 0 0 0 0 0 0 0 0
+STACK WIN 0 46f2 a 0 0 0 0 0 0 0 0
+STACK WIN 0 5405 14 0 0 0 0 0 0 0 0
+STACK WIN 0 58bc a 0 0 0 0 0 0 0 0
+STACK WIN 0 6039 12 0 0 0 0 0 0 0 0
+STACK WIN 0 60e0 8b 0 0 4 0 0 0 0 0
+STACK WIN 0 71eb b 0 0 0 0 0 0 0 0
+STACK WIN 0 7a28 a 0 0 0 0 0 0 0 0
+STACK WIN 0 7b36 a 0 0 0 0 0 0 0 0
+STACK WIN 0 7cc5 9 0 0 0 0 0 0 0 0
+STACK WIN 0 7f28 4 0 0 0 0 0 0 0 0
+STACK WIN 0 8151 9 0 0 0 0 0 0 0 0
+STACK WIN 0 821f 9 0 0 0 0 0 0 0 0
+STACK WIN 0 8390 a 0 0 0 0 0 0 0 0
+STACK WIN 0 83ce 21 0 0 0 0 0 0 0 0
+STACK WIN 0 8477 9 0 0 0 0 0 0 0 0
+STACK WIN 0 8714 a 0 0 0 0 0 0 0 0
+STACK WIN 0 8747 a 0 0 0 0 0 0 0 0
+STACK WIN 0 8779 a 0 0 0 0 0 0 0 0
+STACK WIN 0 87b4 a 0 0 0 0 0 0 0 0
+STACK WIN 0 89d2 9 0 0 0 0 0 0 0 0
+STACK WIN 0 8a62 7c 0 0 0 0 0 0 0 0
+STACK WIN 0 8c49 4 0 0 0 0 0 0 0 0
+STACK WIN 0 8ce2 4 0 0 0 0 0 0 0 0
+STACK WIN 0 9694 9 0 0 0 0 0 0 0 0
+STACK WIN 0 9835 c 0 0 0 0 0 0 0 0
+STACK WIN 0 9841 c 0 0 0 0 0 0 0 0
+STACK WIN 0 9a66 4 0 0 0 0 0 0 0 0
+STACK WIN 0 9ab6 4 0 0 0 0 0 0 0 0
+STACK WIN 0 9ae0 4c 8 0 c 10 0 0 0 1
+STACK WIN 0 9c4a 6 0 0 0 0 0 0 0 0
+STACK WIN 0 9ca8 9 0 0 0 0 0 0 0 0
+STACK WIN 0 9ee5 9 0 0 0 0 0 0 0 0
+STACK WIN 0 9fd7 c 0 0 0 0 0 0 0 0
+STACK WIN 0 a04a 9 0 0 0 0 0 0 0 0
+STACK WIN 0 a163 c 0 0 0 0 0 0 0 0
+STACK WIN 0 a1b9 9 0 0 0 0 0 0 0 0
+STACK WIN 0 a1d0 88 0 0 8 0 0 0 0 0
+STACK WIN 0 a2c0 7a 0 0 c 0 0 0 0 0
+STACK WIN 0 c23c a 0 0 0 0 0 0 0 0
+STACK WIN 0 df29 14 0 0 0 0 0 0 0 0
+STACK WIN 0 dfed a 0 0 0 0 0 0 0 0
+STACK WIN 0 e257 c 0 0 0 0 0 0 0 0
+STACK WIN 0 e40d 15 0 0 0 0 0 0 0 0
+STACK WIN 0 e761 17 0 0 0 0 0 0 0 0
+STACK WIN 0 eaa4 c 0 0 0 0 0 0 0 0
+STACK WIN 0 eea0 9 0 0 0 0 0 0 0 0
+STACK WIN 0 f221 9 0 0 0 0 0 0 0 0
+STACK WIN 0 f370 c 0 0 0 0 0 0 0 0
+STACK WIN 0 f3fd c 0 0 0 0 0 0 0 0
+STACK WIN 0 1000a 11 0 0 0 0 0 0 0 0
+STACK WIN 0 1001b c 0 0 0 0 0 0 0 0
+STACK WIN 0 1004c 8 0 0 0 0 0 0 0 0
+STACK WIN 0 10558 90 3 0 c c 0 0 0 0
+STACK WIN 0 105e8 46 0 0 10 4 0 0 0 1
+STACK WIN 0 1064a 17 4 0 0 10 0 0 0 1
+STACK WIN 0 10661 19 0 0 0 0 0 0 0 0
+STACK WIN 0 10694 17 1 0 8 4 0 0 0 1
+STACK WIN 0 123b2 9 0 0 0 0 0 0 0 0
+STACK WIN 0 123f8 9 0 0 0 0 0 0 0 0
+STACK WIN 0 126bd a 0 0 0 0 0 0 0 0
+STACK WIN 0 128c8 e 0 0 0 0 0 0 0 0
+STACK WIN 0 129c5 f 0 0 0 0 0 0 0 0
+STACK WIN 0 12a8e 9 0 0 0 0 0 0 0 0
+STACK WIN 0 12b7f 2d 0 0 0 0 0 0 0 0
+STACK WIN 0 12ca3 e 0 0 0 0 0 0 0 0
+STACK WIN 0 12e47 f 0 0 0 0 0 0 0 0
+STACK WIN 0 14079 b 0 0 0 0 0 0 0 0
+STACK WIN 0 14221 84 3 0 8 c 0 0 0 0
+STACK WIN 0 142a5 23 0 0 0 0 0 0 0 0
+STACK WIN 0 142f0 3 0 0 0 0 0 0 0 0
+STACK WIN 0 14385 11 0 0 0 0 0 0 0 0
+STACK WIN 0 190b6 9 0 0 0 0 0 0 0 0
+STACK WIN 0 19159 9 0 0 0 0 0 0 0 0
+STACK WIN 0 1a1d5 a 0 0 0 0 0 0 0 0
+STACK WIN 0 20e9b a 0 0 0 0 0 0 0 0
+STACK WIN 0 20fd7 1c 0 0 0 0 0 0 0 0
+STACK WIN 0 21a99 e 0 0 0 0 0 0 0 0
+STACK WIN 0 21f21 9 0 0 0 0 0 0 0 0
+STACK WIN 0 21f59 9 0 0 0 0 0 0 0 0
+STACK WIN 0 21f9a 9 0 0 0 0 0 0 0 0
+STACK WIN 0 22cab 9 0 0 0 0 0 0 0 0
+STACK WIN 0 22d83 9 0 0 0 0 0 0 0 0
+STACK WIN 0 22e69 9 0 0 0 0 0 0 0 0
+STACK WIN 0 23b00 be 0 0 8 0 0 0 0 0
diff --git a/src/processor/testdata/module1.out b/src/processor/testdata/module1.out
index d4a8208..cd6e18d 100644
--- a/src/processor/testdata/module1.out
+++ b/src/processor/testdata/module1.out
@@ -1,4 +1,5 @@
 MODULE windows x86 111111111111111111111111111111111 module1.pdb
+INFO CODE_ID FFFFFFFF module1.exe
 FILE 1 file1_1.cc
 FILE 2 file1_2.cc
 FILE 3 file1_3.cc
diff --git a/src/processor/testdata/null_read_av.dmp b/src/processor/testdata/null_read_av.dmp
new file mode 100755
index 0000000..f146dc7
--- /dev/null
+++ b/src/processor/testdata/null_read_av.dmp
Binary files differ
diff --git a/src/processor/testdata/null_write_av.dmp b/src/processor/testdata/null_write_av.dmp
new file mode 100755
index 0000000..35c5933
--- /dev/null
+++ b/src/processor/testdata/null_write_av.dmp
Binary files differ
diff --git a/src/processor/testdata/read_av_clobber_write.dmp b/src/processor/testdata/read_av_clobber_write.dmp
new file mode 100755
index 0000000..5deea8d
--- /dev/null
+++ b/src/processor/testdata/read_av_clobber_write.dmp
Binary files differ
diff --git a/src/processor/testdata/read_av_conditional.dmp b/src/processor/testdata/read_av_conditional.dmp
new file mode 100755
index 0000000..b360423
--- /dev/null
+++ b/src/processor/testdata/read_av_conditional.dmp
Binary files differ
diff --git a/src/processor/testdata/read_av_non_null.dmp b/src/processor/testdata/read_av_non_null.dmp
new file mode 100755
index 0000000..2d972a4
--- /dev/null
+++ b/src/processor/testdata/read_av_non_null.dmp
Binary files differ
diff --git a/src/processor/testdata/stack_exhaustion.dmp b/src/processor/testdata/stack_exhaustion.dmp
new file mode 100755
index 0000000..4eb378b
--- /dev/null
+++ b/src/processor/testdata/stack_exhaustion.dmp
Binary files differ
diff --git a/src/processor/testdata/test_app.cc b/src/processor/testdata/test_app.cc
index f230ef3..7882a8b 100644
--- a/src/processor/testdata/test_app.cc
+++ b/src/processor/testdata/test_app.cc
@@ -32,7 +32,7 @@
 //   google_breakpad/src/client/windows/releasestaticcrt/exception_handler.lib
 // Then run test_app to generate a dump, and dump_syms to create the .sym file.
 
-#include <cstdio>
+#include <stdio.h>
 
 #include "client/windows/handler/exception_handler.h"
 
diff --git a/src/processor/testdata/write_av_non_null.dmp b/src/processor/testdata/write_av_non_null.dmp
new file mode 100755
index 0000000..1ec80ea
--- /dev/null
+++ b/src/processor/testdata/write_av_non_null.dmp
Binary files differ
diff --git a/src/processor/tokenize.cc b/src/processor/tokenize.cc
index 8b1cdb3..85f7782 100644
--- a/src/processor/tokenize.cc
+++ b/src/processor/tokenize.cc
@@ -67,7 +67,7 @@
 }
 
 void StringToVector(const string &str, vector<char> &vec) {
-  vec.reserve(str.length() + 1);
+  vec.resize(str.length() + 1);
   std::copy(str.begin(), str.end(),
 	    vec.begin());
   vec[str.length()] = '\0';
diff --git a/src/processor/udp_network.cc b/src/processor/udp_network.cc
index 5207284..0cb911e 100644
--- a/src/processor/udp_network.cc
+++ b/src/processor/udp_network.cc
@@ -27,21 +27,23 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "processor/udp_network.h"
+
 #include <arpa/inet.h>
 #include <errno.h>
 #include <netdb.h>
 #include <netinet/in.h>
+#include <stdio.h>
+#include <string.h>
 #include <sys/socket.h>
 
-#include <cstdio>
-#include <cstring>
 #include <string>
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
 #include "processor/logging.h"
-#include "processor/udp_network.h"
 
 namespace google_breakpad {
 using std::string;
diff --git a/src/processor/windows_frame_info.h b/src/processor/windows_frame_info.h
index cca78b8..067f3cf 100644
--- a/src/processor/windows_frame_info.h
+++ b/src/processor/windows_frame_info.h
@@ -38,7 +38,9 @@
 #ifndef PROCESSOR_WINDOWS_FRAME_INFO_H__
 #define PROCESSOR_WINDOWS_FRAME_INFO_H__
 
-#include <cstring>
+#include <string.h>
+#include <stdlib.h>
+
 #include <string>
 #include <vector>
 
diff --git a/src/third_party/curl/curl.h b/src/third_party/curl/curl.h
new file mode 100644
index 0000000..160cd98
--- /dev/null
+++ b/src/third_party/curl/curl.h
@@ -0,0 +1,1936 @@
+#ifndef __CURL_CURL_H
+#define __CURL_CURL_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: curl.h,v 1.396 2009-10-16 13:30:31 yangtse Exp $
+ ***************************************************************************/
+
+/*
+ * If you have libcurl problems, all docs and details are found here:
+ *   http://curl.haxx.se/libcurl/
+ *
+ * curl-library mailing list subscription and unsubscription web interface:
+ *   http://cool.haxx.se/mailman/listinfo/curl-library/
+ */
+
+/*
+ * Leading 'curl' path on the 'curlbuild.h' include statement is
+ * required to properly allow building outside of the source tree,
+ * due to the fact that in this case 'curlbuild.h' is generated in
+ * a subdirectory of the build tree while 'curl.h actually remains
+ * in a subdirectory of the source tree.
+ */
+
+#include "third_party/curl/curlver.h"         /* libcurl version defines   */
+#include "third_party/curl/curlbuild.h"       /* libcurl build definitions */
+#include "third_party/curl/curlrules.h"       /* libcurl rules enforcement */
+
+/*
+ * Define WIN32 when build target is Win32 API
+ */
+
+#if (defined(_WIN32) || defined(__WIN32__)) && \
+     !defined(WIN32) && !defined(__SYMBIAN32__)
+#define WIN32
+#endif
+
+#include <stdio.h>
+#include <limits.h>
+
+/* The include stuff here below is mainly for time_t! */
+#include <sys/types.h>
+#include <time.h>
+
+#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__GNUC__) && \
+  !defined(__CYGWIN__) || defined(__MINGW32__)
+#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H))
+/* The check above prevents the winsock2 inclusion if winsock.h already was
+   included, since they can't co-exist without problems */
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#endif
+#else
+
+/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
+   libc5-based Linux systems. Only include it on system that are known to
+   require it! */
+#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
+    defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \
+    defined(ANDROID)
+#include <sys/select.h>
+#endif
+
+#ifndef _WIN32_WCE
+#include <sys/socket.h>
+#endif
+#if !defined(WIN32) && !defined(__WATCOMC__) && !defined(__VXWORKS__)
+#include <sys/time.h>
+#endif
+#include <sys/types.h>
+#endif
+
+#ifdef __BEOS__
+#include <support/SupportDefs.h>
+#endif
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+typedef void CURL;
+
+/*
+ * Decorate exportable functions for Win32 and Symbian OS DLL linking.
+ * This avoids using a .def file for building libcurl.dll.
+ */
+#if (defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)) && \
+     !defined(CURL_STATICLIB)
+#if defined(BUILDING_LIBCURL)
+#define CURL_EXTERN  __declspec(dllexport)
+#else
+#define CURL_EXTERN  __declspec(dllimport)
+#endif
+#else
+
+#ifdef CURL_HIDDEN_SYMBOLS
+/*
+ * This definition is used to make external definitions visible in the
+ * shared library when symbols are hidden by default.  It makes no
+ * difference when compiling applications whether this is set or not,
+ * only when compiling the library.
+ */
+#define CURL_EXTERN CURL_EXTERN_SYMBOL
+#else
+#define CURL_EXTERN
+#endif
+#endif
+
+#ifndef curl_socket_typedef
+/* socket typedef */
+#ifdef WIN32
+typedef SOCKET curl_socket_t;
+#define CURL_SOCKET_BAD INVALID_SOCKET
+#else
+typedef int curl_socket_t;
+#define CURL_SOCKET_BAD -1
+#endif
+#define curl_socket_typedef
+#endif /* curl_socket_typedef */
+
+struct curl_httppost {
+  struct curl_httppost *next;       /* next entry in the list */
+  char *name;                       /* pointer to allocated name */
+  long namelength;                  /* length of name length */
+  char *contents;                   /* pointer to allocated data contents */
+  long contentslength;              /* length of contents field */
+  char *buffer;                     /* pointer to allocated buffer contents */
+  long bufferlength;                /* length of buffer field */
+  char *contenttype;                /* Content-Type */
+  struct curl_slist* contentheader; /* list of extra headers for this form */
+  struct curl_httppost *more;       /* if one field name has more than one
+                                       file, this link should link to following
+                                       files */
+  long flags;                       /* as defined below */
+#define HTTPPOST_FILENAME (1<<0)    /* specified content is a file name */
+#define HTTPPOST_READFILE (1<<1)    /* specified content is a file name */
+#define HTTPPOST_PTRNAME (1<<2)     /* name is only stored pointer
+                                       do not free in formfree */
+#define HTTPPOST_PTRCONTENTS (1<<3) /* contents is only stored pointer
+                                       do not free in formfree */
+#define HTTPPOST_BUFFER (1<<4)      /* upload file from buffer */
+#define HTTPPOST_PTRBUFFER (1<<5)   /* upload file from pointer contents */
+#define HTTPPOST_CALLBACK (1<<6)    /* upload file contents by using the
+                                       regular read callback to get the data
+                                       and pass the given pointer as custom
+                                       pointer */
+
+  char *showfilename;               /* The file name to show. If not set, the
+                                       actual file name will be used (if this
+                                       is a file part) */
+  void *userp;                      /* custom pointer used for
+                                       HTTPPOST_CALLBACK posts */
+};
+
+typedef int (*curl_progress_callback)(void *clientp,
+                                      double dltotal,
+                                      double dlnow,
+                                      double ultotal,
+                                      double ulnow);
+
+#ifndef CURL_MAX_WRITE_SIZE
+  /* Tests have proven that 20K is a very bad buffer size for uploads on
+     Windows, while 16K for some odd reason performed a lot better.
+     We do the ifndef check to allow this value to easier be changed at build
+     time for those who feel adventurous. */
+#define CURL_MAX_WRITE_SIZE 16384
+#endif
+
+#ifndef CURL_MAX_HTTP_HEADER
+/* The only reason to have a max limit for this is to avoid the risk of a bad
+   server feeding libcurl with a never-ending header that will cause reallocs
+   infinitely */
+#define CURL_MAX_HTTP_HEADER (100*1024)
+#endif
+
+
+/* This is a magic return code for the write callback that, when returned,
+   will signal libcurl to pause receiving on the current transfer. */
+#define CURL_WRITEFUNC_PAUSE 0x10000001
+typedef size_t (*curl_write_callback)(char *buffer,
+                                      size_t size,
+                                      size_t nitems,
+                                      void *outstream);
+
+/* These are the return codes for the seek callbacks */
+#define CURL_SEEKFUNC_OK       0
+#define CURL_SEEKFUNC_FAIL     1 /* fail the entire transfer */
+#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so
+                                    libcurl might try other means instead */
+typedef int (*curl_seek_callback)(void *instream,
+                                  curl_off_t offset,
+                                  int origin); /* 'whence' */
+
+/* This is a return code for the read callback that, when returned, will
+   signal libcurl to immediately abort the current transfer. */
+#define CURL_READFUNC_ABORT 0x10000000
+/* This is a return code for the read callback that, when returned, will
+   signal libcurl to pause sending data on the current transfer. */
+#define CURL_READFUNC_PAUSE 0x10000001
+
+typedef size_t (*curl_read_callback)(char *buffer,
+                                      size_t size,
+                                      size_t nitems,
+                                      void *instream);
+
+typedef enum  {
+  CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */
+  CURLSOCKTYPE_LAST   /* never use */
+} curlsocktype;
+
+typedef int (*curl_sockopt_callback)(void *clientp,
+                                     curl_socket_t curlfd,
+                                     curlsocktype purpose);
+
+struct curl_sockaddr {
+  int family;
+  int socktype;
+  int protocol;
+  unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it
+                           turned really ugly and painful on the systems that
+                           lack this type */
+  struct sockaddr addr;
+};
+
+typedef curl_socket_t
+(*curl_opensocket_callback)(void *clientp,
+                            curlsocktype purpose,
+                            struct curl_sockaddr *address);
+
+#ifndef CURL_NO_OLDIES
+  /* not used since 7.10.8, will be removed in a future release */
+typedef int (*curl_passwd_callback)(void *clientp,
+                                    const char *prompt,
+                                    char *buffer,
+                                    int buflen);
+#endif
+
+typedef enum {
+  CURLIOE_OK,            /* I/O operation successful */
+  CURLIOE_UNKNOWNCMD,    /* command was unknown to callback */
+  CURLIOE_FAILRESTART,   /* failed to restart the read */
+  CURLIOE_LAST           /* never use */
+} curlioerr;
+
+typedef enum  {
+  CURLIOCMD_NOP,         /* no operation */
+  CURLIOCMD_RESTARTREAD, /* restart the read stream from start */
+  CURLIOCMD_LAST         /* never use */
+} curliocmd;
+
+typedef curlioerr (*curl_ioctl_callback)(CURL *handle,
+                                         int cmd,
+                                         void *clientp);
+
+/*
+ * The following typedef's are signatures of malloc, free, realloc, strdup and
+ * calloc respectively.  Function pointers of these types can be passed to the
+ * curl_global_init_mem() function to set user defined memory management
+ * callback routines.
+ */
+typedef void *(*curl_malloc_callback)(size_t size);
+typedef void (*curl_free_callback)(void *ptr);
+typedef void *(*curl_realloc_callback)(void *ptr, size_t size);
+typedef char *(*curl_strdup_callback)(const char *str);
+typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size);
+
+/* the kind of data that is passed to information_callback*/
+typedef enum {
+  CURLINFO_TEXT = 0,
+  CURLINFO_HEADER_IN,    /* 1 */
+  CURLINFO_HEADER_OUT,   /* 2 */
+  CURLINFO_DATA_IN,      /* 3 */
+  CURLINFO_DATA_OUT,     /* 4 */
+  CURLINFO_SSL_DATA_IN,  /* 5 */
+  CURLINFO_SSL_DATA_OUT, /* 6 */
+  CURLINFO_END
+} curl_infotype;
+
+typedef int (*curl_debug_callback)
+       (CURL *handle,      /* the handle/transfer this concerns */
+        curl_infotype type, /* what kind of data */
+        char *data,        /* points to the data */
+        size_t size,       /* size of the data pointed to */
+        void *userptr);    /* whatever the user please */
+
+/* All possible error codes from all sorts of curl functions. Future versions
+   may return other values, stay prepared.
+
+   Always add new return codes last. Never *EVER* remove any. The return
+   codes must remain the same!
+ */
+
+typedef enum {
+  CURLE_OK = 0,
+  CURLE_UNSUPPORTED_PROTOCOL,    /* 1 */
+  CURLE_FAILED_INIT,             /* 2 */
+  CURLE_URL_MALFORMAT,           /* 3 */
+  CURLE_OBSOLETE4,               /* 4 - NOT USED */
+  CURLE_COULDNT_RESOLVE_PROXY,   /* 5 */
+  CURLE_COULDNT_RESOLVE_HOST,    /* 6 */
+  CURLE_COULDNT_CONNECT,         /* 7 */
+  CURLE_FTP_WEIRD_SERVER_REPLY,  /* 8 */
+  CURLE_REMOTE_ACCESS_DENIED,    /* 9 a service was denied by the server
+                                    due to lack of access - when login fails
+                                    this is not returned. */
+  CURLE_OBSOLETE10,              /* 10 - NOT USED */
+  CURLE_FTP_WEIRD_PASS_REPLY,    /* 11 */
+  CURLE_OBSOLETE12,              /* 12 - NOT USED */
+  CURLE_FTP_WEIRD_PASV_REPLY,    /* 13 */
+  CURLE_FTP_WEIRD_227_FORMAT,    /* 14 */
+  CURLE_FTP_CANT_GET_HOST,       /* 15 */
+  CURLE_OBSOLETE16,              /* 16 - NOT USED */
+  CURLE_FTP_COULDNT_SET_TYPE,    /* 17 */
+  CURLE_PARTIAL_FILE,            /* 18 */
+  CURLE_FTP_COULDNT_RETR_FILE,   /* 19 */
+  CURLE_OBSOLETE20,              /* 20 - NOT USED */
+  CURLE_QUOTE_ERROR,             /* 21 - quote command failure */
+  CURLE_HTTP_RETURNED_ERROR,     /* 22 */
+  CURLE_WRITE_ERROR,             /* 23 */
+  CURLE_OBSOLETE24,              /* 24 - NOT USED */
+  CURLE_UPLOAD_FAILED,           /* 25 - failed upload "command" */
+  CURLE_READ_ERROR,              /* 26 - couldn't open/read from file */
+  CURLE_OUT_OF_MEMORY,           /* 27 */
+  /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error
+           instead of a memory allocation error if CURL_DOES_CONVERSIONS
+           is defined
+  */
+  CURLE_OPERATION_TIMEDOUT,      /* 28 - the timeout time was reached */
+  CURLE_OBSOLETE29,              /* 29 - NOT USED */
+  CURLE_FTP_PORT_FAILED,         /* 30 - FTP PORT operation failed */
+  CURLE_FTP_COULDNT_USE_REST,    /* 31 - the REST command failed */
+  CURLE_OBSOLETE32,              /* 32 - NOT USED */
+  CURLE_RANGE_ERROR,             /* 33 - RANGE "command" didn't work */
+  CURLE_HTTP_POST_ERROR,         /* 34 */
+  CURLE_SSL_CONNECT_ERROR,       /* 35 - wrong when connecting with SSL */
+  CURLE_BAD_DOWNLOAD_RESUME,     /* 36 - couldn't resume download */
+  CURLE_FILE_COULDNT_READ_FILE,  /* 37 */
+  CURLE_LDAP_CANNOT_BIND,        /* 38 */
+  CURLE_LDAP_SEARCH_FAILED,      /* 39 */
+  CURLE_OBSOLETE40,              /* 40 - NOT USED */
+  CURLE_FUNCTION_NOT_FOUND,      /* 41 */
+  CURLE_ABORTED_BY_CALLBACK,     /* 42 */
+  CURLE_BAD_FUNCTION_ARGUMENT,   /* 43 */
+  CURLE_OBSOLETE44,              /* 44 - NOT USED */
+  CURLE_INTERFACE_FAILED,        /* 45 - CURLOPT_INTERFACE failed */
+  CURLE_OBSOLETE46,              /* 46 - NOT USED */
+  CURLE_TOO_MANY_REDIRECTS ,     /* 47 - catch endless re-direct loops */
+  CURLE_UNKNOWN_TELNET_OPTION,   /* 48 - User specified an unknown option */
+  CURLE_TELNET_OPTION_SYNTAX ,   /* 49 - Malformed telnet option */
+  CURLE_OBSOLETE50,              /* 50 - NOT USED */
+  CURLE_PEER_FAILED_VERIFICATION, /* 51 - peer's certificate or fingerprint
+                                     wasn't verified fine */
+  CURLE_GOT_NOTHING,             /* 52 - when this is a specific error */
+  CURLE_SSL_ENGINE_NOTFOUND,     /* 53 - SSL crypto engine not found */
+  CURLE_SSL_ENGINE_SETFAILED,    /* 54 - can not set SSL crypto engine as
+                                    default */
+  CURLE_SEND_ERROR,              /* 55 - failed sending network data */
+  CURLE_RECV_ERROR,              /* 56 - failure in receiving network data */
+  CURLE_OBSOLETE57,              /* 57 - NOT IN USE */
+  CURLE_SSL_CERTPROBLEM,         /* 58 - problem with the local certificate */
+  CURLE_SSL_CIPHER,              /* 59 - couldn't use specified cipher */
+  CURLE_SSL_CACERT,              /* 60 - problem with the CA cert (path?) */
+  CURLE_BAD_CONTENT_ENCODING,    /* 61 - Unrecognized transfer encoding */
+  CURLE_LDAP_INVALID_URL,        /* 62 - Invalid LDAP URL */
+  CURLE_FILESIZE_EXCEEDED,       /* 63 - Maximum file size exceeded */
+  CURLE_USE_SSL_FAILED,          /* 64 - Requested FTP SSL level failed */
+  CURLE_SEND_FAIL_REWIND,        /* 65 - Sending the data requires a rewind
+                                    that failed */
+  CURLE_SSL_ENGINE_INITFAILED,   /* 66 - failed to initialise ENGINE */
+  CURLE_LOGIN_DENIED,            /* 67 - user, password or similar was not
+                                    accepted and we failed to login */
+  CURLE_TFTP_NOTFOUND,           /* 68 - file not found on server */
+  CURLE_TFTP_PERM,               /* 69 - permission problem on server */
+  CURLE_REMOTE_DISK_FULL,        /* 70 - out of disk space on server */
+  CURLE_TFTP_ILLEGAL,            /* 71 - Illegal TFTP operation */
+  CURLE_TFTP_UNKNOWNID,          /* 72 - Unknown transfer ID */
+  CURLE_REMOTE_FILE_EXISTS,      /* 73 - File already exists */
+  CURLE_TFTP_NOSUCHUSER,         /* 74 - No such user */
+  CURLE_CONV_FAILED,             /* 75 - conversion failed */
+  CURLE_CONV_REQD,               /* 76 - caller must register conversion
+                                    callbacks using curl_easy_setopt options
+                                    CURLOPT_CONV_FROM_NETWORK_FUNCTION,
+                                    CURLOPT_CONV_TO_NETWORK_FUNCTION, and
+                                    CURLOPT_CONV_FROM_UTF8_FUNCTION */
+  CURLE_SSL_CACERT_BADFILE,      /* 77 - could not load CACERT file, missing
+                                    or wrong format */
+  CURLE_REMOTE_FILE_NOT_FOUND,   /* 78 - remote file not found */
+  CURLE_SSH,                     /* 79 - error from the SSH layer, somewhat
+                                    generic so the error message will be of
+                                    interest when this has happened */
+
+  CURLE_SSL_SHUTDOWN_FAILED,     /* 80 - Failed to shut down the SSL
+                                    connection */
+  CURLE_AGAIN,                   /* 81 - socket is not ready for send/recv,
+                                    wait till it's ready and try again (Added
+                                    in 7.18.2) */
+  CURLE_SSL_CRL_BADFILE,         /* 82 - could not load CRL file, missing or
+                                    wrong format (Added in 7.19.0) */
+  CURLE_SSL_ISSUER_ERROR,        /* 83 - Issuer check failed.  (Added in
+                                    7.19.0) */
+  CURL_LAST /* never use! */
+} CURLcode;
+
+#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
+                          the obsolete stuff removed! */
+
+/* Backwards compatibility with older names */
+
+/* The following were added in 7.17.1 */
+/* These are scheduled to disappear by 2009 */
+#define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION
+
+/* The following were added in 7.17.0 */
+/* These are scheduled to disappear by 2009 */
+#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* noone should be using this! */
+#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46
+#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44
+#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10
+#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16
+#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32
+#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29
+#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12
+#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20
+#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40
+#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24
+#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57
+#define CURLE_URL_MALFORMAT_USER CURLE_OBSOLETE4
+
+#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED
+#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE
+#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR
+#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL
+#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS
+#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR
+#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED
+
+/* The following were added earlier */
+
+#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT
+
+#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR
+#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED
+#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED
+
+#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE
+#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME
+
+/* This was the error code 50 in 7.7.3 and a few earlier versions, this
+   is no longer used by libcurl but is instead #defined here only to not
+   make programs break */
+#define CURLE_ALREADY_COMPLETE 99999
+
+#endif /*!CURL_NO_OLDIES*/
+
+/* This prototype applies to all conversion callbacks */
+typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length);
+
+typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl,    /* easy handle */
+                                          void *ssl_ctx, /* actually an
+                                                            OpenSSL SSL_CTX */
+                                          void *userptr);
+
+typedef enum {
+  CURLPROXY_HTTP = 0,   /* added in 7.10, new in 7.19.4 default is to use
+                           CONNECT HTTP/1.1 */
+  CURLPROXY_HTTP_1_0 = 1,   /* added in 7.19.4, force to use CONNECT
+                               HTTP/1.0  */
+  CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already
+                           in 7.10 */
+  CURLPROXY_SOCKS5 = 5, /* added in 7.10 */
+  CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */
+  CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the
+                                   host name rather than the IP address. added
+                                   in 7.18.0 */
+} curl_proxytype;  /* this enum was added in 7.10 */
+
+#define CURLAUTH_NONE         0       /* nothing */
+#define CURLAUTH_BASIC        (1<<0)  /* Basic (default) */
+#define CURLAUTH_DIGEST       (1<<1)  /* Digest */
+#define CURLAUTH_GSSNEGOTIATE (1<<2)  /* GSS-Negotiate */
+#define CURLAUTH_NTLM         (1<<3)  /* NTLM */
+#define CURLAUTH_DIGEST_IE    (1<<4)  /* Digest with IE flavour */
+#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE)  /* all fine types set */
+#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE))
+
+#define CURLSSH_AUTH_ANY       ~0     /* all types supported by the server */
+#define CURLSSH_AUTH_NONE      0      /* none allowed, silly but complete */
+#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */
+#define CURLSSH_AUTH_PASSWORD  (1<<1) /* password */
+#define CURLSSH_AUTH_HOST      (1<<2) /* host key files */
+#define CURLSSH_AUTH_KEYBOARD  (1<<3) /* keyboard interactive */
+#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY
+
+#define CURL_ERROR_SIZE 256
+
+struct curl_khkey {
+  const char *key; /* points to a zero-terminated string encoded with base64
+                      if len is zero, otherwise to the "raw" data */
+  size_t len;
+  enum type {
+    CURLKHTYPE_UNKNOWN,
+    CURLKHTYPE_RSA1,
+    CURLKHTYPE_RSA,
+    CURLKHTYPE_DSS
+  } keytype;
+};
+
+/* this is the set of return values expected from the curl_sshkeycallback
+   callback */
+enum curl_khstat {
+  CURLKHSTAT_FINE_ADD_TO_FILE,
+  CURLKHSTAT_FINE,
+  CURLKHSTAT_REJECT, /* reject the connection, return an error */
+  CURLKHSTAT_DEFER,  /* do not accept it, but we can't answer right now so
+                        this causes a CURLE_DEFER error but otherwise the
+                        connection will be left intact etc */
+  CURLKHSTAT_LAST    /* not for use, only a marker for last-in-list */
+};
+
+/* this is the set of status codes pass in to the callback */
+enum curl_khmatch {
+  CURLKHMATCH_OK,       /* match */
+  CURLKHMATCH_MISMATCH, /* host found, key mismatch! */
+  CURLKHMATCH_MISSING,  /* no matching host/key found */
+  CURLKHMATCH_LAST      /* not for use, only a marker for last-in-list */
+};
+
+typedef int
+  (*curl_sshkeycallback) (CURL *easy,     /* easy handle */
+                          const struct curl_khkey *knownkey, /* known */
+                          const struct curl_khkey *foundkey, /* found */
+                          enum curl_khmatch, /* libcurl's view on the keys */
+                          void *clientp); /* custom pointer passed from app */
+
+/* parameter for the CURLOPT_USE_SSL option */
+typedef enum {
+  CURLUSESSL_NONE,    /* do not attempt to use SSL */
+  CURLUSESSL_TRY,     /* try using SSL, proceed anyway otherwise */
+  CURLUSESSL_CONTROL, /* SSL for the control connection or fail */
+  CURLUSESSL_ALL,     /* SSL for all communication or fail */
+  CURLUSESSL_LAST     /* not an option, never use */
+} curl_usessl;
+
+#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
+                          the obsolete stuff removed! */
+
+/* Backwards compatibility with older names */
+/* These are scheduled to disappear by 2009 */
+
+#define CURLFTPSSL_NONE CURLUSESSL_NONE
+#define CURLFTPSSL_TRY CURLUSESSL_TRY
+#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL
+#define CURLFTPSSL_ALL CURLUSESSL_ALL
+#define CURLFTPSSL_LAST CURLUSESSL_LAST
+#define curl_ftpssl curl_usessl
+#endif /*!CURL_NO_OLDIES*/
+
+/* parameter for the CURLOPT_FTP_SSL_CCC option */
+typedef enum {
+  CURLFTPSSL_CCC_NONE,    /* do not send CCC */
+  CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */
+  CURLFTPSSL_CCC_ACTIVE,  /* Initiate the shutdown */
+  CURLFTPSSL_CCC_LAST     /* not an option, never use */
+} curl_ftpccc;
+
+/* parameter for the CURLOPT_FTPSSLAUTH option */
+typedef enum {
+  CURLFTPAUTH_DEFAULT, /* let libcurl decide */
+  CURLFTPAUTH_SSL,     /* use "AUTH SSL" */
+  CURLFTPAUTH_TLS,     /* use "AUTH TLS" */
+  CURLFTPAUTH_LAST /* not an option, never use */
+} curl_ftpauth;
+
+/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */
+typedef enum {
+  CURLFTP_CREATE_DIR_NONE,  /* do NOT create missing dirs! */
+  CURLFTP_CREATE_DIR,       /* (FTP/SFTP) if CWD fails, try MKD and then CWD
+                               again if MKD succeeded, for SFTP this does
+                               similar magic */
+  CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD
+                               again even if MKD failed! */
+  CURLFTP_CREATE_DIR_LAST   /* not an option, never use */
+} curl_ftpcreatedir;
+
+/* parameter for the CURLOPT_FTP_FILEMETHOD option */
+typedef enum {
+  CURLFTPMETHOD_DEFAULT,   /* let libcurl pick */
+  CURLFTPMETHOD_MULTICWD,  /* single CWD operation for each path part */
+  CURLFTPMETHOD_NOCWD,     /* no CWD at all */
+  CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */
+  CURLFTPMETHOD_LAST       /* not an option, never use */
+} curl_ftpmethod;
+
+/* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */
+#define CURLPROTO_HTTP   (1<<0)
+#define CURLPROTO_HTTPS  (1<<1)
+#define CURLPROTO_FTP    (1<<2)
+#define CURLPROTO_FTPS   (1<<3)
+#define CURLPROTO_SCP    (1<<4)
+#define CURLPROTO_SFTP   (1<<5)
+#define CURLPROTO_TELNET (1<<6)
+#define CURLPROTO_LDAP   (1<<7)
+#define CURLPROTO_LDAPS  (1<<8)
+#define CURLPROTO_DICT   (1<<9)
+#define CURLPROTO_FILE   (1<<10)
+#define CURLPROTO_TFTP   (1<<11)
+#define CURLPROTO_ALL    (~0) /* enable everything */
+
+/* long may be 32 or 64 bits, but we should never depend on anything else
+   but 32 */
+#define CURLOPTTYPE_LONG          0
+#define CURLOPTTYPE_OBJECTPOINT   10000
+#define CURLOPTTYPE_FUNCTIONPOINT 20000
+#define CURLOPTTYPE_OFF_T         30000
+
+/* name is uppercase CURLOPT_<name>,
+   type is one of the defined CURLOPTTYPE_<type>
+   number is unique identifier */
+#ifdef CINIT
+#undef CINIT
+#endif
+
+#ifdef CURL_ISOCPP
+#define CINIT(name,type,number) CURLOPT_ ## name = CURLOPTTYPE_ ## type + number
+#else
+/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
+#define LONG          CURLOPTTYPE_LONG
+#define OBJECTPOINT   CURLOPTTYPE_OBJECTPOINT
+#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
+#define OFF_T         CURLOPTTYPE_OFF_T
+#define CINIT(name,type,number) CURLOPT_/**/name = type + number
+#endif
+
+/*
+ * This macro-mania below setups the CURLOPT_[what] enum, to be used with
+ * curl_easy_setopt(). The first argument in the CINIT() macro is the [what]
+ * word.
+ */
+
+typedef enum {
+  /* This is the FILE * or void * the regular output should be written to. */
+  CINIT(FILE, OBJECTPOINT, 1),
+
+  /* The full URL to get/put */
+  CINIT(URL,  OBJECTPOINT, 2),
+
+  /* Port number to connect to, if other than default. */
+  CINIT(PORT, LONG, 3),
+
+  /* Name of proxy to use. */
+  CINIT(PROXY, OBJECTPOINT, 4),
+
+  /* "name:password" to use when fetching. */
+  CINIT(USERPWD, OBJECTPOINT, 5),
+
+  /* "name:password" to use with proxy. */
+  CINIT(PROXYUSERPWD, OBJECTPOINT, 6),
+
+  /* Range to get, specified as an ASCII string. */
+  CINIT(RANGE, OBJECTPOINT, 7),
+
+  /* not used */
+
+  /* Specified file stream to upload from (use as input): */
+  CINIT(INFILE, OBJECTPOINT, 9),
+
+  /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE
+   * bytes big. If this is not used, error messages go to stderr instead: */
+  CINIT(ERRORBUFFER, OBJECTPOINT, 10),
+
+  /* Function that will be called to store the output (instead of fwrite). The
+   * parameters will use fwrite() syntax, make sure to follow them. */
+  CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11),
+
+  /* Function that will be called to read the input (instead of fread). The
+   * parameters will use fread() syntax, make sure to follow them. */
+  CINIT(READFUNCTION, FUNCTIONPOINT, 12),
+
+  /* Time-out the read operation after this amount of seconds */
+  CINIT(TIMEOUT, LONG, 13),
+
+  /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about
+   * how large the file being sent really is. That allows better error
+   * checking and better verifies that the upload was successful. -1 means
+   * unknown size.
+   *
+   * For large file support, there is also a _LARGE version of the key
+   * which takes an off_t type, allowing platforms with larger off_t
+   * sizes to handle larger files.  See below for INFILESIZE_LARGE.
+   */
+  CINIT(INFILESIZE, LONG, 14),
+
+  /* POST static input fields. */
+  CINIT(POSTFIELDS, OBJECTPOINT, 15),
+
+  /* Set the referrer page (needed by some CGIs) */
+  CINIT(REFERER, OBJECTPOINT, 16),
+
+  /* Set the FTP PORT string (interface name, named or numerical IP address)
+     Use i.e '-' to use default address. */
+  CINIT(FTPPORT, OBJECTPOINT, 17),
+
+  /* Set the User-Agent string (examined by some CGIs) */
+  CINIT(USERAGENT, OBJECTPOINT, 18),
+
+  /* If the download receives less than "low speed limit" bytes/second
+   * during "low speed time" seconds, the operations is aborted.
+   * You could i.e if you have a pretty high speed connection, abort if
+   * it is less than 2000 bytes/sec during 20 seconds.
+   */
+
+  /* Set the "low speed limit" */
+  CINIT(LOW_SPEED_LIMIT, LONG, 19),
+
+  /* Set the "low speed time" */
+  CINIT(LOW_SPEED_TIME, LONG, 20),
+
+  /* Set the continuation offset.
+   *
+   * Note there is also a _LARGE version of this key which uses
+   * off_t types, allowing for large file offsets on platforms which
+   * use larger-than-32-bit off_t's.  Look below for RESUME_FROM_LARGE.
+   */
+  CINIT(RESUME_FROM, LONG, 21),
+
+  /* Set cookie in request: */
+  CINIT(COOKIE, OBJECTPOINT, 22),
+
+  /* This points to a linked list of headers, struct curl_slist kind */
+  CINIT(HTTPHEADER, OBJECTPOINT, 23),
+
+  /* This points to a linked list of post entries, struct curl_httppost */
+  CINIT(HTTPPOST, OBJECTPOINT, 24),
+
+  /* name of the file keeping your private SSL-certificate */
+  CINIT(SSLCERT, OBJECTPOINT, 25),
+
+  /* password for the SSL or SSH private key */
+  CINIT(KEYPASSWD, OBJECTPOINT, 26),
+
+  /* send TYPE parameter? */
+  CINIT(CRLF, LONG, 27),
+
+  /* send linked-list of QUOTE commands */
+  CINIT(QUOTE, OBJECTPOINT, 28),
+
+  /* send FILE * or void * to store headers to, if you use a callback it
+     is simply passed to the callback unmodified */
+  CINIT(WRITEHEADER, OBJECTPOINT, 29),
+
+  /* point to a file to read the initial cookies from, also enables
+     "cookie awareness" */
+  CINIT(COOKIEFILE, OBJECTPOINT, 31),
+
+  /* What version to specifically try to use.
+     See CURL_SSLVERSION defines below. */
+  CINIT(SSLVERSION, LONG, 32),
+
+  /* What kind of HTTP time condition to use, see defines */
+  CINIT(TIMECONDITION, LONG, 33),
+
+  /* Time to use with the above condition. Specified in number of seconds
+     since 1 Jan 1970 */
+  CINIT(TIMEVALUE, LONG, 34),
+
+  /* 35 = OBSOLETE */
+
+  /* Custom request, for customizing the get command like
+     HTTP: DELETE, TRACE and others
+     FTP: to use a different list command
+     */
+  CINIT(CUSTOMREQUEST, OBJECTPOINT, 36),
+
+  /* HTTP request, for odd commands like DELETE, TRACE and others */
+  CINIT(STDERR, OBJECTPOINT, 37),
+
+  /* 38 is not used */
+
+  /* send linked-list of post-transfer QUOTE commands */
+  CINIT(POSTQUOTE, OBJECTPOINT, 39),
+
+  /* Pass a pointer to string of the output using full variable-replacement
+     as described elsewhere. */
+  CINIT(WRITEINFO, OBJECTPOINT, 40),
+
+  CINIT(VERBOSE, LONG, 41),      /* talk a lot */
+  CINIT(HEADER, LONG, 42),       /* throw the header out too */
+  CINIT(NOPROGRESS, LONG, 43),   /* shut off the progress meter */
+  CINIT(NOBODY, LONG, 44),       /* use HEAD to get http document */
+  CINIT(FAILONERROR, LONG, 45),  /* no output on http error codes >= 300 */
+  CINIT(UPLOAD, LONG, 46),       /* this is an upload */
+  CINIT(POST, LONG, 47),         /* HTTP POST method */
+  CINIT(DIRLISTONLY, LONG, 48),  /* return bare names when listing directories */
+
+  CINIT(APPEND, LONG, 50),       /* Append instead of overwrite on upload! */
+
+  /* Specify whether to read the user+password from the .netrc or the URL.
+   * This must be one of the CURL_NETRC_* enums below. */
+  CINIT(NETRC, LONG, 51),
+
+  CINIT(FOLLOWLOCATION, LONG, 52),  /* use Location: Luke! */
+
+  CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */
+  CINIT(PUT, LONG, 54),          /* HTTP PUT */
+
+  /* 55 = OBSOLETE */
+
+  /* Function that will be called instead of the internal progress display
+   * function. This function should be defined as the curl_progress_callback
+   * prototype defines. */
+  CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56),
+
+  /* Data passed to the progress callback */
+  CINIT(PROGRESSDATA, OBJECTPOINT, 57),
+
+  /* We want the referrer field set automatically when following locations */
+  CINIT(AUTOREFERER, LONG, 58),
+
+  /* Port of the proxy, can be set in the proxy string as well with:
+     "[host]:[port]" */
+  CINIT(PROXYPORT, LONG, 59),
+
+  /* size of the POST input data, if strlen() is not good to use */
+  CINIT(POSTFIELDSIZE, LONG, 60),
+
+  /* tunnel non-http operations through a HTTP proxy */
+  CINIT(HTTPPROXYTUNNEL, LONG, 61),
+
+  /* Set the interface string to use as outgoing network interface */
+  CINIT(INTERFACE, OBJECTPOINT, 62),
+
+  /* Set the krb4/5 security level, this also enables krb4/5 awareness.  This
+   * is a string, 'clear', 'safe', 'confidential' or 'private'.  If the string
+   * is set but doesn't match one of these, 'private' will be used.  */
+  CINIT(KRBLEVEL, OBJECTPOINT, 63),
+
+  /* Set if we should verify the peer in ssl handshake, set 1 to verify. */
+  CINIT(SSL_VERIFYPEER, LONG, 64),
+
+  /* The CApath or CAfile used to validate the peer certificate
+     this option is used only if SSL_VERIFYPEER is true */
+  CINIT(CAINFO, OBJECTPOINT, 65),
+
+  /* 66 = OBSOLETE */
+  /* 67 = OBSOLETE */
+
+  /* Maximum number of http redirects to follow */
+  CINIT(MAXREDIRS, LONG, 68),
+
+  /* Pass a long set to 1 to get the date of the requested document (if
+     possible)! Pass a zero to shut it off. */
+  CINIT(FILETIME, LONG, 69),
+
+  /* This points to a linked list of telnet options */
+  CINIT(TELNETOPTIONS, OBJECTPOINT, 70),
+
+  /* Max amount of cached alive connections */
+  CINIT(MAXCONNECTS, LONG, 71),
+
+  /* What policy to use when closing connections when the cache is filled
+     up */
+  CINIT(CLOSEPOLICY, LONG, 72),
+
+  /* 73 = OBSOLETE */
+
+  /* Set to explicitly use a new connection for the upcoming transfer.
+     Do not use this unless you're absolutely sure of this, as it makes the
+     operation slower and is less friendly for the network. */
+  CINIT(FRESH_CONNECT, LONG, 74),
+
+  /* Set to explicitly forbid the upcoming transfer's connection to be re-used
+     when done. Do not use this unless you're absolutely sure of this, as it
+     makes the operation slower and is less friendly for the network. */
+  CINIT(FORBID_REUSE, LONG, 75),
+
+  /* Set to a file name that contains random data for libcurl to use to
+     seed the random engine when doing SSL connects. */
+  CINIT(RANDOM_FILE, OBJECTPOINT, 76),
+
+  /* Set to the Entropy Gathering Daemon socket pathname */
+  CINIT(EGDSOCKET, OBJECTPOINT, 77),
+
+  /* Time-out connect operations after this amount of seconds, if connects
+     are OK within this time, then fine... This only aborts the connect
+     phase. [Only works on unix-style/SIGALRM operating systems] */
+  CINIT(CONNECTTIMEOUT, LONG, 78),
+
+  /* Function that will be called to store headers (instead of fwrite). The
+   * parameters will use fwrite() syntax, make sure to follow them. */
+  CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79),
+
+  /* Set this to force the HTTP request to get back to GET. Only really usable
+     if POST, PUT or a custom request have been used first.
+   */
+  CINIT(HTTPGET, LONG, 80),
+
+  /* Set if we should verify the Common name from the peer certificate in ssl
+   * handshake, set 1 to check existence, 2 to ensure that it matches the
+   * provided hostname. */
+  CINIT(SSL_VERIFYHOST, LONG, 81),
+
+  /* Specify which file name to write all known cookies in after completed
+     operation. Set file name to "-" (dash) to make it go to stdout. */
+  CINIT(COOKIEJAR, OBJECTPOINT, 82),
+
+  /* Specify which SSL ciphers to use */
+  CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 83),
+
+  /* Specify which HTTP version to use! This must be set to one of the
+     CURL_HTTP_VERSION* enums set below. */
+  CINIT(HTTP_VERSION, LONG, 84),
+
+  /* Specifically switch on or off the FTP engine's use of the EPSV command. By
+     default, that one will always be attempted before the more traditional
+     PASV command. */
+  CINIT(FTP_USE_EPSV, LONG, 85),
+
+  /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */
+  CINIT(SSLCERTTYPE, OBJECTPOINT, 86),
+
+  /* name of the file keeping your private SSL-key */
+  CINIT(SSLKEY, OBJECTPOINT, 87),
+
+  /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */
+  CINIT(SSLKEYTYPE, OBJECTPOINT, 88),
+
+  /* crypto engine for the SSL-sub system */
+  CINIT(SSLENGINE, OBJECTPOINT, 89),
+
+  /* set the crypto engine for the SSL-sub system as default
+     the param has no meaning...
+   */
+  CINIT(SSLENGINE_DEFAULT, LONG, 90),
+
+  /* Non-zero value means to use the global dns cache */
+  CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* To become OBSOLETE soon */
+
+  /* DNS cache timeout */
+  CINIT(DNS_CACHE_TIMEOUT, LONG, 92),
+
+  /* send linked-list of pre-transfer QUOTE commands */
+  CINIT(PREQUOTE, OBJECTPOINT, 93),
+
+  /* set the debug function */
+  CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94),
+
+  /* set the data for the debug function */
+  CINIT(DEBUGDATA, OBJECTPOINT, 95),
+
+  /* mark this as start of a cookie session */
+  CINIT(COOKIESESSION, LONG, 96),
+
+  /* The CApath directory used to validate the peer certificate
+     this option is used only if SSL_VERIFYPEER is true */
+  CINIT(CAPATH, OBJECTPOINT, 97),
+
+  /* Instruct libcurl to use a smaller receive buffer */
+  CINIT(BUFFERSIZE, LONG, 98),
+
+  /* Instruct libcurl to not use any signal/alarm handlers, even when using
+     timeouts. This option is useful for multi-threaded applications.
+     See libcurl-the-guide for more background information. */
+  CINIT(NOSIGNAL, LONG, 99),
+
+  /* Provide a CURLShare for mutexing non-ts data */
+  CINIT(SHARE, OBJECTPOINT, 100),
+
+  /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default),
+     CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and CURLPROXY_SOCKS5. */
+  CINIT(PROXYTYPE, LONG, 101),
+
+  /* Set the Accept-Encoding string. Use this to tell a server you would like
+     the response to be compressed. */
+  CINIT(ENCODING, OBJECTPOINT, 102),
+
+  /* Set pointer to private data */
+  CINIT(PRIVATE, OBJECTPOINT, 103),
+
+  /* Set aliases for HTTP 200 in the HTTP Response header */
+  CINIT(HTTP200ALIASES, OBJECTPOINT, 104),
+
+  /* Continue to send authentication (user+password) when following locations,
+     even when hostname changed. This can potentially send off the name
+     and password to whatever host the server decides. */
+  CINIT(UNRESTRICTED_AUTH, LONG, 105),
+
+  /* Specifically switch on or off the FTP engine's use of the EPRT command ( it
+     also disables the LPRT attempt). By default, those ones will always be
+     attempted before the good old traditional PORT command. */
+  CINIT(FTP_USE_EPRT, LONG, 106),
+
+  /* Set this to a bitmask value to enable the particular authentications
+     methods you like. Use this in combination with CURLOPT_USERPWD.
+     Note that setting multiple bits may cause extra network round-trips. */
+  CINIT(HTTPAUTH, LONG, 107),
+
+  /* Set the ssl context callback function, currently only for OpenSSL ssl_ctx
+     in second argument. The function must be matching the
+     curl_ssl_ctx_callback proto. */
+  CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108),
+
+  /* Set the userdata for the ssl context callback function's third
+     argument */
+  CINIT(SSL_CTX_DATA, OBJECTPOINT, 109),
+
+  /* FTP Option that causes missing dirs to be created on the remote server.
+     In 7.19.4 we introduced the convenience enums for this option using the
+     CURLFTP_CREATE_DIR prefix.
+  */
+  CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110),
+
+  /* Set this to a bitmask value to enable the particular authentications
+     methods you like. Use this in combination with CURLOPT_PROXYUSERPWD.
+     Note that setting multiple bits may cause extra network round-trips. */
+  CINIT(PROXYAUTH, LONG, 111),
+
+  /* FTP option that changes the timeout, in seconds, associated with
+     getting a response.  This is different from transfer timeout time and
+     essentially places a demand on the FTP server to acknowledge commands
+     in a timely manner. */
+  CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112),
+
+  /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to
+     tell libcurl to resolve names to those IP versions only. This only has
+     affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */
+  CINIT(IPRESOLVE, LONG, 113),
+
+  /* Set this option to limit the size of a file that will be downloaded from
+     an HTTP or FTP server.
+
+     Note there is also _LARGE version which adds large file support for
+     platforms which have larger off_t sizes.  See MAXFILESIZE_LARGE below. */
+  CINIT(MAXFILESIZE, LONG, 114),
+
+  /* See the comment for INFILESIZE above, but in short, specifies
+   * the size of the file being uploaded.  -1 means unknown.
+   */
+  CINIT(INFILESIZE_LARGE, OFF_T, 115),
+
+  /* Sets the continuation offset.  There is also a LONG version of this;
+   * look above for RESUME_FROM.
+   */
+  CINIT(RESUME_FROM_LARGE, OFF_T, 116),
+
+  /* Sets the maximum size of data that will be downloaded from
+   * an HTTP or FTP server.  See MAXFILESIZE above for the LONG version.
+   */
+  CINIT(MAXFILESIZE_LARGE, OFF_T, 117),
+
+  /* Set this option to the file name of your .netrc file you want libcurl
+     to parse (using the CURLOPT_NETRC option). If not set, libcurl will do
+     a poor attempt to find the user's home directory and check for a .netrc
+     file in there. */
+  CINIT(NETRC_FILE, OBJECTPOINT, 118),
+
+  /* Enable SSL/TLS for FTP, pick one of:
+     CURLFTPSSL_TRY     - try using SSL, proceed anyway otherwise
+     CURLFTPSSL_CONTROL - SSL for the control connection or fail
+     CURLFTPSSL_ALL     - SSL for all communication or fail
+  */
+  CINIT(USE_SSL, LONG, 119),
+
+  /* The _LARGE version of the standard POSTFIELDSIZE option */
+  CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120),
+
+  /* Enable/disable the TCP Nagle algorithm */
+  CINIT(TCP_NODELAY, LONG, 121),
+
+  /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
+  /* 123 OBSOLETE. Gone in 7.16.0 */
+  /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
+  /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
+  /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
+  /* 127 OBSOLETE. Gone in 7.16.0 */
+  /* 128 OBSOLETE. Gone in 7.16.0 */
+
+  /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option
+     can be used to change libcurl's default action which is to first try
+     "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK
+     response has been received.
+
+     Available parameters are:
+     CURLFTPAUTH_DEFAULT - let libcurl decide
+     CURLFTPAUTH_SSL     - try "AUTH SSL" first, then TLS
+     CURLFTPAUTH_TLS     - try "AUTH TLS" first, then SSL
+  */
+  CINIT(FTPSSLAUTH, LONG, 129),
+
+  CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130),
+  CINIT(IOCTLDATA, OBJECTPOINT, 131),
+
+  /* 132 OBSOLETE. Gone in 7.16.0 */
+  /* 133 OBSOLETE. Gone in 7.16.0 */
+
+  /* zero terminated string for pass on to the FTP server when asked for
+     "account" info */
+  CINIT(FTP_ACCOUNT, OBJECTPOINT, 134),
+
+  /* feed cookies into cookie engine */
+  CINIT(COOKIELIST, OBJECTPOINT, 135),
+
+  /* ignore Content-Length */
+  CINIT(IGNORE_CONTENT_LENGTH, LONG, 136),
+
+  /* Set to non-zero to skip the IP address received in a 227 PASV FTP server
+     response. Typically used for FTP-SSL purposes but is not restricted to
+     that. libcurl will then instead use the same IP address it used for the
+     control connection. */
+  CINIT(FTP_SKIP_PASV_IP, LONG, 137),
+
+  /* Select "file method" to use when doing FTP, see the curl_ftpmethod
+     above. */
+  CINIT(FTP_FILEMETHOD, LONG, 138),
+
+  /* Local port number to bind the socket to */
+  CINIT(LOCALPORT, LONG, 139),
+
+  /* Number of ports to try, including the first one set with LOCALPORT.
+     Thus, setting it to 1 will make no additional attempts but the first.
+  */
+  CINIT(LOCALPORTRANGE, LONG, 140),
+
+  /* no transfer, set up connection and let application use the socket by
+     extracting it with CURLINFO_LASTSOCKET */
+  CINIT(CONNECT_ONLY, LONG, 141),
+
+  /* Function that will be called to convert from the
+     network encoding (instead of using the iconv calls in libcurl) */
+  CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142),
+
+  /* Function that will be called to convert to the
+     network encoding (instead of using the iconv calls in libcurl) */
+  CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143),
+
+  /* Function that will be called to convert from UTF8
+     (instead of using the iconv calls in libcurl)
+     Note that this is used only for SSL certificate processing */
+  CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144),
+
+  /* if the connection proceeds too quickly then need to slow it down */
+  /* limit-rate: maximum number of bytes per second to send or receive */
+  CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145),
+  CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146),
+
+  /* Pointer to command string to send if USER/PASS fails. */
+  CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147),
+
+  /* callback function for setting socket options */
+  CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148),
+  CINIT(SOCKOPTDATA, OBJECTPOINT, 149),
+
+  /* set to 0 to disable session ID re-use for this transfer, default is
+     enabled (== 1) */
+  CINIT(SSL_SESSIONID_CACHE, LONG, 150),
+
+  /* allowed SSH authentication methods */
+  CINIT(SSH_AUTH_TYPES, LONG, 151),
+
+  /* Used by scp/sftp to do public/private key authentication */
+  CINIT(SSH_PUBLIC_KEYFILE, OBJECTPOINT, 152),
+  CINIT(SSH_PRIVATE_KEYFILE, OBJECTPOINT, 153),
+
+  /* Send CCC (Clear Command Channel) after authentication */
+  CINIT(FTP_SSL_CCC, LONG, 154),
+
+  /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */
+  CINIT(TIMEOUT_MS, LONG, 155),
+  CINIT(CONNECTTIMEOUT_MS, LONG, 156),
+
+  /* set to zero to disable the libcurl's decoding and thus pass the raw body
+     data to the application even when it is encoded/compressed */
+  CINIT(HTTP_TRANSFER_DECODING, LONG, 157),
+  CINIT(HTTP_CONTENT_DECODING, LONG, 158),
+
+  /* Permission used when creating new files and directories on the remote
+     server for protocols that support it, SFTP/SCP/FILE */
+  CINIT(NEW_FILE_PERMS, LONG, 159),
+  CINIT(NEW_DIRECTORY_PERMS, LONG, 160),
+
+  /* Set the behaviour of POST when redirecting. Values must be set to one
+     of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */
+  CINIT(POSTREDIR, LONG, 161),
+
+  /* used by scp/sftp to verify the host's public key */
+  CINIT(SSH_HOST_PUBLIC_KEY_MD5, OBJECTPOINT, 162),
+
+  /* Callback function for opening socket (instead of socket(2)). Optionally,
+     callback is able change the address or refuse to connect returning
+     CURL_SOCKET_BAD.  The callback should have type
+     curl_opensocket_callback */
+  CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163),
+  CINIT(OPENSOCKETDATA, OBJECTPOINT, 164),
+
+  /* POST volatile input fields. */
+  CINIT(COPYPOSTFIELDS, OBJECTPOINT, 165),
+
+  /* set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy */
+  CINIT(PROXY_TRANSFER_MODE, LONG, 166),
+
+  /* Callback function for seeking in the input stream */
+  CINIT(SEEKFUNCTION, FUNCTIONPOINT, 167),
+  CINIT(SEEKDATA, OBJECTPOINT, 168),
+
+  /* CRL file */
+  CINIT(CRLFILE, OBJECTPOINT, 169),
+
+  /* Issuer certificate */
+  CINIT(ISSUERCERT, OBJECTPOINT, 170),
+
+  /* (IPv6) Address scope */
+  CINIT(ADDRESS_SCOPE, LONG, 171),
+
+  /* Collect certificate chain info and allow it to get retrievable with
+     CURLINFO_CERTINFO after the transfer is complete. (Unfortunately) only
+     working with OpenSSL-powered builds. */
+  CINIT(CERTINFO, LONG, 172),
+
+  /* "name" and "pwd" to use when fetching. */
+  CINIT(USERNAME, OBJECTPOINT, 173),
+  CINIT(PASSWORD, OBJECTPOINT, 174),
+
+    /* "name" and "pwd" to use with Proxy when fetching. */
+  CINIT(PROXYUSERNAME, OBJECTPOINT, 175),
+  CINIT(PROXYPASSWORD, OBJECTPOINT, 176),
+
+  /* Comma separated list of hostnames defining no-proxy zones. These should
+     match both hostnames directly, and hostnames within a domain. For
+     example, local.com will match local.com and www.local.com, but NOT
+     notlocal.com or www.notlocal.com. For compatibility with other
+     implementations of this, .local.com will be considered to be the same as
+     local.com. A single * is the only valid wildcard, and effectively
+     disables the use of proxy. */
+  CINIT(NOPROXY, OBJECTPOINT, 177),
+
+  /* block size for TFTP transfers */
+  CINIT(TFTP_BLKSIZE, LONG, 178),
+
+  /* Socks Service */
+  CINIT(SOCKS5_GSSAPI_SERVICE, OBJECTPOINT, 179),
+
+  /* Socks Service */
+  CINIT(SOCKS5_GSSAPI_NEC, LONG, 180),
+
+  /* set the bitmask for the protocols that are allowed to be used for the
+     transfer, which thus helps the app which takes URLs from users or other
+     external inputs and want to restrict what protocol(s) to deal
+     with. Defaults to CURLPROTO_ALL. */
+  CINIT(PROTOCOLS, LONG, 181),
+
+  /* set the bitmask for the protocols that libcurl is allowed to follow to,
+     as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs
+     to be set in both bitmasks to be allowed to get redirected to. Defaults
+     to all protocols except FILE and SCP. */
+  CINIT(REDIR_PROTOCOLS, LONG, 182),
+
+  /* set the SSH knownhost file name to use */
+  CINIT(SSH_KNOWNHOSTS, OBJECTPOINT, 183),
+
+  /* set the SSH host key callback, must point to a curl_sshkeycallback
+     function */
+  CINIT(SSH_KEYFUNCTION, FUNCTIONPOINT, 184),
+
+  /* set the SSH host key callback custom pointer */
+  CINIT(SSH_KEYDATA, OBJECTPOINT, 185),
+
+  CURLOPT_LASTENTRY /* the last unused */
+} CURLoption;
+
+#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
+                          the obsolete stuff removed! */
+
+/* Backwards compatibility with older names */
+/* These are scheduled to disappear by 2011 */
+
+/* This was added in version 7.19.1 */
+#define CURLOPT_POST301 CURLOPT_POSTREDIR
+
+/* These are scheduled to disappear by 2009 */
+
+/* The following were added in 7.17.0 */
+#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD
+#define CURLOPT_FTPAPPEND CURLOPT_APPEND
+#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY
+#define CURLOPT_FTP_SSL CURLOPT_USE_SSL
+
+/* The following were added earlier */
+
+#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD
+#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL
+
+#else
+/* This is set if CURL_NO_OLDIES is defined at compile-time */
+#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */
+#endif
+
+
+  /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host
+     name resolves addresses using more than one IP protocol version, this
+     option might be handy to force libcurl to use a specific IP version. */
+#define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP
+                                     versions that your system allows */
+#define CURL_IPRESOLVE_V4       1 /* resolve to ipv4 addresses */
+#define CURL_IPRESOLVE_V6       2 /* resolve to ipv6 addresses */
+
+  /* three convenient "aliases" that follow the name scheme better */
+#define CURLOPT_WRITEDATA CURLOPT_FILE
+#define CURLOPT_READDATA  CURLOPT_INFILE
+#define CURLOPT_HEADERDATA CURLOPT_WRITEHEADER
+
+  /* These enums are for use with the CURLOPT_HTTP_VERSION option. */
+enum {
+  CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd
+                             like the library to choose the best possible
+                             for us! */
+  CURL_HTTP_VERSION_1_0,  /* please use HTTP 1.0 in the request */
+  CURL_HTTP_VERSION_1_1,  /* please use HTTP 1.1 in the request */
+
+  CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */
+};
+
+  /* These enums are for use with the CURLOPT_NETRC option. */
+enum CURL_NETRC_OPTION {
+  CURL_NETRC_IGNORED,     /* The .netrc will never be read.
+                           * This is the default. */
+  CURL_NETRC_OPTIONAL,    /* A user:password in the URL will be preferred
+                           * to one in the .netrc. */
+  CURL_NETRC_REQUIRED,    /* A user:password in the URL will be ignored.
+                           * Unless one is set programmatically, the .netrc
+                           * will be queried. */
+  CURL_NETRC_LAST
+};
+
+enum {
+  CURL_SSLVERSION_DEFAULT,
+  CURL_SSLVERSION_TLSv1,
+  CURL_SSLVERSION_SSLv2,
+  CURL_SSLVERSION_SSLv3,
+
+  CURL_SSLVERSION_LAST /* never use, keep last */
+};
+
+/* symbols to use with CURLOPT_POSTREDIR.
+   CURL_REDIR_POST_301 and CURL_REDIR_POST_302 can be bitwise ORed so that
+   CURL_REDIR_POST_301 | CURL_REDIR_POST_302 == CURL_REDIR_POST_ALL */
+
+#define CURL_REDIR_GET_ALL  0
+#define CURL_REDIR_POST_301 1
+#define CURL_REDIR_POST_302 2
+#define CURL_REDIR_POST_ALL (CURL_REDIR_POST_301|CURL_REDIR_POST_302)
+
+typedef enum {
+  CURL_TIMECOND_NONE,
+
+  CURL_TIMECOND_IFMODSINCE,
+  CURL_TIMECOND_IFUNMODSINCE,
+  CURL_TIMECOND_LASTMOD,
+
+  CURL_TIMECOND_LAST
+} curl_TimeCond;
+
+
+/* curl_strequal() and curl_strnequal() are subject for removal in a future
+   libcurl, see lib/README.curlx for details */
+CURL_EXTERN int (curl_strequal)(const char *s1, const char *s2);
+CURL_EXTERN int (curl_strnequal)(const char *s1, const char *s2, size_t n);
+
+/* name is uppercase CURLFORM_<name> */
+#ifdef CFINIT
+#undef CFINIT
+#endif
+
+#ifdef CURL_ISOCPP
+#define CFINIT(name) CURLFORM_ ## name
+#else
+/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
+#define CFINIT(name) CURLFORM_/**/name
+#endif
+
+typedef enum {
+  CFINIT(NOTHING),        /********* the first one is unused ************/
+
+  /*  */
+  CFINIT(COPYNAME),
+  CFINIT(PTRNAME),
+  CFINIT(NAMELENGTH),
+  CFINIT(COPYCONTENTS),
+  CFINIT(PTRCONTENTS),
+  CFINIT(CONTENTSLENGTH),
+  CFINIT(FILECONTENT),
+  CFINIT(ARRAY),
+  CFINIT(OBSOLETE),
+  CFINIT(FILE),
+
+  CFINIT(BUFFER),
+  CFINIT(BUFFERPTR),
+  CFINIT(BUFFERLENGTH),
+
+  CFINIT(CONTENTTYPE),
+  CFINIT(CONTENTHEADER),
+  CFINIT(FILENAME),
+  CFINIT(END),
+  CFINIT(OBSOLETE2),
+
+  CFINIT(STREAM),
+
+  CURLFORM_LASTENTRY /* the last unused */
+} CURLformoption;
+
+#undef CFINIT /* done */
+
+/* structure to be used as parameter for CURLFORM_ARRAY */
+struct curl_forms {
+  CURLformoption option;
+  const char     *value;
+};
+
+/* use this for multipart formpost building */
+/* Returns code for curl_formadd()
+ *
+ * Returns:
+ * CURL_FORMADD_OK             on success
+ * CURL_FORMADD_MEMORY         if the FormInfo allocation fails
+ * CURL_FORMADD_OPTION_TWICE   if one option is given twice for one Form
+ * CURL_FORMADD_NULL           if a null pointer was given for a char
+ * CURL_FORMADD_MEMORY         if the allocation of a FormInfo struct failed
+ * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used
+ * CURL_FORMADD_INCOMPLETE     if the some FormInfo is not complete (or error)
+ * CURL_FORMADD_MEMORY         if a curl_httppost struct cannot be allocated
+ * CURL_FORMADD_MEMORY         if some allocation for string copying failed.
+ * CURL_FORMADD_ILLEGAL_ARRAY  if an illegal option is used in an array
+ *
+ ***************************************************************************/
+typedef enum {
+  CURL_FORMADD_OK, /* first, no error */
+
+  CURL_FORMADD_MEMORY,
+  CURL_FORMADD_OPTION_TWICE,
+  CURL_FORMADD_NULL,
+  CURL_FORMADD_UNKNOWN_OPTION,
+  CURL_FORMADD_INCOMPLETE,
+  CURL_FORMADD_ILLEGAL_ARRAY,
+  CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */
+
+  CURL_FORMADD_LAST /* last */
+} CURLFORMcode;
+
+/*
+ * NAME curl_formadd()
+ *
+ * DESCRIPTION
+ *
+ * Pretty advanced function for building multi-part formposts. Each invoke
+ * adds one part that together construct a full post. Then use
+ * CURLOPT_HTTPPOST to send it off to libcurl.
+ */
+CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost,
+                                      struct curl_httppost **last_post,
+                                      ...);
+
+/*
+ * callback function for curl_formget()
+ * The void *arg pointer will be the one passed as second argument to
+ *   curl_formget().
+ * The character buffer passed to it must not be freed.
+ * Should return the buffer length passed to it as the argument "len" on
+ *   success.
+ */
+typedef size_t (*curl_formget_callback)(void *arg, const char *buf, size_t len);
+
+/*
+ * NAME curl_formget()
+ *
+ * DESCRIPTION
+ *
+ * Serialize a curl_httppost struct built with curl_formadd().
+ * Accepts a void pointer as second argument which will be passed to
+ * the curl_formget_callback function.
+ * Returns 0 on success.
+ */
+CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg,
+                             curl_formget_callback append);
+/*
+ * NAME curl_formfree()
+ *
+ * DESCRIPTION
+ *
+ * Free a multipart formpost previously built with curl_formadd().
+ */
+CURL_EXTERN void curl_formfree(struct curl_httppost *form);
+
+/*
+ * NAME curl_getenv()
+ *
+ * DESCRIPTION
+ *
+ * Returns a malloc()'ed string that MUST be curl_free()ed after usage is
+ * complete. DEPRECATED - see lib/README.curlx
+ */
+CURL_EXTERN char *curl_getenv(const char *variable);
+
+/*
+ * NAME curl_version()
+ *
+ * DESCRIPTION
+ *
+ * Returns a static ascii string of the libcurl version.
+ */
+CURL_EXTERN char *curl_version(void);
+
+/*
+ * NAME curl_easy_escape()
+ *
+ * DESCRIPTION
+ *
+ * Escapes URL strings (converts all letters consider illegal in URLs to their
+ * %XX versions). This function returns a new allocated string or NULL if an
+ * error occurred.
+ */
+CURL_EXTERN char *curl_easy_escape(CURL *handle,
+                                   const char *string,
+                                   int length);
+
+/* the previous version: */
+CURL_EXTERN char *curl_escape(const char *string,
+                              int length);
+
+
+/*
+ * NAME curl_easy_unescape()
+ *
+ * DESCRIPTION
+ *
+ * Unescapes URL encoding in strings (converts all %XX codes to their 8bit
+ * versions). This function returns a new allocated string or NULL if an error
+ * occurred.
+ * Conversion Note: On non-ASCII platforms the ASCII %XX codes are
+ * converted into the host encoding.
+ */
+CURL_EXTERN char *curl_easy_unescape(CURL *handle,
+                                     const char *string,
+                                     int length,
+                                     int *outlength);
+
+/* the previous version */
+CURL_EXTERN char *curl_unescape(const char *string,
+                                int length);
+
+/*
+ * NAME curl_free()
+ *
+ * DESCRIPTION
+ *
+ * Provided for de-allocation in the same translation unit that did the
+ * allocation. Added in libcurl 7.10
+ */
+CURL_EXTERN void curl_free(void *p);
+
+/*
+ * NAME curl_global_init()
+ *
+ * DESCRIPTION
+ *
+ * curl_global_init() should be invoked exactly once for each application that
+ * uses libcurl and before any call of other libcurl functions.
+ *
+ * This function is not thread-safe!
+ */
+CURL_EXTERN CURLcode curl_global_init(long flags);
+
+/*
+ * NAME curl_global_init_mem()
+ *
+ * DESCRIPTION
+ *
+ * curl_global_init() or curl_global_init_mem() should be invoked exactly once
+ * for each application that uses libcurl.  This function can be used to
+ * initialize libcurl and set user defined memory management callback
+ * functions.  Users can implement memory management routines to check for
+ * memory leaks, check for mis-use of the curl library etc.  User registered
+ * callback routines with be invoked by this library instead of the system
+ * memory management routines like malloc, free etc.
+ */
+CURL_EXTERN CURLcode curl_global_init_mem(long flags,
+                                          curl_malloc_callback m,
+                                          curl_free_callback f,
+                                          curl_realloc_callback r,
+                                          curl_strdup_callback s,
+                                          curl_calloc_callback c);
+
+/*
+ * NAME curl_global_cleanup()
+ *
+ * DESCRIPTION
+ *
+ * curl_global_cleanup() should be invoked exactly once for each application
+ * that uses libcurl
+ */
+CURL_EXTERN void curl_global_cleanup(void);
+
+/* linked-list structure for the CURLOPT_QUOTE option (and other) */
+struct curl_slist {
+  char *data;
+  struct curl_slist *next;
+};
+
+/*
+ * NAME curl_slist_append()
+ *
+ * DESCRIPTION
+ *
+ * Appends a string to a linked list. If no list exists, it will be created
+ * first. Returns the new list, after appending.
+ */
+CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *,
+                                                 const char *);
+
+/*
+ * NAME curl_slist_free_all()
+ *
+ * DESCRIPTION
+ *
+ * free a previously built curl_slist.
+ */
+CURL_EXTERN void curl_slist_free_all(struct curl_slist *);
+
+/*
+ * NAME curl_getdate()
+ *
+ * DESCRIPTION
+ *
+ * Returns the time, in seconds since 1 Jan 1970 of the time string given in
+ * the first argument. The time argument in the second parameter is unused
+ * and should be set to NULL.
+ */
+CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused);
+
+/* info about the certificate chain, only for OpenSSL builds. Asked
+   for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */
+struct curl_certinfo {
+  int num_of_certs;             /* number of certificates with information */
+  struct curl_slist **certinfo; /* for each index in this array, there's a
+                                   linked list with textual information in the
+                                   format "name: value" */
+};
+
+#define CURLINFO_STRING   0x100000
+#define CURLINFO_LONG     0x200000
+#define CURLINFO_DOUBLE   0x300000
+#define CURLINFO_SLIST    0x400000
+#define CURLINFO_MASK     0x0fffff
+#define CURLINFO_TYPEMASK 0xf00000
+
+typedef enum {
+  CURLINFO_NONE, /* first, never use this */
+  CURLINFO_EFFECTIVE_URL    = CURLINFO_STRING + 1,
+  CURLINFO_RESPONSE_CODE    = CURLINFO_LONG   + 2,
+  CURLINFO_TOTAL_TIME       = CURLINFO_DOUBLE + 3,
+  CURLINFO_NAMELOOKUP_TIME  = CURLINFO_DOUBLE + 4,
+  CURLINFO_CONNECT_TIME     = CURLINFO_DOUBLE + 5,
+  CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6,
+  CURLINFO_SIZE_UPLOAD      = CURLINFO_DOUBLE + 7,
+  CURLINFO_SIZE_DOWNLOAD    = CURLINFO_DOUBLE + 8,
+  CURLINFO_SPEED_DOWNLOAD   = CURLINFO_DOUBLE + 9,
+  CURLINFO_SPEED_UPLOAD     = CURLINFO_DOUBLE + 10,
+  CURLINFO_HEADER_SIZE      = CURLINFO_LONG   + 11,
+  CURLINFO_REQUEST_SIZE     = CURLINFO_LONG   + 12,
+  CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG   + 13,
+  CURLINFO_FILETIME         = CURLINFO_LONG   + 14,
+  CURLINFO_CONTENT_LENGTH_DOWNLOAD   = CURLINFO_DOUBLE + 15,
+  CURLINFO_CONTENT_LENGTH_UPLOAD     = CURLINFO_DOUBLE + 16,
+  CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17,
+  CURLINFO_CONTENT_TYPE     = CURLINFO_STRING + 18,
+  CURLINFO_REDIRECT_TIME    = CURLINFO_DOUBLE + 19,
+  CURLINFO_REDIRECT_COUNT   = CURLINFO_LONG   + 20,
+  CURLINFO_PRIVATE          = CURLINFO_STRING + 21,
+  CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG   + 22,
+  CURLINFO_HTTPAUTH_AVAIL   = CURLINFO_LONG   + 23,
+  CURLINFO_PROXYAUTH_AVAIL  = CURLINFO_LONG   + 24,
+  CURLINFO_OS_ERRNO         = CURLINFO_LONG   + 25,
+  CURLINFO_NUM_CONNECTS     = CURLINFO_LONG   + 26,
+  CURLINFO_SSL_ENGINES      = CURLINFO_SLIST  + 27,
+  CURLINFO_COOKIELIST       = CURLINFO_SLIST  + 28,
+  CURLINFO_LASTSOCKET       = CURLINFO_LONG   + 29,
+  CURLINFO_FTP_ENTRY_PATH   = CURLINFO_STRING + 30,
+  CURLINFO_REDIRECT_URL     = CURLINFO_STRING + 31,
+  CURLINFO_PRIMARY_IP       = CURLINFO_STRING + 32,
+  CURLINFO_APPCONNECT_TIME  = CURLINFO_DOUBLE + 33,
+  CURLINFO_CERTINFO         = CURLINFO_SLIST  + 34,
+  CURLINFO_CONDITION_UNMET  = CURLINFO_LONG   + 35,
+  /* Fill in new entries below here! */
+
+  CURLINFO_LASTONE          = 35
+} CURLINFO;
+
+/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
+   CURLINFO_HTTP_CODE */
+#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE
+
+typedef enum {
+  CURLCLOSEPOLICY_NONE, /* first, never use this */
+
+  CURLCLOSEPOLICY_OLDEST,
+  CURLCLOSEPOLICY_LEAST_RECENTLY_USED,
+  CURLCLOSEPOLICY_LEAST_TRAFFIC,
+  CURLCLOSEPOLICY_SLOWEST,
+  CURLCLOSEPOLICY_CALLBACK,
+
+  CURLCLOSEPOLICY_LAST /* last, never use this */
+} curl_closepolicy;
+
+#define CURL_GLOBAL_SSL (1<<0)
+#define CURL_GLOBAL_WIN32 (1<<1)
+#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32)
+#define CURL_GLOBAL_NOTHING 0
+#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL
+
+
+/*****************************************************************************
+ * Setup defines, protos etc for the sharing stuff.
+ */
+
+/* Different data locks for a single share */
+typedef enum {
+  CURL_LOCK_DATA_NONE = 0,
+  /*  CURL_LOCK_DATA_SHARE is used internally to say that
+   *  the locking is just made to change the internal state of the share
+   *  itself.
+   */
+  CURL_LOCK_DATA_SHARE,
+  CURL_LOCK_DATA_COOKIE,
+  CURL_LOCK_DATA_DNS,
+  CURL_LOCK_DATA_SSL_SESSION,
+  CURL_LOCK_DATA_CONNECT,
+  CURL_LOCK_DATA_LAST
+} curl_lock_data;
+
+/* Different lock access types */
+typedef enum {
+  CURL_LOCK_ACCESS_NONE = 0,   /* unspecified action */
+  CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */
+  CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */
+  CURL_LOCK_ACCESS_LAST        /* never use */
+} curl_lock_access;
+
+typedef void (*curl_lock_function)(CURL *handle,
+                                   curl_lock_data data,
+                                   curl_lock_access locktype,
+                                   void *userptr);
+typedef void (*curl_unlock_function)(CURL *handle,
+                                     curl_lock_data data,
+                                     void *userptr);
+
+typedef void CURLSH;
+
+typedef enum {
+  CURLSHE_OK,  /* all is fine */
+  CURLSHE_BAD_OPTION, /* 1 */
+  CURLSHE_IN_USE,     /* 2 */
+  CURLSHE_INVALID,    /* 3 */
+  CURLSHE_NOMEM,      /* out of memory */
+  CURLSHE_LAST /* never use */
+} CURLSHcode;
+
+typedef enum {
+  CURLSHOPT_NONE,  /* don't use */
+  CURLSHOPT_SHARE,   /* specify a data type to share */
+  CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */
+  CURLSHOPT_LOCKFUNC,   /* pass in a 'curl_lock_function' pointer */
+  CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */
+  CURLSHOPT_USERDATA,   /* pass in a user data pointer used in the lock/unlock
+                           callback functions */
+  CURLSHOPT_LAST  /* never use */
+} CURLSHoption;
+
+CURL_EXTERN CURLSH *curl_share_init(void);
+CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...);
+CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *);
+
+/****************************************************************************
+ * Structures for querying information about the curl library at runtime.
+ */
+
+typedef enum {
+  CURLVERSION_FIRST,
+  CURLVERSION_SECOND,
+  CURLVERSION_THIRD,
+  CURLVERSION_FOURTH,
+  CURLVERSION_LAST /* never actually use this */
+} CURLversion;
+
+/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by
+   basically all programs ever that want to get version information. It is
+   meant to be a built-in version number for what kind of struct the caller
+   expects. If the struct ever changes, we redefine the NOW to another enum
+   from above. */
+#define CURLVERSION_NOW CURLVERSION_FOURTH
+
+typedef struct {
+  CURLversion age;          /* age of the returned struct */
+  const char *version;      /* LIBCURL_VERSION */
+  unsigned int version_num; /* LIBCURL_VERSION_NUM */
+  const char *host;         /* OS/host/cpu/machine when configured */
+  int features;             /* bitmask, see defines below */
+  const char *ssl_version;  /* human readable string */
+  long ssl_version_num;     /* not used anymore, always 0 */
+  const char *libz_version; /* human readable string */
+  /* protocols is terminated by an entry with a NULL protoname */
+  const char * const *protocols;
+
+  /* The fields below this were added in CURLVERSION_SECOND */
+  const char *ares;
+  int ares_num;
+
+  /* This field was added in CURLVERSION_THIRD */
+  const char *libidn;
+
+  /* These field were added in CURLVERSION_FOURTH */
+
+  /* Same as '_libiconv_version' if built with HAVE_ICONV */
+  int iconv_ver_num;
+
+  const char *libssh_version; /* human readable string */
+
+} curl_version_info_data;
+
+#define CURL_VERSION_IPV6      (1<<0)  /* IPv6-enabled */
+#define CURL_VERSION_KERBEROS4 (1<<1)  /* kerberos auth is supported */
+#define CURL_VERSION_SSL       (1<<2)  /* SSL options are present */
+#define CURL_VERSION_LIBZ      (1<<3)  /* libz features are present */
+#define CURL_VERSION_NTLM      (1<<4)  /* NTLM auth is supported */
+#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth support */
+#define CURL_VERSION_DEBUG     (1<<6)  /* built with debug capabilities */
+#define CURL_VERSION_ASYNCHDNS (1<<7)  /* asynchronous dns resolves */
+#define CURL_VERSION_SPNEGO    (1<<8)  /* SPNEGO auth */
+#define CURL_VERSION_LARGEFILE (1<<9)  /* supports files bigger than 2GB */
+#define CURL_VERSION_IDN       (1<<10) /* International Domain Names support */
+#define CURL_VERSION_SSPI      (1<<11) /* SSPI is supported */
+#define CURL_VERSION_CONV      (1<<12) /* character conversions supported */
+#define CURL_VERSION_CURLDEBUG (1<<13) /* debug memory tracking supported */
+
+/*
+ * NAME curl_version_info()
+ *
+ * DESCRIPTION
+ *
+ * This function returns a pointer to a static copy of the version info
+ * struct. See above.
+ */
+CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion);
+
+/*
+ * NAME curl_easy_strerror()
+ *
+ * DESCRIPTION
+ *
+ * The curl_easy_strerror function may be used to turn a CURLcode value
+ * into the equivalent human readable error string.  This is useful
+ * for printing meaningful error messages.
+ */
+CURL_EXTERN const char *curl_easy_strerror(CURLcode);
+
+/*
+ * NAME curl_share_strerror()
+ *
+ * DESCRIPTION
+ *
+ * The curl_share_strerror function may be used to turn a CURLSHcode value
+ * into the equivalent human readable error string.  This is useful
+ * for printing meaningful error messages.
+ */
+CURL_EXTERN const char *curl_share_strerror(CURLSHcode);
+
+/*
+ * NAME curl_easy_pause()
+ *
+ * DESCRIPTION
+ *
+ * The curl_easy_pause function pauses or unpauses transfers. Select the new
+ * state by setting the bitmask, use the convenience defines below.
+ *
+ */
+CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask);
+
+#define CURLPAUSE_RECV      (1<<0)
+#define CURLPAUSE_RECV_CONT (0)
+
+#define CURLPAUSE_SEND      (1<<2)
+#define CURLPAUSE_SEND_CONT (0)
+
+#define CURLPAUSE_ALL       (CURLPAUSE_RECV|CURLPAUSE_SEND)
+#define CURLPAUSE_CONT      (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT)
+
+#ifdef  __cplusplus
+}
+#endif
+
+/* unfortunately, the easy.h and multi.h include files need options and info
+  stuff before they can be included! */
+#include "easy.h" /* nothing in curl is fun without the easy stuff */
+#include "multi.h"
+
+/* the typechecker doesn't work in C++ (yet) */
+#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \
+    ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \
+    !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK)
+#include "typecheck-gcc.h"
+#else
+#if defined(__STDC__) && (__STDC__ >= 1)
+/* This preprocessor magic that replaces a call with the exact same call is
+   only done to make sure application authors pass exactly three arguments
+   to these functions. */
+#define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param)
+#define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg)
+#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param)
+#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param)
+#endif /* __STDC__ >= 1 */
+#endif /* gcc >= 4.3 && !__cplusplus */
+
+#endif /* __CURL_CURL_H */
diff --git a/src/third_party/curl/curlbuild.h b/src/third_party/curl/curlbuild.h
new file mode 100644
index 0000000..bab11ac
--- /dev/null
+++ b/src/third_party/curl/curlbuild.h
@@ -0,0 +1,200 @@
+/* include/curl/curlbuild.h.  Generated from curlbuild.h.in by configure.  */
+#ifndef __CURL_CURLBUILD_H
+#define __CURL_CURLBUILD_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: curlbuild.h.in,v 1.8 2009-04-29 15:15:38 yangtse Exp $
+ ***************************************************************************/
+
+/* ================================================================ */
+/*               NOTES FOR CONFIGURE CAPABLE SYSTEMS                */
+/* ================================================================ */
+
+/*
+ * NOTE 1:
+ * -------
+ *
+ * Nothing in this file is intended to be modified or adjusted by the
+ * curl library user nor by the curl library builder.
+ *
+ * If you think that something actually needs to be changed, adjusted
+ * or fixed in this file, then, report it on the libcurl development
+ * mailing list: http://cool.haxx.se/mailman/listinfo/curl-library/
+ *
+ * This header file shall only export symbols which are 'curl' or 'CURL'
+ * prefixed, otherwise public name space would be polluted.
+ *
+ * NOTE 2:
+ * -------
+ *
+ * Right now you might be staring at file include/curl/curlbuild.h.in or
+ * at file include/curl/curlbuild.h, this is due to the following reason:
+ *
+ * On systems capable of running the configure script, the configure process
+ * will overwrite the distributed include/curl/curlbuild.h file with one that
+ * is suitable and specific to the library being configured and built, which
+ * is generated from the include/curl/curlbuild.h.in template file.
+ *
+ */
+
+/* ================================================================ */
+/*  DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE  */
+/* ================================================================ */
+
+#ifdef CURL_SIZEOF_LONG
+#  error "CURL_SIZEOF_LONG shall not be defined except in curlbuild.h"
+   Error Compilation_aborted_CURL_SIZEOF_LONG_already_defined
+#endif
+
+#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
+#  error "CURL_TYPEOF_CURL_SOCKLEN_T shall not be defined except in curlbuild.h"
+   Error Compilation_aborted_CURL_TYPEOF_CURL_SOCKLEN_T_already_defined
+#endif
+
+#ifdef CURL_SIZEOF_CURL_SOCKLEN_T
+#  error "CURL_SIZEOF_CURL_SOCKLEN_T shall not be defined except in curlbuild.h"
+   Error Compilation_aborted_CURL_SIZEOF_CURL_SOCKLEN_T_already_defined
+#endif
+
+#ifdef CURL_TYPEOF_CURL_OFF_T
+#  error "CURL_TYPEOF_CURL_OFF_T shall not be defined except in curlbuild.h"
+   Error Compilation_aborted_CURL_TYPEOF_CURL_OFF_T_already_defined
+#endif
+
+#ifdef CURL_FORMAT_CURL_OFF_T
+#  error "CURL_FORMAT_CURL_OFF_T shall not be defined except in curlbuild.h"
+   Error Compilation_aborted_CURL_FORMAT_CURL_OFF_T_already_defined
+#endif
+
+#ifdef CURL_FORMAT_CURL_OFF_TU
+#  error "CURL_FORMAT_CURL_OFF_TU shall not be defined except in curlbuild.h"
+   Error Compilation_aborted_CURL_FORMAT_CURL_OFF_TU_already_defined
+#endif
+
+#ifdef CURL_FORMAT_OFF_T
+#  error "CURL_FORMAT_OFF_T shall not be defined except in curlbuild.h"
+   Error Compilation_aborted_CURL_FORMAT_OFF_T_already_defined
+#endif
+
+#ifdef CURL_SIZEOF_CURL_OFF_T
+#  error "CURL_SIZEOF_CURL_OFF_T shall not be defined except in curlbuild.h"
+   Error Compilation_aborted_CURL_SIZEOF_CURL_OFF_T_already_defined
+#endif
+
+#ifdef CURL_SUFFIX_CURL_OFF_T
+#  error "CURL_SUFFIX_CURL_OFF_T shall not be defined except in curlbuild.h"
+   Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_T_already_defined
+#endif
+
+#ifdef CURL_SUFFIX_CURL_OFF_TU
+#  error "CURL_SUFFIX_CURL_OFF_TU shall not be defined except in curlbuild.h"
+   Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_TU_already_defined
+#endif
+
+/* ================================================================ */
+/*  EXTERNAL INTERFACE SETTINGS FOR CONFIGURE CAPABLE SYSTEMS ONLY  */
+/* ================================================================ */
+
+/* Configure process defines this to 1 when it finds out that system  */
+/* header file ws2tcpip.h must be included by the external interface. */
+/* #undef CURL_PULL_WS2TCPIP_H */
+#ifdef CURL_PULL_WS2TCPIP_H
+#  ifndef WIN32_LEAN_AND_MEAN
+#    define WIN32_LEAN_AND_MEAN
+#  endif
+#  include <windows.h>
+#  include <winsock2.h>
+#  include <ws2tcpip.h>
+#endif
+
+/* Configure process defines this to 1 when it finds out that system   */
+/* header file sys/types.h must be included by the external interface. */
+#define CURL_PULL_SYS_TYPES_H 1
+#ifdef CURL_PULL_SYS_TYPES_H
+#  include <sys/types.h>
+#endif
+
+/* Configure process defines this to 1 when it finds out that system */
+/* header file stdint.h must be included by the external interface.  */
+/* #undef CURL_PULL_STDINT_H */
+#ifdef CURL_PULL_STDINT_H
+#  include <stdint.h>
+#endif
+
+/* Configure process defines this to 1 when it finds out that system  */
+/* header file inttypes.h must be included by the external interface. */
+/* #undef CURL_PULL_INTTYPES_H */
+#ifdef CURL_PULL_INTTYPES_H
+#  include <inttypes.h>
+#endif
+
+/* Configure process defines this to 1 when it finds out that system    */
+/* header file sys/socket.h must be included by the external interface. */
+#define CURL_PULL_SYS_SOCKET_H 1
+#ifdef CURL_PULL_SYS_SOCKET_H
+#  include <sys/socket.h>
+#endif
+
+/* The size of `long', as computed by sizeof. */
+#if defined(_M_X64) || defined(__x86_64__)
+#define CURL_SIZEOF_LONG 8
+#else
+#define CURL_SIZEOF_LONG 4
+#endif
+
+/* Integral data type used for curl_socklen_t. */
+#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
+
+/* The size of `curl_socklen_t', as computed by sizeof. */
+#define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+/* Data type definition of curl_socklen_t. */
+typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;
+
+/* Signed integral data type used for curl_off_t. */
+#if defined(_M_X64) || defined(__x86_64__)
+#define CURL_TYPEOF_CURL_OFF_T long
+#else
+#define CURL_TYPEOF_CURL_OFF_T int64_t
+#endif
+
+/* Data type definition of curl_off_t. */
+typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;
+
+/* curl_off_t formatting string directive without "%" conversion specifier. */
+#define CURL_FORMAT_CURL_OFF_T "ld"
+
+/* unsigned curl_off_t formatting string without "%" conversion specifier. */
+#define CURL_FORMAT_CURL_OFF_TU "lu"
+
+/* curl_off_t formatting string directive with "%" conversion specifier. */
+#define CURL_FORMAT_OFF_T "%ld"
+
+/* The size of `curl_off_t', as computed by sizeof. */
+#define CURL_SIZEOF_CURL_OFF_T 8
+
+/* curl_off_t constant suffix. */
+#define CURL_SUFFIX_CURL_OFF_T L
+
+/* unsigned curl_off_t constant suffix. */
+#define CURL_SUFFIX_CURL_OFF_TU UL
+
+#endif /* __CURL_CURLBUILD_H */
diff --git a/src/third_party/curl/curlrules.h b/src/third_party/curl/curlrules.h
new file mode 100644
index 0000000..abac439
--- /dev/null
+++ b/src/third_party/curl/curlrules.h
@@ -0,0 +1,249 @@
+#ifndef __CURL_CURLRULES_H
+#define __CURL_CURLRULES_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: curlrules.h,v 1.7 2009-10-27 16:56:20 yangtse Exp $
+ ***************************************************************************/
+
+/* ================================================================ */
+/*                    COMPILE TIME SANITY CHECKS                    */
+/* ================================================================ */
+
+/*
+ * NOTE 1:
+ * -------
+ *
+ * All checks done in this file are intentionally placed in a public
+ * header file which is pulled by curl/curl.h when an application is
+ * being built using an already built libcurl library. Additionally
+ * this file is also included and used when building the library.
+ *
+ * If compilation fails on this file it is certainly sure that the
+ * problem is elsewhere. It could be a problem in the curlbuild.h
+ * header file, or simply that you are using different compilation
+ * settings than those used to build the library.
+ *
+ * Nothing in this file is intended to be modified or adjusted by the
+ * curl library user nor by the curl library builder.
+ *
+ * Do not deactivate any check, these are done to make sure that the
+ * library is properly built and used.
+ *
+ * You can find further help on the libcurl development mailing list:
+ * http://cool.haxx.se/mailman/listinfo/curl-library/
+ *
+ * NOTE 2
+ * ------
+ *
+ * Some of the following compile time checks are based on the fact
+ * that the dimension of a constant array can not be a negative one.
+ * In this way if the compile time verification fails, the compilation
+ * will fail issuing an error. The error description wording is compiler
+ * dependent but it will be quite similar to one of the following:
+ *
+ *   "negative subscript or subscript is too large"
+ *   "array must have at least one element"
+ *   "-1 is an illegal array size"
+ *   "size of array is negative"
+ *
+ * If you are building an application which tries to use an already
+ * built libcurl library and you are getting this kind of errors on
+ * this file, it is a clear indication that there is a mismatch between
+ * how the library was built and how you are trying to use it for your
+ * application. Your already compiled or binary library provider is the
+ * only one who can give you the details you need to properly use it.
+ */
+
+/*
+ * Verify that some macros are actually defined.
+ */
+
+#ifndef CURL_SIZEOF_LONG
+#  error "CURL_SIZEOF_LONG definition is missing!"
+   Error Compilation_aborted_CURL_SIZEOF_LONG_is_missing
+#endif
+
+#ifndef CURL_TYPEOF_CURL_SOCKLEN_T
+#  error "CURL_TYPEOF_CURL_SOCKLEN_T definition is missing!"
+   Error Compilation_aborted_CURL_TYPEOF_CURL_SOCKLEN_T_is_missing
+#endif
+
+#ifndef CURL_SIZEOF_CURL_SOCKLEN_T
+#  error "CURL_SIZEOF_CURL_SOCKLEN_T definition is missing!"
+   Error Compilation_aborted_CURL_SIZEOF_CURL_SOCKLEN_T_is_missing
+#endif
+
+#ifndef CURL_TYPEOF_CURL_OFF_T
+#  error "CURL_TYPEOF_CURL_OFF_T definition is missing!"
+   Error Compilation_aborted_CURL_TYPEOF_CURL_OFF_T_is_missing
+#endif
+
+#ifndef CURL_FORMAT_CURL_OFF_T
+#  error "CURL_FORMAT_CURL_OFF_T definition is missing!"
+   Error Compilation_aborted_CURL_FORMAT_CURL_OFF_T_is_missing
+#endif
+
+#ifndef CURL_FORMAT_CURL_OFF_TU
+#  error "CURL_FORMAT_CURL_OFF_TU definition is missing!"
+   Error Compilation_aborted_CURL_FORMAT_CURL_OFF_TU_is_missing
+#endif
+
+#ifndef CURL_FORMAT_OFF_T
+#  error "CURL_FORMAT_OFF_T definition is missing!"
+   Error Compilation_aborted_CURL_FORMAT_OFF_T_is_missing
+#endif
+
+#ifndef CURL_SIZEOF_CURL_OFF_T
+#  error "CURL_SIZEOF_CURL_OFF_T definition is missing!"
+   Error Compilation_aborted_CURL_SIZEOF_CURL_OFF_T_is_missing
+#endif
+
+#ifndef CURL_SUFFIX_CURL_OFF_T
+#  error "CURL_SUFFIX_CURL_OFF_T definition is missing!"
+   Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_T_is_missing
+#endif
+
+#ifndef CURL_SUFFIX_CURL_OFF_TU
+#  error "CURL_SUFFIX_CURL_OFF_TU definition is missing!"
+   Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_TU_is_missing
+#endif
+
+/*
+ * Macros private to this header file.
+ */
+
+#define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1
+
+#define CurlchkszGE(t1, t2) sizeof(t1) >= sizeof(t2) ? 1 : -1
+
+/*
+ * Verify that the size previously defined and expected for long
+ * is the same as the one reported by sizeof() at compile time.
+ */
+
+typedef char
+  __curl_rule_01__
+    [CurlchkszEQ(long, CURL_SIZEOF_LONG)];
+
+/*
+ * Verify that the size previously defined and expected for
+ * curl_off_t is actually the the same as the one reported
+ * by sizeof() at compile time.
+ */
+
+typedef char
+  __curl_rule_02__
+    [CurlchkszEQ(curl_off_t, CURL_SIZEOF_CURL_OFF_T)];
+
+/*
+ * Verify at compile time that the size of curl_off_t as reported
+ * by sizeof() is greater or equal than the one reported for long
+ * for the current compilation.
+ */
+
+typedef char
+  __curl_rule_03__
+    [CurlchkszGE(curl_off_t, long)];
+
+/*
+ * Verify that the size previously defined and expected for
+ * curl_socklen_t is actually the the same as the one reported
+ * by sizeof() at compile time.
+ */
+
+typedef char
+  __curl_rule_04__
+    [CurlchkszEQ(curl_socklen_t, CURL_SIZEOF_CURL_SOCKLEN_T)];
+
+/*
+ * Verify at compile time that the size of curl_socklen_t as reported
+ * by sizeof() is greater or equal than the one reported for int for
+ * the current compilation.
+ */
+
+typedef char
+  __curl_rule_05__
+    [CurlchkszGE(curl_socklen_t, int)];
+
+/* ================================================================ */
+/*          EXTERNALLY AND INTERNALLY VISIBLE DEFINITIONS           */
+/* ================================================================ */
+
+/* 
+ * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow
+ * these to be visible and exported by the external libcurl interface API,
+ * while also making them visible to the library internals, simply including
+ * setup.h, without actually needing to include curl.h internally.
+ * If some day this section would grow big enough, all this should be moved
+ * to its own header file.
+ */
+
+/*
+ * Figure out if we can use the ## preprocessor operator, which is supported
+ * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__
+ * or  __cplusplus so we need to carefully check for them too.
+ */
+
+#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
+  defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
+  defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
+  defined(__ILEC400__)
+  /* This compiler is believed to have an ISO compatible preprocessor */
+#define CURL_ISOCPP
+#else
+  /* This compiler is believed NOT to have an ISO compatible preprocessor */
+#undef CURL_ISOCPP
+#endif
+
+/*
+ * Macros for minimum-width signed and unsigned curl_off_t integer constants.
+ */
+
+#ifdef CURL_ISOCPP
+#  define __CURL_OFF_T_C_HELPER2(Val,Suffix) Val ## Suffix
+#else
+#  define __CURL_OFF_T_C_HELPER2(Val,Suffix) Val/**/Suffix
+#endif
+#define __CURL_OFF_T_C_HELPER1(Val,Suffix) __CURL_OFF_T_C_HELPER2(Val,Suffix)
+#define CURL_OFF_T_C(Val)  __CURL_OFF_T_C_HELPER1(Val,CURL_SUFFIX_CURL_OFF_T)
+#define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HELPER1(Val,CURL_SUFFIX_CURL_OFF_TU)
+
+/*
+ * Get rid of macros private to this header file.
+ */
+
+#undef CurlchkszEQ
+#undef CurlchkszGE
+
+/*
+ * Get rid of macros not intended to exist beyond this point.
+ */
+
+#undef CURL_PULL_WS2TCPIP_H
+#undef CURL_PULL_SYS_TYPES_H
+#undef CURL_PULL_SYS_SOCKET_H
+#undef CURL_PULL_STDINT_H
+#undef CURL_PULL_INTTYPES_H
+
+#undef CURL_TYPEOF_CURL_SOCKLEN_T
+#undef CURL_TYPEOF_CURL_OFF_T
+
+#endif /* __CURL_CURLRULES_H */
diff --git a/src/third_party/curl/curlver.h b/src/third_party/curl/curlver.h
new file mode 100644
index 0000000..afa85c1
--- /dev/null
+++ b/src/third_party/curl/curlver.h
@@ -0,0 +1,70 @@
+#ifndef __CURL_CURLVER_H
+#define __CURL_CURLVER_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: curlver.h,v 1.48 2009-08-12 11:24:52 bagder Exp $
+ ***************************************************************************/
+
+/* This header file contains nothing but libcurl version info, generated by
+   a script at release-time. This was made its own header file in 7.11.2 */
+
+/* This is the global package copyright */
+#define LIBCURL_COPYRIGHT "1996 - 2009 Daniel Stenberg, <daniel@haxx.se>."
+
+/* This is the version number of the libcurl package from which this header
+   file origins: */
+#define LIBCURL_VERSION "7.19.7"
+
+/* The numeric version number is also available "in parts" by using these
+   defines: */
+#define LIBCURL_VERSION_MAJOR 7
+#define LIBCURL_VERSION_MINOR 19
+#define LIBCURL_VERSION_PATCH 7
+
+/* This is the numeric version of the libcurl version number, meant for easier
+   parsing and comparions by programs. The LIBCURL_VERSION_NUM define will
+   always follow this syntax:
+
+         0xXXYYZZ
+
+   Where XX, YY and ZZ are the main version, release and patch numbers in
+   hexadecimal (using 8 bits each). All three numbers are always represented
+   using two digits.  1.2 would appear as "0x010200" while version 9.11.7
+   appears as "0x090b07".
+
+   This 6-digit (24 bits) hexadecimal number does not show pre-release number,
+   and it is always a greater number in a more recent release. It makes
+   comparisons with greater than and less than work.
+*/
+#define LIBCURL_VERSION_NUM 0x071307
+
+/*
+ * This is the date and time when the full source package was created. The
+ * timestamp is not stored in CVS, as the timestamp is properly set in the
+ * tarballs by the maketgz script.
+ *
+ * The format of the date should follow this template:
+ *
+ * "Mon Feb 12 11:35:33 UTC 2007"
+ */
+#define LIBCURL_TIMESTAMP "Wed Nov  4 12:34:59 UTC 2009"
+
+#endif /* __CURL_CURLVER_H */
diff --git a/src/third_party/curl/easy.h b/src/third_party/curl/easy.h
new file mode 100644
index 0000000..40449c3
--- /dev/null
+++ b/src/third_party/curl/easy.h
@@ -0,0 +1,103 @@
+#ifndef __CURL_EASY_H
+#define __CURL_EASY_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: easy.h,v 1.14 2008-05-12 21:43:28 bagder Exp $
+ ***************************************************************************/
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+CURL_EXTERN CURL *curl_easy_init(void);
+CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
+CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);
+CURL_EXTERN void curl_easy_cleanup(CURL *curl);
+
+/*
+ * NAME curl_easy_getinfo()
+ *
+ * DESCRIPTION
+ *
+ * Request internal information from the curl session with this function.  The
+ * third argument MUST be a pointer to a long, a pointer to a char * or a
+ * pointer to a double (as the documentation describes elsewhere).  The data
+ * pointed to will be filled in accordingly and can be relied upon only if the
+ * function returns CURLE_OK.  This function is intended to get used *AFTER* a
+ * performed transfer, all results from this function are undefined until the
+ * transfer is completed.
+ */
+CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
+
+
+/*
+ * NAME curl_easy_duphandle()
+ *
+ * DESCRIPTION
+ *
+ * Creates a new curl session handle with the same options set for the handle
+ * passed in. Duplicating a handle could only be a matter of cloning data and
+ * options, internal state info and things like persistant connections cannot
+ * be transfered. It is useful in multithreaded applications when you can run
+ * curl_easy_duphandle() for each new thread to avoid a series of identical
+ * curl_easy_setopt() invokes in every thread.
+ */
+CURL_EXTERN CURL* curl_easy_duphandle(CURL *curl);
+
+/*
+ * NAME curl_easy_reset()
+ *
+ * DESCRIPTION
+ *
+ * Re-initializes a CURL handle to the default values. This puts back the
+ * handle to the same state as it was in when it was just created.
+ *
+ * It does keep: live connections, the Session ID cache, the DNS cache and the
+ * cookies.
+ */
+CURL_EXTERN void curl_easy_reset(CURL *curl);
+
+/*
+ * NAME curl_easy_recv()
+ *
+ * DESCRIPTION
+ *
+ * Receives data from the connected socket. Use after successful
+ * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
+ */
+CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen,
+                                    size_t *n);
+
+/*
+ * NAME curl_easy_send()
+ *
+ * DESCRIPTION
+ *
+ * Sends data over the connected socket. Use after successful
+ * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
+ */
+CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer,
+                                    size_t buflen, size_t *n);
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/third_party/curl/mprintf.h b/src/third_party/curl/mprintf.h
new file mode 100644
index 0000000..d7202de
--- /dev/null
+++ b/src/third_party/curl/mprintf.h
@@ -0,0 +1,82 @@
+#ifndef __CURL_MPRINTF_H
+#define __CURL_MPRINTF_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: mprintf.h,v 1.16 2008-05-20 10:21:50 patrickm Exp $
+ ***************************************************************************/
+
+#include <stdarg.h>
+#include <stdio.h> /* needed for FILE */
+
+#include "curl.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+CURL_EXTERN int curl_mprintf(const char *format, ...);
+CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...);
+CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...);
+CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength,
+                               const char *format, ...);
+CURL_EXTERN int curl_mvprintf(const char *format, va_list args);
+CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args);
+CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args);
+CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength,
+                                const char *format, va_list args);
+CURL_EXTERN char *curl_maprintf(const char *format, ...);
+CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args);
+
+#ifdef _MPRINTF_REPLACE
+# undef printf
+# undef fprintf
+# undef sprintf
+# undef vsprintf
+# undef snprintf
+# undef vprintf
+# undef vfprintf
+# undef vsnprintf
+# undef aprintf
+# undef vaprintf
+# define printf curl_mprintf
+# define fprintf curl_mfprintf
+#ifdef CURLDEBUG
+/* When built with CURLDEBUG we define away the sprintf() functions since we
+   don't want internal code to be using them */
+# define sprintf sprintf_was_used
+# define vsprintf vsprintf_was_used
+#else
+# define sprintf curl_msprintf
+# define vsprintf curl_mvsprintf
+#endif
+# define snprintf curl_msnprintf
+# define vprintf curl_mvprintf
+# define vfprintf curl_mvfprintf
+# define vsnprintf curl_mvsnprintf
+# define aprintf curl_maprintf
+# define vaprintf curl_mvaprintf
+#endif
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* __CURL_MPRINTF_H */
diff --git a/src/third_party/curl/multi.h b/src/third_party/curl/multi.h
new file mode 100644
index 0000000..153f772
--- /dev/null
+++ b/src/third_party/curl/multi.h
@@ -0,0 +1,346 @@
+#ifndef __CURL_MULTI_H
+#define __CURL_MULTI_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: multi.h,v 1.45 2008-05-20 10:21:50 patrickm Exp $
+ ***************************************************************************/
+/*
+  This is an "external" header file. Don't give away any internals here!
+
+  GOALS
+
+  o Enable a "pull" interface. The application that uses libcurl decides where
+    and when to ask libcurl to get/send data.
+
+  o Enable multiple simultaneous transfers in the same thread without making it
+    complicated for the application.
+
+  o Enable the application to select() on its own file descriptors and curl's
+    file descriptors simultaneous easily.
+
+*/
+
+/*
+ * This header file should not really need to include "curl.h" since curl.h
+ * itself includes this file and we expect user applications to do #include
+ * <curl/curl.h> without the need for especially including multi.h.
+ *
+ * For some reason we added this include here at one point, and rather than to
+ * break existing (wrongly written) libcurl applications, we leave it as-is
+ * but with this warning attached.
+ */
+#include "curl.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+typedef void CURLM;
+
+typedef enum {
+  CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or
+                                    curl_multi_socket*() soon */
+  CURLM_OK,
+  CURLM_BAD_HANDLE,      /* the passed-in handle is not a valid CURLM handle */
+  CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */
+  CURLM_OUT_OF_MEMORY,   /* if you ever get this, you're in deep sh*t */
+  CURLM_INTERNAL_ERROR,  /* this is a libcurl bug */
+  CURLM_BAD_SOCKET,      /* the passed in socket argument did not match */
+  CURLM_UNKNOWN_OPTION,  /* curl_multi_setopt() with unsupported option */
+  CURLM_LAST
+} CURLMcode;
+
+/* just to make code nicer when using curl_multi_socket() you can now check
+   for CURLM_CALL_MULTI_SOCKET too in the same style it works for
+   curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
+#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
+
+typedef enum {
+  CURLMSG_NONE, /* first, not used */
+  CURLMSG_DONE, /* This easy handle has completed. 'result' contains
+                   the CURLcode of the transfer */
+  CURLMSG_LAST /* last, not used */
+} CURLMSG;
+
+struct CURLMsg {
+  CURLMSG msg;       /* what this message means */
+  CURL *easy_handle; /* the handle it concerns */
+  union {
+    void *whatever;    /* message-specific data */
+    CURLcode result;   /* return code for transfer */
+  } data;
+};
+typedef struct CURLMsg CURLMsg;
+
+/*
+ * Name:    curl_multi_init()
+ *
+ * Desc:    inititalize multi-style curl usage
+ *
+ * Returns: a new CURLM handle to use in all 'curl_multi' functions.
+ */
+CURL_EXTERN CURLM *curl_multi_init(void);
+
+/*
+ * Name:    curl_multi_add_handle()
+ *
+ * Desc:    add a standard curl handle to the multi stack
+ *
+ * Returns: CURLMcode type, general multi error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle,
+                                            CURL *curl_handle);
+
+ /*
+  * Name:    curl_multi_remove_handle()
+  *
+  * Desc:    removes a curl handle from the multi stack again
+  *
+  * Returns: CURLMcode type, general multi error code.
+  */
+CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
+                                               CURL *curl_handle);
+
+ /*
+  * Name:    curl_multi_fdset()
+  *
+  * Desc:    Ask curl for its fd_set sets. The app can use these to select() or
+  *          poll() on. We want curl_multi_perform() called as soon as one of
+  *          them are ready.
+  *
+  * Returns: CURLMcode type, general multi error code.
+  */
+CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle,
+                                       fd_set *read_fd_set,
+                                       fd_set *write_fd_set,
+                                       fd_set *exc_fd_set,
+                                       int *max_fd);
+
+ /*
+  * Name:    curl_multi_perform()
+  *
+  * Desc:    When the app thinks there's data available for curl it calls this
+  *          function to read/write whatever there is right now. This returns
+  *          as soon as the reads and writes are done. This function does not
+  *          require that there actually is data available for reading or that
+  *          data can be written, it can be called just in case. It returns
+  *          the number of handles that still transfer data in the second
+  *          argument's integer-pointer.
+  *
+  * Returns: CURLMcode type, general multi error code. *NOTE* that this only
+  *          returns errors etc regarding the whole multi stack. There might
+  *          still have occurred problems on invidual transfers even when this
+  *          returns OK.
+  */
+CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle,
+                                         int *running_handles);
+
+ /*
+  * Name:    curl_multi_cleanup()
+  *
+  * Desc:    Cleans up and removes a whole multi stack. It does not free or
+  *          touch any individual easy handles in any way. We need to define
+  *          in what state those handles will be if this function is called
+  *          in the middle of a transfer.
+  *
+  * Returns: CURLMcode type, general multi error code.
+  */
+CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle);
+
+/*
+ * Name:    curl_multi_info_read()
+ *
+ * Desc:    Ask the multi handle if there's any messages/informationals from
+ *          the individual transfers. Messages include informationals such as
+ *          error code from the transfer or just the fact that a transfer is
+ *          completed. More details on these should be written down as well.
+ *
+ *          Repeated calls to this function will return a new struct each
+ *          time, until a special "end of msgs" struct is returned as a signal
+ *          that there is no more to get at this point.
+ *
+ *          The data the returned pointer points to will not survive calling
+ *          curl_multi_cleanup().
+ *
+ *          The 'CURLMsg' struct is meant to be very simple and only contain
+ *          very basic informations. If more involved information is wanted,
+ *          we will provide the particular "transfer handle" in that struct
+ *          and that should/could/would be used in subsequent
+ *          curl_easy_getinfo() calls (or similar). The point being that we
+ *          must never expose complex structs to applications, as then we'll
+ *          undoubtably get backwards compatibility problems in the future.
+ *
+ * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out
+ *          of structs. It also writes the number of messages left in the
+ *          queue (after this read) in the integer the second argument points
+ *          to.
+ */
+CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle,
+                                          int *msgs_in_queue);
+
+/*
+ * Name:    curl_multi_strerror()
+ *
+ * Desc:    The curl_multi_strerror function may be used to turn a CURLMcode
+ *          value into the equivalent human readable error string.  This is
+ *          useful for printing meaningful error messages.
+ *
+ * Returns: A pointer to a zero-terminated error message.
+ */
+CURL_EXTERN const char *curl_multi_strerror(CURLMcode);
+
+/*
+ * Name:    curl_multi_socket() and
+ *          curl_multi_socket_all()
+ *
+ * Desc:    An alternative version of curl_multi_perform() that allows the
+ *          application to pass in one of the file descriptors that have been
+ *          detected to have "action" on them and let libcurl perform.
+ *          See man page for details.
+ */
+#define CURL_POLL_NONE   0
+#define CURL_POLL_IN     1
+#define CURL_POLL_OUT    2
+#define CURL_POLL_INOUT  3
+#define CURL_POLL_REMOVE 4
+
+#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD
+
+#define CURL_CSELECT_IN   0x01
+#define CURL_CSELECT_OUT  0x02
+#define CURL_CSELECT_ERR  0x04
+
+typedef int (*curl_socket_callback)(CURL *easy,      /* easy handle */
+                                    curl_socket_t s, /* socket */
+                                    int what,        /* see above */
+                                    void *userp,     /* private callback
+                                                        pointer */
+                                    void *socketp);  /* private socket
+                                                        pointer */
+/*
+ * Name:    curl_multi_timer_callback
+ *
+ * Desc:    Called by libcurl whenever the library detects a change in the
+ *          maximum number of milliseconds the app is allowed to wait before
+ *          curl_multi_socket() or curl_multi_perform() must be called
+ *          (to allow libcurl's timed events to take place).
+ *
+ * Returns: The callback should return zero.
+ */
+typedef int (*curl_multi_timer_callback)(CURLM *multi,    /* multi handle */
+                                         long timeout_ms, /* see above */
+                                         void *userp);    /* private callback
+                                                             pointer */
+
+CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
+                                        int *running_handles);
+
+CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle,
+                                               curl_socket_t s,
+                                               int ev_bitmask,
+                                               int *running_handles);
+
+CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
+                                            int *running_handles);
+
+#ifndef CURL_ALLOW_OLD_MULTI_SOCKET
+/* This macro below was added in 7.16.3 to push users who recompile to use
+   the new curl_multi_socket_action() instead of the old curl_multi_socket()
+*/
+#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z)
+#endif
+
+/*
+ * Name:    curl_multi_timeout()
+ *
+ * Desc:    Returns the maximum number of milliseconds the app is allowed to
+ *          wait before curl_multi_socket() or curl_multi_perform() must be
+ *          called (to allow libcurl's timed events to take place).
+ *
+ * Returns: CURLM error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
+                                         long *milliseconds);
+
+#undef CINIT /* re-using the same name as in curl.h */
+
+#ifdef CURL_ISOCPP
+#define CINIT(name,type,num) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + num
+#else
+/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
+#define LONG          CURLOPTTYPE_LONG
+#define OBJECTPOINT   CURLOPTTYPE_OBJECTPOINT
+#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
+#define OFF_T         CURLOPTTYPE_OFF_T
+#define CINIT(name,type,number) CURLMOPT_/**/name = type + number
+#endif
+
+typedef enum {
+  /* This is the socket callback function pointer */
+  CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1),
+
+  /* This is the argument passed to the socket callback */
+  CINIT(SOCKETDATA, OBJECTPOINT, 2),
+
+    /* set to 1 to enable pipelining for this multi handle */
+  CINIT(PIPELINING, LONG, 3),
+
+   /* This is the timer callback function pointer */
+  CINIT(TIMERFUNCTION, FUNCTIONPOINT, 4),
+
+  /* This is the argument passed to the timer callback */
+  CINIT(TIMERDATA, OBJECTPOINT, 5),
+
+  /* maximum number of entries in the connection cache */
+  CINIT(MAXCONNECTS, LONG, 6),
+
+  CURLMOPT_LASTENTRY /* the last unused */
+} CURLMoption;
+
+
+/*
+ * Name:    curl_multi_setopt()
+ *
+ * Desc:    Sets options for the multi handle.
+ *
+ * Returns: CURLM error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
+                                        CURLMoption option, ...);
+
+
+/*
+ * Name:    curl_multi_assign()
+ *
+ * Desc:    This function sets an association in the multi handle between the
+ *          given socket and a private pointer of the application. This is
+ *          (only) useful for curl_multi_socket uses.
+ *
+ * Returns: CURLM error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
+                                        curl_socket_t sockfd, void *sockp);
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif
diff --git a/src/third_party/curl/stdcheaders.h b/src/third_party/curl/stdcheaders.h
new file mode 100644
index 0000000..f739d7f
--- /dev/null
+++ b/src/third_party/curl/stdcheaders.h
@@ -0,0 +1,34 @@
+#ifndef __STDC_HEADERS_H
+#define __STDC_HEADERS_H
+/***************************************************************************
+ *                                  _   _ ____  _     
+ *  Project                     ___| | | |  _ \| |    
+ *                             / __| | | | |_) | |    
+ *                            | (__| |_| |  _ <| |___ 
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ * 
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: stdcheaders.h,v 1.9 2009-05-18 12:25:45 yangtse Exp $
+ ***************************************************************************/
+
+#include <sys/types.h>
+
+size_t fread (void *, size_t, size_t, FILE *);
+size_t fwrite (const void *, size_t, size_t, FILE *);
+
+int strcasecmp(const char *, const char *);
+int strncasecmp(const char *, const char *, size_t);
+
+#endif
diff --git a/src/third_party/curl/typecheck-gcc.h b/src/third_party/curl/typecheck-gcc.h
new file mode 100644
index 0000000..9788305
--- /dev/null
+++ b/src/third_party/curl/typecheck-gcc.h
@@ -0,0 +1,551 @@
+#ifndef __CURL_TYPECHECK_GCC_H
+#define __CURL_TYPECHECK_GCC_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: typecheck-gcc.h,v 1.9 2009-01-25 23:26:31 bagder Exp $
+ ***************************************************************************/
+
+/* wraps curl_easy_setopt() with typechecking */
+
+/* To add a new kind of warning, add an
+ *   if(_curl_is_sometype_option(_curl_opt) && ! _curl_is_sometype(value))
+ *     _curl_easy_setopt_err_sometype();
+ * block and define _curl_is_sometype_option, _curl_is_sometype and
+ * _curl_easy_setopt_err_sometype below
+ *
+ * To add an option that uses the same type as an existing option, you'll just
+ * need to extend the appropriate _curl_*_option macro
+ */
+#define curl_easy_setopt(handle, option, value)                               \
+__extension__ ({                                                              \
+  __typeof__ (option) _curl_opt = option;                                     \
+  if (__builtin_constant_p(_curl_opt)) {                                      \
+    if (_curl_is_long_option(_curl_opt) && !_curl_is_long(value))             \
+      _curl_easy_setopt_err_long();                                           \
+    if (_curl_is_off_t_option(_curl_opt) && !_curl_is_off_t(value))           \
+      _curl_easy_setopt_err_curl_off_t();                                     \
+    if (_curl_is_string_option(_curl_opt) && !_curl_is_string(value))         \
+      _curl_easy_setopt_err_string();                                         \
+    if (_curl_is_write_cb_option(_curl_opt) && !_curl_is_write_cb(value))     \
+      _curl_easy_setopt_err_write_callback();                                 \
+    if ((_curl_opt) == CURLOPT_READFUNCTION && !_curl_is_read_cb(value))      \
+      _curl_easy_setopt_err_read_cb();                                        \
+    if ((_curl_opt) == CURLOPT_IOCTLFUNCTION && !_curl_is_ioctl_cb(value))    \
+      _curl_easy_setopt_err_ioctl_cb();                                       \
+    if ((_curl_opt) == CURLOPT_SOCKOPTFUNCTION && !_curl_is_sockopt_cb(value))\
+      _curl_easy_setopt_err_sockopt_cb();                                     \
+    if ((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION &&                          \
+            !_curl_is_opensocket_cb(value))                                   \
+      _curl_easy_setopt_err_opensocket_cb();                                  \
+    if ((_curl_opt) == CURLOPT_PROGRESSFUNCTION &&                            \
+            !_curl_is_progress_cb(value))                                     \
+      _curl_easy_setopt_err_progress_cb();                                    \
+    if ((_curl_opt) == CURLOPT_DEBUGFUNCTION && !_curl_is_debug_cb(value))    \
+      _curl_easy_setopt_err_debug_cb();                                       \
+    if ((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION &&                            \
+            !_curl_is_ssl_ctx_cb(value))                                      \
+      _curl_easy_setopt_err_ssl_ctx_cb();                                     \
+    if (_curl_is_conv_cb_option(_curl_opt) && !_curl_is_conv_cb(value))       \
+      _curl_easy_setopt_err_conv_cb();                                        \
+    if ((_curl_opt) == CURLOPT_SEEKFUNCTION && !_curl_is_seek_cb(value))      \
+      _curl_easy_setopt_err_seek_cb();                                        \
+    if (_curl_is_cb_data_option(_curl_opt) && !_curl_is_cb_data(value))       \
+      _curl_easy_setopt_err_cb_data();                                        \
+    if ((_curl_opt) == CURLOPT_ERRORBUFFER && !_curl_is_error_buffer(value))  \
+      _curl_easy_setopt_err_error_buffer();                                   \
+    if ((_curl_opt) == CURLOPT_STDERR && !_curl_is_FILE(value))               \
+      _curl_easy_setopt_err_FILE();                                           \
+    if (_curl_is_postfields_option(_curl_opt) && !_curl_is_postfields(value)) \
+      _curl_easy_setopt_err_postfields();                                     \
+    if ((_curl_opt) == CURLOPT_HTTPPOST &&                                    \
+            !_curl_is_arr((value), struct curl_httppost))                     \
+      _curl_easy_setopt_err_curl_httpost();                                   \
+    if (_curl_is_slist_option(_curl_opt) &&                                   \
+            !_curl_is_arr((value), struct curl_slist))                        \
+      _curl_easy_setopt_err_curl_slist();                                     \
+    if ((_curl_opt) == CURLOPT_SHARE && !_curl_is_ptr((value), CURLSH))       \
+      _curl_easy_setopt_err_CURLSH();                                         \
+  }                                                                           \
+  curl_easy_setopt(handle, _curl_opt, value);                                 \
+})
+
+/* wraps curl_easy_getinfo() with typechecking */
+/* FIXME: don't allow const pointers */
+#define curl_easy_getinfo(handle, info, arg)                                  \
+__extension__ ({                                                              \
+  __typeof__ (info) _curl_info = info;                                        \
+  if (__builtin_constant_p(_curl_info)) {                                     \
+    if (_curl_is_string_info(_curl_info) && !_curl_is_arr((arg), char *))     \
+      _curl_easy_getinfo_err_string();                                        \
+    if (_curl_is_long_info(_curl_info) && !_curl_is_arr((arg), long))         \
+      _curl_easy_getinfo_err_long();                                          \
+    if (_curl_is_double_info(_curl_info) && !_curl_is_arr((arg), double))     \
+      _curl_easy_getinfo_err_double();                                        \
+    if (_curl_is_slist_info(_curl_info) &&                                    \
+           !_curl_is_arr((arg), struct curl_slist *))                         \
+      _curl_easy_getinfo_err_curl_slist();                                    \
+  }                                                                           \
+  curl_easy_getinfo(handle, _curl_info, arg);                                 \
+})
+
+/* TODO: typechecking for curl_share_setopt() and curl_multi_setopt(),
+ * for now just make sure that the functions are called with three
+ * arguments
+ */
+#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param)
+#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param)
+
+
+/* the actual warnings, triggered by calling the _curl_easy_setopt_err*
+ * functions */
+
+/* To define a new warning, use _CURL_WARNING(identifier, "message") */
+#define _CURL_WARNING(id, message)                                            \
+  static void __attribute__((warning(message))) __attribute__((unused))       \
+  __attribute__((noinline)) id(void) { __asm__(""); }
+
+_CURL_WARNING(_curl_easy_setopt_err_long,
+  "curl_easy_setopt expects a long argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_curl_off_t,
+  "curl_easy_setopt expects a curl_off_t argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_string,
+  "curl_easy_setopt expects a string (char* or char[]) argument for this option"
+  )
+_CURL_WARNING(_curl_easy_setopt_err_write_callback,
+  "curl_easy_setopt expects a curl_write_callback argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_read_cb,
+  "curl_easy_setopt expects a curl_read_callback argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_ioctl_cb,
+  "curl_easy_setopt expects a curl_ioctl_callback argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_sockopt_cb,
+  "curl_easy_setopt expects a curl_sockopt_callback argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_opensocket_cb,
+  "curl_easy_setopt expects a curl_opensocket_callback argument for this option"
+  )
+_CURL_WARNING(_curl_easy_setopt_err_progress_cb,
+  "curl_easy_setopt expects a curl_progress_callback argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_debug_cb,
+  "curl_easy_setopt expects a curl_debug_callback argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_ssl_ctx_cb,
+  "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_conv_cb,
+  "curl_easy_setopt expects a curl_conv_callback argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_seek_cb,
+  "curl_easy_setopt expects a curl_seek_callback argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_cb_data,
+  "curl_easy_setopt expects a private data pointer as argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_error_buffer,
+  "curl_easy_setopt expects a char buffer of CURL_ERROR_SIZE as argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_FILE,
+  "curl_easy_setopt expects a FILE* argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_postfields,
+  "curl_easy_setopt expects a void* or char* argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_curl_httpost,
+  "curl_easy_setopt expects a struct curl_httppost* argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_curl_slist,
+  "curl_easy_setopt expects a struct curl_slist* argument for this option")
+_CURL_WARNING(_curl_easy_setopt_err_CURLSH,
+  "curl_easy_setopt expects a CURLSH* argument for this option")
+
+_CURL_WARNING(_curl_easy_getinfo_err_string,
+  "curl_easy_getinfo expects a pointer to char * for this info")
+_CURL_WARNING(_curl_easy_getinfo_err_long,
+  "curl_easy_getinfo expects a pointer to long for this info")
+_CURL_WARNING(_curl_easy_getinfo_err_double,
+  "curl_easy_getinfo expects a pointer to double for this info")
+_CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
+  "curl_easy_getinfo expects a pointer to struct curl_slist * for this info")
+
+/* groups of curl_easy_setops options that take the same type of argument */
+
+/* To add a new option to one of the groups, just add
+ *   (option) == CURLOPT_SOMETHING
+ * to the or-expression. If the option takes a long or curl_off_t, you don't
+ * have to do anything
+ */
+
+/* evaluates to true if option takes a long argument */
+#define _curl_is_long_option(option)                                          \
+  (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT)
+
+#define _curl_is_off_t_option(option)                                         \
+  ((option) > CURLOPTTYPE_OFF_T)
+
+/* evaluates to true if option takes a char* argument */
+#define _curl_is_string_option(option)                                        \
+  ((option) == CURLOPT_URL ||                                                 \
+   (option) == CURLOPT_PROXY ||                                               \
+   (option) == CURLOPT_INTERFACE ||                                           \
+   (option) == CURLOPT_NETRC_FILE ||                                          \
+   (option) == CURLOPT_USERPWD ||                                             \
+   (option) == CURLOPT_USERNAME ||                                            \
+   (option) == CURLOPT_PASSWORD ||                                            \
+   (option) == CURLOPT_PROXYUSERPWD ||                                        \
+   (option) == CURLOPT_PROXYUSERNAME ||                                       \
+   (option) == CURLOPT_PROXYPASSWORD ||                                       \
+   (option) == CURLOPT_NOPROXY ||                                             \
+   (option) == CURLOPT_ENCODING ||                                            \
+   (option) == CURLOPT_REFERER ||                                             \
+   (option) == CURLOPT_USERAGENT ||                                           \
+   (option) == CURLOPT_COOKIE ||                                              \
+   (option) == CURLOPT_COOKIEFILE ||                                          \
+   (option) == CURLOPT_COOKIEJAR ||                                           \
+   (option) == CURLOPT_COOKIELIST ||                                          \
+   (option) == CURLOPT_FTPPORT ||                                             \
+   (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER ||                             \
+   (option) == CURLOPT_FTP_ACCOUNT ||                                         \
+   (option) == CURLOPT_RANGE ||                                               \
+   (option) == CURLOPT_CUSTOMREQUEST ||                                       \
+   (option) == CURLOPT_SSLCERT ||                                             \
+   (option) == CURLOPT_SSLCERTTYPE ||                                         \
+   (option) == CURLOPT_SSLKEY ||                                              \
+   (option) == CURLOPT_SSLKEYTYPE ||                                          \
+   (option) == CURLOPT_KEYPASSWD ||                                           \
+   (option) == CURLOPT_SSLENGINE ||                                           \
+   (option) == CURLOPT_CAINFO ||                                              \
+   (option) == CURLOPT_CAPATH ||                                              \
+   (option) == CURLOPT_RANDOM_FILE ||                                         \
+   (option) == CURLOPT_EGDSOCKET ||                                           \
+   (option) == CURLOPT_SSL_CIPHER_LIST ||                                     \
+   (option) == CURLOPT_KRBLEVEL ||                                            \
+   (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 ||                             \
+   (option) == CURLOPT_SSH_PUBLIC_KEYFILE ||                                  \
+   (option) == CURLOPT_SSH_PRIVATE_KEYFILE ||                                 \
+   (option) == CURLOPT_CRLFILE ||                                             \
+   (option) == CURLOPT_ISSUERCERT ||                                          \
+   0)
+
+/* evaluates to true if option takes a curl_write_callback argument */
+#define _curl_is_write_cb_option(option)                                      \
+  ((option) == CURLOPT_HEADERFUNCTION ||                                      \
+   (option) == CURLOPT_WRITEFUNCTION)
+
+/* evaluates to true if option takes a curl_conv_callback argument */
+#define _curl_is_conv_cb_option(option)                                       \
+  ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION ||                            \
+   (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION ||                          \
+   (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION)
+
+/* evaluates to true if option takes a data argument to pass to a callback */
+#define _curl_is_cb_data_option(option)                                       \
+  ((option) == CURLOPT_WRITEDATA ||                                           \
+   (option) == CURLOPT_READDATA ||                                            \
+   (option) == CURLOPT_IOCTLDATA ||                                           \
+   (option) == CURLOPT_SOCKOPTDATA ||                                         \
+   (option) == CURLOPT_OPENSOCKETDATA ||                                      \
+   (option) == CURLOPT_PROGRESSDATA ||                                        \
+   (option) == CURLOPT_WRITEHEADER ||                                         \
+   (option) == CURLOPT_DEBUGDATA ||                                           \
+   (option) == CURLOPT_SSL_CTX_DATA ||                                        \
+   (option) == CURLOPT_SEEKDATA ||                                            \
+   (option) == CURLOPT_PRIVATE ||                                             \
+   0)
+
+/* evaluates to true if option takes a POST data argument (void* or char*) */
+#define _curl_is_postfields_option(option)                                    \
+  ((option) == CURLOPT_POSTFIELDS ||                                          \
+   (option) == CURLOPT_COPYPOSTFIELDS ||                                      \
+   0)
+
+/* evaluates to true if option takes a struct curl_slist * argument */
+#define _curl_is_slist_option(option)                                         \
+  ((option) == CURLOPT_HTTPHEADER ||                                          \
+   (option) == CURLOPT_HTTP200ALIASES ||                                      \
+   (option) == CURLOPT_QUOTE ||                                               \
+   (option) == CURLOPT_POSTQUOTE ||                                           \
+   (option) == CURLOPT_PREQUOTE ||                                            \
+   (option) == CURLOPT_TELNETOPTIONS ||                                       \
+   0)
+
+/* groups of curl_easy_getinfo infos that take the same type of argument */
+
+/* evaluates to true if info expects a pointer to char * argument */
+#define _curl_is_string_info(info)                                            \
+  (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG)
+
+/* evaluates to true if info expects a pointer to long argument */
+#define _curl_is_long_info(info)                                              \
+  (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE)
+
+/* evaluates to true if info expects a pointer to double argument */
+#define _curl_is_double_info(info)                                            \
+  (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST)
+
+/* true if info expects a pointer to struct curl_slist * argument */
+#define _curl_is_slist_info(info)                                             \
+  (CURLINFO_SLIST < (info))
+
+
+/* typecheck helpers -- check whether given expression has requested type*/
+
+/* For pointers, you can use the _curl_is_ptr/_curl_is_arr macros,
+ * otherwise define a new macro. Search for __builtin_types_compatible_p
+ * in the GCC manual.
+ * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is
+ * the actual expression passed to the curl_easy_setopt macro. This
+ * means that you can only apply the sizeof and __typeof__ operators, no
+ * == or whatsoever.
+ */
+
+/* XXX: should evaluate to true iff expr is a pointer */
+#define _curl_is_any_ptr(expr)                                                \
+  (sizeof(expr) == sizeof(void*))
+
+/* evaluates to true if expr is NULL */
+/* XXX: must not evaluate expr, so this check is not accurate */
+#define _curl_is_NULL(expr)                                                   \
+  (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL)))
+
+/* evaluates to true if expr is type*, const type* or NULL */
+#define _curl_is_ptr(expr, type)                                              \
+  (_curl_is_NULL(expr) ||                                                     \
+   __builtin_types_compatible_p(__typeof__(expr), type *) ||                  \
+   __builtin_types_compatible_p(__typeof__(expr), const type *))
+
+/* evaluates to true if expr is one of type[], type*, NULL or const type* */
+#define _curl_is_arr(expr, type)                                              \
+  (_curl_is_ptr((expr), type) ||                                              \
+   __builtin_types_compatible_p(__typeof__(expr), type []))
+
+/* evaluates to true if expr is a string */
+#define _curl_is_string(expr)                                                 \
+  (_curl_is_arr((expr), char) ||                                              \
+   _curl_is_arr((expr), signed char) ||                                       \
+   _curl_is_arr((expr), unsigned char))
+
+/* evaluates to true if expr is a long (no matter the signedness)
+ * XXX: for now, int is also accepted (and therefore short and char, which
+ * are promoted to int when passed to a variadic function) */
+#define _curl_is_long(expr)                                                   \
+  (__builtin_types_compatible_p(__typeof__(expr), long) ||                    \
+   __builtin_types_compatible_p(__typeof__(expr), signed long) ||             \
+   __builtin_types_compatible_p(__typeof__(expr), unsigned long) ||           \
+   __builtin_types_compatible_p(__typeof__(expr), int) ||                     \
+   __builtin_types_compatible_p(__typeof__(expr), signed int) ||              \
+   __builtin_types_compatible_p(__typeof__(expr), unsigned int) ||            \
+   __builtin_types_compatible_p(__typeof__(expr), short) ||                   \
+   __builtin_types_compatible_p(__typeof__(expr), signed short) ||            \
+   __builtin_types_compatible_p(__typeof__(expr), unsigned short) ||          \
+   __builtin_types_compatible_p(__typeof__(expr), char) ||                    \
+   __builtin_types_compatible_p(__typeof__(expr), signed char) ||             \
+   __builtin_types_compatible_p(__typeof__(expr), unsigned char))
+
+/* evaluates to true if expr is of type curl_off_t */
+#define _curl_is_off_t(expr)                                                  \
+  (__builtin_types_compatible_p(__typeof__(expr), curl_off_t))
+
+/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */
+/* XXX: also check size of an char[] array? */
+#define _curl_is_error_buffer(expr)                                           \
+  (__builtin_types_compatible_p(__typeof__(expr), char *) ||                  \
+   __builtin_types_compatible_p(__typeof__(expr), char[]))
+
+/* evaluates to true if expr is of type (const) void* or (const) FILE* */
+#if 0
+#define _curl_is_cb_data(expr)                                                \
+  (_curl_is_ptr((expr), void) ||                                              \
+   _curl_is_ptr((expr), FILE))
+#else /* be less strict */
+#define _curl_is_cb_data(expr)                                                \
+  _curl_is_any_ptr(expr)
+#endif
+
+/* evaluates to true if expr is of type FILE* */
+#define _curl_is_FILE(expr)                                                   \
+  (__builtin_types_compatible_p(__typeof__(expr), FILE *))
+
+/* evaluates to true if expr can be passed as POST data (void* or char*) */
+#define _curl_is_postfields(expr)                                             \
+  (_curl_is_ptr((expr), void) ||                                              \
+   _curl_is_arr((expr), char))
+
+/* FIXME: the whole callback checking is messy...
+ * The idea is to tolerate char vs. void and const vs. not const
+ * pointers in arguments at least
+ */
+/* helper: __builtin_types_compatible_p distinguishes between functions and
+ * function pointers, hide it */
+#define _curl_callback_compatible(func, type)                                 \
+  (__builtin_types_compatible_p(__typeof__(func), type) ||                    \
+   __builtin_types_compatible_p(__typeof__(func), type*))
+
+/* evaluates to true if expr is of type curl_read_callback or "similar" */
+#define _curl_is_read_cb(expr)                                          \
+  (_curl_is_NULL(expr) ||                                                     \
+   __builtin_types_compatible_p(__typeof__(expr), __typeof__(fread)) ||       \
+   __builtin_types_compatible_p(__typeof__(expr), curl_read_callback) ||      \
+   _curl_callback_compatible((expr), _curl_read_callback1) ||                 \
+   _curl_callback_compatible((expr), _curl_read_callback2) ||                 \
+   _curl_callback_compatible((expr), _curl_read_callback3) ||                 \
+   _curl_callback_compatible((expr), _curl_read_callback4) ||                 \
+   _curl_callback_compatible((expr), _curl_read_callback5) ||                 \
+   _curl_callback_compatible((expr), _curl_read_callback6))
+typedef size_t (_curl_read_callback1)(char *, size_t, size_t, void*);
+typedef size_t (_curl_read_callback2)(char *, size_t, size_t, const void*);
+typedef size_t (_curl_read_callback3)(char *, size_t, size_t, FILE*);
+typedef size_t (_curl_read_callback4)(void *, size_t, size_t, void*);
+typedef size_t (_curl_read_callback5)(void *, size_t, size_t, const void*);
+typedef size_t (_curl_read_callback6)(void *, size_t, size_t, FILE*);
+
+/* evaluates to true if expr is of type curl_write_callback or "similar" */
+#define _curl_is_write_cb(expr)                                               \
+  (_curl_is_read_cb(expr) ||                                            \
+   __builtin_types_compatible_p(__typeof__(expr), __typeof__(fwrite)) ||      \
+   __builtin_types_compatible_p(__typeof__(expr), curl_write_callback) ||     \
+   _curl_callback_compatible((expr), _curl_write_callback1) ||                \
+   _curl_callback_compatible((expr), _curl_write_callback2) ||                \
+   _curl_callback_compatible((expr), _curl_write_callback3) ||                \
+   _curl_callback_compatible((expr), _curl_write_callback4) ||                \
+   _curl_callback_compatible((expr), _curl_write_callback5) ||                \
+   _curl_callback_compatible((expr), _curl_write_callback6))
+typedef size_t (_curl_write_callback1)(const char *, size_t, size_t, void*);
+typedef size_t (_curl_write_callback2)(const char *, size_t, size_t,
+                                       const void*);
+typedef size_t (_curl_write_callback3)(const char *, size_t, size_t, FILE*);
+typedef size_t (_curl_write_callback4)(const void *, size_t, size_t, void*);
+typedef size_t (_curl_write_callback5)(const void *, size_t, size_t,
+                                       const void*);
+typedef size_t (_curl_write_callback6)(const void *, size_t, size_t, FILE*);
+
+/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */
+#define _curl_is_ioctl_cb(expr)                                         \
+  (_curl_is_NULL(expr) ||                                                     \
+   __builtin_types_compatible_p(__typeof__(expr), curl_ioctl_callback) ||     \
+   _curl_callback_compatible((expr), _curl_ioctl_callback1) ||                \
+   _curl_callback_compatible((expr), _curl_ioctl_callback2) ||                \
+   _curl_callback_compatible((expr), _curl_ioctl_callback3) ||                \
+   _curl_callback_compatible((expr), _curl_ioctl_callback4))
+typedef curlioerr (_curl_ioctl_callback1)(CURL *, int, void*);
+typedef curlioerr (_curl_ioctl_callback2)(CURL *, int, const void*);
+typedef curlioerr (_curl_ioctl_callback3)(CURL *, curliocmd, void*);
+typedef curlioerr (_curl_ioctl_callback4)(CURL *, curliocmd, const void*);
+
+/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */
+#define _curl_is_sockopt_cb(expr)                                       \
+  (_curl_is_NULL(expr) ||                                                     \
+   __builtin_types_compatible_p(__typeof__(expr), curl_sockopt_callback) ||   \
+   _curl_callback_compatible((expr), _curl_sockopt_callback1) ||              \
+   _curl_callback_compatible((expr), _curl_sockopt_callback2))
+typedef int (_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype);
+typedef int (_curl_sockopt_callback2)(const void *, curl_socket_t,
+                                      curlsocktype);
+
+/* evaluates to true if expr is of type curl_opensocket_callback or "similar" */
+#define _curl_is_opensocket_cb(expr)                                    \
+  (_curl_is_NULL(expr) ||                                                     \
+   __builtin_types_compatible_p(__typeof__(expr), curl_opensocket_callback) ||\
+   _curl_callback_compatible((expr), _curl_opensocket_callback1) ||           \
+   _curl_callback_compatible((expr), _curl_opensocket_callback2) ||           \
+   _curl_callback_compatible((expr), _curl_opensocket_callback3) ||           \
+   _curl_callback_compatible((expr), _curl_opensocket_callback4))
+typedef curl_socket_t (_curl_opensocket_callback1)
+  (void *, curlsocktype, struct curl_sockaddr *);
+typedef curl_socket_t (_curl_opensocket_callback2)
+  (void *, curlsocktype, const struct curl_sockaddr *);
+typedef curl_socket_t (_curl_opensocket_callback3)
+  (const void *, curlsocktype, struct curl_sockaddr *);
+typedef curl_socket_t (_curl_opensocket_callback4)
+  (const void *, curlsocktype, const struct curl_sockaddr *);
+
+/* evaluates to true if expr is of type curl_progress_callback or "similar" */
+#define _curl_is_progress_cb(expr)                                      \
+  (_curl_is_NULL(expr) ||                                                     \
+   __builtin_types_compatible_p(__typeof__(expr), curl_progress_callback) ||  \
+   _curl_callback_compatible((expr), _curl_progress_callback1) ||             \
+   _curl_callback_compatible((expr), _curl_progress_callback2))
+typedef int (_curl_progress_callback1)(void *,
+    double, double, double, double);
+typedef int (_curl_progress_callback2)(const void *,
+    double, double, double, double);
+
+/* evaluates to true if expr is of type curl_debug_callback or "similar" */
+#define _curl_is_debug_cb(expr)                                         \
+  (_curl_is_NULL(expr) ||                                                     \
+   __builtin_types_compatible_p(__typeof__(expr), curl_debug_callback) ||     \
+   _curl_callback_compatible((expr), _curl_debug_callback1) ||                \
+   _curl_callback_compatible((expr), _curl_debug_callback2) ||                \
+   _curl_callback_compatible((expr), _curl_debug_callback3) ||                \
+   _curl_callback_compatible((expr), _curl_debug_callback4))
+typedef int (_curl_debug_callback1) (CURL *,
+    curl_infotype, char *, size_t, void *);
+typedef int (_curl_debug_callback2) (CURL *,
+    curl_infotype, char *, size_t, const void *);
+typedef int (_curl_debug_callback3) (CURL *,
+    curl_infotype, const char *, size_t, void *);
+typedef int (_curl_debug_callback4) (CURL *,
+    curl_infotype, const char *, size_t, const void *);
+
+/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */
+/* this is getting even messier... */
+#define _curl_is_ssl_ctx_cb(expr)                                       \
+  (_curl_is_NULL(expr) ||                                                     \
+   __builtin_types_compatible_p(__typeof__(expr), curl_ssl_ctx_callback) ||   \
+   _curl_callback_compatible((expr), _curl_ssl_ctx_callback1) ||              \
+   _curl_callback_compatible((expr), _curl_ssl_ctx_callback2) ||              \
+   _curl_callback_compatible((expr), _curl_ssl_ctx_callback3) ||              \
+   _curl_callback_compatible((expr), _curl_ssl_ctx_callback4) ||              \
+   _curl_callback_compatible((expr), _curl_ssl_ctx_callback5) ||              \
+   _curl_callback_compatible((expr), _curl_ssl_ctx_callback6) ||              \
+   _curl_callback_compatible((expr), _curl_ssl_ctx_callback7) ||              \
+   _curl_callback_compatible((expr), _curl_ssl_ctx_callback8))
+typedef CURLcode (_curl_ssl_ctx_callback1)(CURL *, void *, void *);
+typedef CURLcode (_curl_ssl_ctx_callback2)(CURL *, void *, const void *);
+typedef CURLcode (_curl_ssl_ctx_callback3)(CURL *, const void *, void *);
+typedef CURLcode (_curl_ssl_ctx_callback4)(CURL *, const void *, const void *);
+#ifdef HEADER_SSL_H
+/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX
+ * this will of course break if we're included before OpenSSL headers...
+ */
+typedef CURLcode (_curl_ssl_ctx_callback5)(CURL *, SSL_CTX, void *);
+typedef CURLcode (_curl_ssl_ctx_callback6)(CURL *, SSL_CTX, const void *);
+typedef CURLcode (_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX, void *);
+typedef CURLcode (_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX, const void *);
+#else
+typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5;
+typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6;
+typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7;
+typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8;
+#endif
+
+/* evaluates to true if expr is of type curl_conv_callback or "similar" */
+#define _curl_is_conv_cb(expr)                                          \
+  (_curl_is_NULL(expr) ||                                                     \
+   __builtin_types_compatible_p(__typeof__(expr), curl_conv_callback) ||      \
+   _curl_callback_compatible((expr), _curl_conv_callback1) ||                 \
+   _curl_callback_compatible((expr), _curl_conv_callback2) ||                 \
+   _curl_callback_compatible((expr), _curl_conv_callback3) ||                 \
+   _curl_callback_compatible((expr), _curl_conv_callback4))
+typedef CURLcode (*_curl_conv_callback1)(char *, size_t length);
+typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length);
+typedef CURLcode (*_curl_conv_callback3)(void *, size_t length);
+typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length);
+
+/* evaluates to true if expr is of type curl_seek_callback or "similar" */
+#define _curl_is_seek_cb(expr)                                          \
+  (_curl_is_NULL(expr) ||                                                     \
+   __builtin_types_compatible_p(__typeof__(expr), curl_seek_callback) ||      \
+   _curl_callback_compatible((expr), _curl_seek_callback1) ||                 \
+   _curl_callback_compatible((expr), _curl_seek_callback2))
+typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int);
+typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int);
+
+
+#endif /* __CURL_TYPECHECK_GCC_H */
diff --git a/src/third_party/curl/types.h b/src/third_party/curl/types.h
new file mode 100644
index 0000000..d37d6ae
--- /dev/null
+++ b/src/third_party/curl/types.h
@@ -0,0 +1 @@
+/* not used */
diff --git a/src/third_party/libdisasm/.dirstamp b/src/third_party/libdisasm/.dirstamp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/third_party/libdisasm/.dirstamp
diff --git a/src/third_party/libdisasm/Makefile.am b/src/third_party/libdisasm/Makefile.am
new file mode 100644
index 0000000..bd3129e
--- /dev/null
+++ b/src/third_party/libdisasm/Makefile.am
@@ -0,0 +1,43 @@
+include_HEADERS = libdis.h
+lib_LTLIBRARIES = libdisasm.la
+libdisasm_la_SOURCES = \
+	ia32_implicit.c \
+	ia32_implicit.h \
+	ia32_insn.c \
+	ia32_insn.h \
+	ia32_invariant.c \
+	ia32_invariant.h \
+	ia32_modrm.c \
+	ia32_modrm.h \
+	ia32_opcode_tables.c \
+	ia32_opcode_tables.h \
+	ia32_operand.c \
+	ia32_operand.h \
+	ia32_reg.c \
+	ia32_reg.h \
+	ia32_settings.c \
+	ia32_settings.h \
+	libdis.h \
+	qword.h \
+	x86_disasm.c \
+	x86_format.c \
+	x86_imm.c \
+	x86_imm.h \
+	x86_insn.c \
+	x86_misc.c \
+	x86_operand_list.c \
+	x86_operand_list.h
+
+# Cheat to get non-autoconf swig into tarball,
+# even if it doesn't build by default.
+EXTRA_DIST = \
+swig/Makefile \
+swig/libdisasm.i \
+swig/libdisasm_oop.i \
+swig/python/Makefile-swig \
+swig/perl/Makefile-swig \
+swig/perl/Makefile.PL \
+swig/ruby/Makefile-swig \
+swig/ruby/extconf.rb \
+swig/tcl/Makefile-swig \
+swig/README
diff --git a/src/third_party/libdisasm/TODO b/src/third_party/libdisasm/TODO
new file mode 100644
index 0000000..148addf
--- /dev/null
+++ b/src/third_party/libdisasm/TODO
@@ -0,0 +1,43 @@
+x86_format.c
+------------
+intel: jmpf -> jmp, callf -> call
+att: jmpf -> ljmp, callf -> lcall
+
+opcode table
+------------
+finish typing instructions
+fix flag clear/set/toggle types
+
+ix64 stuff
+----------
+document output file formats in web page
+features doc: register aliases, implicit operands, stack mods,
+ring0 flags, eflags, cpu model/isa
+
+ia32_handle_* implementation
+
+fix operand 0F C2
+CMPPS
+
+* sysenter, sysexit as CALL types -- preceded by MSR writes
+* SYSENTER/SYSEXIT stack : overwrites SS, ESP
+* stos, cmps, scas, movs, ins, outs, lods -> OP_PTR
+* OP_SIZE in implicit operands
+* use OP_SIZE to choose reg sizes!
+
+DONE?? :
+implicit operands: provide action ?
+e.g. add/inc for stach, write, etc 
+replace table numbers in opcodes.dat with
+#defines for table names
+
+replace 0  with INSN_INVALID   [or maybe FF for imnvalid and 00 for Not Applicable */
+no wait that is only for prefix tables -- n/p
+
+if ( prefx) only use if insn != invalid
+
+these should cover all the wacky disasm exceptions 
+
+for the rep one we can chet, match only a 0x90
+
+todo: privilege | ring
diff --git a/src/third_party/libdisasm/ia32_implicit.c b/src/third_party/libdisasm/ia32_implicit.c
new file mode 100644
index 0000000..8b075d2
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_implicit.c
@@ -0,0 +1,422 @@
+#include <stdlib.h>
+
+#include "ia32_implicit.h"
+#include "ia32_insn.h"
+#include "ia32_reg.h"
+#include "x86_operand_list.h"
+
+/* Conventions: Register operands which are aliases of another register 
+ *   operand (e.g. AX in one operand and AL in another) assume that the
+ *   operands are different registers and that alias tracking will resolve
+ *   data flow. This means that something like
+ *   	mov ax, al
+ *   would have 'write only' access for AX and 'read only' access for AL,
+ *   even though both AL and AX are read and written */
+typedef struct {
+	uint32_t type;
+	uint32_t operand;
+} op_implicit_list_t;
+
+static op_implicit_list_t list_aaa[] = 
+	/* 37 : AAA : rw AL */
+	/* 3F : AAS : rw AL */
+	{{ OP_R | OP_W, REG_BYTE_OFFSET }, {0}};	/* aaa */
+
+static op_implicit_list_t list_aad[] = 
+	/* D5 0A, D5 (ib) : AAD : rw AX */
+	/* D4 0A, D4 (ib) : AAM : rw AX */
+	{{ OP_R | OP_W, REG_WORD_OFFSET }, {0}};	/* aad */
+
+static op_implicit_list_t list_call[] = 
+	/* E8, FF, 9A, FF : CALL : rw ESP, rw EIP */
+	/* C2, C3, CA, CB : RET  : rw ESP, rw EIP */
+	{{ OP_R | OP_W, REG_EIP_INDEX }, 
+	 { OP_R | OP_W, REG_ESP_INDEX }, {0}};	/* call, ret */
+
+static op_implicit_list_t list_cbw[] = 
+	/* 98 : CBW : r AL, rw AX */
+	{{ OP_R | OP_W, REG_WORD_OFFSET },
+	 { OP_R, REG_BYTE_OFFSET}, {0}};		/* cbw */
+
+static op_implicit_list_t list_cwde[] = 
+	/* 98 : CWDE : r AX, rw EAX */
+	{{ OP_R | OP_W, REG_DWORD_OFFSET },
+	 { OP_R, REG_WORD_OFFSET }, {0}};		/* cwde */
+
+static op_implicit_list_t list_clts[] = 
+	/* 0F 06 : CLTS : rw CR0 */
+	{{ OP_R | OP_W, REG_CTRL_OFFSET}, {0}};	/* clts */
+
+static op_implicit_list_t list_cmpxchg[] = 
+	/* 0F B0 : CMPXCHG : rw AL */
+	{{ OP_R | OP_W, REG_BYTE_OFFSET }, {0}};	/* cmpxchg */
+
+static op_implicit_list_t list_cmpxchgb[] = 
+	/* 0F B1 : CMPXCHG : rw EAX */
+	{{ OP_R | OP_W, REG_DWORD_OFFSET }, {0}};	/* cmpxchg */
+
+static op_implicit_list_t list_cmpxchg8b[] = 
+	/* 0F C7 : CMPXCHG8B : rw EDX, rw EAX, r ECX, r EBX */
+	{{ OP_R | OP_W, REG_DWORD_OFFSET }, 
+	 { OP_R | OP_W, REG_DWORD_OFFSET + 2 }, 
+	 { OP_R, REG_DWORD_OFFSET + 1 }, 
+	 { OP_R, REG_DWORD_OFFSET + 3 }, {0}};	/* cmpxchg8b */
+
+static op_implicit_list_t list_cpuid[] = 
+	/* 0F A2 : CPUID : rw EAX, w EBX, w ECX, w EDX */
+	{{ OP_R | OP_W, REG_DWORD_OFFSET }, 
+	 { OP_W, REG_DWORD_OFFSET + 1 }, 
+	 { OP_W, REG_DWORD_OFFSET + 2 }, 
+	 { OP_W, REG_DWORD_OFFSET + 3 }, {0}};	/* cpuid */
+
+static op_implicit_list_t list_cwd[] = 
+	/* 99 : CWD/CWQ : rw EAX, w EDX */
+	{{ OP_R | OP_W, REG_DWORD_OFFSET }, 
+	 { OP_W, REG_DWORD_OFFSET + 2 }, {0}};	/* cwd */
+
+static op_implicit_list_t list_daa[] = 
+	/* 27 : DAA : rw AL */
+	/* 2F : DAS : rw AL */
+	{{ OP_R | OP_W, REG_BYTE_OFFSET }, {0}};	/* daa */
+
+static op_implicit_list_t list_idiv[] = 
+	/* F6 : DIV, IDIV : r AX, w AL, w AH */
+	/* FIXED: first op was EAX, not Aw. TODO: verify! */
+	{{ OP_R, REG_WORD_OFFSET }, 
+	  { OP_W, REG_BYTE_OFFSET },
+	  { OP_W, REG_BYTE_OFFSET + 4 }, {0}};	/* div */
+
+static op_implicit_list_t list_div[] = 
+	/* F7 : DIV, IDIV : rw EDX, rw EAX */
+	{{ OP_R | OP_W, REG_DWORD_OFFSET + 2 }, 
+	  { OP_R | OP_W, REG_DWORD_OFFSET }, {0}};	/* div */
+
+static op_implicit_list_t list_enter[] = 
+	/* C8 : ENTER : rw ESP w EBP */
+	{{ OP_R | OP_W, REG_DWORD_OFFSET + 4 }, 
+	 { OP_R, REG_DWORD_OFFSET + 5 }, {0}};	/* enter */
+
+static op_implicit_list_t list_f2xm1[] = 
+	/* D9 F0 : F2XM1 : rw ST(0) */
+	/* D9 E1 : FABS : rw ST(0) */
+	/* D9 E0 : FCHS : rw ST(0) */
+	/* D9 FF : FCOS : rw ST(0)*/
+	/* D8, DA : FDIV : rw ST(0) */
+	/* D8, DA : FDIVR : rw ST(0) */
+	/* D9 F2 : FPTAN : rw ST(0) */
+	/* D9 FC : FRNDINT : rw ST(0) */
+	/* D9 FB : FSINCOS : rw ST(0) */
+	/* D9 FE : FSIN : rw ST(0) */
+	/* D9 FA : FSQRT : rw ST(0) */
+	/* D9 F4 : FXTRACT : rw ST(0) */
+	{{ OP_R | OP_W, REG_FPU_OFFSET }, {0}};	/* f2xm1 */
+
+static op_implicit_list_t list_fcom[] = 
+	/* D8, DC, DE D9 : FCOM : r ST(0) */
+	/* DE, DA : FICOM : r ST(0) */
+	/* DF, D8 : FIST : r ST(0) */
+	/* D9 E4 : FTST : r ST(0) */
+	/* D9 E5 : FXAM : r ST(0) */
+	{{ OP_R, REG_FPU_OFFSET }, {0}};		/* fcom */
+
+static op_implicit_list_t list_fpatan[] = 
+	/* D9 F3 : FPATAN : r ST(0), rw ST(1) */
+	{{ OP_R, REG_FPU_OFFSET }, {0}};		/* fpatan */
+
+static op_implicit_list_t list_fprem[] = 
+	/* D9 F8, D9 F5 : FPREM : rw ST(0) r ST(1) */
+	/* D9 FD : FSCALE : rw ST(0), r ST(1) */
+	{{ OP_R | OP_W, REG_FPU_OFFSET }, 	
+	 { OP_R, REG_FPU_OFFSET + 1 }, {0}};	/* fprem */
+
+static op_implicit_list_t list_faddp[] = 
+	/* DE C1 : FADDP : r ST(0), rw ST(1) */
+	/* DE E9 : FSUBP : r ST(0), rw ST(1) */
+	/* D9 F1 : FYL2X : r ST(0), rw ST(1) */
+	/* D9 F9 : FYL2XP1 : r ST(0), rw ST(1) */
+	{{ OP_R, REG_FPU_OFFSET },
+	 { OP_R | OP_W, REG_FPU_OFFSET + 1 }, {0}};	/* faddp */
+
+static op_implicit_list_t list_fucompp[] = 
+	/* DA E9 : FUCOMPP : r ST(0), r ST(1) */
+	{{ OP_R, REG_FPU_OFFSET },
+	 { OP_R, REG_FPU_OFFSET + 1 }, {0}};	/* fucompp */
+
+static op_implicit_list_t list_imul[] = 
+	/* F6 : IMUL : r AL, w AX */
+	/* F6 : MUL : r AL, w AX */
+	{{ OP_R, REG_BYTE_OFFSET },
+	 { OP_W, REG_WORD_OFFSET }, {0}};		/* imul */
+
+static op_implicit_list_t list_mul[] = 
+	/* F7 : IMUL : rw EAX, w EDX */
+	/* F7 : MUL : rw EAX, w EDX */
+	{{ OP_R | OP_W, REG_DWORD_OFFSET },
+	 { OP_W, REG_DWORD_OFFSET + 2 }, {0}};	/* imul */
+
+static op_implicit_list_t list_lahf[] = 
+	/* 9F : LAHF : r EFLAGS, w AH */
+	{{ OP_R, REG_FLAGS_INDEX },
+	 { OP_W, REG_BYTE_OFFSET + 4 }, {0}};	/* lahf */
+
+static op_implicit_list_t list_ldmxcsr[] = 
+	/* 0F AE : LDMXCSR : w MXCSR SSE Control Status Reg */
+	{{ OP_W, REG_MXCSG_INDEX }, {0}};		/* ldmxcsr */
+
+static op_implicit_list_t list_leave[] = 
+	/* C9 : LEAVE :  rw ESP, w EBP */
+	{{ OP_R | OP_W, REG_ESP_INDEX },
+	 { OP_W, REG_DWORD_OFFSET + 5 }, {0}};	/* leave */
+
+static op_implicit_list_t list_lgdt[] = 
+	/* 0F 01 : LGDT : w GDTR */
+	{{ OP_W, REG_GDTR_INDEX }, {0}};		/* lgdt */
+
+static op_implicit_list_t list_lidt[] = 
+	/* 0F 01 : LIDT : w IDTR */
+	{{ OP_W, REG_IDTR_INDEX }, {0}};		/* lidt */
+
+static op_implicit_list_t list_lldt[] = 
+	/* 0F 00 : LLDT : w LDTR */
+	{{ OP_W, REG_LDTR_INDEX }, {0}};		/* lldt */
+
+static op_implicit_list_t list_lmsw[] = 
+	/* 0F 01 : LMSW : w CR0 */
+	{{ OP_W, REG_CTRL_OFFSET }, {0}};		/* lmsw */
+
+static op_implicit_list_t list_loop[] = 
+	/* E0, E1, E2 : LOOP : rw ECX */
+	{{ OP_R | OP_W, REG_DWORD_OFFSET + 1 }, {0}};/* loop */
+
+static op_implicit_list_t list_ltr[] = 
+	/* 0F 00 : LTR : w Task Register */
+	{{ OP_W, REG_TR_INDEX }, {0}};		/* ltr */
+
+static op_implicit_list_t list_pop[] = 
+	/* 8F, 58, 1F, 07, 17, 0F A1, 0F A9 : POP : rw ESP */
+	/* FF, 50, 6A, 68, 0E, 16, 1E, 06, 0F A0, 0F A8 : PUSH : rw ESP */
+	{{ OP_R | OP_W, REG_ESP_INDEX }, {0}};	/* pop, push */
+
+static op_implicit_list_t list_popad[] = 
+	/* 61 : POPAD : rw esp, w edi esi ebp ebx edx ecx eax */
+	{{ OP_R | OP_W, REG_ESP_INDEX },
+	 { OP_W, REG_DWORD_OFFSET + 7 },
+	 { OP_W, REG_DWORD_OFFSET + 6 },
+	 { OP_W, REG_DWORD_OFFSET + 5 },
+	 { OP_W, REG_DWORD_OFFSET + 3 },
+	 { OP_W, REG_DWORD_OFFSET + 2 },
+	 { OP_W, REG_DWORD_OFFSET + 1 },
+	 { OP_W, REG_DWORD_OFFSET }, {0}};		/* popad */
+
+static op_implicit_list_t list_popfd[] = 
+	/* 9D : POPFD : rw esp, w eflags */
+	{{ OP_R | OP_W, REG_ESP_INDEX },
+	 { OP_W, REG_FLAGS_INDEX }, {0}};		/* popfd */
+
+static op_implicit_list_t list_pushad[] = 
+	/* FF, 50, 6A, 68, 0E, 16, 1E, 06, 0F A0, 0F A8 : PUSH : rw ESP */
+	/* 60 : PUSHAD : rw esp, r eax ecx edx ebx esp ebp esi edi */
+	{{ OP_R | OP_W, REG_ESP_INDEX },
+	 { OP_R, REG_DWORD_OFFSET },
+	 { OP_R, REG_DWORD_OFFSET + 1 },
+	 { OP_R, REG_DWORD_OFFSET + 2 },
+	 { OP_R, REG_DWORD_OFFSET + 3 },
+	 { OP_R, REG_DWORD_OFFSET + 5 },
+	 { OP_R, REG_DWORD_OFFSET + 6 },
+	 { OP_R, REG_DWORD_OFFSET + 7 }, {0}};	/* pushad */
+
+static op_implicit_list_t list_pushfd[] = 
+	/* 9C : PUSHFD : rw esp, r eflags */
+	{{ OP_R | OP_W, REG_ESP_INDEX },
+	 { OP_R, REG_FLAGS_INDEX }, {0}};		/* pushfd */
+
+static op_implicit_list_t list_rdmsr[] = 
+	/* 0F 32 : RDMSR : r ECX, w EDX, w EAX */
+	{{ OP_R, REG_DWORD_OFFSET + 1 },
+	 { OP_W, REG_DWORD_OFFSET + 2 },
+	 { OP_W, REG_DWORD_OFFSET }, {0}};	/* rdmsr */
+
+static op_implicit_list_t list_rdpmc[] = 
+	/* 0F 33 : RDPMC : r ECX, w EDX, w EAX */
+	{{ OP_R, REG_DWORD_OFFSET + 1 },
+	 { OP_W, REG_DWORD_OFFSET + 2 },
+	 { OP_W, REG_DWORD_OFFSET }, {0}};		/* rdpmc */
+
+static op_implicit_list_t list_rdtsc[] = 
+	/* 0F 31 : RDTSC : rw EDX, rw EAX */
+	{{ OP_R | OP_W, REG_DWORD_OFFSET + 2 },
+	 { OP_R | OP_W, REG_DWORD_OFFSET }, {0}};	/* rdtsc */
+
+static op_implicit_list_t list_rep[] = 
+	/* F3, F2 ... : REP : rw ECX */
+	{{ OP_R | OP_W, REG_DWORD_OFFSET + 1 }, {0}};/* rep */
+
+static op_implicit_list_t list_rsm[] = 
+	/* 0F AA : RSM : r CR4, r CR0 */
+	{{ OP_R, REG_CTRL_OFFSET + 4 }, 
+	 { OP_R, REG_CTRL_OFFSET }, {0}};		/* rsm */
+
+static op_implicit_list_t list_sahf[] = 
+	/* 9E : SAHF : r ah, rw eflags (set SF ZF AF PF CF) */
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* sahf */
+
+static op_implicit_list_t list_sgdt[] = 
+	/* 0F : SGDT : r gdtr */
+	/* TODO: finish this! */
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* sgdt */
+
+static op_implicit_list_t list_sidt[] = 
+	/* 0F : SIDT : r idtr */
+	/* TODO: finish this! */
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* sidt */
+
+static op_implicit_list_t list_sldt[] = 
+	/* 0F : SLDT : r ldtr */
+	/* TODO: finish this! */
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* sldt */
+
+static op_implicit_list_t list_smsw[] = 
+	/* 0F : SMSW : r CR0 */
+	/* TODO: finish this! */
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* smsw */
+
+static op_implicit_list_t list_stmxcsr[] = 
+	/* 0F AE : STMXCSR : r MXCSR */
+	/* TODO: finish this! */
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* stmxcsr */
+
+static op_implicit_list_t list_str[] = 
+	/* 0F 00 : STR : r TR (task register) */
+	/* TODO: finish this! */
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* str */
+
+static op_implicit_list_t list_sysenter[] = 
+	/* 0F 34 : SYSENTER : w cs, w eip, w ss, w esp, r CR0, w eflags
+	 *         r sysenter_cs_msr, sysenter_esp_msr, sysenter_eip_msr */
+	/* TODO: finish this! */
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* sysenter */
+
+static op_implicit_list_t list_sysexit[] = 
+	/* 0F 35 : SYSEXIT : r edx, r ecx, w cs, w eip, w ss, w esp
+	 * 	   r sysenter_cs_msr */
+	/* TODO: finish this! */
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* sysexit */
+
+static op_implicit_list_t list_wrmsr[] = 
+	/* 0F 30 : WRMST : r edx, r eax, r ecx */
+	/* TODO: finish this! */
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* wrmsr */
+
+static op_implicit_list_t list_xlat[] = 
+	/* D7 : XLAT : rw al r ebx (ptr) */
+	/* TODO: finish this! */
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* xlat */
+/* TODO:
+ * monitor 0f 01 c8 eax OP_R ecx OP_R edx OP_R
+ * mwait 0f 01 c9 eax OP_R ecx OP_R
+ */
+static op_implicit_list_t list_monitor[] = 
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* monitor */
+static op_implicit_list_t list_mwait[] = 
+	{{ OP_R, REG_DWORD_OFFSET }, {0}};		/* mwait */
+
+op_implicit_list_t *op_implicit_list[] = {
+	/* This is a list of implicit operands which are read/written by
+	 * various x86 instructions. Note that modifications to the stack
+	 * register are mentioned here, but that additional information on
+	 * the effect an instruction has on the stack is contained in the
+	 * x86_insn_t 'stack_mod' and 'stack_mod_val' fields. Use of the
+	 * eflags register, i.e. setting, clearing, and testing flags, is
+	 * not recorded here but rather in the flags_set and flags_tested
+	 * fields of the x86_insn_t.*/
+	NULL,
+	list_aaa, list_aad, list_call, list_cbw,		/* 1 - 4 */
+	list_cwde, list_clts, list_cmpxchg, list_cmpxchgb,	/* 5 - 8 */
+	list_cmpxchg8b, list_cpuid, list_cwd, list_daa,		/* 9 - 12 */
+	list_idiv, list_div, list_enter, list_f2xm1,		/* 13 - 16 */
+	list_fcom, list_fpatan, list_fprem, list_faddp,		/* 17 - 20 */
+	list_fucompp, list_imul, list_mul, list_lahf,		/* 21 - 24 */
+	list_ldmxcsr, list_leave, list_lgdt, list_lidt,		/* 25 - 28 */
+	list_lldt, list_lmsw, list_loop, list_ltr,		/* 29 - 32 */
+	list_pop, list_popad, list_popfd, list_pushad,		/* 33 - 36 */
+	list_pushfd, list_rdmsr, list_rdpmc, list_rdtsc,	/* 37 - 40 */
+	/* NOTE: 'REP' is a hack since it is a prefix: if its position
+	 * in the table changes, then change IDX_IMPLICIT_REP in the .h */
+	list_rep, list_rsm, list_sahf, list_sgdt,		/* 41 - 44 */
+	list_sidt, list_sldt, list_smsw, list_stmxcsr,		/* 45 - 48 */
+	list_str, list_sysenter, list_sysexit, list_wrmsr,	/* 49 - 52 */
+	list_xlat, list_monitor, list_mwait,			/* 53 - 55*/
+	NULL						/* end of list */
+ };
+
+#define LAST_IMPL_IDX 55
+
+static void handle_impl_reg( x86_op_t *op, uint32_t val ) {
+	x86_reg_t *reg = &op->data.reg;
+	op->type = op_register;
+	ia32_handle_register( reg, (unsigned int) val );
+	switch (reg->size) {
+		case 1:
+			op->datatype = op_byte; break;
+		case 2:
+			op->datatype = op_word; break;
+		case 4:
+			op->datatype = op_dword; break;
+		case 8:
+			op->datatype = op_qword; break;
+		case 10:
+			op->datatype = op_extreal; break;
+		case 16:
+			op->datatype = op_dqword; break;
+	}
+	return;
+}
+
+/* 'impl_idx' is the value from the opcode table: between 1 and LAST_IMPL_IDX */
+/* returns number of operands added */
+unsigned int ia32_insn_implicit_ops( x86_insn_t *insn, unsigned int impl_idx ) {
+	op_implicit_list_t *list;
+	x86_op_t *op;
+	unsigned int num = 0;
+
+	if (! impl_idx || impl_idx > LAST_IMPL_IDX ) {
+		return 0;
+	}
+
+	for ( list = op_implicit_list[impl_idx]; list->type; list++, num++ ) {
+		enum x86_op_access access = (enum x86_op_access) OP_PERM(list->type);
+		enum x86_op_flags  flags  = (enum x86_op_flags) (OP_FLAGS(list->type) >> 12);
+
+		op = NULL;
+		/* In some cases (MUL), EAX is an implicit operand hardcoded in
+                 * the instruction without being explicitly listed in assembly.
+                 * For this situation, find the hardcoded operand and add the
+                 * implied flag rather than adding a new implicit operand. */
+		x86_oplist_t * existing;
+		if (ia32_true_register_id(list->operand) == REG_DWORD_OFFSET) {
+			for ( existing = insn->operands; existing; existing = existing->next ) {
+				if (existing->op.type == op_register &&
+	                            existing->op.data.reg.id == list->operand) {
+					op = &existing->op;
+					break;
+				}
+			}
+		}
+		if (!op) {
+			op = x86_operand_new( insn );
+			/* all implicit operands are registers */
+			handle_impl_reg( op, list->operand );
+			/* decrement the 'explicit count' incremented by default in
+			 * x86_operand_new */
+			insn->explicit_count = insn->explicit_count -1;
+		}
+		if (!op) {
+			return num;	/* gah! return early */
+		}
+		op->access |= access;
+		op->flags |= flags;
+		op->flags |= op_implied;
+	}
+	
+	return num;
+}
diff --git a/src/third_party/libdisasm/ia32_implicit.h b/src/third_party/libdisasm/ia32_implicit.h
new file mode 100644
index 0000000..0002b28
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_implicit.h
@@ -0,0 +1,13 @@
+#ifndef IA32_IMPLICIT_H
+#define IA32_IMPLICIT_H
+
+#include "libdis.h"
+
+/* OK, this is a hack to deal with prefixes having implicit operands...
+ * thought I had removed all the old hackishness ;( */
+
+#define IDX_IMPLICIT_REP 41	/* change this if the table changes! */
+
+unsigned int ia32_insn_implicit_ops( x86_insn_t *insn, unsigned int impl_idx );
+
+#endif
diff --git a/src/third_party/libdisasm/ia32_insn.c b/src/third_party/libdisasm/ia32_insn.c
new file mode 100644
index 0000000..e4f4210
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_insn.c
@@ -0,0 +1,625 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "qword.h"
+
+#include "ia32_insn.h"
+#include "ia32_opcode_tables.h"
+
+#include "ia32_reg.h"
+#include "ia32_operand.h"
+#include "ia32_implicit.h"
+#include "ia32_settings.h"
+
+#include "libdis.h"
+
+extern ia32_table_desc_t ia32_tables[];
+extern ia32_settings_t ia32_settings;
+
+#define IS_SP( op )  (op->type == op_register && 	\
+		(op->data.reg.id == REG_ESP_INDEX || 	\
+		 op->data.reg.alias == REG_ESP_INDEX) )
+#define IS_IMM( op ) (op->type == op_immediate )
+
+#ifdef WIN32
+#  define INLINE 
+#else
+#  define INLINE inline
+#endif
+
+/* for calculating stack modification based on an operand */
+static INLINE int32_t long_from_operand( x86_op_t *op ) {
+
+	if (! IS_IMM(op) ) {
+		return 0L;
+	}
+
+	switch ( op->datatype ) {
+		case op_byte:
+			return (int32_t) op->data.sbyte;
+		case op_word:
+			return (int32_t) op->data.sword;
+		case op_qword:
+			return (int32_t) op->data.sqword;
+		case op_dword:
+			return op->data.sdword;
+		default:
+			/* these are not used in stack insn */
+			break;
+	}
+
+	return 0L;
+}
+		
+
+/* determine what this insn does to the stack */
+static void ia32_stack_mod(x86_insn_t *insn) {
+	x86_op_t *dest, *src = NULL;
+
+	if (! insn || ! insn->operands ) {
+		return;
+	}
+       
+	dest = &insn->operands->op;
+	if ( dest ) {
+		src = &insn->operands->next->op;
+	}
+
+	insn->stack_mod = 0; 
+	insn->stack_mod_val = 0;
+
+	switch ( insn->type ) {
+		case insn_call:
+		case insn_callcc:
+			insn->stack_mod = 1;
+			insn->stack_mod_val = insn->addr_size * -1;
+			break;
+		case insn_push:
+			insn->stack_mod = 1;
+			insn->stack_mod_val = insn->addr_size * -1;
+			break;
+		case insn_return:
+			insn->stack_mod = 1;
+			insn->stack_mod_val = insn->addr_size;
+		case insn_int: case insn_intcc:
+		case insn_iret:
+			break;
+		case insn_pop:
+			insn->stack_mod = 1;
+			if (! IS_SP( dest ) ) {
+				insn->stack_mod_val = insn->op_size;
+			} /* else we don't know the stack change in a pop esp */
+			break;
+		case insn_enter:
+			insn->stack_mod = 1;
+			insn->stack_mod_val = 0; /* TODO : FIX */
+			break;
+		case insn_leave:
+			insn->stack_mod = 1;
+			insn->stack_mod_val = 0; /* TODO : FIX */
+			break;
+		case insn_pushregs:
+			insn->stack_mod = 1;
+			insn->stack_mod_val = 0; /* TODO : FIX */
+			break;
+		case insn_popregs:
+			insn->stack_mod = 1;
+			insn->stack_mod_val = 0; /* TODO : FIX */
+			break;
+		case insn_pushflags:
+			insn->stack_mod = 1;
+			insn->stack_mod_val = 0; /* TODO : FIX */
+			break;
+		case insn_popflags:
+			insn->stack_mod = 1;
+			insn->stack_mod_val = 0; /* TODO : FIX */
+			break;
+		case insn_add:
+			if ( IS_SP( dest ) ) {
+				insn->stack_mod = 1;
+				insn->stack_mod_val = long_from_operand( src ); 
+			}
+			break;
+		case insn_sub:
+			if ( IS_SP( dest ) ) {
+				insn->stack_mod = 1;
+				insn->stack_mod_val = long_from_operand( src ); 
+				insn->stack_mod_val *= -1;
+			}
+			break;
+		case insn_inc:
+			if ( IS_SP( dest ) ) {
+				insn->stack_mod = 1;
+				insn->stack_mod_val = 1;
+			}
+			break;
+		case insn_dec:
+			if ( IS_SP( dest ) ) {
+				insn->stack_mod = 1;
+				insn->stack_mod_val = 1;
+			}
+			break;
+		case insn_mov: case insn_movcc:
+		case insn_xchg: case insn_xchgcc:
+		case insn_mul: case insn_div:
+		case insn_shl: case insn_shr:
+		case insn_rol: case insn_ror:
+		case insn_and: case insn_or:
+		case insn_not: case insn_neg:
+		case insn_xor:
+			if ( IS_SP( dest ) ) {
+				insn->stack_mod = 1;
+			}
+			break;
+		default:
+			break;
+	}
+	if (! strcmp("enter", insn->mnemonic) ) {
+		insn->stack_mod = 1;
+	} else if (! strcmp("leave", insn->mnemonic) ) {
+		insn->stack_mod = 1;
+	}
+
+	/* for mov, etc we return 0 -- unknown stack mod */
+
+	return;
+}
+
+/* get the cpu details for this insn from cpu flags int */
+static void ia32_handle_cpu( x86_insn_t *insn, unsigned int cpu ) {
+	insn->cpu = (enum x86_insn_cpu) CPU_MODEL(cpu);
+	insn->isa = (enum x86_insn_isa) (ISA_SUBSET(cpu)) >> 16;
+	return;
+}
+
+/* handle mnemonic type and group */
+static void ia32_handle_mnemtype(x86_insn_t *insn, unsigned int mnemtype) {
+	unsigned int type = mnemtype & ~INS_FLAG_MASK;
+        insn->group = (enum x86_insn_group) (INS_GROUP(type)) >> 12;
+        insn->type = (enum x86_insn_type) INS_TYPE(type);
+
+	return;
+}
+
+static void ia32_handle_notes(x86_insn_t *insn, unsigned int notes) {
+	insn->note = (enum x86_insn_note) notes;
+	return;
+}
+
+static void ia32_handle_eflags( x86_insn_t *insn, unsigned int eflags) {
+        unsigned int flags;
+
+        /* handle flags effected */
+        flags = INS_FLAGS_TEST(eflags);
+        /* handle weird OR cases */
+        /* these are either JLE (ZF | SF<>OF) or JBE (CF | ZF) */
+        if (flags & INS_TEST_OR) {
+                flags &= ~INS_TEST_OR;
+                if ( flags & INS_TEST_ZERO ) {
+                        flags &= ~INS_TEST_ZERO;
+                        if ( flags & INS_TEST_CARRY ) {
+                                flags &= ~INS_TEST_CARRY ;
+                                flags |= (int)insn_carry_or_zero_set;
+                        } else if ( flags & INS_TEST_SFNEOF ) {
+                                flags &= ~INS_TEST_SFNEOF;
+                                flags |= (int)insn_zero_set_or_sign_ne_oflow;
+                        }
+                }
+        }
+        insn->flags_tested = (enum x86_flag_status) flags;
+
+        insn->flags_set = (enum x86_flag_status) INS_FLAGS_SET(eflags) >> 16;
+
+	return;
+}
+
+static void ia32_handle_prefix( x86_insn_t *insn, unsigned int prefixes ) {
+
+        insn->prefix = (enum x86_insn_prefix) prefixes & PREFIX_MASK; // >> 20;
+        if (! (insn->prefix & PREFIX_PRINT_MASK) ) {
+		/* no printable prefixes */
+                insn->prefix = insn_no_prefix;
+        }
+
+        /* concat all prefix strings */
+        if ( (unsigned int)insn->prefix & PREFIX_LOCK ) {
+                strncat(insn->prefix_string, "lock ", 32 - 
+				strlen(insn->prefix_string));
+        }
+
+        if ( (unsigned int)insn->prefix & PREFIX_REPNZ ) {
+                strncat(insn->prefix_string, "repnz ", 32  - 
+				strlen(insn->prefix_string));
+        } else if ( (unsigned int)insn->prefix & PREFIX_REPZ ) {
+                strncat(insn->prefix_string, "repz ", 32 - 
+				strlen(insn->prefix_string));
+        }
+
+        return;
+}
+
+
+static void reg_32_to_16( x86_op_t *op, x86_insn_t *insn, void *arg ) {
+
+	/* if this is a 32-bit register and it is a general register ... */
+	if ( op->type == op_register && op->data.reg.size == 4 && 
+	     (op->data.reg.type & reg_gen) ) {
+		/* WORD registers are 8 indices off from DWORD registers */
+		ia32_handle_register( &(op->data.reg), 
+				op->data.reg.id + 8 );
+	}
+}
+
+static void handle_insn_metadata( x86_insn_t *insn, ia32_insn_t *raw_insn ) {
+	ia32_handle_mnemtype( insn, raw_insn->mnem_flag );
+	ia32_handle_notes( insn, raw_insn->notes );
+	ia32_handle_eflags( insn, raw_insn->flags_effected );
+	ia32_handle_cpu( insn, raw_insn->cpu );
+	ia32_stack_mod( insn );
+}
+
+static size_t ia32_decode_insn( unsigned char *buf, size_t buf_len, 
+			   ia32_insn_t *raw_insn, x86_insn_t *insn,
+			   unsigned int prefixes ) {
+	size_t size, op_size;
+	unsigned char modrm;
+
+	/* this should never happen, but just in case... */
+	if ( raw_insn->mnem_flag == INS_INVALID ) {
+		return 0;
+	}
+
+	if (ia32_settings.options & opt_16_bit) {
+		insn->op_size = ( prefixes & PREFIX_OP_SIZE ) ? 4 : 2;
+		insn->addr_size = ( prefixes & PREFIX_ADDR_SIZE ) ? 4 : 2;
+	} else {
+		insn->op_size = ( prefixes & PREFIX_OP_SIZE ) ? 2 : 4;
+		insn->addr_size = ( prefixes & PREFIX_ADDR_SIZE ) ? 2 : 4;
+	}
+
+
+	/*  ++++   1. Copy mnemonic and mnemonic-flags to CODE struct */
+	if ((ia32_settings.options & opt_att_mnemonics) && raw_insn->mnemonic_att[0]) {
+		strncpy( insn->mnemonic, raw_insn->mnemonic_att, 16 );
+	}
+	else {
+		strncpy( insn->mnemonic, raw_insn->mnemonic, 16 );
+	}
+	ia32_handle_prefix( insn, prefixes );
+
+	handle_insn_metadata( insn, raw_insn );
+
+	/* prefetch the next byte in case it is a modr/m byte -- saves
+	 * worrying about whether the 'mod/rm' operand or the 'reg' operand
+	 * occurs first */
+	modrm = GET_BYTE( buf, buf_len );
+
+	/*  ++++   2. Decode Explicit Operands */
+	/* Intel uses up to 3 explicit operands in its instructions;
+	 * the first is 'dest', the second is 'src', and the third
+	 * is an additional source value (usually an immediate value,
+	 * e.g. in the MUL instructions). These three explicit operands
+	 * are encoded in the opcode tables, even if they are not used 
+	 * by the instruction. Additional implicit operands are stored
+	 * in a supplemental table and are handled later. */
+
+	op_size = ia32_decode_operand( buf, buf_len, insn, raw_insn->dest, 
+					raw_insn->dest_flag, prefixes, modrm );
+	/* advance buffer, increase size if necessary */
+	buf += op_size;
+	buf_len -= op_size;
+	size = op_size;
+
+	op_size = ia32_decode_operand( buf, buf_len, insn, raw_insn->src, 
+					raw_insn->src_flag, prefixes, modrm );
+	buf += op_size;
+	buf_len -= op_size;
+	size += op_size;
+
+	op_size = ia32_decode_operand( buf, buf_len, insn, raw_insn->aux, 
+					raw_insn->aux_flag, prefixes, modrm );
+	size += op_size;
+
+
+	/*  ++++   3. Decode Implicit Operands */
+	/* apply implicit operands */
+	ia32_insn_implicit_ops( insn, raw_insn->implicit_ops );
+	/* we have one small inelegant hack here, to deal with 
+	 * the two prefixes that have implicit operands. If Intel
+	 * adds more, we'll change the algorithm to suit :) */
+	if ( (prefixes & PREFIX_REPZ) || (prefixes & PREFIX_REPNZ) ) {
+		ia32_insn_implicit_ops( insn, IDX_IMPLICIT_REP );
+	}
+
+
+	/* 16-bit hack: foreach operand, if 32-bit reg, make 16-bit reg */
+	if ( insn->op_size == 2 ) {
+		x86_operand_foreach( insn, reg_32_to_16, NULL, op_any );
+	}
+
+	return size;
+}
+
+
+/* convenience routine */
+#define USES_MOD_RM(flag) \
+	(flag == ADDRMETH_E || flag == ADDRMETH_M || flag == ADDRMETH_Q || \
+	 flag == ADDRMETH_W || flag == ADDRMETH_R)
+
+static int uses_modrm_flag( unsigned int flag ) {
+	unsigned int meth;
+	if ( flag == ARG_NONE ) {
+		return 0;
+	}
+	meth = (flag & ADDRMETH_MASK);
+	if ( USES_MOD_RM(meth) ) {
+		return 1;
+	}
+
+	return 0;
+}
+
+/* This routine performs the actual byte-by-byte opcode table lookup.
+ * Originally it was pretty simple: get a byte, adjust it to a proper
+ * index into the table, then check the table row at that index to
+ * determine what to do next. But is anything that simple with Intel?
+ * This is now a huge, convoluted mess, mostly of bitter comments. */
+/* buf: pointer to next byte to read from stream 
+ * buf_len: length of buf
+ * table: index of table to use for lookups
+ * raw_insn: output pointer that receives opcode definition
+ * prefixes: output integer that is encoded with prefixes in insn 
+ * returns : number of bytes consumed from stream during lookup */ 
+size_t ia32_table_lookup( unsigned char *buf, size_t buf_len,
+				 unsigned int table, ia32_insn_t **raw_insn,
+				 unsigned int *prefixes ) {
+	unsigned char *next, op = buf[0];	/* byte value -- 'opcode' */
+	size_t size = 1, sub_size = 0, next_len;
+	ia32_table_desc_t *table_desc;
+	unsigned int subtable, prefix = 0, recurse_table = 0;
+
+	table_desc = &ia32_tables[table];
+
+	op = GET_BYTE( buf, buf_len );
+
+	if ( table_desc->type == tbl_fpu && op > table_desc->maxlim) {
+		/* one of the fucking FPU tables out of the 00-BH range */
+		/* OK,. this is a bit of a hack -- the proper way would
+		 * have been to use subtables in the 00-BF FPU opcode tables,
+		 * but that is rather wasteful of space... */
+		table_desc = &ia32_tables[table +1];
+	}
+
+	/* PERFORM TABLE LOOKUP */
+
+	/* ModR/M trick: shift extension bits into lowest bits of byte */
+	/* Note: non-ModR/M tables have a shift value of 0 */
+	op >>= table_desc->shift;
+
+	/* ModR/M trick: mask out high bits to turn extension into an index */
+	/* Note: non-ModR/M tables have a mask value of 0xFF */
+	op &= table_desc->mask;
+
+
+	/* Sparse table trick: check that byte is <= max value */
+	/* Note: full (256-entry) tables have a maxlim of 155 */
+	if ( op > table_desc->maxlim ) {
+		/* this is a partial table, truncated at the tail,
+		   and op is out of range! */
+		return INVALID_INSN;
+	}
+
+	/* Sparse table trick: check that byte is >= min value */
+	/* Note: full (256-entry) tables have a minlim of 0 */
+	if ( table_desc->minlim > op ) {
+		/* this is a partial table, truncated at the head,
+		   and op is out of range! */
+		return INVALID_INSN;
+	}
+	/* adjust op to be an offset from table index 0 */
+	op -= table_desc->minlim;
+
+	/* Yay! 'op' is now fully adjusted to be an index into 'table' */
+	*raw_insn = &(table_desc->table[op]);
+	//printf("BYTE %X TABLE %d OP %X\n", buf[0], table, op ); 
+
+	if ( (*raw_insn)->mnem_flag & INS_FLAG_PREFIX ) {
+		prefix = (*raw_insn)->mnem_flag & PREFIX_MASK;
+	}
+
+
+	/* handle escape to a multibyte/coproc/extension/etc table */
+	/* NOTE: if insn is a prefix and has a subtable, then we
+	 *       only recurse if this is the first prefix byte --
+	 *       that is, if *prefixes is 0. 
+	 * NOTE also that suffix tables are handled later */
+	subtable = (*raw_insn)->table;
+
+	if ( subtable && ia32_tables[subtable].type != tbl_suffix &&
+	     (! prefix || ! *prefixes) ) {
+
+	     	if ( ia32_tables[subtable].type == tbl_ext_ext ||
+	     	     ia32_tables[subtable].type == tbl_fpu_ext ) {
+			/* opcode extension: reuse current byte in buffer */
+			next = buf;
+			next_len = buf_len;
+		} else {
+			/* "normal" opcode: advance to next byte in buffer */
+			if ( buf_len > 1 ) {
+				next = &buf[1];
+				next_len = buf_len - 1;
+			}
+			else {
+				// buffer is truncated 
+				return INVALID_INSN;
+			}
+		}
+		/* we encountered a multibyte opcode: recurse using the
+		 * table specified in the opcode definition */
+		sub_size = ia32_table_lookup( next, next_len, subtable, 
+				raw_insn, prefixes );
+
+		/* SSE/prefix hack: if the original opcode def was a 
+		 * prefix that specified a subtable, and the subtable
+		 * lookup returned a valid insn, then we have encountered
+		 * an SSE opcode definition; otherwise, we pretend we
+		 * never did the subtable lookup, and deal with the 
+		 * prefix normally later */
+		if ( prefix && ( sub_size == INVALID_INSN  ||
+		       INS_TYPE((*raw_insn)->mnem_flag) == INS_INVALID ) ) {
+			/* this is a prefix, not an SSE insn :
+			 * lookup next byte in main table,
+			 * subsize will be reset during the
+			 * main table lookup */
+			recurse_table = 1;
+		} else {
+			/* this is either a subtable (two-byte) insn
+			 * or an invalid insn: either way, set prefix
+			 * to NULL and end the opcode lookup */
+			prefix = 0;
+			// short-circuit lookup on invalid insn
+			if (sub_size == INVALID_INSN) return INVALID_INSN;
+		}
+	} else if ( prefix ) {
+		recurse_table = 1;
+	}
+
+	/* by default, we assume that we have the opcode definition,
+	 * and there is no need to recurse on the same table, but
+	 * if we do then a prefix was encountered... */
+	if ( recurse_table ) {
+		/* this must have been a prefix: use the same table for
+		 * lookup of the next byte */
+		sub_size = ia32_table_lookup( &buf[1], buf_len - 1, table, 
+				raw_insn, prefixes );
+
+		// short-circuit lookup on invalid insn
+		if (sub_size == INVALID_INSN) return INVALID_INSN;
+
+		/* a bit of a hack for branch hints */
+		if ( prefix & BRANCH_HINT_MASK ) {
+			if ( INS_GROUP((*raw_insn)->mnem_flag) == INS_EXEC ) {
+				/* segment override prefixes are invalid for
+			 	* all branch instructions, so delete them */
+				prefix &= ~PREFIX_REG_MASK;
+			} else {
+				prefix &= ~BRANCH_HINT_MASK;
+			}
+		}
+
+		/* apply prefix to instruction */
+
+		/* TODO: implement something enforcing prefix groups */
+		(*prefixes) |= prefix;
+	}
+
+	/* if this lookup was in a ModR/M table, then an opcode byte is 
+	 * NOT consumed: subtract accordingly. NOTE that if none of the
+	 * operands used the ModR/M, then we need to consume the byte
+	 * here, but ONLY in the 'top-level' opcode extension table */
+
+	if ( table_desc->type == tbl_ext_ext ) {
+		/* extensions-to-extensions never consume a byte */
+		--size;
+	} else if ( (table_desc->type == tbl_extension || 
+	       	     table_desc->type == tbl_fpu ||
+		     table_desc->type == tbl_fpu_ext ) && 
+		/* extensions that have an operand encoded in ModR/M
+		 * never consume a byte */
+	      	    (uses_modrm_flag((*raw_insn)->dest_flag) || 
+	             uses_modrm_flag((*raw_insn)->src_flag) )  	) {
+		--size;
+	}
+
+	size += sub_size;
+
+	return size;
+}
+
+static size_t handle_insn_suffix( unsigned char *buf, size_t buf_len,
+			   ia32_insn_t *raw_insn, x86_insn_t * insn ) {
+	ia32_table_desc_t *table_desc;
+	ia32_insn_t *sfx_insn;
+	size_t size;
+	unsigned int prefixes = 0;
+
+	table_desc = &ia32_tables[raw_insn->table]; 
+	size = ia32_table_lookup( buf, buf_len, raw_insn->table, &sfx_insn,
+				 &prefixes );
+	if (size == INVALID_INSN || sfx_insn->mnem_flag == INS_INVALID ) {
+		return 0;
+	}
+
+	strncpy( insn->mnemonic, sfx_insn->mnemonic, 16 );
+	handle_insn_metadata( insn, sfx_insn );
+
+	return 1;
+}
+
+/* invalid instructions are handled by returning 0 [error] from the
+ * function, setting the size of the insn to 1 byte, and copying
+ * the byte at the start of the invalid insn into the x86_insn_t.
+ * if the caller is saving the x86_insn_t for invalid instructions,
+ * instead of discarding them, this will maintain a consistent
+ * address space in the x86_insn_ts */
+
+/* this function is called by the controlling disassembler, so its name and
+ * calling convention cannot be changed */
+/*    buf   points to the loc of the current opcode (start of the 
+ *          instruction) in the instruction stream. The instruction 
+ *          stream is assumed to be a buffer of bytes read directly 
+ *          from the file for the purpose of disassembly; a mem-mapped 
+ *          file is ideal for *        this.
+ *    insn points to a code structure to be filled by instr_decode
+ *    returns the size of the decoded instruction in bytes */
+size_t ia32_disasm_addr( unsigned char * buf, size_t buf_len, 
+		x86_insn_t *insn ) {
+	ia32_insn_t *raw_insn = NULL;
+	unsigned int prefixes = 0;
+	size_t size, sfx_size;
+	
+	if ( (ia32_settings.options & opt_ignore_nulls) && buf_len > 3 &&
+	    !buf[0] && !buf[1] && !buf[2] && !buf[3]) {
+		/* IF IGNORE_NULLS is set AND
+		 * first 4 bytes in the intruction stream are NULL
+		 * THEN return 0 (END_OF_DISASSEMBLY) */
+		/* TODO: set errno */
+		MAKE_INVALID( insn, buf );
+		return 0;	/* 4 00 bytes in a row? This isn't code! */
+	}
+
+	/* Perform recursive table lookup starting with main table (0) */
+	size = ia32_table_lookup(buf, buf_len, idx_Main, &raw_insn, &prefixes);
+	if ( size == INVALID_INSN || size > buf_len || raw_insn->mnem_flag == INS_INVALID ) {
+		MAKE_INVALID( insn, buf );
+		/* TODO: set errno */
+		return 0;
+	}
+
+	/* We now have the opcode itself figured out: we can decode
+	 * the rest of the instruction. */
+	size += ia32_decode_insn( &buf[size], buf_len - size, raw_insn, insn, 
+				  prefixes );
+	if ( raw_insn->mnem_flag & INS_FLAG_SUFFIX ) {
+		/* AMD 3DNow! suffix -- get proper operand type here */
+		sfx_size = handle_insn_suffix( &buf[size], buf_len - size,
+				raw_insn, insn );
+		if (! sfx_size ) {
+			/* TODO: set errno */
+			MAKE_INVALID( insn, buf );
+			return 0;
+		}
+
+		size += sfx_size;
+	}
+
+	if (! size ) {
+		/* invalid insn */
+		MAKE_INVALID( insn, buf );
+		return 0;
+	}
+
+
+	insn->size = size;
+	return size;		/* return size of instruction in bytes */
+}
diff --git a/src/third_party/libdisasm/ia32_insn.h b/src/third_party/libdisasm/ia32_insn.h
new file mode 100644
index 0000000..d3f36c3
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_insn.h
@@ -0,0 +1,506 @@
+#ifndef IA32_INSN_H
+#define IA32_INSN_H
+/* this file contains the structure of opcode definitions and the
+ * constants they use */
+
+#include <sys/types.h>
+#include "libdis.h"
+
+
+#define GET_BYTE( buf, buf_len ) buf_len ? *buf : 0
+
+#define OP_SIZE_16	1
+#define OP_SIZE_32	2
+#define ADDR_SIZE_16	4
+#define ADDR_SIZE_32	8
+
+#define MAX_INSTRUCTION_SIZE 20
+
+/* invalid instructions are handled by returning 0 [error] from the
+ * function, setting the size of the insn to 1 byte, and copying
+ * the byte at the start of the invalid insn into the x86_insn_t.
+ * if the caller is saving the x86_insn_t for invalid instructions,
+ * instead of discarding them, this will maintain a consistent
+ * address space in the x86_insn_ts */
+
+#define INVALID_INSN ((size_t) -1)	/* return value for invalid insn */
+#define MAKE_INVALID( i, buf )                          \
+                strcpy( i->mnemonic, "invalid" );       \
+                x86_oplist_free( i );                   \
+                i->size = 1;                            \
+                i->group = insn_none;                   \
+                i->type = insn_invalid;                 \
+                memcpy( i->bytes, buf, 1 );
+
+
+size_t ia32_disasm_addr( unsigned char * buf, size_t buf_len, 
+		x86_insn_t *insn);
+
+
+/* --------------------------------------------------------- Table Lookup */
+/* IA32 Instruction defintion for ia32_opcodes.c */
+typedef struct {
+   unsigned int table;          /* escape to this sub-table */
+   unsigned int mnem_flag;      /* Flags referring to mnemonic */
+   unsigned int notes;          /* Notes for this instruction */
+   unsigned int dest_flag, src_flag, aux_flag; /* and for specific operands */
+   unsigned int cpu;            /* minimumCPU [AND with clocks?? */
+   char mnemonic[16];           /* buffers for building instruction */
+   char mnemonic_att[16];       /* at&t style mnemonic name */
+   int32_t dest;
+   int32_t src;
+   int32_t aux;
+   unsigned int flags_effected;
+   unsigned int implicit_ops;	/* implicit operands */
+} ia32_insn_t;
+
+
+
+/* --------------------------------------------------------- Prefixes */
+/* Prefix Flags */
+/* Prefixes, same order as in the manual */
+/* had to reverse the values of the first three as they were entered into
+ * libdis.h incorrectly. */
+#define PREFIX_LOCK       0x0004
+#define PREFIX_REPNZ      0x0002
+#define PREFIX_REPZ       0x0001
+#define PREFIX_OP_SIZE    0x0010
+#define PREFIX_ADDR_SIZE  0x0020
+#define PREFIX_CS         0x0100
+#define PREFIX_SS         0x0200
+#define PREFIX_DS         0x0300
+#define PREFIX_ES         0x0400
+#define PREFIX_FS         0x0500
+#define PREFIX_GS         0x0600
+#define PREFIX_TAKEN      0x1000	/* branch taken */
+#define PREFIX_NOTTAKEN   0x2000	/* branch not taken */
+#define PREFIX_REG_MASK   0x0F00
+#define BRANCH_HINT_MASK  0x3000 
+#define PREFIX_PRINT_MASK 0x000F	/* printable prefixes */
+#define PREFIX_MASK       0xFFFF
+
+/* ---------------------------------------------------------- CPU Type */
+
+#define cpu_8086         0x0001
+#define cpu_80286        0x0002
+#define cpu_80386        0x0003
+#define cpu_80387        0x0004 /* originally these were a co-proc */
+#define cpu_80486        0x0005
+#define cpu_PENTIUM      0x0006
+#define cpu_PENTPRO      0x0007
+#define cpu_PENTIUM2     0x0008
+#define cpu_PENTIUM3     0x0009
+#define cpu_PENTIUM4     0x000A
+#define cpu_K6		 0x0010
+#define cpu_K7		 0x0020
+#define cpu_ATHLON	 0x0030
+#define CPU_MODEL_MASK	 0xFFFF
+#define CPU_MODEL(cpu)	 (cpu & CPU_MODEL_MASK)
+/* intel instruction subsets */
+#define isa_GP		 0x10000	/* General Purpose Instructions */
+#define isa_FPU		 0x20000	/* FPU instructions */
+#define isa_FPUMGT	 0x30000	/* FPU/SIMD Management */
+#define isa_MMX		 0x40000	/* MMX */
+#define isa_SSE1	 0x50000	/* SSE */
+#define isa_SSE2	 0x60000	/* SSE 2 */
+#define isa_SSE3	 0x70000	/* SSE 3 */
+#define isa_3DNOW	 0x80000	/* AMD 3d Now */
+#define isa_SYS		 0x90000	/* System Instructions */
+#define ISA_SUBSET_MASK	 0xFFFF0000
+#define ISA_SUBSET(isa)	(isa & ISA_SUBSET_MASK)
+
+
+/* ------------------------------------------------------ Operand Decoding */
+#define ARG_NONE         0
+
+/* Using a mask allows us to store info such as OP_SIGNED in the
+ * operand flags field */
+#define   OPFLAGS_MASK 	0x0000FFFF
+
+/* Operand Addressing Methods, per intel manual */
+#define   ADDRMETH_MASK	0x00FF0000
+
+/* note: for instructions with implied operands, use no ADDRMETH */
+#define   ADDRMETH_A  	0x00010000   
+#define   ADDRMETH_C   	0x00020000
+#define   ADDRMETH_D   	0x00030000
+#define   ADDRMETH_E   	0x00040000
+#define   ADDRMETH_F   	0x00050000
+#define   ADDRMETH_G   	0x00060000
+#define   ADDRMETH_I   	0x00070000
+#define   ADDRMETH_J   	0x00080000
+#define   ADDRMETH_M   	0x00090000
+#define   ADDRMETH_O   	0x000A0000
+#define   ADDRMETH_P   	0x000B0000
+#define   ADDRMETH_Q   	0x000C0000
+#define   ADDRMETH_R   	0x000D0000
+#define   ADDRMETH_S   	0x000E0000
+#define   ADDRMETH_T   	0x000F0000
+#define   ADDRMETH_V   	0x00100000
+#define   ADDRMETH_W   	0x00110000
+#define   ADDRMETH_X   	0x00120000
+#define   ADDRMETH_Y   	0x00130000
+#define	  ADDRMETH_RR  	0x00140000	/* gen reg hard-coded in opcode */
+#define	  ADDRMETH_RS  	0x00150000	/* seg reg hard-coded in opcode */
+#define	  ADDRMETH_RT  	0x00160000	/* test reg hard-coded in opcode */
+#define	  ADDRMETH_RF  	0x00170000	/* fpu reg hard-coded in opcode */
+#define	  ADDRMETH_II  	0x00180000	/* immediate hard-coded in opcode */
+#define   ADDRMETH_PP   0x00190000	/* mm reg ONLY in modr/m field */
+#define   ADDRMETH_VV   0x001A0000	/* xmm reg ONLY in mod/rm field */
+
+/* Operand Types, per intel manual */
+#define OPTYPE_MASK	0xFF000000
+
+#define OPTYPE_a	0x01000000 /* BOUND: h:h or w:w */
+#define OPTYPE_b   	0x02000000 /* byte */
+#define OPTYPE_c   	0x03000000 /* byte or word */
+#define OPTYPE_d   	0x04000000 /* word */
+#define OPTYPE_dq   	0x05000000 /* qword */
+#define OPTYPE_p   	0x06000000 /* 16:16 or 16:32 pointer */
+#define OPTYPE_pi   	0x07000000 /* dword MMX reg */
+#define OPTYPE_ps   	0x08000000 /* 128-bit single fp */
+#define OPTYPE_q   	0x09000000 /* dword */
+#define OPTYPE_s   	0x0A000000 /* 6-byte descriptor */
+#define OPTYPE_ss   	0x0B000000 /* scalar of 128-bit single fp */
+#define OPTYPE_si   	0x0C000000 /* word general register */
+#define OPTYPE_v   	0x0D000000 /* hword or word */
+#define OPTYPE_w   	0x0E000000 /* hword */
+#define OPTYPE_m   	0x0F000000	/* to handle LEA */
+#define OPTYPE_none 0xFF000000 /* no valid operand size, INVLPG */
+
+/* custom ones for FPU instructions */
+#define OPTYPE_fs	0x10000000	/* pointer to single-real*/
+#define OPTYPE_fd	0x20000000	/* pointer to double real */
+#define OPTYPE_fe	0x30000000	/* pointer to extended real */
+#define OPTYPE_fb	0x40000000	/* pointer to packed BCD */
+#define OPTYPE_fv	0x50000000	/* pointer to FPU env: 14|28-bytes */
+#define OPTYPE_ft	0x60000000	/* pointer to FPU state: 94|108-bytes */
+#define OPTYPE_fx       0x70000000      /* pointer to FPU regs: 512 bites */
+#define OPTYPE_fp       0x80000000      /* general fpu register: dbl ext */
+
+/* SSE2 operand types */
+#define OPTYPE_sd	0x90000000	/* scalar of 128-bit double fp */
+#define OPTYPE_pd	0xA0000000	/* 128-bit double fp */
+
+
+
+/* ---------------------------------------------- Opcode Table Descriptions */
+/* the table type describes how to handle byte/size increments before 
+ * and after lookup. Some tables re-use the current byte, others
+ * consume a byte only if the ModR/M encodes no operands, etc */
+enum ia32_tbl_type_id {
+	tbl_opcode = 0,	/* standard opcode table: no surprises */
+	tbl_prefix,	/* Prefix Override, e.g. 66/F2/F3 */
+	tbl_suffix,	/* 3D Now style */
+	tbl_extension,	/* ModR/M extension: 00-FF -> 00-07 */
+	tbl_ext_ext,	/* extension of modr/m using R/M field */
+	tbl_fpu,	/* fpu table: 00-BF -> 00-0F */
+	tbl_fpu_ext	/* fpu extension : C0-FF -> 00-1F */
+ };
+
+/* How it works:
+ * Bytes are 'consumed' if the next table lookup requires that the byte
+ * pointer be advanced in the instruction stream. 'Does not consume' means
+ * that, when the lookup function recurses, the same byte it re-used in the
+ * new table. It also means that size is not decremented, for example when
+ * a ModR/M byte is used. Note that tbl_extension (ModR/M) instructions that
+ * do not increase the size of an insn with their operands have a forced
+ 3 size increase in the lookup algo. Weird, yes, confusing, yes, welcome
+ * to the Intel ISA. Another note: tbl_prefix is used as an override, so an
+ * empty insn in a prefix table causes the instruction in the original table
+ * to be used, rather than an invalid insn being generated.
+ * 	tbl_opcode uses current byte and consumes it
+ * 	tbl_prefix uses current byte but does not consume it
+ * 	tbl_suffix uses and consumes last byte in insn
+ * 	tbl_extension uses current byte but does not consume it
+ * 	tbl_ext_ext uses current byte but does not consume it
+ * 	tbl_fpu uses current byte and consumes it
+ * 	tbl_fpu_ext uses current byte but does not consume it 
+ */
+
+/* Convenience struct for opcode tables : these will be stored in a 
+ * 'table of tables' so we can use a table index instead of a pointer */
+typedef struct {		/* Assembly instruction tables */
+   ia32_insn_t *table;		/* Pointer to table of instruction encodings */
+   enum ia32_tbl_type_id type;
+   unsigned char shift;		/* amount to shift modrm byte */
+   unsigned char mask;		/* bit mask for look up */
+   unsigned char minlim,maxlim;	/* limits on min/max entries. */
+} ia32_table_desc_t;
+
+
+/* ---------------------------------------------- 'Cooked' Operand Type Info */
+/*                   Permissions: */
+#define OP_R         0x001      /* operand is READ */
+#define OP_W         0x002      /* operand is WRITTEN */
+#define OP_RW        0x003	/* (OP_R|OP_W): convenience macro */
+#define OP_X         0x004      /* operand is EXECUTED */
+
+#define OP_PERM_MASK 0x0000007  /* perms are NOT mutually exclusive */
+#define OP_PERM( type )       (type & OP_PERM_MASK)
+
+/* Flags */
+#define OP_SIGNED    0x010   	/* operand is signed */
+
+#define OP_FLAG_MASK  0x0F0  /* mods are NOT mutually exclusive */
+#define OP_FLAGS( type )        (type & OP_FLAG_MASK)
+
+#define OP_REG_MASK    0x0000FFFF /* lower WORD is register ID */
+#define OP_REGTBL_MASK 0xFFFF0000 /* higher word is register type [gen/dbg] */
+#define OP_REGID( type )      (type & OP_REG_MASK)
+#define OP_REGTYPE( type )    (type & OP_REGTBL_MASK)
+
+/* ------------------------------------------'Cooked' Instruction Type Info */
+/* high-bit opcode types/insn meta-types */
+#define INS_FLAG_PREFIX		0x10000000	/* insn is a prefix */
+#define INS_FLAG_SUFFIX		0x20000000	/* followed by a suffix byte */
+#define INS_FLAG_MASK    	0xFF000000
+
+/* insn notes */
+#define INS_NOTE_RING0		0x00000001	/* insn is privileged */
+#define INS_NOTE_SMM		0x00000002	/* Sys Mgt Mode only */
+#define INS_NOTE_SERIAL		0x00000004	/* serializes */
+#define INS_NOTE_NONSWAP    0x00000008  /* insn is not swapped in att format */ // could be separate field?
+#define INS_NOTE_NOSUFFIX   0x00000010  /* insn has no size suffix in att format */ // could be separate field?
+//#define INS_NOTE_NMI		
+
+#define INS_INVALID 	0
+
+/* instruction groups */
+#define INS_EXEC	0x1000
+#define INS_ARITH	0x2000
+#define INS_LOGIC	0x3000
+#define INS_STACK	0x4000
+#define INS_COND	0x5000
+#define INS_LOAD	0x6000
+#define INS_ARRAY	0x7000
+#define INS_BIT		0x8000
+#define INS_FLAG	0x9000
+#define INS_FPU		0xA000
+#define INS_TRAPS	0xD000
+#define INS_SYSTEM	0xE000
+#define INS_OTHER	0xF000
+
+#define INS_GROUP_MASK	0xF000
+#define INS_GROUP( type )     ( type & INS_GROUP_MASK )
+
+/* INS_EXEC group */
+#define INS_BRANCH	(INS_EXEC | 0x01)	/* Unconditional branch */
+#define INS_BRANCHCC	(INS_EXEC | 0x02)	/* Conditional branch */
+#define INS_CALL	(INS_EXEC | 0x03)	/* Jump to subroutine */
+#define INS_CALLCC	(INS_EXEC | 0x04)	/* Jump to subroutine */
+#define INS_RET		(INS_EXEC | 0x05)	/* Return from subroutine */
+
+/* INS_ARITH group */
+#define INS_ADD 	(INS_ARITH | 0x01)
+#define INS_SUB		(INS_ARITH | 0x02)
+#define INS_MUL		(INS_ARITH | 0x03)
+#define INS_DIV		(INS_ARITH | 0x04)
+#define INS_INC		(INS_ARITH | 0x05)	/* increment */
+#define INS_DEC		(INS_ARITH | 0x06)	/* decrement */
+#define INS_SHL		(INS_ARITH | 0x07)	/* shift right */
+#define INS_SHR		(INS_ARITH | 0x08)	/* shift left */
+#define INS_ROL		(INS_ARITH | 0x09)	/* rotate left */
+#define INS_ROR		(INS_ARITH | 0x0A)	/* rotate right */
+#define INS_MIN		(INS_ARITH | 0x0B)	/* min func */
+#define INS_MAX		(INS_ARITH | 0x0C)	/* max func */
+#define INS_AVG		(INS_ARITH | 0x0D)	/* avg func */
+#define INS_FLR		(INS_ARITH | 0x0E)	/* floor func */
+#define INS_CEIL	(INS_ARITH | 0x0F)	/* ceiling func */
+
+/* INS_LOGIC group */
+#define INS_AND		(INS_LOGIC | 0x01)
+#define INS_OR		(INS_LOGIC | 0x02)
+#define INS_XOR		(INS_LOGIC | 0x03)
+#define INS_NOT		(INS_LOGIC | 0x04)
+#define INS_NEG		(INS_LOGIC | 0x05)
+#define INS_NAND	(INS_LOGIC | 0x06)
+
+/* INS_STACK group */
+#define INS_PUSH	(INS_STACK | 0x01)
+#define INS_POP		(INS_STACK | 0x02)
+#define INS_PUSHREGS	(INS_STACK | 0x03)	/* push register context */
+#define INS_POPREGS	(INS_STACK | 0x04)	/* pop register context */
+#define INS_PUSHFLAGS	(INS_STACK | 0x05)	/* push all flags */
+#define INS_POPFLAGS	(INS_STACK | 0x06)	/* pop all flags */
+#define INS_ENTER	(INS_STACK | 0x07)	/* enter stack frame */
+#define INS_LEAVE	(INS_STACK | 0x08)	/* leave stack frame */
+
+/* INS_COND group */
+#define INS_TEST	(INS_COND | 0x01)
+#define INS_CMP		(INS_COND | 0x02)
+
+/* INS_LOAD group */
+#define INS_MOV		(INS_LOAD | 0x01)
+#define INS_MOVCC	(INS_LOAD | 0x02)
+#define INS_XCHG	(INS_LOAD | 0x03)
+#define INS_XCHGCC	(INS_LOAD | 0x04)
+#define INS_CONV	(INS_LOAD | 0x05)	/* move and convert type */
+
+/* INS_ARRAY group */
+#define INS_STRCMP	(INS_ARRAY | 0x01)
+#define INS_STRLOAD	(INS_ARRAY | 0x02)
+#define INS_STRMOV	(INS_ARRAY | 0x03)
+#define INS_STRSTOR	(INS_ARRAY | 0x04)
+#define INS_XLAT	(INS_ARRAY | 0x05)
+
+/* INS_BIT group */
+#define INS_BITTEST	(INS_BIT | 0x01)
+#define INS_BITSET	(INS_BIT | 0x02)
+#define INS_BITCLR	(INS_BIT | 0x03)
+
+/* INS_FLAG group */
+#define INS_CLEARCF	(INS_FLAG | 0x01)	/* clear Carry flag */
+#define INS_CLEARZF	(INS_FLAG | 0x02)	/* clear Zero flag */
+#define INS_CLEAROF	(INS_FLAG | 0x03)	/* clear Overflow flag */
+#define INS_CLEARDF	(INS_FLAG | 0x04)	/* clear Direction flag */
+#define INS_CLEARSF	(INS_FLAG | 0x05)	/* clear Sign flag */
+#define INS_CLEARPF	(INS_FLAG | 0x06)	/* clear Parity flag */
+#define INS_SETCF	(INS_FLAG | 0x07)
+#define INS_SETZF	(INS_FLAG | 0x08)
+#define INS_SETOF	(INS_FLAG | 0x09)
+#define INS_SETDF	(INS_FLAG | 0x0A)
+#define INS_SETSF	(INS_FLAG | 0x0B)
+#define INS_SETPF	(INS_FLAG | 0x0C)
+#define INS_TOGCF	(INS_FLAG | 0x10)	/* toggle */
+#define INS_TOGZF	(INS_FLAG | 0x20)
+#define INS_TOGOF	(INS_FLAG | 0x30)
+#define INS_TOGDF	(INS_FLAG | 0x40)
+#define INS_TOGSF	(INS_FLAG | 0x50)
+#define INS_TOGPF	(INS_FLAG | 0x60)
+
+/* INS_FPU */
+#define INS_FMOV       (INS_FPU | 0x1)
+#define INS_FMOVCC     (INS_FPU | 0x2)
+#define INS_FNEG       (INS_FPU | 0x3)
+#define INS_FABS       (INS_FPU | 0x4)
+#define INS_FADD       (INS_FPU | 0x5)
+#define INS_FSUB       (INS_FPU | 0x6)
+#define INS_FMUL       (INS_FPU | 0x7)
+#define INS_FDIV       (INS_FPU | 0x8)
+#define INS_FSQRT      (INS_FPU | 0x9)
+#define INS_FCMP       (INS_FPU | 0xA)
+#define INS_FCOS       (INS_FPU | 0xC)               /* cosine */
+#define INS_FLDPI      (INS_FPU | 0xD)               /* load pi */
+#define INS_FLDZ       (INS_FPU | 0xE)               /* load 0 */
+#define INS_FTAN       (INS_FPU | 0xF)               /* tanget */
+#define INS_FSINE      (INS_FPU | 0x10)              /* sine */
+#define INS_FSYS       (INS_FPU | 0x20)              /* misc */
+
+/* INS_TRAP */
+#define INS_TRAP	(INS_TRAPS | 0x01)	/* generate trap */
+#define INS_TRAPCC	(INS_TRAPS | 0x02)	/* conditional trap gen */
+#define INS_TRET	(INS_TRAPS | 0x03)	/* return from trap */
+#define INS_BOUNDS	(INS_TRAPS | 0x04)	/* gen bounds trap */
+#define INS_DEBUG	(INS_TRAPS | 0x05)	/* gen breakpoint trap */
+#define INS_TRACE	(INS_TRAPS | 0x06)	/* gen single step trap */
+#define INS_INVALIDOP	(INS_TRAPS | 0x07)	/* gen invalid insn */
+#define INS_OFLOW	(INS_TRAPS | 0x08)	/* gen overflow trap */
+#define INS_ICEBP	(INS_TRAPS | 0x09)	/* ICE breakpoint */
+
+/* INS_SYSTEM */
+#define INS_HALT	(INS_SYSTEM | 0x01)	/* halt machine */
+#define INS_IN		(INS_SYSTEM | 0x02)	/* input form port */
+#define INS_OUT		(INS_SYSTEM | 0x03)	/* output to port */
+#define INS_CPUID	(INS_SYSTEM | 0x04)	/* identify cpu */
+
+/* INS_OTHER */
+#define INS_NOP		(INS_OTHER | 0x01)
+#define INS_BCDCONV	(INS_OTHER | 0x02)	/* convert to/from BCD */
+#define INS_SZCONV	(INS_OTHER | 0x03)	/* convert size of operand */
+#define INS_SALC	(INS_OTHER | 0x04)	/* set %al on carry */
+#define INS_UNKNOWN	(INS_OTHER | 0x05)
+ 
+
+#define INS_TYPE_MASK	0xFFFF
+#define INS_TYPE( type )      ( type & INS_TYPE_MASK )
+
+   /* flags effected by instruction */
+#define INS_TEST_CARRY        0x01    /* carry */
+#define INS_TEST_ZERO         0x02    /* zero/equal */
+#define INS_TEST_OFLOW        0x04    /* overflow */
+#define INS_TEST_DIR          0x08    /* direction */
+#define INS_TEST_SIGN         0x10    /* negative */
+#define INS_TEST_PARITY       0x20    /* parity */
+#define INS_TEST_OR           0x40    /* used in jle */
+#define INS_TEST_NCARRY       0x100	/* ! carry */
+#define INS_TEST_NZERO        0x200	/* ! zero */
+#define INS_TEST_NOFLOW       0x400	/* ! oflow */
+#define INS_TEST_NDIR         0x800	/* ! dir */
+#define INS_TEST_NSIGN        0x100	/* ! sign */
+#define INS_TEST_NPARITY      0x2000	/* ! parity */
+/* SF == OF */
+#define INS_TEST_SFEQOF       0x4000
+/* SF != OF */
+#define INS_TEST_SFNEOF       0x8000
+
+#define INS_TEST_ALL		INS_TEST_CARRY | INS_TEST_ZERO | \
+				INS_TEST_OFLOW | INS_TEST_SIGN | \
+				INS_TEST_PARITY
+
+#define INS_SET_CARRY        0x010000    /* carry */
+#define INS_SET_ZERO         0x020000    /* zero/equal */
+#define INS_SET_OFLOW        0x040000    /* overflow */
+#define INS_SET_DIR          0x080000    /* direction */
+#define INS_SET_SIGN         0x100000    /* negative */
+#define INS_SET_PARITY       0x200000    /* parity */
+#define INS_SET_NCARRY       0x1000000 
+#define INS_SET_NZERO        0x2000000
+#define INS_SET_NOFLOW       0x4000000
+#define INS_SET_NDIR         0x8000000
+#define INS_SET_NSIGN        0x10000000
+#define INS_SET_NPARITY      0x20000000
+#define INS_SET_SFEQOF       0x40000000
+#define INS_SET_SFNEOF       0x80000000
+
+#define INS_SET_ALL		INS_SET_CARRY | INS_SET_ZERO | \
+				INS_SET_OFLOW | INS_SET_SIGN | \
+				INS_SET_PARITY
+
+#define INS_TEST_MASK          0x0000FFFF
+#define INS_FLAGS_TEST(x)      (x & INS_TEST_MASK)
+#define INS_SET_MASK           0xFFFF0000
+#define INS_FLAGS_SET(x)       (x & INS_SET_MASK)
+
+#if 0
+/* TODO: actually start using these */
+#define X86_PAIR_NP	1		/* not pairable; execs in U */
+#define X86_PAIR_PU	2		/* pairable in U pipe */
+#define X86_PAIR_PV	3		/* pairable in V pipe */
+#define X86_PAIR_UV	4		/* pairable in UV pipe */
+#define X86_PAIR_FX	5		/* pairable with FXCH */
+
+#define X86_EXEC_PORT_0	1
+#define X86_EXEC_PORT_1	2
+#define X86_EXEC_PORT_2	4
+#define X86_EXEC_PORT_3	8
+#define X86_EXEC_PORT_4	16
+
+#define X86_EXEC_UNITS
+
+typedef struct {	/* representation of an insn during decoding */
+	uint32_t flags;		/* runtime settings */
+	/* instruction prefixes and other foolishness */
+	uint32_t prefix;		/* encoding of prefix */
+	char prefix_str[16];		/* mnemonics for prefix */
+	uint32_t branch_hint;	/* gah! */
+	unsigned int cpu_ver;		/* TODO: cpu version */
+	unsigned int clocks;		/* TODO: clock cycles: min/max */
+	unsigned char last_prefix;
+	/* runtime intruction decoding helpers */
+	unsigned char mode;		/* 16, 32, 64 */
+	unsigned char gen_regs;		/* offset of default general reg set */
+	unsigned char sz_operand;	/* operand size for insn */
+	unsigned char sz_address;	/* address size for insn */
+	unsigned char uops;		/* uops per insn */
+	unsigned char pairing;		/* np,pu,pv.lv */
+	unsigned char exec_unit;
+	unsigned char exec_port;
+	unsigned char latency;
+} ia32_info_t;
+#define MODE_32 0	/* default */
+#define MODE_16 1
+#define MODE_64 2
+#endif
+
+#endif
diff --git a/src/third_party/libdisasm/ia32_invariant.c b/src/third_party/libdisasm/ia32_invariant.c
new file mode 100644
index 0000000..68ec153
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_invariant.c
@@ -0,0 +1,313 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include "ia32_invariant.h"
+#include "ia32_insn.h"
+#include "ia32_settings.h"
+
+extern ia32_table_desc_t *ia32_tables;
+extern ia32_settings_t ia32_settings;
+
+extern size_t ia32_table_lookup( unsigned char *buf, size_t buf_len,
+		unsigned int table, ia32_insn_t **raw_insn,
+		 unsigned int *prefixes );
+
+
+/* -------------------------------- ModR/M, SIB */
+/* Convenience flags */
+#define MODRM_EA  1                     /* ModR/M is an effective addr */
+#define MODRM_reg 2                     /* ModR/M is a register */
+
+/* ModR/M flags */
+#define MODRM_RM_SIB            0x04    /* R/M == 100 */
+#define MODRM_RM_NOREG          0x05    /* R/B == 101 */
+/* if (MODRM.MOD_NODISP && MODRM.RM_NOREG) then just disp32 */
+#define MODRM_MOD_NODISP        0x00    /* mod == 00 */
+#define MODRM_MOD_DISP8         0x01    /* mod == 01 */
+#define MODRM_MOD_DISP32        0x02    /* mod == 10 */
+#define MODRM_MOD_NOEA          0x03    /* mod == 11 */
+/* 16-bit modrm flags */
+#define MOD16_MOD_NODISP      0
+#define MOD16_MOD_DISP8       1
+#define MOD16_MOD_DISP16      2
+#define MOD16_MOD_REG         3
+
+#define MOD16_RM_BXSI         0
+#define MOD16_RM_BXDI         1
+#define MOD16_RM_BPSI         2
+#define MOD16_RM_BPDI         3
+#define MOD16_RM_SI           4
+#define MOD16_RM_DI           5
+#define MOD16_RM_BP           6
+#define MOD16_RM_BX           7
+
+/* SIB flags */
+#define SIB_INDEX_NONE       0x04
+#define SIB_BASE_EBP       0x05
+#define SIB_SCALE_NOBASE    0x00
+
+/* Convenience struct for modR/M bitfield */
+struct modRM_byte {  
+   unsigned int mod : 2;
+   unsigned int reg : 3;
+   unsigned int rm  : 3; 
+};
+
+/* Convenience struct for SIB bitfield */
+struct SIB_byte {
+   unsigned int scale : 2;
+   unsigned int index : 3;
+   unsigned int base  : 3;
+};
+
+#ifdef WIN32
+static void byte_decode(unsigned char b, struct modRM_byte *modrm) {
+#else
+static inline void byte_decode(unsigned char b, struct modRM_byte *modrm) {
+#endif
+	/* generic bitfield-packing routine */
+
+	modrm->mod = b >> 6;	/* top 2 bits */
+	modrm->reg = (b & 56) >> 3;	/* middle 3 bits */
+	modrm->rm = b & 7;	/* bottom 3 bits */
+}
+static int ia32_invariant_modrm( unsigned char *in, unsigned char *out,
+				 unsigned int mode_16, x86_invariant_op_t *op) {
+	struct modRM_byte modrm;
+	struct SIB_byte sib;
+	unsigned char *c, *cin;
+	unsigned short *s;
+	unsigned int *i;
+	int size = 0;	/* modrm byte is already counted */
+
+
+	byte_decode(*in, &modrm);	/* get bitfields */
+
+	out[0] = in[0];	/* save modrm byte */
+	cin = &in[1];
+	c = &out[1];
+	s = (unsigned short *)&out[1];
+	i = (unsigned int *)&out[1];
+
+	op->type = op_expression;
+	op->flags |= op_pointer;
+	if ( ! mode_16 && modrm.rm == MODRM_RM_SIB && 
+			      modrm.mod != MODRM_MOD_NOEA ) {
+		size ++;
+		byte_decode(*cin, (struct modRM_byte *)(void*)&sib);
+
+		out[1] = in[1];	/* save sib byte */
+		cin = &in[2];
+		c = &out[2];
+		s = (unsigned short *)&out[2];
+		i = (unsigned int *)&out[2];
+
+		if ( sib.base == SIB_BASE_EBP && ! modrm.mod ) {
+			/* disp 32 is variant! */
+			memset( i, X86_WILDCARD_BYTE, 4 );
+			size += 4;
+		}
+	}
+
+	if (! modrm.mod && modrm.rm == 101) {
+		if ( mode_16 ) {	/* straight RVA in disp */
+			memset( s, X86_WILDCARD_BYTE, 2 );
+			size += 2;
+		} else {
+			memset( i, X86_WILDCARD_BYTE, 2 );
+			size += 4;
+		}
+	} else if (modrm.mod && modrm.mod < 3) {
+		if (modrm.mod == MODRM_MOD_DISP8) {	 /* offset in disp */
+			*c = *cin;	
+			size += 1;
+		} else if ( mode_16 ) {
+			*s = (* ((unsigned short *) cin));
+			size += 2;
+		} else {
+			*i = (*((unsigned int *) cin));
+			size += 4;
+		}
+	} else if ( modrm.mod == 3 ) {
+		op->type = op_register;
+		op->flags &= ~op_pointer;
+	}
+
+	return (size);
+}
+
+
+static int ia32_decode_invariant( unsigned char *buf, size_t buf_len, 
+				ia32_insn_t *t, unsigned char *out, 
+				unsigned int prefixes, x86_invariant_t *inv) {
+
+	unsigned int addr_size, op_size, mode_16;
+	unsigned int op_flags[3] = { t->dest_flag, t->src_flag, t->aux_flag };
+	int x, type, bytes = 0, size = 0, modrm = 0;
+
+	/* set addressing mode */
+	if (ia32_settings.options & opt_16_bit) {
+		op_size = ( prefixes & PREFIX_OP_SIZE ) ? 4 : 2;
+		addr_size = ( prefixes & PREFIX_ADDR_SIZE ) ? 4 : 2;
+		mode_16 = ( prefixes & PREFIX_ADDR_SIZE ) ? 0 : 1;
+	} else {
+		op_size = ( prefixes & PREFIX_OP_SIZE ) ? 2 : 4;
+		addr_size = ( prefixes & PREFIX_ADDR_SIZE ) ? 2 : 4;
+		mode_16 = ( prefixes & PREFIX_ADDR_SIZE ) ? 1 : 0;
+	}
+
+	for (x = 0; x < 3; x++) {
+		inv->operands[x].access = (enum x86_op_access) 
+						OP_PERM(op_flags[x]);
+		inv->operands[x].flags = (enum x86_op_flags) 
+						(OP_FLAGS(op_flags[x]) >> 12);
+
+		switch (op_flags[x] & OPTYPE_MASK) {
+			case OPTYPE_c:
+				size = (op_size == 4) ? 2 : 1;
+				break;
+			case OPTYPE_a: case OPTYPE_v:
+				size = (op_size == 4) ? 4 : 2;
+				break;
+			case OPTYPE_p:
+				size = (op_size == 4) ? 6 : 4;
+				break;
+			case OPTYPE_b:
+				size = 1;
+				break;
+			case OPTYPE_w:
+				size = 2;
+				break;
+			case OPTYPE_d: case OPTYPE_fs: case OPTYPE_fd:
+			case OPTYPE_fe: case OPTYPE_fb: case OPTYPE_fv:
+			case OPTYPE_si: case OPTYPE_fx:
+				size = 4;
+				break;
+			case OPTYPE_s:
+				size = 6;
+				break;
+			case OPTYPE_q: case OPTYPE_pi:
+				size = 8;
+				break;
+			case OPTYPE_dq: case OPTYPE_ps: case OPTYPE_ss:
+			case OPTYPE_pd: case OPTYPE_sd:
+				size = 16;
+				break;
+			case OPTYPE_m:	
+				size = (addr_size == 4) ? 4 : 2;
+				break;
+			default:
+				break;
+		}
+
+		type = op_flags[x] & ADDRMETH_MASK;
+		switch (type) {
+			case ADDRMETH_E: case ADDRMETH_M: case ADDRMETH_Q:
+			case ADDRMETH_R: case ADDRMETH_W:
+				modrm = 1;	
+				bytes += ia32_invariant_modrm( buf, out, 
+						mode_16, &inv->operands[x]);
+				break;
+			case ADDRMETH_C: case ADDRMETH_D: case ADDRMETH_G:
+			case ADDRMETH_P: case ADDRMETH_S: case ADDRMETH_T:
+			case ADDRMETH_V:
+				inv->operands[x].type = op_register;
+				modrm = 1;
+				break;
+			case ADDRMETH_A: case ADDRMETH_O:
+				/* pad with xF4's */
+				memset( &out[bytes + modrm], X86_WILDCARD_BYTE, 
+					size );
+				bytes += size;
+				inv->operands[x].type = op_offset;
+				if ( type == ADDRMETH_O ) {
+					inv->operands[x].flags |= op_signed |
+								  op_pointer;
+				}
+				break;
+			case ADDRMETH_I: case ADDRMETH_J:
+				/* grab imm value */
+				if ((op_flags[x] & OPTYPE_MASK) == OPTYPE_v) {
+					/* assume this is an address */
+					memset( &out[bytes + modrm], 
+						X86_WILDCARD_BYTE, size );
+				} else {
+					memcpy( &out[bytes + modrm], 
+						&buf[bytes + modrm], size );
+				}
+					
+				bytes += size;
+				if ( type == ADDRMETH_J ) {
+					if ( size == 1 ) {
+						inv->operands[x].type = 
+							op_relative_near;
+					} else {
+						inv->operands[x].type = 
+							op_relative_far;
+					}
+					inv->operands[x].flags |= op_signed;
+				} else {
+					inv->operands[x].type = op_immediate;
+				}
+				break;
+			case ADDRMETH_F:
+				inv->operands[x].type = op_register;
+				break;
+			case ADDRMETH_X:
+				inv->operands[x].flags |= op_signed |
+					  op_pointer | op_ds_seg | op_string;
+				break;
+			case ADDRMETH_Y:
+				inv->operands[x].flags |= op_signed |
+					  op_pointer | op_es_seg | op_string;
+				break;
+			case ADDRMETH_RR:	
+				inv->operands[x].type = op_register;
+				break;
+			case ADDRMETH_II:	
+				inv->operands[x].type = op_immediate;
+				break;
+			default:
+				inv->operands[x].type = op_unused;
+				break;
+		}
+	}
+
+	return (bytes + modrm);
+}
+
+size_t ia32_disasm_invariant( unsigned char * buf, size_t buf_len, 
+		x86_invariant_t *inv ) {
+	ia32_insn_t *raw_insn = NULL;
+	unsigned int prefixes;
+	unsigned int type;
+	size_t size;
+	
+	/* Perform recursive table lookup starting with main table (0) */
+	size = ia32_table_lookup( buf, buf_len, 0, &raw_insn, &prefixes );
+	if ( size == INVALID_INSN || size > buf_len ) {
+		/* TODO: set errno */
+		return 0;
+	}
+
+	/* copy opcode bytes to buffer */
+	memcpy( inv->bytes, buf, size );
+
+	/* set mnemonic type and group */
+	type = raw_insn->mnem_flag & ~INS_FLAG_MASK;
+        inv->group = (enum x86_insn_group) (INS_GROUP(type)) >> 12;
+        inv->type = (enum x86_insn_type) INS_TYPE(type);
+
+	/* handle operands */
+	size += ia32_decode_invariant( buf + size, buf_len - size, raw_insn, 
+					&buf[size - 1], prefixes, inv );
+
+	inv->size = size;
+
+	return size;		/* return size of instruction in bytes */
+}
+
+size_t ia32_disasm_size( unsigned char *buf, size_t buf_len ) {
+	x86_invariant_t inv = { {0} };
+	return( ia32_disasm_invariant( buf, buf_len, &inv ) );
+}
diff --git a/src/third_party/libdisasm/ia32_invariant.h b/src/third_party/libdisasm/ia32_invariant.h
new file mode 100644
index 0000000..e1cea60
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_invariant.h
@@ -0,0 +1,11 @@
+#ifndef IA32_INVARIANT_H
+#define IA32_INVARIANT_H
+
+#include "libdis.h"
+
+size_t ia32_disasm_invariant( unsigned char *buf, size_t buf_len, 
+		x86_invariant_t *inv);
+
+size_t ia32_disasm_size( unsigned char *buf, size_t buf_len );
+
+#endif
diff --git a/src/third_party/libdisasm/ia32_modrm.c b/src/third_party/libdisasm/ia32_modrm.c
new file mode 100644
index 0000000..b0fe2ed
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_modrm.c
@@ -0,0 +1,310 @@
+#include "ia32_modrm.h"
+#include "ia32_reg.h"
+#include "x86_imm.h"
+
+/* NOTE: when decoding ModR/M and SIB, we have to add 1 to all register
+ * values obtained from decoding the ModR/M or SIB byte, since they
+ * are encoded with eAX = 0 and the tables in ia32_reg.c use eAX = 1.
+ * ADDENDUM: this is only the case when the register value is used
+ * directly as an index into the register table, not when it is added to
+ * a genregs offset. */
+
+/* -------------------------------- ModR/M, SIB */
+/* ModR/M flags */
+#define MODRM_RM_SIB            0x04    /* R/M == 100 */
+#define MODRM_RM_NOREG          0x05    /* R/B == 101 */
+
+/* if (MODRM.MOD_NODISP && MODRM.RM_NOREG) then just disp32 */
+#define MODRM_MOD_NODISP        0x00    /* mod == 00 */
+#define MODRM_MOD_DISP8         0x01    /* mod == 01 */
+#define MODRM_MOD_DISP32        0x02    /* mod == 10 */
+#define MODRM_MOD_NOEA          0x03    /* mod == 11 */
+
+/* 16-bit modrm flags */
+#define MOD16_MOD_NODISP      0
+#define MOD16_MOD_DISP8       1
+#define MOD16_MOD_DISP16      2
+#define MOD16_MOD_REG         3
+
+#define MOD16_RM_BXSI         0
+#define MOD16_RM_BXDI         1
+#define MOD16_RM_BPSI         2
+#define MOD16_RM_BPDI         3
+#define MOD16_RM_SI           4
+#define MOD16_RM_DI           5
+#define MOD16_RM_BP           6
+#define MOD16_RM_BX           7
+
+/* SIB flags */
+#define SIB_INDEX_NONE       0x04
+#define SIB_BASE_EBP       0x05
+#define SIB_SCALE_NOBASE    0x00
+
+/* Convenience struct for modR/M bitfield */
+struct modRM_byte {  
+   unsigned int mod : 2;
+   unsigned int reg : 3;
+   unsigned int rm  : 3; 
+};
+
+/* Convenience struct for SIB bitfield */
+struct SIB_byte {
+   unsigned int scale : 2;
+   unsigned int index : 3;
+   unsigned int base  : 3;
+};
+
+
+#if 0
+int modrm_rm[] = {0,1,2,3,MODRM_RM_SIB,MODRM_MOD_DISP32,6,7};
+int modrm_reg[] = {0, 1, 2, 3, 4, 5, 6, 7};
+int modrm_mod[]  = {0, MODRM_MOD_DISP8, MODRM_MOD_DISP32, MODRM_MOD_NOEA};
+int sib_scl[] = {0, 2, 4, 8};
+int sib_idx[] = {0, 1, 2, 3, SIB_INDEX_NONE, 5, 6, 7 };
+int sib_bas[] = {0, 1, 2, 3, 4, SIB_SCALE_NOBASE, 6, 7 };
+#endif
+
+/* this is needed to replace x86_imm_signsized() which does not sign-extend
+ * to dest */
+static unsigned int imm32_signsized( unsigned char *buf, size_t buf_len,
+				     int32_t *dest, unsigned int size ) {
+	if ( size > buf_len ) {
+		return 0;
+	}
+
+	switch (size) {
+		case 1:
+			*dest = *((signed char *) buf);
+			break;
+		case 2:
+			*dest = *((signed short *) buf);
+			break;
+		case 4:
+		default:
+			*dest = *((signed int *) buf);
+			break;
+	}
+
+	return size;
+}
+
+
+
+static void byte_decode(unsigned char b, struct modRM_byte *modrm) {
+	/* generic bitfield-packing routine */
+
+	modrm->mod = b >> 6;	/* top 2 bits */
+	modrm->reg = (b & 56) >> 3;	/* middle 3 bits */
+	modrm->rm = b & 7;	/* bottom 3 bits */
+}
+
+
+static size_t sib_decode( unsigned char *buf, size_t buf_len, x86_ea_t *ea, 
+			  unsigned int mod ) {
+	/* set Address Expression fields (scale, index, base, disp) 
+	 * according to the contents of the SIB byte.
+	 *  b points to the SIB byte in the instruction-stream buffer; the
+	 *    byte after b[0] is therefore the byte after the SIB
+	 *  returns number of bytes 'used', including the SIB byte */
+	size_t size = 1;		/* start at 1 for SIB byte */
+	struct SIB_byte sib;
+
+	if ( buf_len < 1 ) {
+		return 0;
+	}
+
+	byte_decode( *buf, (struct modRM_byte *)(void*)&sib );  /* get bit-fields */
+
+	if ( sib.base == SIB_BASE_EBP && ! mod ) {  /* if base == 101 (ebp) */
+	    /* IF BASE == EBP, deal with exception */
+		/* IF (ModR/M did not create a Disp */
+		/* ... create a 32-bit Displacement */
+		imm32_signsized( &buf[1], buf_len, &ea->disp, sizeof(int32_t));
+		ea->disp_size = sizeof(int32_t);
+		ea->disp_sign = (ea->disp < 0) ? 1 : 0;
+		size += 4;	/* add sizeof disp to count */
+
+	} else {
+		/* ELSE BASE refers to a General Register */
+		ia32_handle_register( &ea->base, sib.base + 1 );
+	}
+
+	/* set scale to 1, 2, 4, 8 */
+	ea->scale = 1 << sib.scale;
+
+	if (sib.index != SIB_INDEX_NONE) {
+		/* IF INDEX is not 'ESP' (100) */
+		ia32_handle_register( &ea->index, sib.index + 1 );
+	}
+
+	return (size);		/* return number of bytes processed */
+}
+
+static size_t modrm_decode16( unsigned char *buf, unsigned int buf_len,
+			    x86_op_t *op, struct modRM_byte *modrm ) {
+	/* 16-bit mode: hackish, but not as hackish as 32-bit mode ;) */
+	size_t size = 1; /* # of bytes decoded [1 for modR/M byte] */
+	x86_ea_t * ea = &op->data.expression;
+
+	switch( modrm->rm ) {
+		case MOD16_RM_BXSI:
+			ia32_handle_register(&ea->base, REG_WORD_OFFSET + 3);
+			ia32_handle_register(&ea->index, REG_WORD_OFFSET + 6);
+			break;
+		case MOD16_RM_BXDI:
+			ia32_handle_register(&ea->base, REG_WORD_OFFSET + 3);
+			ia32_handle_register(&ea->index, REG_WORD_OFFSET + 7);
+		case MOD16_RM_BPSI:
+			op->flags |= op_ss_seg;
+			ia32_handle_register(&ea->base, REG_WORD_OFFSET + 5);
+			ia32_handle_register(&ea->index, REG_WORD_OFFSET + 6);
+			break;
+		case MOD16_RM_BPDI:
+			op->flags |= op_ss_seg;
+			ia32_handle_register(&ea->base, REG_WORD_OFFSET + 5);
+			ia32_handle_register(&ea->index, REG_WORD_OFFSET + 7);
+			break;
+		case MOD16_RM_SI:
+			ia32_handle_register(&ea->base, REG_WORD_OFFSET + 6);
+			break;
+		case MOD16_RM_DI:
+			ia32_handle_register(&ea->base, REG_WORD_OFFSET + 7);
+			break;
+		case MOD16_RM_BP:
+			if ( modrm->mod != MOD16_MOD_NODISP ) {
+				op->flags |= op_ss_seg;
+				ia32_handle_register(&ea->base, 
+						     REG_WORD_OFFSET + 5);
+			}
+			break;
+		case MOD16_RM_BX:
+			ia32_handle_register(&ea->base, REG_WORD_OFFSET + 3);
+			break;
+	}
+
+	/* move to byte after ModR/M */
+	++buf;
+	--buf_len;
+
+	if ( modrm->mod == MOD16_MOD_DISP8 ) {
+		imm32_signsized( buf, buf_len, &ea->disp, sizeof(char) );
+		ea->disp_sign = (ea->disp < 0) ? 1 : 0;
+		ea->disp_size = sizeof(char);
+		size += sizeof(char);
+	} else if ( modrm->mod == MOD16_MOD_DISP16 ) {
+		imm32_signsized( buf, buf_len, &ea->disp, sizeof(short) );
+		ea->disp_sign = (ea->disp < 0) ? 1 : 0;
+		ea->disp_size = sizeof(short);
+		size += sizeof(short);
+	} 
+
+	return size;
+}
+
+/* TODO : Mark index modes
+    Use addressing mode flags to imply arrays (index), structure (disp),
+    two-dimensional arrays [disp + index], classes [ea reg], and so on.
+*/
+size_t ia32_modrm_decode( unsigned char *buf, unsigned int buf_len,
+			    x86_op_t *op, x86_insn_t *insn, size_t gen_regs ) {
+	/* create address expression and/or fill operand based on value of
+	 * ModR/M byte. Calls sib_decode as appropriate.
+	 *    flags specifies whether Reg or mod+R/M fields are being decoded
+	 *  returns the number of bytes in the instruction, including modR/M */
+	struct modRM_byte modrm;
+	size_t size = 1;	/* # of bytes decoded [1 for modR/M byte] */
+	x86_ea_t * ea;
+
+
+	byte_decode(*buf, &modrm);	/* get bitfields */
+
+	/* first, handle the case where the mod field is a register only */
+	if ( modrm.mod == MODRM_MOD_NOEA ) {
+		op->type = op_register;
+		ia32_handle_register(&op->data.reg, modrm.rm + gen_regs);
+                /* increase insn size by 1 for modrm byte */
+ 		return 1;
+ 	}
+ 
+	/* then deal with cases where there is an effective address */
+	ea = &op->data.expression;
+	op->type = op_expression;
+	op->flags |= op_pointer;
+
+	if ( insn->addr_size == 2 ) {
+		/* gah! 16 bit mode! */
+		return modrm_decode16( buf, buf_len, op, &modrm);
+	}
+
+	/* move to byte after ModR/M */
+	++buf;
+	--buf_len;
+
+	if (modrm.mod == MODRM_MOD_NODISP) {	/* if mod == 00 */
+
+		/* IF MOD == No displacement, just Indirect Register */
+		if (modrm.rm == MODRM_RM_NOREG) {	/* if r/m == 101 */
+			/* IF RM == No Register, just Displacement */
+			/* This is an Intel Moronic Exception TM */
+			imm32_signsized( buf, buf_len, &ea->disp, 
+					sizeof(int32_t) );
+			ea->disp_size = sizeof(int32_t);
+			ea->disp_sign = (ea->disp < 0) ? 1 : 0;
+			size += 4;	/* add sizeof disp to count */
+
+		} else if (modrm.rm == MODRM_RM_SIB) {	/* if r/m == 100 */
+			/* ELSE IF an SIB byte is present */
+			/* TODO: check for 0 retval */
+			size += sib_decode( buf, buf_len, ea, modrm.mod);
+			/* move to byte after SIB for displacement */
+			++buf;
+			--buf_len;
+		} else {	/* modR/M specifies base register */
+			/* ELSE RM encodes a general register */
+			ia32_handle_register( &ea->base, modrm.rm + 1 );
+		}
+	} else { 					/* mod is 01 or 10 */
+		if (modrm.rm == MODRM_RM_SIB) {	/* rm == 100 */
+			/* IF base is an AddrExpr specified by an SIB byte */
+			/* TODO: check for 0 retval */
+			size += sib_decode( buf, buf_len, ea, modrm.mod);
+			/* move to byte after SIB for displacement */
+			++buf;
+			--buf_len;
+		} else {
+			/* ELSE base is a general register */
+			ia32_handle_register( &ea->base, modrm.rm + 1 );
+		}
+
+		/* ELSE mod + r/m specify a disp##[base] or disp##(SIB) */
+		if (modrm.mod == MODRM_MOD_DISP8) {		/* mod == 01 */
+			/* If this is an 8-bit displacement */
+			imm32_signsized( buf, buf_len, &ea->disp, 
+					sizeof(char));
+			ea->disp_size = sizeof(char);
+			ea->disp_sign = (ea->disp < 0) ? 1 : 0;
+			size += 1;	/* add sizeof disp to count */
+
+		} else {
+			/* Displacement is dependent on address size */
+			imm32_signsized( buf, buf_len, &ea->disp, 
+					insn->addr_size);
+			ea->disp_size = insn->addr_size;
+			ea->disp_sign = (ea->disp < 0) ? 1 : 0;
+			size += 4;
+		}
+	}
+
+	return size;		/* number of bytes found in instruction */
+}
+
+void ia32_reg_decode( unsigned char byte, x86_op_t *op, size_t gen_regs ) {
+	struct modRM_byte modrm;
+	byte_decode( byte, &modrm );	/* get bitfields */
+
+ 	/* set operand to register ID */
+	op->type = op_register;
+	ia32_handle_register(&op->data.reg, modrm.reg + gen_regs);
+
+	return;
+}
diff --git a/src/third_party/libdisasm/ia32_modrm.h b/src/third_party/libdisasm/ia32_modrm.h
new file mode 100644
index 0000000..765cb08
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_modrm.h
@@ -0,0 +1,13 @@
+#ifndef IA32_MODRM_H
+#define IA32_MODRM_H
+
+#include "libdis.h"
+#include "ia32_insn.h"
+
+size_t ia32_modrm_decode( unsigned char *buf, unsigned int buf_len,
+			    x86_op_t *op, x86_insn_t *insn,
+			    size_t gen_regs );
+
+void ia32_reg_decode( unsigned char byte, x86_op_t *op, size_t gen_regs );
+
+#endif
diff --git a/src/third_party/libdisasm/ia32_opcode_tables.c b/src/third_party/libdisasm/ia32_opcode_tables.c
new file mode 100644
index 0000000..ef97c7a
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_opcode_tables.c
@@ -0,0 +1,2939 @@
+#include "ia32_insn.h"
+
+#include "ia32_reg.h"
+
+#include "ia32_opcode_tables.h"
+
+static ia32_insn_t tbl_Main[] = {	/* One-byte Opcodes */
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_G | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "add", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "add", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_G | OPTYPE_b | OP_W | OP_R,   ADDRMETH_E | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "add", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_G | OPTYPE_v | OP_W | OP_R,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "add", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_RR | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "add", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "add", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RS | OPTYPE_w | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   0,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RS | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   0,   0,   0,  0 , 33 },
+	 { 0,   INS_OR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_G | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "or", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_OR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "or", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_OR,  0,   ADDRMETH_G | OPTYPE_b | OP_W | OP_R,   ADDRMETH_E | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "or", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_OR,  0,   ADDRMETH_G | OPTYPE_v | OP_W | OP_R,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "or", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_OR,  0,   ADDRMETH_RR | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "or", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_OR,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "or", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RS | OPTYPE_w | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   1,   0,   0,  0 , 33 },
+	 { idx_0F,   0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+/* 0x10 */
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_G | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "adc", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "adc", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_G | OPTYPE_b | OP_W | OP_R,   ADDRMETH_E | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "adc", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_G | OPTYPE_v | OP_W | OP_R,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "adc", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_RR | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "adc", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "adc", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RS | OPTYPE_w | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   2,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RS | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   2,   0,   0,  0 , 33 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_E | OPTYPE_b | OP_SIGNED | OP_W | OP_R,   ADDRMETH_G | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sbb", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_E | OPTYPE_v | OP_SIGNED | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sbb", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_G | OPTYPE_b | OP_W | OP_SIGNED | OP_R,   ADDRMETH_E | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sbb", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_G | OPTYPE_v | OP_SIGNED | OP_W | OP_R,   ADDRMETH_E | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sbb", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_RR | OPTYPE_b | OP_SIGNED | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sbb", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_RR | OPTYPE_v | OP_SIGNED | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sbb", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RS | OPTYPE_w | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   3,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RS | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   3,   0,   0,  0 , 33 },
+/* 0x20 */
+	 { 0,   INS_AND,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_G | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "and", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "and", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_G | OPTYPE_b | OP_W | OP_R,   ADDRMETH_E | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "and", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_G | OPTYPE_v | OP_W | OP_R,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "and", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_RR | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "and", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "and", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_FLAG_PREFIX | PREFIX_ES,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_BCDCONV,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "daa", "",   0,   0,   0,  INS_SET_SIGN|INS_SET_ZERO|INS_SET_CARRY|INS_SET_PARITY|INS_TEST_CARRY, 12 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_E | OPTYPE_b | OP_SIGNED | OP_W | OP_R,   ADDRMETH_G | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sub", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_E | OPTYPE_v | OP_SIGNED | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sub", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_G | OPTYPE_b | OP_SIGNED | OP_W | OP_R,   ADDRMETH_E | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sub", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_G | OPTYPE_v | OP_SIGNED | OP_W | OP_R,   ADDRMETH_E | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sub", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_RR | OPTYPE_b | OP_SIGNED | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sub", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_RR | OPTYPE_v | OP_SIGNED | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sub", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_FLAG_PREFIX | PREFIX_CS | PREFIX_NOTTAKEN,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_BCDCONV,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "das", "",   0,   0,   0,  INS_SET_SIGN|INS_SET_ZERO|INS_SET_CARRY|INS_SET_PARITY|INS_TEST_CARRY, 0 },
+/* 0x30 */
+	 { 0,   INS_XOR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_G | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xor", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_XOR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xor", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_XOR,  0,   ADDRMETH_G | OPTYPE_b | OP_W | OP_R,   ADDRMETH_E | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xor", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_XOR,  0,   ADDRMETH_G | OPTYPE_v | OP_W | OP_R,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xor", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_XOR,  0,   ADDRMETH_RR | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xor", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_XOR,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xor", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_FLAG_PREFIX | PREFIX_SS,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_BCDCONV,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "aaa", "",   0,   0,   0,  INS_SET_CARRY, 1 },
+	 { 0,   INS_CMP,  0,   ADDRMETH_E | OPTYPE_b | OP_R,   ADDRMETH_G | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "cmp", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_CMP,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "cmp", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_CMP,  0,   ADDRMETH_G | OPTYPE_b | OP_R,   ADDRMETH_E | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "cmp", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_CMP,  0,   ADDRMETH_G | OPTYPE_v | OP_R,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "cmp", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_CMP,  0,   ADDRMETH_RR | OPTYPE_b | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "cmp", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_CMP,  0,   ADDRMETH_RR | OPTYPE_v | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "cmp", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_FLAG_PREFIX | PREFIX_DS | PREFIX_TAKEN,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_BCDCONV,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "aas", "",   0,   0,   0,  INS_SET_CARRY, 0 },
+/* 0x40 */
+	 { 0,   INS_INC,  0,   ADDRMETH_RR | OPTYPE_v | OP_R | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "inc", "",   0,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_INC,  0,   ADDRMETH_RR | OPTYPE_v | OP_R | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "inc", "",   1,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_INC,  0,   ADDRMETH_RR | OPTYPE_v | OP_R | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "inc", "",   2,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_INC,  0,   ADDRMETH_RR | OPTYPE_v | OP_R | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "inc", "",   3,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_INC,  0,   ADDRMETH_RR | OPTYPE_v | OP_R | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "inc", "",   4,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_INC,  0,   ADDRMETH_RR | OPTYPE_v | OP_R | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "inc", "",   5,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_INC,  0,   ADDRMETH_RR | OPTYPE_v | OP_R | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "inc", "",   6,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_INC,  0,   ADDRMETH_RR | OPTYPE_v | OP_R | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "inc", "",   7,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_DEC,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "dec", "",   0,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_DEC,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "dec", "",   1,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_DEC,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "dec", "",   2,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_DEC,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "dec", "",   3,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_DEC,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "dec", "",   4,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_DEC,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "dec", "",   5,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_DEC,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "dec", "",   6,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_DEC,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "dec", "",   7,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+/* 0x50 */
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RR | OPTYPE_v | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   0,   0,   0,  0 , 33 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RR | OPTYPE_v | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   1,   0,   0,  0 , 33 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RR | OPTYPE_v | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   2,   0,   0,  0 , 33 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RR | OPTYPE_v | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   3,   0,   0,  0 , 33 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RR | OPTYPE_v | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   4,   0,   0,  0 , 33 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RR | OPTYPE_v | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   5,   0,   0,  0 , 33 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RR | OPTYPE_v | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   6,   0,   0,  0 , 33 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RR | OPTYPE_v | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   7,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   0,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   1,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   2,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   3,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   4,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   5,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   6,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   7,   0,   0,  0 , 33 },
+/* 0x60 */
+	 { 0,   INS_PUSHREGS,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pusha", "",   0,   0,   0,  0 , 36 },
+	 { 0,   INS_POPREGS,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "popa", "",   0,   0,   0,  0 , 34 },
+	 { 0,   INS_BOUNDS, INS_NOTE_NONSWAP,   ADDRMETH_G | OPTYPE_v | OP_R,   ADDRMETH_M | OPTYPE_a | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "bound", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_R | OP_W,   ADDRMETH_G | OPTYPE_w | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "arpl", "",   0,   0,   0,  INS_SET_ZERO, 0 },
+	 { 0,   INS_FLAG_PREFIX | PREFIX_FS,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_FLAG_PREFIX | PREFIX_GS,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_66,   INS_FLAG_PREFIX | PREFIX_OP_SIZE,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_FLAG_PREFIX | PREFIX_ADDR_SIZE,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   0,   0,   0,  0 , 33 },
+	 { 0,   INS_MUL,  0,   ADDRMETH_G | OPTYPE_v | OP_SIGNED | OP_R | OP_W,   ADDRMETH_E | OPTYPE_v | OP_SIGNED | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   cpu_80386 | isa_GP,   "imul", "",   0,   0,   0,  INS_SET_OFLOW|INS_SET_CARRY, 0 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   0,   0,   0,  0 , 33 },
+	 { 0,   INS_MUL,  0,   ADDRMETH_G | OPTYPE_v | OP_SIGNED | OP_R | OP_W,   ADDRMETH_E | OPTYPE_v | OP_SIGNED | OP_R,   ADDRMETH_I |  OPTYPE_b | OP_SIGNED | OP_R,   cpu_80386 | isa_GP,   "imul", "",   0,   0,   0,  INS_SET_OFLOW|INS_SET_CARRY, 0 },
+	 { 0,   INS_IN,  0,    ADDRMETH_Y | OPTYPE_b | OP_W,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "ins", "",   0,   2,   0,  0 , 0 },
+	 { 0,   INS_IN,  0,    ADDRMETH_Y | OPTYPE_v | OP_W,   ADDRMETH_RR | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "ins", "",   0,   2,   0,  0 , 0 },
+	 { 0,   INS_OUT,  0,    ADDRMETH_RR | OPTYPE_b | OP_R,   ADDRMETH_X | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "outs", "",   2,   0,   0,  0 , 0 },
+	 { 0,   INS_OUT,  0,    ADDRMETH_RR | OPTYPE_v | OP_R,   ADDRMETH_X | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "outs", "",   2,   0,   0,  0 , 0 },
+/* 0x70 */
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jo", "",   0,   0,   0,  INS_TEST_OFLOW, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jno", "",   0,   0,   0,  INS_TEST_NOFLOW, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jc", "",   0,   0,   0,  INS_TEST_CARRY, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jnc", "",   0,   0,   0,  INS_TEST_NCARRY, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jz", "",   0,   0,   0,  INS_TEST_ZERO, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jnz", "",   0,   0,   0,  INS_TEST_NZERO, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jbe", "",   0,   0,   0,  INS_TEST_CARRY|INS_TEST_OR|INS_TEST_ZERO, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "ja", "",   0,   0,   0,  INS_TEST_NCARRY|INS_TEST_NZERO, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "js", "",   0,   0,   0,  INS_TEST_SIGN, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jns", "",   0,   0,   0,  INS_TEST_NSIGN, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jpe", "",   0,   0,   0,  INS_TEST_PARITY, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jpo", "",   0,   0,   0,  INS_TEST_NPARITY, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jl", "",   0,   0,   0,  INS_TEST_SFNEOF, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jge", "",   0,   0,   0,  INS_TEST_SFEQOF, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jle", "",   0,   0,   0,  INS_TEST_ZERO|INS_TEST_OR|INS_TEST_SFNEOF, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jg", "",   0,   0,   0,  INS_TEST_NZERO|INS_TEST_SFEQOF, 0 },
+/* 0x80 */
+	 { idx_80,   0,   0,   ADDRMETH_E | OPTYPE_b,   ADDRMETH_I | OPTYPE_b,   ARG_NONE,  cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_81,   0,   0,   ADDRMETH_E | OPTYPE_v,   ADDRMETH_I | OPTYPE_v,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_82,   0,   0,   ADDRMETH_E | OPTYPE_b,   ADDRMETH_I | OPTYPE_b,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_83,   0,   0,   ADDRMETH_E | OPTYPE_v,   ADDRMETH_I | OPTYPE_b,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_TEST,  0,   ADDRMETH_E | OPTYPE_b | OP_R,   ADDRMETH_G | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "test", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_TEST,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "test", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_G | OPTYPE_b | OP_W | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xchg", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xchg", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ADDRMETH_G | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_E | OPTYPE_v | OP_W,   ADDRMETH_G | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_b | OP_W,   ADDRMETH_E | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_E | OPTYPE_w | OP_W,   ADDRMETH_S | OPTYPE_w | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_M | OPTYPE_m | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "lea", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_S | OPTYPE_w | OP_W,   ADDRMETH_E | OPTYPE_w | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_POP,  0,   ADDRMETH_E | OPTYPE_v | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   0,   0,   0,  0 , 33 },
+/* 0x90 */
+	 { 0,   INS_NOP,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "nop", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xchg", "",   0,   1,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xchg", "",   0,   2,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xchg", "",   0,   3,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xchg", "",   0,   4,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xchg", "",   0,   5,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xchg", "",   0,   6,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xchg", "",   0,   7,   0,  0 , 0 },
+	 { 0,   INS_SZCONV,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "cwde", "",   0,   0,   0,  0 , 5 },
+	 { 0,   INS_SZCONV,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "cdq", "",   0,   0,   0,  0 , 11 },
+	 { 0,   INS_CALL,  0,   ADDRMETH_A | OPTYPE_p | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "callf", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "wait", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_PUSHFLAGS,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pushf", "",   0,   0,   0,  0 , 37 },
+	 { 0,   INS_POPFLAGS,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "popf", "",   0,   0,   0,  0 , 35 },
+	 { 0,   INS_MOV,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "sahf", "",   0,   0,   0,  INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 43 },
+	 { 0,   INS_MOV,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "lahf", "",   0,   0,   0,  0 , 24 },
+/* 0xa0 */
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_b | OP_W,   ADDRMETH_O | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ADDRMETH_O | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_O | OPTYPE_b | OP_W,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_O | OPTYPE_v | OP_W,   ADDRMETH_RR | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_STRMOV,  0,   ADDRMETH_Y | OPTYPE_b | OP_W,   ADDRMETH_X | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "movs", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_STRMOV,  0,   ADDRMETH_Y | OPTYPE_v | OP_W,   ADDRMETH_X | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "movs", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_STRCMP,  0,   ADDRMETH_Y | OPTYPE_b | OP_R,   ADDRMETH_X | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "cmps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_STRCMP,  0,   ADDRMETH_X | OPTYPE_v | OP_R,   ADDRMETH_Y | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "cmps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_TEST,  0,   ADDRMETH_RR | OPTYPE_b | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "test", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_TEST,  0,   ADDRMETH_RR | OPTYPE_v | OP_R,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "test", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_STRSTOR,  0,   ADDRMETH_Y | OPTYPE_b | OP_W,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "stos", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_STRSTOR,  0,   ADDRMETH_Y | OPTYPE_v | OP_W,   ADDRMETH_RR | OPTYPE_v |OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "stos", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_STRLOAD,  0,   ADDRMETH_RR | OPTYPE_b | OP_W,   ADDRMETH_X| OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "lods", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_STRLOAD,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ADDRMETH_X| OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "lods", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_STRCMP,  0,   ADDRMETH_RR | OPTYPE_b | OP_R,   ADDRMETH_Y | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "scas", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_STRCMP,  0,   ADDRMETH_RR | OPTYPE_v | OP_R,   ADDRMETH_Y | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "scas", "",   0,   0,   0,  0 , 0 },
+/* 0xb0 */
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_b | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_b | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   1,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_b | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   2,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_b | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   3,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_b | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   4,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_b | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   5,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_b | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   6,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_b | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   7,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   1,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   2,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   3,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   4,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   5,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   6,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   7,   0,   0,  0 , 0 },
+/* 0xc0 */
+	 { idx_C0,  0,   0,    ADDRMETH_E | OPTYPE_b,   ADDRMETH_I | OPTYPE_b,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_C1,  0,   0,    ADDRMETH_E | OPTYPE_v,   ADDRMETH_I | OPTYPE_b,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_RET,  0,   ADDRMETH_I | OPTYPE_w | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "ret", "",   0,   0,   0,  0 , 3 },
+	 { 0,   INS_RET,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "ret", "",   0,   0,   0,  0 , 3 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_M | OPTYPE_p | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "les", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_M | OPTYPE_p | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "lds", "",   0,   0,   0,  0 , 0 },
+	 { idx_C6,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_C7,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ENTER, INS_NOTE_NONSWAP,   ADDRMETH_I | OPTYPE_w | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "enter", "",   0,   0,   0,  0 , 15 },
+	 { 0,   INS_LEAVE,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "leave", "",   0,   0,   0,  0 , 26 },
+	 { 0,   INS_RET,  0,   ADDRMETH_I | OPTYPE_w | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "retf", "lret",   0,   0,   0,  0 , 3 },
+	 { 0,   INS_RET,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "retf", "lret",   0,   0,   0,  0 , 3 },
+	 { 0,   INS_DEBUG,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "int3", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_TRAP,  0,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "int", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OFLOW,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "into", "",   0,   0,   0,  INS_TEST_OFLOW, 0 },
+	 { 0,   INS_TRET,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "iret", "",   0,   0,   0,  INS_SET_ALL|INS_SET_DIR, 0 },
+/* 0xd0 */
+	 { idx_D0,  0,   0,    ADDRMETH_E | OPTYPE_b,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   1,   0,  0 , 0 },
+	 { idx_D1,  0,   0,   ADDRMETH_E | OPTYPE_v,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   1,   0,  0 , 0 },
+	 { idx_D2,  0,   0,   ADDRMETH_E | OPTYPE_b,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   1,   0,  0 , 0 },
+	 { idx_D3,  0,   0,   ADDRMETH_E | OPTYPE_v,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   1,   0,  0 , 0 },
+	 { 0,   INS_BCDCONV,  0,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "aam", "",   0,   0,   0,  INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_BCDCONV,  0,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "aad", "",   0,   0,   0,  INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 2 },
+	 { 0,   INS_SALC,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "salc", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_XLAT,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "xlat", "",   0,   0,   0,  0 , 53 },
+	 { idx_D8,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_D9,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_DA,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_DB,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_DC,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_DD,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_DE,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_DF,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+/* 0xe0 */
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "loopnz", "",   0,   0,   0,  INS_TEST_NZERO, 31 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "loopz", "",   0,   0,   0,  INS_TEST_ZERO, 31 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "loop", "",   0,   0,   0,  0 , 31 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_b | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jcxz", "",   0,   0,   0,  0 , 31 },
+	 { 0,   INS_IN,  0,   ADDRMETH_RR | OPTYPE_b | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "in", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_IN,  0,   ADDRMETH_RR | OPTYPE_b | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "in", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OUT,  0,   ADDRMETH_I | OPTYPE_b | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "out", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OUT,  0,   ADDRMETH_I | OPTYPE_b | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "out", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_CALL,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "call", "",   0,   0,   0,  0 , 3 },
+	 { 0,   INS_BRANCH,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jmp", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_BRANCH,  0,   ADDRMETH_A | OPTYPE_p | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jmp", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_BRANCH,  0,   ADDRMETH_J | OPTYPE_b | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jmp", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_IN,  0,   ADDRMETH_RR | OPTYPE_b| OP_W,   ADDRMETH_RR | OPTYPE_w| OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "in", "",   0,   2,   0,  0 , 0 },
+	 { 0,   INS_IN,  0,   ADDRMETH_RR | OPTYPE_v | OP_W,   ADDRMETH_RR | OPTYPE_w| OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "in", "",   0,   2,   0,  0 , 0 },
+	 { 0,   INS_OUT,  0,   ADDRMETH_RR | OPTYPE_w| OP_R,   ADDRMETH_RR | OPTYPE_b| OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "out", "",   2,   0,   0,  0 , 0 },
+	 { 0,   INS_OUT,  0,   ADDRMETH_RR | OPTYPE_w| OP_R,   ADDRMETH_RR | OPTYPE_v| OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "out", "",   2,   0,   0,  0 , 0 },
+/* 0xf0 */
+	 { 0,   INS_FLAG_PREFIX | PREFIX_LOCK,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_ICEBP,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "icebp", "",   0,   0,   0,  0 , 0 },
+	 { idx_F2,   INS_FLAG_PREFIX | PREFIX_REPNZ,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_F3,   INS_FLAG_PREFIX | PREFIX_REPZ,  0, ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_HALT,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "hlt", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_TOGCF,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "cmc", "",   0,   0,   0,  INS_SET_CARRY, 0 },
+	 { idx_F6,  0,   0,    ADDRMETH_E | OPTYPE_b,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_F7,  0,   0,   ADDRMETH_E | OPTYPE_v,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_CLEARCF,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "clc", "",   0,   0,   0,  INS_SET_NCARRY, 0 },
+	 { 0,   INS_SETCF,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "stc", "",   0,   0,   0,  INS_SET_CARRY, 0 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "cli", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "sti", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_CLEARDF,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "cld", "",   0,   0,   0,  INS_SET_NDIR, 0 },
+	 { 0,   INS_SETDF,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "std", "",   0,   0,   0,  INS_SET_DIR, 0 },
+	 { idx_FE,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_FF,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_66[] = {	/* SIMD 66 one-byte Opcodes */
+	 { idx_660F,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_F2[] = {	/* SIMD F2 one-byte Opcodes */
+	 { idx_F20F,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_F3[] = {	/* SIMD F3 one-byte Opcodes */
+	 { idx_F30F,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_SYSTEM,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pause", "", 0, 0, 0, 0, 0 }
+};
+
+
+static ia32_insn_t tbl_0F[] = {	/* Two-byte Opcodes */
+	 { idx_0F00,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_0F01,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_w | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "lar", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_w | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "lsl", "",   0,   0,   0,  INS_SET_ZERO, 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "clts", "",   0,   0,   0,  0 , 6 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "invd", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "wbinvd", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_UNKNOWN,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "ud2", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_SYSTEM,  0, ADDRMETH_M | OPTYPE_b | OP_R, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "prefetch", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_SYSTEM,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "femms", "", 0, 0, 0, 0, 0 },
+	 { idx_0F0F, INS_FLAG_SUFFIX,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movups", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_W | OPTYPE_ps | OP_W,   ADDRMETH_V | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movups", "",   0,   0,   0,  0 , 0 },
+	 { idx_0F12,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  INS_NOTE_NOSUFFIX,   ADDRMETH_V | OPTYPE_q | OP_W,   ADDRMETH_W | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movlps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "unpcklps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "unpckhps", "",   0,   0,   0,  0 , 0 },
+	 { idx_0F16,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_W | OPTYPE_q | OP_W,   ADDRMETH_V | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movhps", "",   0,   0,   0,  0 , 0 },
+	 { idx_0F18,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_R | OPTYPE_d | OP_W,   ADDRMETH_C | OPTYPE_d | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_R | OPTYPE_d | OP_W,   ADDRMETH_D | OPTYPE_d | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_C | OPTYPE_d | OP_W,   ADDRMETH_R | OPTYPE_d | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_D | OPTYPE_d | OP_W,   ADDRMETH_R | OPTYPE_d | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_R | OPTYPE_d | OP_W,   ADDRMETH_T | OPTYPE_d | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_T | OPTYPE_d | OP_W,   ADDRMETH_R | OPTYPE_d | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movaps", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_W | OPTYPE_ps | OP_W,   ADDRMETH_V | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movaps", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_V | OPTYPE_ps | OP_W, ADDRMETH_Q | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM2 | isa_GP, "cvtpi2ps", "", 0, 0, 0, 0, 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_W | OPTYPE_ps | OP_W,   ADDRMETH_V | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movntps", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_P | OPTYPE_q | OP_W, ADDRMETH_W | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM2 | isa_GP, "cvttps2pi", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_P | OPTYPE_q | OP_W , ADDRMETH_W | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM2 | isa_GP, "cvtps2pi", "", 0, 0, 0, 0, 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_V | OPTYPE_ss | OP_W,   ADDRMETH_W | OPTYPE_ss | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "ucomiss", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ss | OP_W,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "comiss", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_GP,   "wrmsr", "",   0,   0,   0,  0 , 52 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_GP,   "rdtsc", "",   0,   0,   0,  0 , 40 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_GP,   "rdmsr", "",   0,   0,   0,  0 , 38 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "rdpmc", "",   0,   0,   0,  0 , 39 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "sysenter", "",   0,   0,   0,  0 , 50 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "sysexit", "",   0,   0,   0,  0 , 51 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovo", "",   0,   0,   0,  INS_TEST_OFLOW, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovno", "",   0,   0,   0,  INS_TEST_NOFLOW, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovc", "",   0,   0,   0,  INS_TEST_CARRY, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovnc", "",   0,   0,   0,  INS_TEST_NCARRY, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovz", "",   0,   0,   0,  INS_TEST_ZERO, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovnz", "",   0,   0,   0,  INS_TEST_NZERO, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovbe", "",   0,   0,   0,  INS_TEST_CARRY|INS_TEST_OR|INS_TEST_ZERO, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmova", "",   0,   0,   0,  INS_TEST_NZERO|INS_TEST_NCARRY, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovs", "",   0,   0,   0,  INS_TEST_SIGN, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovns", "",   0,   0,   0,  INS_TEST_NSIGN, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovp", "",   0,   0,   0,  INS_TEST_PARITY, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovnp", "",   0,   0,   0,  INS_TEST_NPARITY, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovl", "",   0,   0,   0,  INS_TEST_SFNEOF, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovge", "",   0,   0,   0,  INS_TEST_SFEQOF, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovle", "",   0,   0,   0,  INS_TEST_ZERO|INS_TEST_OR|INS_TEST_SFNEOF, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_PENTPRO | isa_GP,   "cmovg", "",   0,   0,   0,  INS_TEST_NZERO|INS_TEST_SFEQOF, 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_d | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movmskps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ARITH,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "sqrtps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ARITH,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "rsqrtps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "rcpps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "andps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "andnps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OR,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "orps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_XOR,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "xorps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "addps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MUL,  0,   ADDRMETH_V | OPTYPE_ps | OP_R,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "mulps", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_V | OPTYPE_pd, ADDRMETH_W | OPTYPE_q, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtps2pd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_V | OPTYPE_ps | OP_W, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtdq2ps", "", 0, 0, 0, 0, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "subps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ARITH,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "minps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_DIV,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "divps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ARITH,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "maxps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "punpcklbw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "punpcklwd", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "punpckldq", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "packsswb", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pcmpgtb", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pcmpgtw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pcmpgtd", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "packuswb", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "punpckhbw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "punpckhwd", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "punpckhdq", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "packssdw", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_P | OPTYPE_d | OP_W,   ADDRMETH_E | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "movd", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "movq", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_P | OPTYPE_q | OP_W, ADDRMETH_Q | OPTYPE_q | OP_R, ADDRMETH_I | OPTYPE_b | OP_R, cpu_PENTIUM2 | isa_GP, "pshufw", "", 0, 0, 0, 0, 0 },
+	 { idx_0F71,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_0F72,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_0F73,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pcmpeqb", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_CMP,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pcmpeqw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_CMP,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pcmpeqd", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "emms", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_E | OPTYPE_d | OP_W,   ADDRMETH_P | OPTYPE_d | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "movd", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_Q | OPTYPE_q | OP_W,   ADDRMETH_P | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "movq", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jo", "",   0,   0,   0,  INS_TEST_OFLOW, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jno", "",   0,   0,   0,  INS_TEST_NOFLOW, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jc", "",   0,   0,   0,  INS_TEST_CARRY, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jnc", "",   0,   0,   0,  INS_TEST_NCARRY, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jz", "",   0,   0,   0,  INS_TEST_ZERO, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jnz", "",   0,   0,   0,  INS_TEST_NZERO, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jbe", "",   0,   0,   0,  INS_TEST_CARRY|INS_TEST_OR|INS_TEST_ZERO, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "ja", "",   0,   0,   0,  INS_TEST_NCARRY|INS_TEST_NZERO, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "js", "",   0,   0,   0,  INS_TEST_SIGN, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jns", "",   0,   0,   0,  INS_TEST_NSIGN, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jpe", "",   0,   0,   0,  INS_TEST_PARITY, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jpo", "",   0,   0,   0,  INS_TEST_NPARITY, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jl", "",   0,   0,   0,  INS_TEST_SFNEOF, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jge", "",   0,   0,   0,  INS_TEST_SFEQOF, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jle", "",   0,   0,   0,  INS_TEST_ZERO|INS_TEST_OR|INS_TEST_SFNEOF, 0 },
+	 { 0,   INS_BRANCHCC,  0,   ADDRMETH_J | OPTYPE_v | OP_X | OP_SIGNED,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jg", "",   0,   0,   0,  INS_TEST_NZERO|INS_TEST_SFEQOF, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "seto", "",   0,   0,   0,  INS_TEST_OFLOW, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setno", "",   0,   0,   0,  INS_TEST_OFLOW, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setc", "",   0,   0,   0,  INS_TEST_CARRY, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setnc", "",   0,   0,   0,  INS_TEST_NCARRY, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setz", "",   0,   0,   0,  INS_TEST_ZERO, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setnz", "",   0,   0,   0,  INS_TEST_NZERO, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setbe", "",   0,   0,   0,  INS_TEST_CARRY|INS_TEST_OR|INS_TEST_ZERO, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "seta", "",   0,   0,   0,  INS_TEST_NCARRY|INS_TEST_NZERO, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "sets", "",   0,   0,   0,  INS_TEST_SIGN, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setns", "",   0,   0,   0,  INS_TEST_NSIGN, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setpe", "",   0,   0,   0,  INS_TEST_PARITY, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setpo", "",   0,   0,   0,  INS_TEST_NPARITY, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setl", "",   0,   0,   0,  INS_TEST_SFNEOF, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setge", "",   0,   0,   0,  INS_TEST_SFEQOF, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setle", "",   0,   0,   0,  INS_TEST_ZERO|INS_TEST_OR|INS_TEST_SFNEOF, 0 },
+	 { 0,   INS_MOVCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "setg", "",   0,   0,   0,  INS_TEST_NZERO|INS_TEST_SFEQOF, 0 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RS | OPTYPE_w | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   4,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RS | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   4,   0,   0,  0 , 33 },
+	 { 0,   INS_CPUID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_GP,   "cpuid", "",   0,   0,   0,  0 , 10 },
+	 { 0,   INS_BITTEST,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "bt", "",   0,   0,   0,  INS_SET_CARRY, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   cpu_80386 | isa_GP,   "shld", "",   0,   0,   0,  INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 //{ 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ADDRMETH_I | OP_R | OPTYPE_b | ADDRMETH_RR,   cpu_80386 | isa_GP,   "shld", "",   0,   0,   1,  INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ADDRMETH_RR | OP_R | OPTYPE_b,   cpu_80386 | isa_GP,   "shld", "",   0,   0,   1,  INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_RS | OPTYPE_w | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   5,   0,   0,  0 , 33 },
+	 { 0,   INS_POP,  0,   ADDRMETH_RS | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "pop", "",   5,   0,   0,  0 , 33 },
+	 { 0,   INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "rsm", "",   0,   0,   0,  INS_SET_ALL|INS_SET_DIR, 42 },
+	 { 0,   INS_BITTEST,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "bts", "",   0,   0,   0,  INS_SET_CARRY, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   cpu_80386 | isa_GP,   "shrd", "",   0,   0,   0,  INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ADDRMETH_RR | OP_R | OPTYPE_b ,   cpu_80386 | isa_GP,   "shrd", "",   0,   0,   1,  INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { idx_0FAE,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MUL,  0,   ADDRMETH_G | OPTYPE_v | OP_SIGNED | OP_R | OP_W,   ADDRMETH_E | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "imul", "",   0,   0,   0,  INS_SET_OFLOW|INS_SET_CARRY,  },
+	 { 0,   INS_XCHGCC,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_G | OPTYPE_b | OP_W,   ARG_NONE,   cpu_80486 | isa_GP,   "cmpxchg", "",   0,   0,   0,  INS_SET_ALL, 8 },
+	 { 0,   INS_XCHGCC,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_W,   ARG_NONE,   cpu_80486 | isa_GP,   "cmpxchg", "",   0,   0,   0,  INS_SET_ALL, 7 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_v | OP_W, ADDRMETH_M | OPTYPE_p | OP_W,   ARG_NONE,   cpu_80386 | isa_GP,   "lss", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_BITTEST,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "btr", "",   0,   0,   0,  INS_SET_CARRY, 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_v | OP_W, ADDRMETH_M | OPTYPE_p | OP_W,   ARG_NONE,   cpu_80386 | isa_GP,   "lfs", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_v | OP_W, ADDRMETH_M | OPTYPE_p | OP_W,   ARG_NONE,   cpu_80386 | isa_GP,   "lgs", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "movzx", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_w | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "movzx", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_UNKNOWN,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "ud1", "",   0,   0,   0,  0 , 0 },
+	 { idx_0FBA,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_BITTEST,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_G | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "btc", "",   0,   0,   0,  INS_SET_CARRY, 0 },
+	 { 0,   INS_BITTEST,  0,   ADDRMETH_G | OPTYPE_v | OP_R | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "bsf", "",   0,   0,   0,  INS_SET_ZERO, 0 },
+	 { 0,   INS_BITTEST,  0,   ADDRMETH_G | OPTYPE_v | OP_R | OP_W,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "bsr", "",   0,   0,   0,  INS_SET_ZERO, 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "movsx", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_G | OPTYPE_v | OP_W,   ADDRMETH_E | OPTYPE_w | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "movsx", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_G | OPTYPE_b | OP_W,   ARG_NONE,   cpu_80486 | isa_GP,   "xadd", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_G | OPTYPE_v | OP_W,   ARG_NONE,   cpu_80486 | isa_GP,   "xadd", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0, INS_CMP,  0, ADDRMETH_V | OPTYPE_ps | OP_R, ADDRMETH_W | OPTYPE_ps | OP_R, ADDRMETH_I | OPTYPE_b | OP_R, cpu_PENTIUM4 | isa_GP, "cmpps", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_M | OPTYPE_d | OP_W, ADDRMETH_G | OPTYPE_d | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movnti", "", 0, 0, 0, 0, 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_E | OPTYPE_d | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   cpu_PENTIUM2 | isa_GP,   "pinsrw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_G | OPTYPE_d | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   cpu_PENTIUM2 | isa_GP,   "pextrw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_V | OPTYPE_ps | OP_W,   ADDRMETH_W | OPTYPE_ps | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   cpu_PENTIUM2 | isa_GP,   "shufps", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_XCHGCC,  0, ADDRMETH_M | OPTYPE_q | OP_R | OP_W, ARG_NONE, ARG_NONE, cpu_PENTIUM | isa_GP, "cmpxchg8b", "", 0, 0, 0, 0, 9 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_d | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "bswap", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_d | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "bswap", "",   1,   0,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_d | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "bswap", "",   2,   0,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_d | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "bswap", "",   3,   0,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_d | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "bswap", "",   4,   0,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_d | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "bswap", "",   5,   0,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_d | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "bswap", "",   6,   0,   0,  0 , 0 },
+	 { 0,   INS_XCHG,  0,   ADDRMETH_RR | OPTYPE_d | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "bswap", "",   7,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrlw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrld", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrlq", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_ADD,  0, ADDRMETH_P | OPTYPE_q | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "paddq", "", 0, 0, 0, 0, 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pmullw", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_G | OPTYPE_d | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "pmovmskb", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psubusb", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psubusw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "pminub", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pand", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "paddusb", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "paddusw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ARITH,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "pmaxub", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pandn", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "pavgb", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psraw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrad", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "pavgw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MUL,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "pmulhuw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MUL,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pmulhw", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  INS_NOTE_NOSUFFIX,   ADDRMETH_W | OPTYPE_q | OP_W,   ADDRMETH_V | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movntq", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psubsb", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psubsw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ARITH,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "pminsw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OR,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "por", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "paddsb", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "paddsw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ARITH,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "pmaxsw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_XOR,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pxor", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psllw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pslld", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psllq", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_MUL,  0, ADDRMETH_P | OPTYPE_q | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pmuludq", "", 0, 0, 0, 0, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pmaddwd", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "psadbw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  0,   ADDRMETH_P | OPTYPE_pi | OP_W,   ADDRMETH_Q | OPTYPE_pi | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "maskmovq", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psubb", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psubw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psubd", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_SUB,  0, ADDRMETH_P | OPTYPE_q | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psubq", "", 0, 0, 0, 0, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "paddb", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "paddw", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_Q | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "paddd", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_660F[] = {	/* SIMD 66 Two-byte Opcodes */
+	 { 0, INS_MOV,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movupd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_W | OPTYPE_pd | OP_R, ADDRMETH_V | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movupd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MOV,  INS_NOTE_NOSUFFIX, ADDRMETH_V | OPTYPE_q | OP_R, ADDRMETH_M | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movlpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MOV,  INS_NOTE_NOSUFFIX, ADDRMETH_M | OPTYPE_q | OP_R, ADDRMETH_V | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movlpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "unpcklpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "unpckhpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MOV,  INS_NOTE_NOSUFFIX, ADDRMETH_V | OPTYPE_q | OP_R, ADDRMETH_M | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movhpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MOV,  INS_NOTE_NOSUFFIX, ADDRMETH_M | OPTYPE_q | OP_R, ADDRMETH_V | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movhpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movapd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_W | OPTYPE_pd | OP_R, ADDRMETH_V | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movapd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_Q | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtpi2pd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_M | OPTYPE_pd | OP_R, ADDRMETH_V | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movntpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_P | OPTYPE_q | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvttpd2pi", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_P | OPTYPE_q | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtpd2pi", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "ucomisd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "comisd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_G | OPTYPE_d | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movmskpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_FSQRT,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "sqrtpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_AND,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "andpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_AND,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "andnpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_OR,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "orpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_XOR,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "xorpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_ADD,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "addpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MUL,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "mulpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ps | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtpd2ps", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_ps | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtps2dq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "subpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "minpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "divpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "maxpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "punpcklbw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "punpcklwd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "punpckldq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "packsswb", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pcmpgtb", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pcmpgtw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pcmpgtd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "packuswb", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "punpckhbw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "punpckhwd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "punpckhdq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "packssdw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "punpcklqdq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "punpckhqdq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_d | OP_R, ADDRMETH_E | OPTYPE_d | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movdqa", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ADDRMETH_I | OPTYPE_b | OP_R, cpu_PENTIUM4 | isa_GP, "pshufd", "", 0, 0, 0, 0, 0 },
+	 { idx_660F71, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { idx_660F72, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { idx_660F73, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pcmpeqb", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pcmpeqw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pcmpeqd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "haddpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "hsubpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_E | OPTYPE_d | OP_R, ADDRMETH_V | OPTYPE_d | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_W | OPTYPE_dq | OP_R, ADDRMETH_V | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movdqa", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ADDRMETH_I | OPTYPE_b | OP_R, cpu_PENTIUM4 | isa_GP, "cmppd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_w | OP_R, ADDRMETH_E | OPTYPE_d | OP_R, ADDRMETH_I | OPTYPE_b | OP_R, cpu_PENTIUM4 | isa_GP, "pinsrw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_G | OPTYPE_d | OP_R, ADDRMETH_W | OPTYPE_w | OP_R, ADDRMETH_I | OPTYPE_b | OP_R, cpu_PENTIUM4 | isa_GP, "pextrw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ADDRMETH_I | OPTYPE_b | OP_R, cpu_PENTIUM4 | isa_GP, "shufpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "addsubpd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psrlw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psrld", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psrlq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "paddq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pmullw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_W | OPTYPE_q | OP_R, ADDRMETH_V | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_G | OPTYPE_d | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pmovmskb", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psubusb", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psubusw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pminub", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pand", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "paddusb", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "paddusw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pmaxub", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pandn", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pavgb", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psraw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psrad", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pavgw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pmulhuw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pmulhw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvttpd2dq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_M | OPTYPE_dq | OP_R, ADDRMETH_V | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movntdq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psubsb", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psubsw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pminsw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "por", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "paddsb", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "paddsw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pmaxsw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pxor", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psllw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pslld", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psllq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pmuludq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "pmaddwd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psadbw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "maskmovdqu", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psubb", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psubw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psubd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "psubq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "paddb", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "paddw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "paddd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 }
+};
+
+
+static ia32_insn_t tbl_F20F[] = {	/* SIMD F2 Two-byte Opcodes */
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movsd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_W | OPTYPE_sd | OP_R, ADDRMETH_V | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movsd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_q | OP_R, ADDRMETH_W | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movddup", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_E | OPTYPE_d | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtsi2sd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_G | OPTYPE_d | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvttsd2si", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_G | OPTYPE_d | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtsd2si", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "sqrtsd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "addsd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "mulsd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtsd2ss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "subsd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "minsd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "divsd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "maxsd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ADDRMETH_I | OPTYPE_b | OP_R, cpu_PENTIUM4 | isa_GP, "pshuflw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ps | OP_R, ADDRMETH_W | OPTYPE_ps | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "haddps", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ps | OP_R, ADDRMETH_W | OPTYPE_ps | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "hsubps", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_W | OPTYPE_sd | OP_R, ADDRMETH_I | OPTYPE_b | OP_R, cpu_PENTIUM4 | isa_GP, "cmpsd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ps | OP_R, ADDRMETH_W | OPTYPE_ps | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "addsubps", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_P | OPTYPE_q | OP_R, ADDRMETH_W | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movdq2q", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_pd | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtpd2dq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_M | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "lddqu", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 }
+};
+
+
+static ia32_insn_t tbl_F30F[] = {	/* SIMD F3 Two-byte Opcodes */
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_W | OPTYPE_ss | OP_R, ADDRMETH_V | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ps | OP_R, ADDRMETH_W | OPTYPE_ps | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movsldup", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ps | OP_R, ADDRMETH_W | OPTYPE_ps | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movshdup", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_E | OPTYPE_d | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtsi2ss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_G | OPTYPE_d | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvttss2si", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_G | OPTYPE_d | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtss2si", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "sqrtss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "rsqrtss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "rcpss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "addss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "mulss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_sd | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtss2sd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_ps | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvttps2dq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "subss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "minss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "divss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "maxss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movdqu", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_W | OPTYPE_dq | OP_R, ADDRMETH_I | OPTYPE_b | OP_R, cpu_PENTIUM4 | isa_GP, "pshufhw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_q | OP_R, ADDRMETH_W | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_W | OPTYPE_dq | OP_R, ADDRMETH_V | OPTYPE_dq | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movdqu", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_ss | OP_R, ADDRMETH_W | OPTYPE_ss | OP_R, ADDRMETH_I | OPTYPE_b | OP_R, cpu_PENTIUM4 | isa_GP, "cmpss", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_dq | OP_R, ADDRMETH_Q | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "movq2dq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_UNKNOWN,  0, ADDRMETH_V | OPTYPE_pd | OP_R, ADDRMETH_W | OPTYPE_q | OP_R, ARG_NONE, cpu_PENTIUM4 | isa_GP, "cvtdq2pd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "", "", 0, 0, 0, 0, 0 }
+};
+
+
+static ia32_insn_t tbl_0F00[] = {	/* Group 6 */
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "sldt", "",   0,   0,   0,  0 , 46 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "str", "",   0,   0,   0,  0 , 49 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "lldt", "",   0,   0,   0,  0 , 29 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "ltr", "",   0,   0,   0,  0 , 32 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "verr", "",   0,   0,   0,  INS_SET_ZERO, 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "verw", "",   0,   0,   0,  INS_SET_ZERO, 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_0F01[] = {	/* Group 7 */
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_s | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "sgdt", "",   0,   0,   0,  0 , 44 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_s | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "sidt", "",   0,   0,   0,  0 , 45 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_s | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "lgdt", "",   0,   0,   0,  0 , 27 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_s | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "lidt", "",   0,   0,   0,  0 , 28 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "smsw", "",   0,   0,   0,  0 , 47 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "lmsw", "",   0,   0,   0,  0 , 30 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_none | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "invlpg", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_s | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "sgdt", "",   0,   0,   0,  0 , 44 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_s | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "sidt", "",   0,   0,   0,  0 , 45 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_s | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "lgdt", "",   0,   0,   0,  0 , 27 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_s | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "lidt", "",   0,   0,   0,  0 , 28 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "smsw", "",   0,   0,   0,  0 , 47 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "lmsw", "",   0,   0,   0,  0 , 30 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_none | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "invlpg", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_s | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "sgdt", "",   0,   0,   0,  0 , 44 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_s | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "sidt", "",   0,   0,   0,  0 , 45 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_s | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "lgdt", "",   0,   0,   0,  0 , 27 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_s | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "lidt", "",   0,   0,   0,  0 , 28 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "smsw", "",   0,   0,   0,  0 , 47 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "lmsw", "",   0,   0,   0,  0 , 30 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_M | OPTYPE_none | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80486 | isa_GP,   "invlpg", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { idx_0F0111,  0,   0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "smsw", "",   0,   0,   0,  0 , 47 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_w | OP_W,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "lmsw", "",   0,   0,   0,  0 , 30 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_0F0111[] = {	/* Monitor/MWait opcode */
+	 { 0, INS_SYSTEM,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "monitor", "", 0, 0, 0, 0, 54 },
+	 { 0, INS_SYSTEM,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "mwait", "", 0, 0, 0, 0, 55 }
+};
+
+
+static ia32_insn_t tbl_0F12[] = {	/* Movlps Opcode */
+	 { 0,   INS_MOV,  INS_NOTE_NOSUFFIX,   ADDRMETH_V | OPTYPE_q | OP_W,   ADDRMETH_M | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movlps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  INS_NOTE_NOSUFFIX,   ADDRMETH_V | OPTYPE_q | OP_W,   ADDRMETH_M | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movlps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_MOV,  INS_NOTE_NOSUFFIX,   ADDRMETH_V | OPTYPE_q | OP_W,   ADDRMETH_M | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movlps", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_V | OPTYPE_ps | OP_R | OP_W, ADDRMETH_W | OPTYPE_ps | OP_R , ARG_NONE, cpu_PENTIUM4 | isa_GP, "movhlps", "", 0, 0, 0, 0, 0 }
+};
+
+
+static ia32_insn_t tbl_0F16[] = {	/* Movhps Opcode */
+	 { 0,   INS_OTHER,  0,   ADDRMETH_V | OPTYPE_q | OP_W,   ADDRMETH_M | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movhps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_V | OPTYPE_q | OP_W,   ADDRMETH_M | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movhps", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_V | OPTYPE_q | OP_W,   ADDRMETH_M | OPTYPE_q | OP_R,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "movhps", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_MOV,  0, ADDRMETH_V | OPTYPE_ps | OP_R | OP_W, ADDRMETH_W | OPTYPE_ps | OP_R , ARG_NONE, cpu_PENTIUM4 | isa_GP, "movlhps", "", 0, 0, 0, 0, 0 }
+};
+
+
+static ia32_insn_t tbl_0F18[] = {	/* Group 16 */
+	 { 0,   INS_SYSTEM,  0,    OP_W | OPTYPE_b | ADDRMETH_M,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "prefetchnta", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_RT | OPTYPE_d | OP_W, ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "prefetcht0", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_RT | OPTYPE_d | OP_W, ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "prefetcht1", "",   1,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_RT | OPTYPE_d | OP_W, ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "prefetcht2", "",   2,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,    OP_W | OPTYPE_b | ADDRMETH_M,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "prefetchnta", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_RT | OPTYPE_d | OP_W, ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "prefetcht0", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_RT | OPTYPE_d | OP_W, ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "prefetcht1", "",   1,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_RT | OPTYPE_d | OP_W, ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "prefetcht2", "",   2,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,    OP_W | OPTYPE_b | ADDRMETH_M,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "prefetchnta", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_RT | OPTYPE_d | OP_W, ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "prefetcht0", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_RT | OPTYPE_d | OP_W, ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "prefetcht1", "",   1,   0,   0,  0 , 0 },
+	 { 0,   INS_SYSTEM,  0,   ADDRMETH_RT | OPTYPE_d | OP_W, ARG_NONE,   ARG_NONE,   cpu_PENTIUM2 | isa_GP,   "prefetcht2", "",   2,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_0F71[] = {	/* Group 12 */
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrlw", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psraw", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psllw", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_660F71[] = {	/* Group 12 SSE */
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_dq | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrlw", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_dq | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psraw", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_dq | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psllw", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_0F72[] = {	/* Group 13 */
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrld", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrad", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pslld", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_660F72[] = {	/* Group 13 SSE */
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_W | OPTYPE_dq | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrld", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_W | OPTYPE_dq | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrad", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_W | OPTYPE_dq | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pslld", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_0F73[] = {	/* Group 14 */
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrlq", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_P | OPTYPE_q | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psllq", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_660F73[] = {	/* Group 14 SSE */
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_W | OPTYPE_dq | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrlq", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_W | OPTYPE_dq | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psrldq", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_W | OPTYPE_dq | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "psllq", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_OTHER,  0,   ADDRMETH_W | OPTYPE_dq | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "pslldq", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_0FAE[] = {	/* Group 15 */
+	 { 0, INS_FPU,  0,   ADDRMETH_E | OPTYPE_fx | OP_W,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "fxsave", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_FPU,  0,   ADDRMETH_E | OPTYPE_fx | OP_R,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "fxrstor", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_d | OP_R,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM2,   "ldmxcsr", "",   0,   0,   0,  0 , 25 },
+	 { 0, INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_d | OP_W,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM2,   "stmxcsr", "",   0,   0,   0 ,  0, 48 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_SYSTEM,  0, ADDRMETH_M | OPTYPE_b | OP_R, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "clflush", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_FPU,  0,   ADDRMETH_E | OPTYPE_fx | OP_W,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "fxsave", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_FPU,  0,   ADDRMETH_E | OPTYPE_fx | OP_R,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "fxrstor", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_d | OP_R,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM2,   "ldmxcsr", "",   0,   0,   0,  0 , 25 },
+	 { 0, INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_d | OP_W,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM2,   "stmxcsr", "",   0,   0,   0 ,  0, 48 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_SYSTEM,  0, ADDRMETH_M | OPTYPE_b | OP_R, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "clflush", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_FPU,  0,   ADDRMETH_E | OPTYPE_fx | OP_W,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "fxsave", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_FPU,  0,   ADDRMETH_E | OPTYPE_fx | OP_R,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_MMX,   "fxrstor", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_d | OP_R,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM2,   "ldmxcsr", "",   0,   0,   0,  0 , 25 },
+	 { 0, INS_SYSTEM,  0,   ADDRMETH_E | OPTYPE_d | OP_W,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM2,   "stmxcsr", "",   0,   0,   0 ,  0, 48 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_SYSTEM,  0, ADDRMETH_M | OPTYPE_b | OP_R, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "clflush", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "lfence", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "mfence", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "sfence", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_0FBA[] = {	/* Group 8 */
+	 { 0,   INS_BITTEST,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "bt", "",   0,   0,   0,  INS_SET_CARRY, 0 },
+	 { 0,   INS_BITTEST,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "bts", "",   0,   0,   0,  INS_SET_CARRY, 0 },
+	 { 0,   INS_BITTEST,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "btr", "",   0,   0,   0,  INS_SET_CARRY, 0 },
+	 { 0,   INS_BITTEST,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "btc", "",   0,   0,   0   ,  INS_SET_CARRY, 0 }
+};
+
+
+static ia32_insn_t tbl_0FC7[] = {	/* Group 9 */
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_XCHGCC,  0,   ADDRMETH_M | OPTYPE_q | OP_W,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_GP,   "cmpxch8b", "",   0,   0,   0   ,  0 , 9 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_XCHGCC,  0,   ADDRMETH_M | OPTYPE_q | OP_W,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_GP,   "cmpxch8b", "",   0,   0,   0   ,  0 , 9 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0, INS_INVALID,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_XCHGCC,  0,   ADDRMETH_M | OPTYPE_q | OP_W,   ARG_NONE,   ARG_NONE,   cpu_PENTIUM | isa_GP,   "cmpxch8b", "",   0,   0,   0   ,  0 , 9 }
+};
+
+
+static ia32_insn_t tbl_0FB9[] = {	/* Group 10 */
+	 { 0, INS_SYSTEM,  0,   ARG_NONE,   ARG_NONE,   ARG_NONE,   0,   "fxsave", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_C6[] = {	/* Group 11a */
+	 { 0,   INS_MOV,  0,   ADDRMETH_E | OPTYPE_b | OP_W,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_C7[] = {	/* Group 11b */
+	 { 0,   INS_MOV,  0,   ADDRMETH_E | OPTYPE_v | OP_W,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mov", "",   0,   0,   0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_80[] = {	/* Group 1a */
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "add", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_OR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "or", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "adc", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_E | OPTYPE_b | OP_SIGNED | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sbb", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "and", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_E | OPTYPE_b | OP_SIGNED | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sub", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_XOR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xor", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_CMP,  0,   ADDRMETH_E | OPTYPE_b | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "cmp", "",   0,   0,   0   ,  INS_SET_ALL, 0 }
+};
+
+
+static ia32_insn_t tbl_81[] = {	/* Group 1b */
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "add", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_OR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "or", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "adc", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_E | OPTYPE_v | OP_SIGNED | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sbb", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "and", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_E | OPTYPE_v | OP_SIGNED | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sub", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_XOR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xor", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_CMP,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "cmp", "",   0,   0,   0   ,  INS_SET_ALL, 0 }
+};
+
+
+static ia32_insn_t tbl_82[] = {	/* Group 1c */
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "add", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_OR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "or", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "adc", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_E | OPTYPE_b | OP_SIGNED | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sbb", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "and", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_E | OPTYPE_b | OP_SIGNED | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sub", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_XOR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xor", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_CMP,  0,   ADDRMETH_E | OPTYPE_b | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "cmp", "",   0,   0,   0   ,  INS_SET_ALL, 0 }
+};
+
+
+static ia32_insn_t tbl_83[] = {	/* Group 1d */
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "add", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_OR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "or", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_ADD,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "adc", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_E | OPTYPE_v | OP_SIGNED | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sbb", "",   0,   0,   0,  INS_SET_ALL|INS_TEST_CARRY, 0 },
+	 { 0,   INS_AND,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "and", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SUB,  0,   ADDRMETH_E | OPTYPE_v | OP_SIGNED | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sub", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_XOR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "xor", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_CMP,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "cmp", "",   0,   0,   0   ,  INS_SET_ALL, 0 }
+};
+
+
+static ia32_insn_t tbl_C0[] = {	/* Group 2a */
+	 { 0,   INS_ROL,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rol", "",   0,   0,   0,  INS_SET_CARRY|INS_SET_OFLOW, 0 },
+	 { 0,   INS_ROR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "ror", "",   0,   0,   0,  INS_SET_CARRY|INS_SET_OFLOW, 0 },
+	 { 0,   INS_ROL,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rcl", "",   0,   0,   0,  INS_SET_CARRY|INS_SET_OFLOW|INS_TEST_CARRY, 0 },
+	 { 0,   INS_ROR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rcr", "",   0,   0,   0,  INS_SET_CARRY|INS_SET_OFLOW|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "shl", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "shr", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sal", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sar", "",   0,   0,   0   ,  INS_SET_ALL, 0 }
+};
+
+
+static ia32_insn_t tbl_C1[] = {	/* Group 2b */
+	 { 0,   INS_ROL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rol", "",   0,   0,   0,  INS_SET_CARRY|INS_SET_OFLOW, 0 },
+	 { 0,   INS_ROR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "ror", "",   0,   0,   0,  INS_SET_CARRY|INS_SET_OFLOW, 0 },
+	 { 0,   INS_ROL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rcl", "",   0,   0,   0,  INS_SET_CARRY|INS_SET_OFLOW|INS_TEST_CARRY, 0 },
+	 { 0,   INS_ROR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rcr", "",   0,   0,   0,  INS_SET_CARRY|INS_SET_OFLOW|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "shl", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "shr", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sal", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_I | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sar", "",   0,   0,   0   ,  INS_SET_ALL, 0 }
+};
+
+
+static ia32_insn_t tbl_D0[] = {	/* Group 2c */
+	 { 0,   INS_ROL,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_II | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rol", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW, 0 },
+	 { 0,   INS_ROR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_II | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "ror", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW, 0 },
+	 { 0,   INS_ROL,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_II | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rcl", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW|INS_TEST_CARRY, 0 },
+	 { 0,   INS_ROR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_II | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rcr", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_II | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "shl", "",   0,   1,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_II | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "shr", "",   0,   1,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_II | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sal", "",   0,   1,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_II | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sar", "",   0,   1,   0   ,  INS_SET_ALL, 0 }
+};
+
+
+static ia32_insn_t tbl_D1[] = {	/* Group 2d */
+	 { 0,   INS_ROL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_II | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rol", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW, 0 },
+	 { 0,   INS_ROR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_II | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "ror", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW, 0 },
+	 { 0,   INS_ROL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_II | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rcl", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW|INS_TEST_CARRY, 0 },
+	 { 0,   INS_ROR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_II | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rcr", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_II | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "shl", "",   0,   1,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_II | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "shr", "",   0,   1,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_II | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sal", "",   0,   1,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_II | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sar", "",   0,   1,   0   ,  INS_SET_ALL, 0 }
+};
+
+
+static ia32_insn_t tbl_D2[] = {	/* Group 2e */
+	 { 0,   INS_ROL,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rol", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW, 0 },
+	 { 0,   INS_ROR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "ror", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW, 0 },
+	 { 0,   INS_ROL,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rcl", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW|INS_TEST_CARRY, 0 },
+	 { 0,   INS_ROR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rcr", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "shl", "",   0,   1,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "shr", "",   0,   1,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sal", "",   0,   1,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sar", "",   0,   1,   0   ,  INS_SET_ALL, 0 }
+};
+
+
+static ia32_insn_t tbl_D3[] = {	/* Group 2f */
+	 { 0,   INS_ROL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rol", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW, 0 },
+	 { 0,   INS_ROR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "ror", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW, 0 },
+	 { 0,   INS_ROL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rcl", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW|INS_TEST_CARRY, 0 },
+	 { 0,   INS_ROR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "rcr", "",   0,   1,   0,  INS_SET_CARRY|INS_SET_OFLOW|INS_TEST_CARRY, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "shl", "",   0,   1,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "shr", "",   0,   1,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHL,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sal", "",   0,   1,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_SHR,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ADDRMETH_RR | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "sar", "",   0,   1,   0   ,  INS_SET_ALL, 0 }
+};
+
+
+static ia32_insn_t tbl_F6[] = {	/* Group 3a */
+	 { 0,   INS_TEST,  0,   ADDRMETH_E | OPTYPE_b | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "test", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_TEST,  0,   ADDRMETH_E | OPTYPE_b | OP_R,   ADDRMETH_I | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "test", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_NOT,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "not", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_NEG,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "neg", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_MUL,  0,   OPTYPE_b | ADDRMETH_RR | OP_W | OP_R,   ADDRMETH_E | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mul", "",   0,   0,   0,  INS_SET_OFLOW|INS_SET_CARRY, 22 },
+	 { 0,   INS_MUL,  0,   OPTYPE_b | ADDRMETH_RR | OP_W | OP_SIGNED | OP_R,   ADDRMETH_E | OPTYPE_b | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "imul", "",   0,   0,   0,  INS_SET_OFLOW|INS_SET_CARRY, 22 },
+	 { 0,   INS_DIV,  0,   ADDRMETH_RR | OPTYPE_b | OP_W | OP_R,   ADDRMETH_E | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "div", "",   0,   0,   0,  0 , 13 },
+	 { 0,   INS_DIV,  0,   ADDRMETH_RR | OPTYPE_b | OP_W | OP_R,   ADDRMETH_E | OPTYPE_b | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "idiv", "",   0,   0,   0   ,  0 , 13 }
+};
+
+
+static ia32_insn_t tbl_F7[] = {	/* Group 3b */
+	 { 0,   INS_TEST,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "test", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_TEST,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ADDRMETH_I | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "test", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_NOT,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "not", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_NEG,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "neg", "",   0,   0,   0,  INS_SET_ALL, 0 },
+	 { 0,   INS_MUL,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "mul", "",   0,   0,   0,  INS_SET_OFLOW|INS_SET_CARRY, 23 },
+	 { 0,   INS_MUL,  0,   ADDRMETH_RR | OPTYPE_v | OP_SIGNED | OP_W | OP_R,   ADDRMETH_E | OPTYPE_v | OP_SIGNED | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "imul", "",   0,   0,   0,  INS_SET_OFLOW|INS_SET_CARRY, 23 },
+	 { 0,   INS_DIV,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "div", "",   0,   0,   0,  0 , 14 },
+	 { 0,   INS_DIV,  0,   ADDRMETH_RR | OPTYPE_v | OP_W | OP_R,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   cpu_80386 | isa_GP,   "idiv", "",   0,   0,   0,  0 , 14 }
+};
+
+
+static ia32_insn_t tbl_FE[] = {	/* Group 4 */
+	 { 0,   INS_INC,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "inc", "",   0,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_DEC,  0,   ADDRMETH_E | OPTYPE_b | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "dec", "",   0,   0,   0   ,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 }
+};
+
+
+static ia32_insn_t tbl_FF[] = {	/* Group 5 */
+	 { 0,   INS_INC,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "inc", "",   0,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_DEC,  0,   ADDRMETH_E | OPTYPE_v | OP_W | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "dec", "",   0,   0,   0,  INS_SET_OFLOW|INS_SET_SIGN|INS_SET_ZERO|INS_SET_PARITY, 0 },
+	 { 0,   INS_CALL,  0,   ADDRMETH_E | OPTYPE_v | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "call", "",   0,   0,   0,  0 , 3 },
+	 { 0,   INS_CALL,  0,   ADDRMETH_M | OPTYPE_p | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "call", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_BRANCH,  0,   ADDRMETH_E | OPTYPE_v | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jmp", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_BRANCH,  0,   ADDRMETH_M | OPTYPE_p | OP_X,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "jmp", "",   0,   0,   0,  0 , 0 },
+	 { 0,   INS_PUSH,  0,   ADDRMETH_E | OPTYPE_v | OP_R,   ARG_NONE,   ARG_NONE,   cpu_80386 | isa_GP,   "push", "",   0,   0,   0,  0 , 33 }
+};
+
+
+static ia32_insn_t tbl_D8[] = {	/* FPU D8 */
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fs|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fs|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fs|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcom", "",  0,  0,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 17 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fs|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomp", "",  0,  0,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fs|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fs|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fs|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fs|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  0,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_D8C0[] = {	/* FPU D8 C0 */
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  0,  1,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  0,  2,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  0,  3,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  0,  4,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  0,  5,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  0,  6,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  0,  7,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  0,  1,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  0,  2,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  0,  3,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  0,  4,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  0,  5,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  0,  6,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  0,  7,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcom", "",  0,  0,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 17 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcom", "",  0,  1,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 17 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcom", "",  0,  2,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 17 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcom", "",  0,  3,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 17 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcom", "",  0,  4,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 17 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcom", "",  0,  5,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 17 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcom", "",  0,  6,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 17 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcom", "",  0,  7,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 17 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomp", "",  0,  0,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomp", "",  0,  1,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomp", "",  0,  2,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomp", "",  0,  3,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomp", "",  0,  4,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomp", "",  0,  5,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomp", "",  0,  6,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomp", "",  0,  7,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  0,  1,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  0,  2,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  0,  3,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  0,  4,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  0,  5,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  0,  6,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  0,  7,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  0,  1,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  0,  2,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  0,  3,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  0,  4,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  0,  5,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  0,  6,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  0,  7,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  0,  1,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  0,  2,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  0,  3,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  0,  4,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  0,  5,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  0,  6,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  0,  7,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  0,  1,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  0,  2,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  0,  3,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  0,  4,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  0,  5,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  0,  6,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  0,  7,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_D9[] = {	/* FPU D9 */
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fs|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fld", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fs|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fst", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fs|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fstp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fv|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fldenv", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fldcw", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fv|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fnstenv", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fnstcw", "",  0,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_D9C0[] = {	/* FPU D9 C0 */
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fld", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fld", "",  0,  1,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fld", "",  0,  2,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fld", "",  0,  3,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fld", "",  0,  4,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fld", "",  0,  5,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fld", "",  0,  6,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fld", "",  0,  7,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fxch", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fxch", "",  0,  1,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fxch", "",  0,  2,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fxch", "",  0,  3,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fxch", "",  0,  4,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fxch", "",  0,  5,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fxch", "",  0,  6,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fxch", "",  0,  7,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fnop", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fchs", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fabs", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ftst", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fxam", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fld1", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fldl2t", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fldl2e", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fldpi", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fldlg2", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fldln2", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fldz", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "f2xm1", "",  0,  0,  0 ,  0 , 16 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fyl2x", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fptan", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fpatan", "",  0,  0,  0 ,  0 , 18 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fxtract", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fprem1", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdecstp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fincstp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fprem", "",  0,  0,  0 ,  0 , 19 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fyl2xp1", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsqrt", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsincos", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "frndint", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fscale", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsin", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcos", "",  0,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_DA[] = {	/* FPU DA */
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_d|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fiadd", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_d|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fimul", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_d|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ficom", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_d|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ficomp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_d|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fisub", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_d|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fisubr", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_d|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fidiv", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_d|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fidivr", "",  0,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_DAC0[] = {	/* FPU DA C0 */
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovb", "",  0,  0,  0 ,  INS_TEST_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovb", "",  0,  1,  0 ,  INS_TEST_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovb", "",  0,  2,  0 ,  INS_TEST_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovb", "",  0,  3,  0 ,  INS_TEST_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovb", "",  0,  4,  0 ,  INS_TEST_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovb", "",  0,  5,  0 ,  INS_TEST_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovb", "",  0,  6,  0 ,  INS_TEST_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovb", "",  0,  7,  0 ,  INS_TEST_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmove", "",  0,  0,  0 ,  INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmove", "",  0,  1,  0 ,  INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmove", "",  0,  2,  0 ,  INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmove", "",  0,  3,  0 ,  INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmove", "",  0,  4,  0 ,  INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmove", "",  0,  5,  0 ,  INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmove", "",  0,  6,  0 ,  INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmove", "",  0,  7,  0 ,  INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovbe", "",  0,  0,  0 ,  INS_TEST_CARRY|INS_TEST_OR|INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovbe", "",  0,  1,  0 ,  INS_TEST_CARRY|INS_TEST_OR|INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovbe", "",  0,  2,  0 ,  INS_TEST_CARRY|INS_TEST_OR|INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovbe", "",  0,  3,  0 ,  INS_TEST_CARRY|INS_TEST_OR|INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovbe", "",  0,  4,  0 ,  INS_TEST_CARRY|INS_TEST_OR|INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovbe", "",  0,  5,  0 ,  INS_TEST_CARRY|INS_TEST_OR|INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovbe", "",  0,  6,  0 ,  INS_TEST_CARRY|INS_TEST_OR|INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovbe", "",  0,  7,  0 ,  INS_TEST_CARRY|INS_TEST_OR|INS_TEST_ZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovu", "",  0,  0,  0 ,  INS_TEST_PARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovu", "",  0,  1,  0 ,  INS_TEST_PARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovu", "",  0,  2,  0 ,  INS_TEST_PARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovu", "",  0,  3,  0 ,  INS_TEST_PARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovu", "",  0,  4,  0 ,  INS_TEST_PARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovu", "",  0,  5,  0 ,  INS_TEST_PARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovu", "",  0,  6,  0 ,  INS_TEST_PARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcmovu", "",  0,  7,  0 ,  INS_TEST_PARITY, 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucompp", "",  0,  0,  0 ,  0 , 21 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_DB[] = {	/* FPU DB */
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_d|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fild", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_FPU,  0, ADDRMETH_M|OPTYPE_d|OP_W, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "fisttp", "", 0, 0, 0, 0, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_d|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fist", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_d|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fistp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fe|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fld", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fe|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fstp", "",  0,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_DBC0[] = {	/* FPU DB C0 */
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnb", "",  0,  0,  0 ,  INS_TEST_NCARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnb", "",  0,  1,  0 ,  INS_TEST_NCARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnb", "",  0,  2,  0 ,  INS_TEST_NCARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnb", "",  0,  3,  0 ,  INS_TEST_NCARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnb", "",  0,  4,  0 ,  INS_TEST_NCARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnb", "",  0,  5,  0 ,  INS_TEST_NCARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnb", "",  0,  6,  0 ,  INS_TEST_NCARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnb", "",  0,  7,  0 ,  INS_TEST_NCARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovne", "",  0,  0,  0 ,  INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovne", "",  0,  1,  0 ,  INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovne", "",  0,  2,  0 ,  INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovne", "",  0,  3,  0 ,  INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovne", "",  0,  4,  0 ,  INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovne", "",  0,  5,  0 ,  INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovne", "",  0,  6,  0 ,  INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovne", "",  0,  7,  0 ,  INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnbe", "",  0,  0,  0 ,  INS_TEST_NCARRY|INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnbe", "",  0,  1,  0 ,  INS_TEST_NCARRY|INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnbe", "",  0,  2,  0 ,  INS_TEST_NCARRY|INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnbe", "",  0,  3,  0 ,  INS_TEST_NCARRY|INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnbe", "",  0,  4,  0 ,  INS_TEST_NCARRY|INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnbe", "",  0,  5,  0 ,  INS_TEST_NCARRY|INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnbe", "",  0,  6,  0 ,  INS_TEST_NCARRY|INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnbe", "",  0,  7,  0 ,  INS_TEST_NCARRY|INS_TEST_NZERO, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnu", "",  0,  0,  0 ,  INS_TEST_NPARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnu", "",  0,  1,  0 ,  INS_TEST_NPARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnu", "",  0,  2,  0 ,  INS_TEST_NPARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnu", "",  0,  3,  0 ,  INS_TEST_NPARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnu", "",  0,  4,  0 ,  INS_TEST_NPARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnu", "",  0,  5,  0 ,  INS_TEST_NPARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnu", "",  0,  6,  0 ,  INS_TEST_NPARITY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcmovnu", "",  0,  7,  0 ,  INS_TEST_NPARITY, 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fnclex", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fninit", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomi", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomi", "",  0,  1,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomi", "",  0,  2,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomi", "",  0,  3,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomi", "",  0,  4,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomi", "",  0,  5,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomi", "",  0,  6,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomi", "",  0,  7,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcomi", "",  0,  0,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY,  0,  },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcomi", "",  0,  1,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcomi", "",  0,  2,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcomi", "",  0,  3,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcomi", "",  0,  4,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcomi", "",  0,  5,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcomi", "",  0,  6,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_PENTPRO | isa_GP,  "fcomi", "",  0,  7,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_DC[] = {	/* FPU DC */
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fd|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fd|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fd|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcom", "",  0,  0,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 17 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fd|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomp", "",  0,  0,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fd|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fd|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fd|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fd|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  0,  0,  0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_DCC0[] = {	/* FPU DC C0 */
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fadd", "",  7,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmul", "",  7,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubr", "",  7,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsub", "",  7,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivr", "",  7,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdiv", "",  7,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_DD[] = {	/* FPU DD */
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fd|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fld", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_FPU,  0, ADDRMETH_M|OPTYPE_q|OP_W, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "fisttp", "", 0, 0, 0, 0, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fd|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fst", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fd|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fstp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_ft|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "frstor", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_ft|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fnsave", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fnstsw", "",  0,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_DDC0[] = {	/* FPU DD C0 */
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ffree", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ffree", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ffree", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ffree", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ffree", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ffree", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ffree", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ffree", "",  7,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fst", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fst", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fst", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fst", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fst", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fst", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fst", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fst", "",  7,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fstp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fstp", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fstp", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fstp", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fstp", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fstp", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fstp", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fstp", "",  7,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucom", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucom", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucom", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucom", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucom", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucom", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucom", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucom", "",  7,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomp", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomp", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomp", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomp", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomp", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomp", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomp", "",  7,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_DE[] = {	/* FPU DE */
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fiadd", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fimul", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ficom", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "ficomp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fisub", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fisubr", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fidiv", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fidivr", "",  0,  0,  0,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_DEC0[] = {	/* FPU DE C0 */
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "faddp", "",  0,  0,  0 ,  0 , 20 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "faddp", "",  1,  0,  0 ,  0 , 20 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "faddp", "",  2,  0,  0 ,  0 , 20 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "faddp", "",  3,  0,  0 ,  0 , 20 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "faddp", "",  4,  0,  0 ,  0 , 20 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "faddp", "",  5,  0,  0 ,  0 , 20 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "faddp", "",  6,  0,  0 ,  0 , 20 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "faddp", "",  7,  0,  0 ,  0 , 20 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmulp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmulp", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmulp", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmulp", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmulp", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmulp", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmulp", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fmulp", "",  7,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcompp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubrp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubrp", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubrp", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubrp", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubrp", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubrp", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubrp", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubrp", "",  7,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubp", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubp", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubp", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubp", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubp", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubp", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fsubp", "",  7,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivrp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivrp", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivrp", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivrp", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivrp", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivrp", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivrp", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivrp", "",  7,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivp", "",  1,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivp", "",  2,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivp", "",  3,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivp", "",  4,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivp", "",  5,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivp", "",  6,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fdivp", "",  7,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_DF[] = {	/* FPU DF */
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fild", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_FPU,  0, ADDRMETH_M|OPTYPE_w|OP_W, ARG_NONE, ARG_NONE, cpu_PENTIUM4 | isa_GP, "fisttp", "", 0, 0, 0, 0, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fist", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_w|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fistp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fb|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fbld", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_q|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fild", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_fb|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fbstp", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_M|OPTYPE_q|OP_W,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fistp", "",  0,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_DFC0[] = {	/* FPU DF C0 */
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RR | OPTYPE_w | OP_R,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "fnstsw", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomip", "",  0,  0,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomip", "",  0,  1,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomip", "",  0,  2,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomip", "",  0,  3,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomip", "",  0,  4,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomip", "",  0,  5,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomip", "",  0,  6,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fucomip", "",  0,  7,  0 ,  0 , 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomip", "",  0,  0,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomip", "",  0,  1,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomip", "",  0,  2,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomip", "",  0,  3,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomip", "",  0,  4,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomip", "",  0,  5,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomip", "",  0,  6,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0,  INS_FPU,  0,  ADDRMETH_RF | OPTYPE_fp | OP_W,  ADDRMETH_RF | OPTYPE_fp | OP_R,  ARG_NONE,  cpu_80387 | isa_FPU,  "fcomip", "",  0,  7,  0 ,  INS_SET_ZERO|INS_SET_PARITY|INS_SET_CARRY, 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 },
+	 { 0, INS_INVALID,  0,  ARG_NONE,  ARG_NONE,  ARG_NONE,  cpu_80387 | isa_FPU,  "", "",  0,  0,  0 ,  0 , 0 }
+};
+
+
+static ia32_insn_t tbl_0F0F[] = {	/* 3D Now! 0F Suffix */
+	/* 00 */ { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_CONV,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pi2fd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	/* 10 */ { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_CONV,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pf2id", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	/* 20 */ { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	/* 30 */ { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	/* 40 */ { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	/* 50 */ { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	/* 60 */ { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	/* 70 */ { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	/* 80 */ { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_CMP,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfcmpge", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MIN,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfmin", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_ARITH,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfrcp", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_ARITH,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfrsqrt", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_SUB,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfsub", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_ADD,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfadd", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_CMP,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfcmpgt", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MAX,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfmax", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_ARITH,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfrcpit1", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_ARITH,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfrsqit1", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_SUB,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfsubr", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_ADD,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfacc", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_CMP,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfcmpeq", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MUL,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfmul", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_ARITH,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pfrcpit2", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_MUL,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pmulhrw", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_INVALID,  0, ARG_NONE, ARG_NONE, ARG_NONE, cpu_K6 | isa_3DNOW, "", "", 0, 0, 0, 0, 0 },
+	 { 0, INS_AVG,  0, ADDRMETH_P | OPTYPE_pi | OP_R | OP_W, ADDRMETH_Q | OPTYPE_q |OP_R, ARG_NONE, cpu_K6 | isa_3DNOW, "pavgusb", "", 0, 0, 0, 0, 0 }
+};
+
+
+
+/* ================== Table of Opcode Tables ================== */
+ia32_table_desc_t ia32_tables[] = {
+	/* table, prefix table, type, shift, mask, min, max */
+	{ tbl_Main, tbl_opcode, 0x00, 0xFF, 0x00, 0xFF },
+	{ tbl_66, tbl_prefix, 0x00, 0xFF, 0x0F, 0x0F },
+	{ tbl_F2, tbl_prefix, 0x00, 0xFF, 0x0F, 0x0F },
+	{ tbl_F3, tbl_prefix, 0x00, 0xFF, 0x0F, 0x90 },
+	{ tbl_0F, tbl_opcode, 0x00, 0xFF, 0x00, 0xFF },
+	/* 5 */
+	{ tbl_660F, tbl_prefix, 0x00, 0xFF, 0x10, 0xFF },
+	{ tbl_F20F, tbl_prefix, 0x00, 0xFF, 0x10, 0xFF },
+	{ tbl_F30F, tbl_prefix, 0x00, 0xFF, 0x10, 0xFF },
+	{ tbl_0F00, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	{ tbl_0F01, tbl_extension, 0x03, 0x1F, 0x00, 0x1F },
+	/* 10 */
+	{ tbl_0F0111, tbl_ext_ext, 0x00, 0x01, 0x00, 0x01 },
+	{ tbl_0F12, tbl_extension, 0x06, 0x03, 0x00, 0x03 },
+	{ tbl_0F16, tbl_extension, 0x06, 0x03, 0x00, 0x03 },
+	{ tbl_0F18, tbl_extension, 0x03, 0x1F, 0x00, 0x13 },
+	{ tbl_0F71, tbl_extension, 0x03, 0x1F, 0x00, 0x1F },
+	/* 15 */
+	{ tbl_660F71, tbl_extension, 0x03, 0x1F, 0x00, 0x1F },
+	{ tbl_0F72, tbl_extension, 0x03, 0x1F, 0x00, 0x1F },
+	{ tbl_660F72, tbl_extension, 0x03, 0x1F, 0x00, 0x1F },
+	{ tbl_0F73, tbl_extension, 0x00, 0x00, 0x00, 0x00 },
+	{ tbl_660F73, tbl_extension, 0x03, 0x1F, 0x00, 0x1F },
+	/* 20 */
+	{ tbl_0FAE, tbl_extension, 0x03, 0x1F, 0x00, 0x1F },
+	{ tbl_0FBA, tbl_extension, 0x03, 0x07, 0x04, 0x07 },
+	{ tbl_0FC7, tbl_extension, 0x03, 0x1F, 0x00, 0x11 },
+	{ tbl_0FB9, tbl_extension, 0x03, 0x07, 0x00, 0x00 },
+	{ tbl_C6, tbl_extension, 0x03, 0x07, 0x00, 0x00 },
+	/* 25 */
+	{ tbl_C7, tbl_extension, 0x03, 0x07, 0x00, 0x00 },
+	{ tbl_80, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	{ tbl_81, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	{ tbl_82, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	{ tbl_83, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	/* 30 */
+	{ tbl_C0, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	{ tbl_C1, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	{ tbl_D0, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	{ tbl_D1, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	{ tbl_D2, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	/* 35 */
+	{ tbl_D3, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	{ tbl_F6, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	{ tbl_F7, tbl_extension, 0x03, 0x07, 0x00, 0x07 },
+	{ tbl_FE, tbl_extension, 0x03, 0x07, 0x00, 0x01 },
+	{ tbl_FF, tbl_extension, 0x03, 0x07, 0x00, 0x06 },
+	/* 40 */
+	{ tbl_D8, tbl_fpu, 0x03, 0x07, 0x00, 0xBF },
+	{ tbl_D8C0, tbl_fpu_ext, 0x00, 0xFF, 0xC0, 0xFF },
+	{ tbl_D9, tbl_fpu, 0x03, 0x07, 0x00, 0xBF },
+	{ tbl_D9C0, tbl_fpu_ext, 0x00, 0xFF, 0xC0, 0xFF },
+	{ tbl_DA, tbl_fpu, 0x03, 0x07, 0x00, 0xBF },
+	/* 45 */
+	{ tbl_DAC0, tbl_fpu_ext, 0x00, 0xFF, 0xC0, 0xFF },
+	{ tbl_DB, tbl_fpu, 0x03, 0x07, 0x00, 0xBF },
+	{ tbl_DBC0, tbl_fpu_ext, 0x00, 0xFF, 0xC0, 0xFF },
+	{ tbl_DC, tbl_fpu, 0x03, 0x07, 0x00, 0xBF },
+	{ tbl_DCC0, tbl_fpu_ext, 0x00, 0xFF, 0xC0, 0xFF },
+	/* 50 */
+	{ tbl_DD, tbl_fpu, 0x03, 0x07, 0x00, 0xBF },
+	{ tbl_DDC0, tbl_fpu_ext, 0x00, 0xFF, 0xC0, 0xFF },
+	{ tbl_DE, tbl_fpu, 0x03, 0x07, 0x00, 0xBF },
+	{ tbl_DEC0, tbl_fpu_ext, 0x00, 0xFF, 0xC0, 0xFF },
+	{ tbl_DF, tbl_fpu, 0x03, 0x07, 0x00, 0xBF },
+	/* 55 */
+	{ tbl_DFC0, tbl_fpu_ext, 0x00, 0xFF, 0xC0, 0xFF },
+	{ tbl_0F0F, tbl_suffix, 0x00, 0xFF, 0x00, 0xBF }
+};
+/* ia32_opcode_tables.h */
+/* Table index constants: 
+#define idx_Main 0
+#define idx_66 1
+#define idx_F2 2
+#define idx_F3 3
+#define idx_0F 4
+#define idx_660F 5
+#define idx_F20F 6
+#define idx_F30F 7
+#define idx_0F00 8
+#define idx_0F01 9
+#define idx_0F0111 10
+#define idx_0F12 11
+#define idx_0F16 12
+#define idx_0F18 13
+#define idx_0F71 14
+#define idx_660F71 15
+#define idx_0F72 16
+#define idx_660F72 17
+#define idx_0F73 18
+#define idx_660F73 19
+#define idx_0FAE 20
+#define idx_0FBA 21
+#define idx_0FC7 22
+#define idx_0FB9 23
+#define idx_C6 24
+#define idx_C7 25
+#define idx_80 26
+#define idx_81 27
+#define idx_82 28
+#define idx_83 29
+#define idx_C0 30
+#define idx_C1 31
+#define idx_D0 32
+#define idx_D1 33
+#define idx_D2 34
+#define idx_D3 35
+#define idx_F6 36
+#define idx_F7 37
+#define idx_FE 38
+#define idx_FF 39
+#define idx_D8 40
+#define idx_D8C0 41
+#define idx_D9 42
+#define idx_D9C0 43
+#define idx_DA 44
+#define idx_DAC0 45
+#define idx_DB 46
+#define idx_DBC0 47
+#define idx_DC 48
+#define idx_DCC0 49
+#define idx_DD 50
+#define idx_DDC0 51
+#define idx_DE 52
+#define idx_DEC0 53
+#define idx_DF 54
+#define idx_DFC0 55
+#define idx_0F0F 56
+*/ 
diff --git a/src/third_party/libdisasm/ia32_opcode_tables.h b/src/third_party/libdisasm/ia32_opcode_tables.h
new file mode 100644
index 0000000..bbd4fae
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_opcode_tables.h
@@ -0,0 +1,57 @@
+#define idx_Main 0
+#define idx_66 1
+#define idx_F2 2
+#define idx_F3 3
+#define idx_0F 4
+#define idx_660F 5
+#define idx_F20F 6
+#define idx_F30F 7
+#define idx_0F00 8
+#define idx_0F01 9
+#define idx_0F0111 10
+#define idx_0F12 11
+#define idx_0F16 12
+#define idx_0F18 13
+#define idx_0F71 14
+#define idx_660F71 15
+#define idx_0F72 16
+#define idx_660F72 17
+#define idx_0F73 18
+#define idx_660F73 19
+#define idx_0FAE 20
+#define idx_0FBA 21
+#define idx_0FC7 22
+#define idx_0FB9 23
+#define idx_C6 24
+#define idx_C7 25
+#define idx_80 26
+#define idx_81 27
+#define idx_82 28
+#define idx_83 29
+#define idx_C0 30
+#define idx_C1 31
+#define idx_D0 32
+#define idx_D1 33
+#define idx_D2 34
+#define idx_D3 35
+#define idx_F6 36
+#define idx_F7 37
+#define idx_FE 38
+#define idx_FF 39
+#define idx_D8 40
+#define idx_D8C0 41
+#define idx_D9 42
+#define idx_D9C0 43
+#define idx_DA 44
+#define idx_DAC0 45
+#define idx_DB 46
+#define idx_DBC0 47
+#define idx_DC 48
+#define idx_DCC0 49
+#define idx_DD 50
+#define idx_DDC0 51
+#define idx_DE 52
+#define idx_DEC0 53
+#define idx_DF 54
+#define idx_DFC0 55
+#define idx_0F0F 56
diff --git a/src/third_party/libdisasm/ia32_operand.c b/src/third_party/libdisasm/ia32_operand.c
new file mode 100644
index 0000000..8e7f16a
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_operand.c
@@ -0,0 +1,425 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libdis.h"
+#include "ia32_insn.h"
+#include "ia32_operand.h"
+#include "ia32_modrm.h"
+#include "ia32_reg.h"
+#include "x86_imm.h"
+#include "x86_operand_list.h"
+
+
+
+/* apply segment override to memory operand in insn */
+static void apply_seg( x86_op_t *op, unsigned int prefixes ) {
+	if (! prefixes ) return;
+
+	/* apply overrides from prefix */
+	switch ( prefixes & PREFIX_REG_MASK ) {
+		case PREFIX_CS:
+			op->flags |= op_cs_seg; break;
+		case PREFIX_SS:
+			op->flags |= op_ss_seg; break;
+		case PREFIX_DS:
+			op->flags |= op_ds_seg; break;
+		case PREFIX_ES:
+			op->flags |= op_es_seg; break;
+		case PREFIX_FS:
+			op->flags |= op_fs_seg; break;
+		case PREFIX_GS:
+			op->flags |= op_gs_seg; break;
+	}
+
+	return;
+}
+
+static size_t decode_operand_value( unsigned char *buf, size_t buf_len,
+			    x86_op_t *op, x86_insn_t *insn, 
+			    unsigned int addr_meth, size_t op_size, 
+			    unsigned int op_value, unsigned char modrm, 
+			    size_t gen_regs ) {
+	size_t size = 0;
+
+	/* ++ Do Operand Addressing Method / Decode operand ++ */
+	switch (addr_meth) {
+		/* This sets the operand Size based on the Intel Opcode Map
+		 * (Vol 2, Appendix A). Letter encodings are from section
+		 * A.1.1, 'Codes for Addressing Method' */
+
+		/* ---------------------- Addressing Method -------------- */
+		/* Note that decoding mod ModR/M operand adjusts the size of
+		 * the instruction, but decoding the reg operand does not. 
+		 * This should not cause any problems, as every 'reg' operand 
+		 * has an associated 'mod' operand. 
+		 * Goddamn-Intel-Note:
+		 *   Some Intel addressing methods [M, R] specify that modR/M
+		 *   byte may only refer to a memory address/may only refer to
+		 *   a register -- however Intel provides no clues on what to do
+		 *   if, say, the modR/M for an M opcode decodes to a register
+		 *   rather than a memory address ... returning 0 is out of the
+		 *   question, as this would be an Immediate or a RelOffset, so
+		 *   instead these modR/Ms are decoded with total disregard to 
+		 *   the M, R constraints. */
+
+		/* MODRM -- mod operand. sets size to at least 1! */
+		case ADDRMETH_E:	/* ModR/M present, Gen reg or memory  */
+			size = ia32_modrm_decode( buf, buf_len, op, insn, 
+						  gen_regs );
+			break;
+		case ADDRMETH_M:	/* ModR/M only refers to memory */
+			size = ia32_modrm_decode( buf, buf_len, op, insn, 
+						  gen_regs );
+			break;
+		case ADDRMETH_Q:	/* ModR/M present, MMX or Memory */
+			size = ia32_modrm_decode( buf, buf_len, op, insn, 
+						  REG_MMX_OFFSET );
+			break;
+		case ADDRMETH_R:	/* ModR/M mod == gen reg */
+			size = ia32_modrm_decode( buf, buf_len, op, insn, 
+						  gen_regs );
+			break;
+		case ADDRMETH_W:	/* ModR/M present, mem or SIMD reg */
+			size = ia32_modrm_decode( buf, buf_len, op, insn, 
+						  REG_SIMD_OFFSET );
+			break;
+
+		/* MODRM -- reg operand. does not effect size! */
+		case ADDRMETH_C:	/* ModR/M reg == control reg */
+			ia32_reg_decode( modrm, op, REG_CTRL_OFFSET );
+			break;
+		case ADDRMETH_D:	/* ModR/M reg == debug reg */
+			ia32_reg_decode( modrm, op, REG_DEBUG_OFFSET );
+			break;
+		case ADDRMETH_G:	/* ModR/M reg == gen-purpose reg */
+			ia32_reg_decode( modrm, op, gen_regs );
+			break;
+		case ADDRMETH_P:	/* ModR/M reg == qword MMX reg */
+			ia32_reg_decode( modrm, op, REG_MMX_OFFSET );
+			break;
+		case ADDRMETH_S:	/* ModR/M reg == segment reg */
+			ia32_reg_decode( modrm, op, REG_SEG_OFFSET );
+			break;
+		case ADDRMETH_T:	/* ModR/M reg == test reg */
+			ia32_reg_decode( modrm, op, REG_TEST_OFFSET );
+			break;
+		case ADDRMETH_V:	/* ModR/M reg == SIMD reg */
+			ia32_reg_decode( modrm, op, REG_SIMD_OFFSET );
+			break;
+
+		/* No MODRM : note these set operand type explicitly */
+		case ADDRMETH_A:	/* No modR/M -- direct addr */
+			op->type = op_absolute;
+
+			/* segment:offset address used in far calls */
+			x86_imm_sized( buf, buf_len, 
+				       &op->data.absolute.segment, 2 );
+			if ( insn->addr_size == 4 ) {
+				x86_imm_sized( buf, buf_len, 
+				    &op->data.absolute.offset.off32, 4 );
+				size = 6;
+			} else {
+				x86_imm_sized( buf, buf_len, 
+				    &op->data.absolute.offset.off16, 2 );
+				size = 4;
+			}
+
+			break;
+		case ADDRMETH_I:	/* Immediate val */
+			op->type = op_immediate;
+			/* if it ever becomes legal to have imm as dest and
+			 * there is a src ModR/M operand, we are screwed! */
+			if ( op->flags & op_signed ) {
+				x86_imm_signsized(buf, buf_len, &op->data.byte, 
+						op_size);
+			} else {
+				x86_imm_sized(buf, buf_len, &op->data.byte, 
+						op_size);
+			}
+			size = op_size;
+			break;
+		case ADDRMETH_J:	/* Rel offset to add to IP [jmp] */
+			/* this fills op->data.near_offset or
+			   op->data.far_offset depending on the size of
+			   the operand */
+			op->flags |= op_signed;
+			if ( op_size == 1 ) {
+				/* one-byte near offset */
+				op->type = op_relative_near;
+				x86_imm_signsized(buf, buf_len, 
+						&op->data.relative_near, 1);
+			} else {
+				/* far offset...is this truly signed? */
+				op->type = op_relative_far;
+				x86_imm_signsized(buf, buf_len, 
+					&op->data.relative_far, op_size );
+			}
+			size = op_size;
+			break;
+		case ADDRMETH_O:	/* No ModR/M; op is word/dword offset */
+			/* NOTE: these are actually RVAs not offsets to seg!! */
+			/* note bene: 'O' ADDR_METH uses addr_size  to
+			   determine operand size */
+			op->type = op_offset;
+			op->flags |= op_pointer;
+			x86_imm_sized( buf, buf_len, &op->data.offset, 
+					insn->addr_size );
+
+			size = insn->addr_size;
+			break;
+
+		/* Hard-coded: these are specified in the insn definition */
+		case ADDRMETH_F:	/* EFLAGS register */
+			op->type = op_register;
+			op->flags |= op_hardcode;
+			ia32_handle_register( &op->data.reg, REG_FLAGS_INDEX );
+			break;
+		case ADDRMETH_X:	/* Memory addressed by DS:SI [string] */
+			op->type = op_expression;
+			op->flags |= op_hardcode;
+			op->flags |= op_ds_seg | op_pointer | op_string;
+			ia32_handle_register( &op->data.expression.base, 
+					     REG_DWORD_OFFSET + 6 );
+			break;
+		case ADDRMETH_Y:	/* Memory addressed by ES:DI [string] */
+			op->type = op_expression;
+			op->flags |= op_hardcode;
+			op->flags |= op_es_seg | op_pointer | op_string;
+			ia32_handle_register( &op->data.expression.base, 
+					     REG_DWORD_OFFSET + 7 );
+			break;
+		case ADDRMETH_RR:	/* Gen Register hard-coded in opcode */
+			op->type = op_register;
+			op->flags |= op_hardcode;
+			ia32_handle_register( &op->data.reg, 
+						op_value + gen_regs );
+			break;
+		case ADDRMETH_RS:	/* Seg Register hard-coded in opcode */
+			op->type = op_register;
+			op->flags |= op_hardcode;
+			ia32_handle_register( &op->data.reg, 
+						op_value + REG_SEG_OFFSET );
+			break;
+		case ADDRMETH_RF:	/* FPU Register hard-coded in opcode */
+			op->type = op_register;
+			op->flags |= op_hardcode;
+			ia32_handle_register( &op->data.reg, 
+						op_value + REG_FPU_OFFSET );
+			break;
+		case ADDRMETH_RT:	/* TST Register hard-coded in opcode */
+			op->type = op_register;
+			op->flags |= op_hardcode;
+			ia32_handle_register( &op->data.reg, 
+						op_value + REG_TEST_OFFSET );
+			break;
+		case ADDRMETH_II:	/* Immediate hard-coded in opcode */
+			op->type = op_immediate;
+			op->data.dword = op_value;
+			op->flags |= op_hardcode;
+			break;
+
+		case 0:	/* Operand is not used */
+		default:
+			/* ignore -- operand not used in this insn */
+			op->type = op_unused;	/* this shouldn't happen! */
+			break;
+	}
+
+	return size;
+}
+
+static size_t decode_operand_size( unsigned int op_type, x86_insn_t *insn, 
+				   x86_op_t *op ){
+	size_t size;
+
+	/* ++ Do Operand Type ++ */
+	switch (op_type) {
+		/* This sets the operand Size based on the Intel Opcode Map
+		 * (Vol 2, Appendix A). Letter encodings are from section
+		 * A.1.2, 'Codes for Operand Type' */
+		/* NOTE: in this routines, 'size' refers to the size
+		 *       of the operand in the raw (encoded) instruction;
+		 *       'datatype' stores the actual size and datatype
+		 *       of the operand */
+
+		/* ------------------------ Operand Type ----------------- */
+		case OPTYPE_c:	/* byte or word [op size attr] */
+			size = (insn->op_size == 4) ? 2 : 1;
+			op->datatype = (size == 4) ? op_word : op_byte;
+			break;
+		case OPTYPE_a:	/* 2 word or 2 dword [op size attr] */
+			/* pointer to a 16:16 or 32:32 BOUNDS operand */
+			size = (insn->op_size == 4) ? 8 : 4;
+			op->datatype = (size == 4) ? op_bounds32 : op_bounds16;
+			break;
+		case OPTYPE_v:	/* word or dword [op size attr] */
+			size = (insn->op_size == 4) ? 4 : 2;
+			op->datatype = (size == 4) ? op_dword : op_word;
+			break;
+		case OPTYPE_p:	/* 32/48-bit ptr [op size attr] */
+			/* technically these flags are not accurate: the
+			 * value s a 16:16 pointer or a 16:32 pointer, where
+			 * the first '16' is a segment */
+			size = (insn->addr_size == 4) ? 6 : 4;
+			op->datatype = (size == 4) ? op_descr32 : op_descr16;
+			break;
+		case OPTYPE_b:	/* byte, ignore op-size */
+			size = 1;
+			op->datatype = op_byte;
+			break;
+		case OPTYPE_w:	/* word, ignore op-size */
+			size = 2;
+			op->datatype = op_word;
+			break;
+		case OPTYPE_d:	/* dword , ignore op-size */
+			size = 4;
+			op->datatype = op_dword;
+			break;
+		case OPTYPE_s:	/* 6-byte psuedo-descriptor */
+			/* ptr to 6-byte value which is 32:16 in 32-bit
+			 * mode, or 8:24:16 in 16-bit mode. The high byte
+			 * is ignored in 16-bit mode. */
+			size = 6;
+			op->datatype = (insn->addr_size == 4) ? 
+				op_pdescr32 : op_pdescr16;
+			break;
+		case OPTYPE_q:	/* qword, ignore op-size */
+			size = 8;
+			op->datatype = op_qword;
+			break;
+		case OPTYPE_dq:	/* d-qword, ignore op-size */
+			size = 16;
+			op->datatype = op_dqword;
+			break;
+		case OPTYPE_ps:	/* 128-bit FP data */
+			size = 16;
+			/* really this is 4 packed SP FP values */
+			op->datatype = op_ssimd;
+			break;
+		case OPTYPE_pd:	/* 128-bit FP data */
+			size = 16;
+			/* really this is 2 packed DP FP values */
+			op->datatype = op_dsimd;
+			break;
+		case OPTYPE_ss:	/* Scalar elem of 128-bit FP data */
+			size = 16;
+			/* this only looks at the low dword (4 bytes)
+			 * of the xmmm register passed as a param. 
+			 * This is a 16-byte register where only 4 bytes
+			 * are used in the insn. Painful, ain't it? */
+			op->datatype = op_sssimd;
+			break;
+		case OPTYPE_sd:	/* Scalar elem of 128-bit FP data */
+			size = 16;
+			/* this only looks at the low qword (8 bytes)
+			 * of the xmmm register passed as a param. 
+			 * This is a 16-byte register where only 8 bytes
+			 * are used in the insn. Painful, again... */
+			op->datatype = op_sdsimd;
+			break;
+		case OPTYPE_pi:	/* qword mmx register */
+			size = 8;
+			op->datatype = op_qword;
+			break;
+		case OPTYPE_si:	/* dword integer register */
+			size = 4;
+			op->datatype = op_dword;
+			break;
+		case OPTYPE_fs:	/* single-real */
+			size = 4;
+			op->datatype = op_sreal;
+			break;
+		case OPTYPE_fd:	/* double real */
+			size = 8;
+			op->datatype = op_dreal;
+			break;
+		case OPTYPE_fe:	/* extended real */
+			size = 10;
+			op->datatype = op_extreal;
+			break;
+		case OPTYPE_fb:	/* packed BCD */
+			size = 10;
+			op->datatype = op_bcd;
+			break;
+		case OPTYPE_fv:	/* pointer to FPU env: 14 or 28-bytes */
+			size = (insn->addr_size == 4)? 28 : 14;
+			op->datatype = (size == 28)?  op_fpuenv32: op_fpuenv16;
+			break;
+		case OPTYPE_ft:	/* pointer to FPU env: 94 or 108 bytes */
+			size = (insn->addr_size == 4)? 108 : 94;
+			op->datatype = (size == 108)? 
+				op_fpustate32: op_fpustate16;
+			break;
+		case OPTYPE_fx:	/* 512-byte register stack */
+			size = 512;
+			op->datatype = op_fpregset;
+			break;
+		case OPTYPE_fp:	/* floating point register */
+			size = 10;	/* double extended precision */
+			op->datatype = op_fpreg;
+			break;
+		case OPTYPE_m:	/* fake operand type used for "lea Gv, M" */
+			size = insn->addr_size;
+			op->datatype = (size == 4) ?  op_dword : op_word;
+			break;
+		case OPTYPE_none: /* handle weird instructions that have no encoding but use a dword datatype, like invlpg */
+			size = 0;
+			op->datatype = op_none;
+			break;
+		case 0:
+		default:
+			size = insn->op_size;
+			op->datatype = (size == 4) ? op_dword : op_word;
+			break;
+		}
+	return size;
+}
+
+size_t ia32_decode_operand( unsigned char *buf, size_t buf_len,
+			      x86_insn_t *insn, unsigned int raw_op, 
+			      unsigned int raw_flags, unsigned int prefixes, 
+			      unsigned char modrm ) {
+	unsigned int addr_meth, op_type, op_size, gen_regs;
+	x86_op_t *op;
+	size_t size;
+
+	/* ++ Yank optype and addr mode out of operand flags */
+	addr_meth = raw_flags & ADDRMETH_MASK;
+	op_type = raw_flags & OPTYPE_MASK;
+
+	if ( raw_flags == ARG_NONE ) {
+		/* operand is not used in this instruction */
+		return 0;
+	}
+
+	/* allocate a new operand */
+	op = x86_operand_new( insn );
+
+	/* ++ Copy flags from opcode table to x86_insn_t */
+	op->access = (enum x86_op_access) OP_PERM(raw_flags);
+	op->flags = (enum x86_op_flags) (OP_FLAGS(raw_flags) >> 12);
+
+	/* Get size (for decoding)  and datatype of operand */
+	op_size = decode_operand_size(op_type, insn, op);
+
+	/* override default register set based on Operand Type */
+	/* this allows mixing of 8, 16, and 32 bit regs in insn */
+	if (op_size == 1) {
+		gen_regs = REG_BYTE_OFFSET;
+	} else if (op_size == 2) {
+		gen_regs = REG_WORD_OFFSET;
+	} else {
+		gen_regs = REG_DWORD_OFFSET;
+	}
+
+	size = decode_operand_value( buf, buf_len, op, insn, addr_meth, 
+				      op_size, raw_op, modrm, gen_regs );
+
+	/* if operand is an address, apply any segment override prefixes */
+	if ( op->type == op_expression || op->type == op_offset ) {
+		apply_seg(op, prefixes);
+	}
+
+	return size;		/* return number of bytes in instruction */
+}
diff --git a/src/third_party/libdisasm/ia32_operand.h b/src/third_party/libdisasm/ia32_operand.h
new file mode 100644
index 0000000..08c3074
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_operand.h
@@ -0,0 +1,11 @@
+#ifndef IA32_OPERAND_H
+#define IA32_OPERAND_H
+
+#include "libdis.h"
+#include "ia32_insn.h"
+
+size_t ia32_decode_operand( unsigned char *buf, size_t buf_len,
+			      x86_insn_t *insn, unsigned int raw_op, 
+			      unsigned int raw_flags, unsigned int prefixes,
+			      unsigned char modrm );
+#endif
diff --git a/src/third_party/libdisasm/ia32_reg.c b/src/third_party/libdisasm/ia32_reg.c
new file mode 100644
index 0000000..f270c1f
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_reg.c
@@ -0,0 +1,234 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include "ia32_reg.h"
+#include "ia32_insn.h"
+
+#define NUM_X86_REGS	92
+
+/* register sizes */
+#define REG_DWORD_SIZE 4
+#define REG_WORD_SIZE 2
+#define REG_BYTE_SIZE 1
+#define REG_MMX_SIZE 8
+#define REG_SIMD_SIZE 16
+#define REG_DEBUG_SIZE 4
+#define REG_CTRL_SIZE 4
+#define REG_TEST_SIZE 4
+#define REG_SEG_SIZE 2
+#define REG_FPU_SIZE 10
+#define REG_FLAGS_SIZE 4
+#define REG_FPCTRL_SIZE 2
+#define REG_FPSTATUS_SIZE 2
+#define REG_FPTAG_SIZE 2
+#define REG_EIP_SIZE 4
+#define REG_IP_SIZE 2
+
+/* REGISTER ALIAS TABLE:
+ *
+ * NOTE: the MMX register mapping is fixed to the physical registers
+ * used by the FPU. The floating FP stack does not effect the location
+ * of the MMX registers, so this aliasing is not 100% accurate.
+ * */
+static struct {
+	unsigned char alias;	/* id of register this is an alias for */
+	unsigned char shift;	/* # of bits register must be shifted */
+} ia32_reg_aliases[] = {
+	{ 0,0 },
+	{ REG_DWORD_OFFSET,	0 }, 	/* al :  1 */
+	{ REG_DWORD_OFFSET,	8 }, 	/* ah :  2 */
+	{ REG_DWORD_OFFSET,	0 }, 	/* ax :  3 */
+	{ REG_DWORD_OFFSET + 1,	0 }, 	/* cl :  4 */
+	{ REG_DWORD_OFFSET + 1,	8 }, 	/* ch :  5 */
+	{ REG_DWORD_OFFSET + 1,	0 }, 	/* cx :  6 */
+	{ REG_DWORD_OFFSET + 2,	0 }, 	/* dl :  7 */
+	{ REG_DWORD_OFFSET + 2,	8 }, 	/* dh :  8 */
+	{ REG_DWORD_OFFSET + 2,	0 }, 	/* dx :  9 */
+	{ REG_DWORD_OFFSET + 3,	0 }, 	/* bl : 10 */
+	{ REG_DWORD_OFFSET + 3,	8 }, 	/* bh : 11 */
+	{ REG_DWORD_OFFSET + 3,	0 }, 	/* bx : 12 */
+	{ REG_DWORD_OFFSET + 4,	0 }, 	/* sp : 13 */
+	{ REG_DWORD_OFFSET + 5,	0 }, 	/* bp : 14 */
+	{ REG_DWORD_OFFSET + 6,	0 }, 	/* si : 15 */
+	{ REG_DWORD_OFFSET + 7,	0 }, 	/* di : 16 */
+	{ REG_EIP_INDEX,	0 }, 	/* ip : 17 */
+	{ REG_FPU_OFFSET,	0 }, 	/* mm0 : 18 */
+	{ REG_FPU_OFFSET + 1,	0 }, 	/* mm1 : 19 */
+	{ REG_FPU_OFFSET + 2,	0 }, 	/* mm2 : 20 */
+	{ REG_FPU_OFFSET + 3,	0 }, 	/* mm3 : 21 */
+	{ REG_FPU_OFFSET + 4,	0 }, 	/* mm4 : 22 */
+	{ REG_FPU_OFFSET + 5,	0 }, 	/* mm5 : 23 */
+	{ REG_FPU_OFFSET + 6,	0 }, 	/* mm6 : 24 */
+	{ REG_FPU_OFFSET + 7,	0 } 	/* mm7 : 25 */
+ };
+
+/* REGISTER TABLE: size, type, and name of every register in the 
+ *                 CPU. Does not include MSRs since the are, after all,
+ *                 model specific. */
+static struct {
+	unsigned int size;
+	enum x86_reg_type type;
+	unsigned int alias;
+	char mnemonic[8];
+} ia32_reg_table[NUM_X86_REGS + 2] = {
+	{ 0, 0, 0, "" },
+	/* REG_DWORD_OFFSET */
+	{ REG_DWORD_SIZE, reg_gen | reg_ret, 0, "eax" },
+	{ REG_DWORD_SIZE, reg_gen | reg_count, 0, "ecx" },
+	{ REG_DWORD_SIZE, reg_gen, 0, "edx" },
+	{ REG_DWORD_SIZE, reg_gen, 0, "ebx" },
+	/* REG_ESP_INDEX */
+	{ REG_DWORD_SIZE, reg_gen | reg_sp, 0, "esp" },
+	{ REG_DWORD_SIZE, reg_gen | reg_fp, 0, "ebp" },
+	{ REG_DWORD_SIZE, reg_gen | reg_src, 0, "esi" },
+	{ REG_DWORD_SIZE, reg_gen | reg_dest, 0, "edi" },
+	/* REG_WORD_OFFSET */
+	{ REG_WORD_SIZE, reg_gen | reg_ret, 3, "ax" },
+	{ REG_WORD_SIZE, reg_gen | reg_count, 6, "cx" },
+	{ REG_WORD_SIZE, reg_gen, 9, "dx" },
+	{ REG_WORD_SIZE, reg_gen, 12, "bx" },
+	{ REG_WORD_SIZE, reg_gen | reg_sp, 13, "sp" },
+	{ REG_WORD_SIZE, reg_gen | reg_fp, 14, "bp" },
+	{ REG_WORD_SIZE, reg_gen | reg_src, 15, "si" },
+	{ REG_WORD_SIZE, reg_gen | reg_dest, 16, "di" },
+	/* REG_BYTE_OFFSET */
+	{ REG_BYTE_SIZE, reg_gen, 1, "al" },
+	{ REG_BYTE_SIZE, reg_gen, 4, "cl" },
+	{ REG_BYTE_SIZE, reg_gen, 7, "dl" },
+	{ REG_BYTE_SIZE, reg_gen, 10, "bl" },
+	{ REG_BYTE_SIZE, reg_gen, 2, "ah" },
+	{ REG_BYTE_SIZE, reg_gen, 5, "ch" },
+	{ REG_BYTE_SIZE, reg_gen, 8, "dh" },
+	{ REG_BYTE_SIZE, reg_gen, 11, "bh" },
+	/* REG_MMX_OFFSET */
+	{ REG_MMX_SIZE, reg_simd, 18, "mm0" },
+	{ REG_MMX_SIZE, reg_simd, 19, "mm1" },
+	{ REG_MMX_SIZE, reg_simd, 20, "mm2" },
+	{ REG_MMX_SIZE, reg_simd, 21, "mm3" },
+	{ REG_MMX_SIZE, reg_simd, 22, "mm4" },
+	{ REG_MMX_SIZE, reg_simd, 23, "mm5" },
+	{ REG_MMX_SIZE, reg_simd, 24, "mm6" },
+	{ REG_MMX_SIZE, reg_simd, 25, "mm7" },
+	/* REG_SIMD_OFFSET */
+	{ REG_SIMD_SIZE, reg_simd, 0, "xmm0" },
+	{ REG_SIMD_SIZE, reg_simd, 0, "xmm1" },
+	{ REG_SIMD_SIZE, reg_simd, 0, "xmm2" },
+	{ REG_SIMD_SIZE, reg_simd, 0, "xmm3" },
+	{ REG_SIMD_SIZE, reg_simd, 0, "xmm4" },
+	{ REG_SIMD_SIZE, reg_simd, 0, "xmm5" },
+	{ REG_SIMD_SIZE, reg_simd, 0, "xmm6" },
+	{ REG_SIMD_SIZE, reg_simd, 0, "xmm7" },
+	/* REG_DEBUG_OFFSET */
+	{ REG_DEBUG_SIZE, reg_sys, 0, "dr0" },
+	{ REG_DEBUG_SIZE, reg_sys, 0, "dr1" },
+	{ REG_DEBUG_SIZE, reg_sys, 0, "dr2" },
+	{ REG_DEBUG_SIZE, reg_sys, 0, "dr3" },
+	{ REG_DEBUG_SIZE, reg_sys, 0, "dr4" },
+	{ REG_DEBUG_SIZE, reg_sys, 0, "dr5" },
+	{ REG_DEBUG_SIZE, reg_sys, 0, "dr6" },
+	{ REG_DEBUG_SIZE, reg_sys, 0, "dr7" },
+	/* REG_CTRL_OFFSET */
+	{ REG_CTRL_SIZE, reg_sys, 0, "cr0" },
+	{ REG_CTRL_SIZE, reg_sys, 0, "cr1" },
+	{ REG_CTRL_SIZE, reg_sys, 0, "cr2" },
+	{ REG_CTRL_SIZE, reg_sys, 0, "cr3" },
+	{ REG_CTRL_SIZE, reg_sys, 0, "cr4" },
+	{ REG_CTRL_SIZE, reg_sys, 0, "cr5" },
+	{ REG_CTRL_SIZE, reg_sys, 0, "cr6" },
+	{ REG_CTRL_SIZE, reg_sys, 0, "cr7" },
+	/* REG_TEST_OFFSET */
+	{ REG_TEST_SIZE, reg_sys, 0, "tr0" },
+	{ REG_TEST_SIZE, reg_sys, 0, "tr1" },
+	{ REG_TEST_SIZE, reg_sys, 0, "tr2" },
+	{ REG_TEST_SIZE, reg_sys, 0, "tr3" },
+	{ REG_TEST_SIZE, reg_sys, 0, "tr4" },
+	{ REG_TEST_SIZE, reg_sys, 0, "tr5" },
+	{ REG_TEST_SIZE, reg_sys, 0, "tr6" },
+	{ REG_TEST_SIZE, reg_sys, 0, "tr7" },
+	/* REG_SEG_OFFSET */
+	{ REG_SEG_SIZE, reg_seg, 0, "es" },
+	{ REG_SEG_SIZE, reg_seg, 0, "cs" },
+	{ REG_SEG_SIZE, reg_seg, 0, "ss" },
+	{ REG_SEG_SIZE, reg_seg, 0, "ds" },
+	{ REG_SEG_SIZE, reg_seg, 0, "fs" },
+	{ REG_SEG_SIZE, reg_seg, 0, "gs" },
+	/* REG_LDTR_INDEX */
+	{ REG_DWORD_SIZE, reg_sys, 0, "ldtr" },
+	/* REG_GDTR_INDEX */
+	{ REG_DWORD_SIZE, reg_sys, 0, "gdtr" },
+	/* REG_FPU_OFFSET */
+	{ REG_FPU_SIZE, reg_fpu, 0, "st(0)" },
+	{ REG_FPU_SIZE, reg_fpu, 0, "st(1)" },
+	{ REG_FPU_SIZE, reg_fpu, 0, "st(2)" },
+	{ REG_FPU_SIZE, reg_fpu, 0, "st(3)" },
+	{ REG_FPU_SIZE, reg_fpu, 0, "st(4)" },
+	{ REG_FPU_SIZE, reg_fpu, 0, "st(5)" },
+	{ REG_FPU_SIZE, reg_fpu, 0, "st(6)" },
+	{ REG_FPU_SIZE, reg_fpu, 0, "st(7)" },
+	/* REG_FLAGS_INDEX : 81 */
+	{ REG_FLAGS_SIZE, reg_cond, 0, "eflags" }, 
+	/* REG_FPCTRL_INDEX  : 82*/
+	{ REG_FPCTRL_SIZE, reg_fpu | reg_sys, 0, "fpctrl" }, 
+	/* REG_FPSTATUS_INDEX : 83*/
+	{ REG_FPSTATUS_SIZE, reg_fpu | reg_sys, 0, "fpstat" },
+	/* REG_FPTAG_INDEX : 84 */
+	{ REG_FPTAG_SIZE, reg_fpu | reg_sys, 0, "fptag" }, 
+	/* REG_EIP_INDEX : 85 */
+	{ REG_EIP_SIZE, reg_pc, 0, "eip" },
+	/* REG_IP_INDEX : 86 */
+	{ REG_IP_SIZE, reg_pc, 17, "ip" },
+	/* REG_IDTR_INDEX : 87 */
+	{ REG_DWORD_SIZE, reg_sys, 0, "idtr" },
+	/* REG_MXCSG_INDEX : SSE Control Reg : 88 */
+	{ REG_DWORD_SIZE, reg_sys | reg_simd, 0, "mxcsr" },
+	/* REG_TR_INDEX : Task Register : 89 */
+	{ 16 + 64, reg_sys, 0, "tr" },
+	/* REG_CSMSR_INDEX : SYSENTER_CS_MSR : 90 */
+	{ REG_DWORD_SIZE, reg_sys, 0, "cs_msr" },
+	/* REG_ESPMSR_INDEX : SYSENTER_ESP_MSR : 91 */
+	{ REG_DWORD_SIZE, reg_sys, 0, "esp_msr" },
+	/* REG_EIPMSR_INDEX : SYSENTER_EIP_MSR : 92 */
+	{ REG_DWORD_SIZE, reg_sys, 0, "eip_msr" },
+	{ 0 }
+ };
+
+
+static size_t sz_regtable = NUM_X86_REGS + 1;
+
+
+void ia32_handle_register( x86_reg_t *reg, size_t id ) {
+	unsigned int alias;
+	if (! id || id > sz_regtable ) {
+		return;
+	}
+
+	memset( reg, 0, sizeof(x86_reg_t) );
+
+        strncpy( reg->name, ia32_reg_table[id].mnemonic, MAX_REGNAME );
+
+        reg->type = ia32_reg_table[id].type;
+        reg->size = ia32_reg_table[id].size;
+
+	alias = ia32_reg_table[id].alias;
+	if ( alias ) {
+		reg->alias = ia32_reg_aliases[alias].alias;
+		reg->shift = ia32_reg_aliases[alias].shift;
+	}
+        reg->id = id;
+
+	return;
+}
+
+size_t ia32_true_register_id( size_t id ) {
+	size_t reg;
+
+	if (! id || id > sz_regtable ) {
+		return 0;
+	}
+
+	reg = id;
+	if (ia32_reg_table[reg].alias) {
+		reg = ia32_reg_aliases[ia32_reg_table[reg].alias].alias;
+	}
+	return reg;
+}
diff --git a/src/third_party/libdisasm/ia32_reg.h b/src/third_party/libdisasm/ia32_reg.h
new file mode 100644
index 0000000..fbbc77a
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_reg.h
@@ -0,0 +1,41 @@
+#ifndef IA32_REG_H
+#define IA32_REG_H
+
+#include <sys/types.h>	/* for size_t */
+#include "libdis.h"	/* for x86_reg_t */
+
+/* NOTE these are used in opcode tables for hard-coded registers */
+#define REG_DWORD_OFFSET 	 1	/* 0 + 1 */
+#define REG_ECX_INDEX		 2	/* 0 + 1 + 1 */
+#define REG_ESP_INDEX		 5	/* 0 + 4 + 1 */
+#define REG_EBP_INDEX		 6	/* 0 + 5 + 1 */
+#define REG_ESI_INDEX		 7	/* 0 + 6 + 1 */
+#define REG_EDI_INDEX		 8	/* 0 + 7 + 1 */
+#define REG_WORD_OFFSET 	 9	/* 1 * 8 + 1 */
+#define REG_BYTE_OFFSET 	17	/* 2 * 8 + 1 */
+#define REG_MMX_OFFSET 		25	/* 3 * 8 + 1 */
+#define REG_SIMD_OFFSET 	33	/* 4 * 8 + 1 */
+#define REG_DEBUG_OFFSET 	41	/* 5 * 8 + 1 */
+#define REG_CTRL_OFFSET 	49	/* 6 * 8 + 1 */
+#define REG_TEST_OFFSET 	57	/* 7 * 8 + 1 */
+#define REG_SEG_OFFSET 		65	/* 8 * 8 + 1 */
+#define REG_LDTR_INDEX		71	/* 8 * 8 + 1 + 1 */
+#define REG_GDTR_INDEX		72	/* 8 * 8 + 2 + 1 */
+#define REG_FPU_OFFSET 		73	/* 9 * 8 + 1 */
+#define REG_FLAGS_INDEX 	81	/* 10 * 8 + 1 */
+#define REG_FPCTRL_INDEX 	82	/* 10 * 8 + 1 + 1 */
+#define REG_FPSTATUS_INDEX 	83	/* 10 * 8 + 2 + 1 */
+#define REG_FPTAG_INDEX 	84	/* 10 * 8 + 3 + 1 */
+#define REG_EIP_INDEX 		85	/* 10 * 8 + 4 + 1 */
+#define REG_IP_INDEX 		86	/* 10 * 8 + 5 + 1 */
+#define REG_IDTR_INDEX		87	/* 10 * 8 + 6 + 1 */
+#define REG_MXCSG_INDEX		88	/* 10 * 8 + 7 + 1 */
+#define REG_TR_INDEX		89	/* 10 * 8 + 8 + 1 */
+#define REG_CSMSR_INDEX		90	/* 10 * 8 + 9 + 1 */
+#define REG_ESPMSR_INDEX	91	/* 10 * 8 + 10 + 1 */
+#define REG_EIPMSR_INDEX	92	/* 10 * 8 + 11 + 1 */
+
+void ia32_handle_register( x86_reg_t *reg, size_t id );
+size_t ia32_true_register_id( size_t id );
+
+#endif
diff --git a/src/third_party/libdisasm/ia32_settings.c b/src/third_party/libdisasm/ia32_settings.c
new file mode 100644
index 0000000..b578e34
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_settings.c
@@ -0,0 +1,13 @@
+#include "libdis.h"
+#include "ia32_settings.h"
+#include "ia32_reg.h"
+#include "ia32_insn.h"
+
+ia32_settings_t ia32_settings = {
+	1, 0xF4, 
+	MAX_INSTRUCTION_SIZE,
+	4, 4, 8, 4, 8,
+	REG_ESP_INDEX, REG_EBP_INDEX, REG_EIP_INDEX, REG_FLAGS_INDEX,
+	REG_DWORD_OFFSET, REG_SEG_OFFSET, REG_FPU_OFFSET,
+	opt_none
+};
diff --git a/src/third_party/libdisasm/ia32_settings.h b/src/third_party/libdisasm/ia32_settings.h
new file mode 100644
index 0000000..769c0e9
--- /dev/null
+++ b/src/third_party/libdisasm/ia32_settings.h
@@ -0,0 +1,27 @@
+#ifndef IA32_SETTINGS_H
+#define IA32_SETTINGS_H
+
+#include "libdis.h"
+
+typedef struct {
+	/* options */
+	unsigned char endian,		/* 0 = big, 1 = little */
+		      wc_byte,		/* wildcard byte */
+		      max_insn,		/* max insn size */
+		      sz_addr,		/* default address size */
+		      sz_oper,		/* default operand size */
+		      sz_byte,		/* # bits in byte */
+		      sz_word,		/* # bytes in machine word */
+		      sz_dword;		/* # bytes in machine dword */
+	unsigned int id_sp_reg,		/* id of stack pointer */
+		     id_fp_reg,		/* id of frame pointer */
+		     id_ip_reg,		/* id of instruction pointer */
+		     id_flag_reg,	/* id of flags register */
+		     offset_gen_regs,	/* start of general regs */
+		     offset_seg_regs,	/* start of segment regs */
+		     offset_fpu_regs;	/* start of floating point regs */
+	/* user-controlled settings */
+	enum x86_options options;
+} ia32_settings_t;
+
+#endif
diff --git a/src/third_party/libdisasm/libdis.h b/src/third_party/libdisasm/libdis.h
new file mode 100644
index 0000000..9410339
--- /dev/null
+++ b/src/third_party/libdisasm/libdis.h
@@ -0,0 +1,836 @@
+#ifndef LIBDISASM_H
+#define LIBDISASM_H
+
+#ifdef WIN32
+#include <windows.h>
+#endif
+
+#include <stdint.h>
+
+/* 'NEW" types
+ * __________________________________________________________________________*/
+#ifndef LIBDISASM_QWORD_H       /* do not interfere with qword.h */
+        #define LIBDISASM_QWORD_H
+        #ifdef _MSC_VER
+                typedef __int64         qword_t;
+        #else
+                typedef int64_t         qword_t;
+        #endif
+#endif
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 'NEW" x86 API
+ * __________________________________________________________________________*/
+
+
+/* ========================================= Error Reporting */
+/* REPORT CODES
+ *      These are passed to a reporter function passed at initialization.
+ *      Each code determines the type of the argument passed to the reporter;
+ *      this allows the report to recover from errors, or just log them.
+ */
+enum x86_report_codes {
+        report_disasm_bounds,   /* RVA OUT OF BOUNDS : The disassembler could
+                                   not disassemble the supplied RVA as it is
+                                   out of the range of the buffer. The
+                                   application should store the address and
+                                   attempt to determine what section of the
+                                   binary it is in, then disassemble the
+                                   address from the bytes in that section.
+                                        data: uint32_t rva */
+        report_insn_bounds,     /* INSTRUCTION OUT OF BOUNDS: The disassembler
+                                   could not disassemble the instruction as
+                                   the instruction would require bytes beyond
+                                   the end of the current buffer. This usually
+                                   indicated garbage bytes at the end of a
+                                   buffer, or an incorrectly-sized buffer.
+                                        data: uint32_t rva */
+        report_invalid_insn,    /* INVALID INSTRUCTION: The disassembler could
+                                   not disassemble the instruction as it has an
+                                   invalid combination of opcodes and operands.
+                                   This will stop automated disassembly; the
+                                   application can restart the disassembly
+                                   after the invalid instruction.
+                                        data: uint32_t rva */
+        report_unknown
+};
+
+/* 'arg' is optional arbitrary data provided by the code passing the 
+ *       callback -- for example, it could be 'this' or 'self' in OOP code.
+ * 'code' is provided by libdisasm, it is one of the above
+ * 'data' is provided by libdisasm and is context-specific, per the enums */
+typedef void (*DISASM_REPORTER)( enum x86_report_codes code, 
+				 void *data, void *arg );
+
+
+/* x86_report_error : Call the register reporter to report an error */
+void x86_report_error( enum x86_report_codes code, void *data );
+
+/* ========================================= Libdisasm Management Routines */
+enum x86_options {		/* these can be ORed together */
+        opt_none= 0,
+        opt_ignore_nulls=1,     /* ignore sequences of > 4 NULL bytes */
+        opt_16_bit=2,           /* 16-bit/DOS disassembly */
+        opt_att_mnemonics=4,    /* use AT&T syntax names for alternate opcode mnemonics */
+};
+
+/* management routines */
+/* 'arg' is caller-specific data which is passed as the first argument
+ * to the reporter callback routine */
+int x86_init( enum x86_options options, DISASM_REPORTER reporter, void *arg);
+void x86_set_reporter( DISASM_REPORTER reporter, void *arg);
+void x86_set_options( enum x86_options options );
+enum x86_options x86_get_options( void );
+int x86_cleanup(void);
+
+
+/* ========================================= Instruction Representation */
+/* these defines are only intended for use in the array decl's */
+#define MAX_REGNAME 8
+
+#define MAX_PREFIX_STR 32
+#define MAX_MNEM_STR 16
+#define MAX_INSN_SIZE 20        /* same as in i386.h */
+#define MAX_OP_STRING 32        /* max possible operand size in string form */
+#define MAX_OP_RAW_STRING 64    /* max possible operand size in raw form */
+#define MAX_OP_XML_STRING 256   /* max possible operand size in xml form */
+#define MAX_NUM_OPERANDS 8	/* max # implicit and explicit operands */
+/* in these, the '2 *' is arbitrary: the max # of operands should require
+ * more space than the rest of the insn */
+#define MAX_INSN_STRING 512        /* 2 * 8 * MAX_OP_STRING */
+#define MAX_INSN_RAW_STRING 1024   /* 2 * 8 * MAX_OP_RAW_STRING */
+#define MAX_INSN_XML_STRING 4096   /* 2 * 8 * MAX_OP_XML_STRING */
+
+enum x86_reg_type {     /* NOTE: these may be ORed together */
+        reg_gen         = 0x00001,      /* general purpose */
+        reg_in          = 0x00002,      /* incoming args, ala RISC */
+        reg_out         = 0x00004,      /* args to calls, ala RISC */
+        reg_local       = 0x00008,      /* local vars, ala RISC */
+        reg_fpu         = 0x00010,      /* FPU data register */
+        reg_seg         = 0x00020,      /* segment register */
+        reg_simd        = 0x00040,      /* SIMD/MMX reg */
+        reg_sys         = 0x00080,      /* restricted/system register */
+        reg_sp          = 0x00100,      /* stack pointer */
+        reg_fp          = 0x00200,      /* frame pointer */
+        reg_pc          = 0x00400,      /* program counter */
+        reg_retaddr     = 0x00800,      /* return addr for func */
+        reg_cond        = 0x01000,      /* condition code / flags */
+        reg_zero        = 0x02000,      /* zero register, ala RISC */
+        reg_ret         = 0x04000,      /* return value */
+        reg_src         = 0x10000,      /* array/rep source */
+        reg_dest        = 0x20000,      /* array/rep destination */
+        reg_count       = 0x40000       /* array/rep/loop counter */
+};
+
+/* x86_reg_t : an X86 CPU register */
+typedef struct {
+        char name[MAX_REGNAME];
+        enum x86_reg_type type;         /* what register is used for */
+        unsigned int size;              /* size of register in bytes */
+        unsigned int id;                /* register ID #, for quick compares */
+	unsigned int alias;		/* ID of reg this is an alias for */
+	unsigned int shift;		/* amount to shift aliased reg by */
+} x86_reg_t;
+
+/* x86_ea_t : an X86 effective address (address expression) */
+typedef struct {
+        unsigned int     scale;         /* scale factor */
+        x86_reg_t        index, base;   /* index, base registers */
+        int32_t          disp;          /* displacement */
+        char             disp_sign;     /* is negative? 1/0 */
+        char             disp_size;     /* 0, 1, 2, 4 */
+} x86_ea_t;
+
+/* x86_absolute_t : an X86 segment:offset address (descriptor) */
+typedef struct {
+	unsigned short	segment;	/* loaded directly into CS */
+	union {
+		unsigned short	off16;	/* loaded directly into IP */
+		uint32_t		off32;	/* loaded directly into EIP */
+	} offset;	
+} x86_absolute_t;
+
+enum x86_op_type {      /* mutually exclusive */
+        op_unused = 0,          /* empty/unused operand: should never occur */
+        op_register = 1,        /* CPU register */
+        op_immediate = 2,       /* Immediate Value */
+        op_relative_near = 3,   /* Relative offset from IP */
+        op_relative_far = 4,    /* Relative offset from IP */
+        op_absolute = 5,        /* Absolute address (ptr16:32) */
+        op_expression = 6,      /* Address expression (scale/index/base/disp) */
+        op_offset = 7,          /* Offset from start of segment (m32) */
+        op_unknown
+};
+
+#define x86_optype_is_address( optype ) \
+	( optype == op_absolute || optype == op_offset )
+#define x86_optype_is_relative( optype ) \
+	( optype == op_relative_near || optype == op_relative_far )
+#define x86_optype_is_memory( optype ) \
+	( optype > op_immediate && optype < op_unknown )
+
+enum x86_op_datatype {          /* these use Intel's lame terminology */
+        op_byte = 1,            /* 1 byte integer */
+        op_word = 2,            /* 2 byte integer */
+        op_dword = 3,           /* 4 byte integer */
+        op_qword = 4,           /* 8 byte integer */
+        op_dqword = 5,          /* 16 byte integer */
+        op_sreal = 6,           /* 4 byte real (single real) */
+        op_dreal = 7,           /* 8 byte real (double real) */
+        op_extreal = 8,         /* 10 byte real (extended real) */
+        op_bcd = 9,             /* 10 byte binary-coded decimal */
+        op_ssimd = 10,          /* 16 byte : 4 packed single FP (SIMD, MMX) */
+        op_dsimd = 11,          /* 16 byte : 2 packed double FP (SIMD, MMX) */
+        op_sssimd = 12,         /* 4 byte : scalar single FP (SIMD, MMX) */
+        op_sdsimd = 13,         /* 8 byte : scalar double FP (SIMD, MMX) */
+	op_descr32 = 14,	/* 6 byte Intel descriptor 2:4 */
+	op_descr16 = 15,	/* 4 byte Intel descriptor 2:2 */
+	op_pdescr32 = 16,	/* 6 byte Intel pseudo-descriptor 32:16 */
+	op_pdescr16 = 17,	/* 6 byte Intel pseudo-descriptor 8:24:16 */
+	op_bounds16 = 18,	/* signed 16:16 lower:upper bounds */
+	op_bounds32 = 19,	/* signed 32:32 lower:upper bounds */
+        op_fpuenv16 = 20,	/* 14 byte FPU control/environment data */
+        op_fpuenv32 = 21,	/* 28 byte FPU control/environment data */
+	op_fpustate16 = 22,	/* 94 byte FPU state (env & reg stack) */
+	op_fpustate32 = 23,	/* 108 byte FPU state (env & reg stack) */
+	op_fpregset = 24,	/* 512 bytes: register set */
+	op_fpreg = 25,		/* FPU register */
+    op_none = 0xFF,     /* operand without a datatype (INVLPG) */
+};
+
+enum x86_op_access {    /* ORed together */
+        op_read = 1,
+        op_write = 2,
+        op_execute = 4
+};
+
+enum x86_op_flags {     /* ORed together, but segs are mutually exclusive */
+        op_signed = 1,          /* signed integer */
+        op_string = 2,          /* possible string or array */
+        op_constant = 4,        /* symbolic constant */
+        op_pointer = 8,         /* operand points to a memory address */
+	op_sysref = 0x010,	/* operand is a syscall number */
+	op_implied = 0x020,	/* operand is implicit in the insn */
+	op_hardcode = 0x40,	/* operand is hardcoded in insn definition */
+	/* NOTE: an 'implied' operand is one which can be considered a side
+	 * effect of the insn, e.g. %esp being modified by PUSH or POP. A
+	 * 'hard-coded' operand is one which is specified in the instruction
+	 * definition, e.g. %es:%edi in MOVSB or 1 in ROL Eb, 1. The difference
+	 * is that hard-coded operands are printed by disassemblers and are
+	 * required to re-assemble, while implicit operands are invisible. */
+        op_es_seg = 0x100,      /* ES segment override */
+        op_cs_seg = 0x200,      /* CS segment override */
+        op_ss_seg = 0x300,      /* SS segment override */
+        op_ds_seg = 0x400,      /* DS segment override */
+        op_fs_seg = 0x500,      /* FS segment override */
+        op_gs_seg = 0x600       /* GS segment override */
+};
+
+/* x86_op_t : an X86 instruction operand */
+typedef struct {
+        enum x86_op_type        type;           /* operand type */
+        enum x86_op_datatype    datatype;       /* operand size */
+        enum x86_op_access      access;         /* operand access [RWX] */
+        enum x86_op_flags       flags;          /* misc flags */
+        union {
+		/* sizeof will have to work on these union members! */
+                /* immediate values */
+                char            sbyte;
+                short           sword;
+                int32_t         sdword;
+                qword_t         sqword;
+                unsigned char   byte;
+                unsigned short  word;
+                uint32_t        dword;
+                qword_t         qword;
+                float           sreal;
+                double          dreal;
+                /* misc large/non-native types */
+                unsigned char   extreal[10];
+                unsigned char   bcd[10];
+                qword_t         dqword[2];
+                unsigned char   simd[16];
+                unsigned char   fpuenv[28];
+                /* offset from segment */
+                uint32_t        offset;
+                /* ID of CPU register */
+                x86_reg_t       reg;
+                /* offsets from current insn */
+                char            relative_near;
+                int32_t         relative_far;
+		/* segment:offset */
+		x86_absolute_t	absolute;
+                /* effective address [expression] */
+                x86_ea_t        expression;
+        } data;
+	/* this is needed to make formatting operands more sane */
+	void * insn;		/* pointer to x86_insn_t owning operand */
+} x86_op_t;
+
+/* Linked list of x86_op_t; provided for manual traversal of the operand
+ * list in an insn. Users wishing to add operands to this list, e.g. to add
+ * implicit operands, should use x86_operand_new in x86_operand_list.h */
+typedef struct x86_operand_list {
+	x86_op_t op;
+	struct x86_operand_list *next;
+} x86_oplist_t;
+
+enum x86_insn_group {
+	insn_none = 0,		/* invalid instruction */
+        insn_controlflow = 1,
+        insn_arithmetic = 2,
+        insn_logic = 3,
+        insn_stack = 4,
+        insn_comparison = 5,
+        insn_move = 6,
+        insn_string = 7,
+        insn_bit_manip = 8,
+        insn_flag_manip = 9,
+        insn_fpu = 10,
+        insn_interrupt = 13,
+        insn_system = 14,
+        insn_other = 15
+};
+
+enum x86_insn_type {
+	insn_invalid = 0,	/* invalid instruction */
+        /* insn_controlflow */
+        insn_jmp = 0x1001,
+        insn_jcc = 0x1002,
+        insn_call = 0x1003,
+        insn_callcc = 0x1004,
+        insn_return = 0x1005,
+        /* insn_arithmetic */
+        insn_add = 0x2001,
+        insn_sub = 0x2002,
+        insn_mul = 0x2003,
+        insn_div = 0x2004,
+        insn_inc = 0x2005,
+        insn_dec = 0x2006,
+        insn_shl = 0x2007,
+        insn_shr = 0x2008,
+        insn_rol = 0x2009,
+        insn_ror = 0x200A,
+        /* insn_logic */
+        insn_and = 0x3001,
+        insn_or = 0x3002,
+        insn_xor = 0x3003,
+        insn_not = 0x3004,
+        insn_neg = 0x3005,
+        /* insn_stack */
+        insn_push = 0x4001,
+        insn_pop = 0x4002,
+        insn_pushregs = 0x4003,
+        insn_popregs = 0x4004,
+        insn_pushflags = 0x4005,
+        insn_popflags = 0x4006,
+        insn_enter = 0x4007,
+        insn_leave = 0x4008,
+        /* insn_comparison */
+        insn_test = 0x5001,
+        insn_cmp = 0x5002,
+        /* insn_move */
+        insn_mov = 0x6001,      /* move */
+        insn_movcc = 0x6002,    /* conditional move */
+        insn_xchg = 0x6003,     /* exchange */
+        insn_xchgcc = 0x6004,   /* conditional exchange */
+        /* insn_string */
+        insn_strcmp = 0x7001,
+        insn_strload = 0x7002,
+        insn_strmov = 0x7003,
+        insn_strstore = 0x7004,
+        insn_translate = 0x7005,        /* xlat */
+        /* insn_bit_manip */
+        insn_bittest = 0x8001,
+        insn_bitset = 0x8002,
+        insn_bitclear = 0x8003,
+        /* insn_flag_manip */
+        insn_clear_carry = 0x9001,
+        insn_clear_zero = 0x9002,
+        insn_clear_oflow = 0x9003,
+        insn_clear_dir = 0x9004,
+        insn_clear_sign = 0x9005,
+        insn_clear_parity = 0x9006,
+        insn_set_carry = 0x9007,
+        insn_set_zero = 0x9008,
+        insn_set_oflow = 0x9009,
+        insn_set_dir = 0x900A,
+        insn_set_sign = 0x900B,
+        insn_set_parity = 0x900C,
+        insn_tog_carry = 0x9010,
+        insn_tog_zero = 0x9020,
+        insn_tog_oflow = 0x9030,
+        insn_tog_dir = 0x9040,
+        insn_tog_sign = 0x9050,
+        insn_tog_parity = 0x9060,
+        /* insn_fpu */
+        insn_fmov = 0xA001,
+        insn_fmovcc = 0xA002,
+        insn_fneg = 0xA003,
+        insn_fabs = 0xA004,
+        insn_fadd = 0xA005,
+        insn_fsub = 0xA006,
+        insn_fmul = 0xA007,
+        insn_fdiv = 0xA008,
+        insn_fsqrt = 0xA009,
+        insn_fcmp = 0xA00A,
+        insn_fcos = 0xA00C,
+        insn_fldpi = 0xA00D,
+        insn_fldz = 0xA00E,
+        insn_ftan = 0xA00F,
+        insn_fsine = 0xA010,
+        insn_fsys = 0xA020,
+        /* insn_interrupt */
+        insn_int = 0xD001,
+        insn_intcc = 0xD002,    /* not present in x86 ISA */
+        insn_iret = 0xD003,
+        insn_bound = 0xD004,
+        insn_debug = 0xD005,
+        insn_trace = 0xD006,
+        insn_invalid_op = 0xD007,
+        insn_oflow = 0xD008,
+        /* insn_system */
+        insn_halt = 0xE001,
+        insn_in = 0xE002,       /* input from port/bus */
+        insn_out = 0xE003,      /* output to port/bus */
+        insn_cpuid = 0xE004,
+        /* insn_other */
+        insn_nop = 0xF001,
+        insn_bcdconv = 0xF002,  /* convert to or from BCD */
+        insn_szconv = 0xF003    /* change size of operand */
+};
+
+/* These flags specify special characteristics of the instruction, such as
+ * whether the inatruction is privileged or whether it serializes the
+ * pipeline.
+ * NOTE : These may not be accurate for all instructions; updates to the
+ * opcode tables have not been completed. */
+enum x86_insn_note {
+	insn_note_ring0		= 1,	/* Only available in ring 0 */
+	insn_note_smm		= 2,	/* "" in System Management Mode */
+	insn_note_serial	= 4,	/* Serializing instruction */
+	insn_note_nonswap	= 8,	/* Does not swap arguments in att-style formatting */
+	insn_note_nosuffix  = 16,	/* Does not have size suffix in att-style formatting */
+};
+
+/* This specifies what effects the instruction has on the %eflags register */
+enum x86_flag_status {
+        insn_carry_set = 0x1,			/* CF */
+        insn_zero_set = 0x2,			/* ZF */
+        insn_oflow_set = 0x4,			/* OF */
+        insn_dir_set = 0x8,			/* DF */
+        insn_sign_set = 0x10,			/* SF */
+        insn_parity_set = 0x20,			/* PF */
+        insn_carry_or_zero_set = 0x40,
+        insn_zero_set_or_sign_ne_oflow = 0x80,
+        insn_carry_clear = 0x100,
+        insn_zero_clear = 0x200,
+        insn_oflow_clear = 0x400,
+        insn_dir_clear = 0x800,
+        insn_sign_clear = 0x1000,
+        insn_parity_clear = 0x2000,
+        insn_sign_eq_oflow = 0x4000,
+        insn_sign_ne_oflow = 0x8000
+};
+
+/* The CPU model in which the insturction first appeared; this can be used
+ * to mask out instructions appearing in earlier or later models or to
+ * check the portability of a binary.
+ * NOTE : These may not be accurate for all instructions; updates to the
+ * opcode tables have not been completed. */
+enum x86_insn_cpu {
+	cpu_8086 	= 1,	/* Intel */
+	cpu_80286	= 2,
+	cpu_80386	= 3,
+	cpu_80387	= 4,
+	cpu_80486	= 5,
+	cpu_pentium	= 6,
+	cpu_pentiumpro	= 7,
+	cpu_pentium2	= 8,
+	cpu_pentium3	= 9,
+	cpu_pentium4	= 10,
+	cpu_k6		= 16,	/* AMD */
+	cpu_k7		= 32,
+	cpu_athlon	= 48
+};
+
+/* CPU ISA subsets: These are derived from the Instruction Groups in
+ * Intel Vol 1 Chapter 5; they represent subsets of the IA32 ISA but
+ * do not reflect the 'type' of the instruction in the same way that
+ * x86_insn_group does. In short, these are AMD/Intel's somewhat useless 
+ * designations.
+ * NOTE : These may not be accurate for all instructions; updates to the
+ * opcode tables have not been completed. */
+enum x86_insn_isa {
+	isa_gp		= 1,	/* general purpose */
+	isa_fp		= 2,	/* floating point */
+	isa_fpumgt	= 3,	/* FPU/SIMD management */
+	isa_mmx		= 4,	/* Intel MMX */
+	isa_sse1	= 5,	/* Intel SSE SIMD */
+	isa_sse2	= 6,	/* Intel SSE2 SIMD */
+	isa_sse3	= 7,	/* Intel SSE3 SIMD */
+	isa_3dnow	= 8,	/* AMD 3DNow! SIMD */
+	isa_sys		= 9	/* system instructions */
+};
+
+enum x86_insn_prefix {
+        insn_no_prefix = 0,
+        insn_rep_zero = 1,	/* REPZ and REPE */
+        insn_rep_notzero = 2,	/* REPNZ and REPNZ */
+        insn_lock = 4		/* LOCK: */
+};
+
+/* TODO: maybe provide insn_new/free(), and have disasm return new insn_t */
+/* x86_insn_t : an X86 instruction */
+typedef struct {
+        /* information about the instruction */
+        uint32_t addr;             /* load address */
+        uint32_t offset;           /* offset into file/buffer */
+        enum x86_insn_group group;      /* meta-type, e.g. INS_EXEC */
+        enum x86_insn_type type;        /* type, e.g. INS_BRANCH */
+	enum x86_insn_note note;	/* note, e.g. RING0 */
+        unsigned char bytes[MAX_INSN_SIZE];
+        unsigned char size;             /* size of insn in bytes */
+	/* 16/32-bit mode settings */
+	unsigned char addr_size;	/* default address size : 2 or 4 */
+	unsigned char op_size;		/* default operand size : 2 or 4 */
+	/* CPU/instruction set */
+	enum x86_insn_cpu cpu;
+	enum x86_insn_isa isa;
+	/* flags */
+        enum x86_flag_status flags_set; /* flags set or tested by insn */
+        enum x86_flag_status flags_tested;
+	/* stack */
+	unsigned char stack_mod;	/* 0 or 1 : is the stack modified? */
+	int32_t stack_mod_val;		/* val stack is modified by if known */
+
+        /* the instruction proper */
+        enum x86_insn_prefix prefix;	/* prefixes ORed together */
+        char prefix_string[MAX_PREFIX_STR]; /* prefixes [might be truncated] */
+        char mnemonic[MAX_MNEM_STR];
+        x86_oplist_t *operands;		/* list of explicit/implicit operands */
+	size_t operand_count;		/* total number of operands */
+	size_t explicit_count;		/* number of explicit operands */
+        /* convenience fields for user */
+        void *block;                    /* code block containing this insn */
+        void *function;                 /* function containing this insn */
+        int tag;			/* tag the insn as seen/processed */
+} x86_insn_t;
+
+
+/* returns 0 if an instruction is invalid, 1 if valid */
+int x86_insn_is_valid( x86_insn_t *insn );
+
+/* DISASSEMBLY ROUTINES
+ *      Canonical order of arguments is
+ *        (buf, buf_len, buf_rva, offset, len, insn, func, arg, resolve_func)
+ *      ...but of course all of these are not used at the same time.
+ */
+
+
+/* Function prototype for caller-supplied callback routine
+ *      These callbacks are intended to process 'insn' further, e.g. by
+ *      adding it to a linked list, database, etc */
+typedef void (*DISASM_CALLBACK)( x86_insn_t *insn, void * arg );
+
+/* Function prototype for caller-supplied address resolver.
+ *      This routine is used to determine the rva to disassemble next, given
+ *      the 'dest' operand of a jump/call. This allows the caller to resolve
+ *      jump/call targets stored in a register or on the stack, and also allows
+ *      the caller to prevent endless loops by checking if an address has
+ *      already been disassembled. If an address cannot be resolved from the
+ *      operand, or if the address has already been disassembled, this routine
+ *      should return -1; in all other cases the RVA to be disassembled next
+ *      should be returned. */
+typedef int32_t (*DISASM_RESOLVER)( x86_op_t *op, x86_insn_t * current_insn,
+				 void *arg );
+
+
+/* x86_disasm: Disassemble a single instruction from a buffer of bytes.
+ *             Returns size of instruction in bytes.
+ *             Caller is responsible for calling x86_oplist_free() on
+ *             a reused "insn" to avoid leaking memory when calling this
+ *             function repeatedly.
+ *      buf     : Buffer of bytes to disassemble
+ *      buf_len : Length of the buffer
+ *      buf_rva : Load address of the start of the buffer
+ *      offset  : Offset in buffer to disassemble
+ *      insn    : Structure to fill with disassembled instruction
+ */
+unsigned int x86_disasm( unsigned char *buf, unsigned int buf_len,
+                	 uint32_t buf_rva, unsigned int offset,
+                	 x86_insn_t * insn );
+
+/* x86_disasm_range: Sequential disassembly of a range of bytes in a buffer,
+ *                   invoking a callback function each time an instruction
+ *                   is successfully disassembled. The 'range' refers to the
+ *                   bytes between 'offset' and 'offset + len' in the buffer;
+ *                   'len' is assumed to be less than the length of the buffer.
+ *                   Returns number of instructions processed.
+ *      buf     : Buffer of bytes to disassemble (e.g. .text section)
+ *      buf_rva : Load address of buffer (e.g. ELF Virtual Address)
+ *      offset  : Offset in buffer to start disassembly at
+ *      len     : Number of bytes to disassemble
+ *      func    : Callback function to invoke (may be NULL)
+ *      arg     : Arbitrary data to pass to callback (may be NULL)
+ */
+unsigned int x86_disasm_range( unsigned char *buf, uint32_t buf_rva,
+	                       unsigned int offset, unsigned int len,
+	                       DISASM_CALLBACK func, void *arg );
+
+/* x86_disasm_forward: Flow-of-execution disassembly of the bytes in a buffer,
+ *                     invoking a callback function each time an instruction
+ *                     is successfully disassembled.
+ *      buf     : Buffer to disassemble (e.g. .text section)
+ *      buf_len : Number of bytes in buffer
+ *      buf_rva : Load address of buffer (e.g. ELF Virtual Address)
+ *      offset  : Offset in buffer to start disassembly at (e.g. entry point)
+ *      func    : Callback function to invoke (may be NULL)
+ *      arg     : Arbitrary data to pass to callback (may be NULL)
+ *      resolver: Caller-supplied address resolver. If no resolver is
+ *                supplied, a default internal one is used -- however the
+ *                internal resolver does NOT catch loops and could end up
+ *                disassembling forever..
+ *      r_arg	: Arbitrary data to pass to resolver (may be NULL)
+ */
+unsigned int x86_disasm_forward( unsigned char *buf, unsigned int buf_len,
+	                         uint32_t buf_rva, unsigned int offset,
+	                         DISASM_CALLBACK func, void *arg,
+	                         DISASM_RESOLVER resolver, void *r_arg );
+
+/* Instruction operands: these are stored as a list of explicit and
+ * implicit operands. It is recommended that the 'foreach' routines
+ * be used to when examining operands for purposes of data flow analysis */
+
+/* Operand FOREACH callback: 'arg' is an abritrary parameter passed to the
+ * foreach routine, 'insn' is the x86_insn_t whose operands are being
+ * iterated over, and 'op' is the current x86_op_t */
+typedef void (*x86_operand_fn)(x86_op_t *op, x86_insn_t *insn, void *arg);
+
+/* FOREACH types: these are used to limit the foreach results to 
+ * operands which match a certain "type" (implicit or explicit)
+ * or which are accessed in certain ways (e.g. read or write). Note
+ * that this operates on the operand list of single instruction, so
+ * specifying the 'real' operand type (register, memory, etc) is not
+ * useful. Note also that by definition Execute Access implies Read
+ * Access and implies Not Write Access.
+ * The "type" (implicit or explicit) and the access method can
+ * be ORed together, e.g. op_wo | op_explicit */
+enum x86_op_foreach_type {
+	op_any 	= 0,		/* ALL operands (explicit, implicit, rwx) */
+	op_dest = 1,		/* operands with Write access */
+	op_src 	= 2,		/* operands with Read access */
+	op_ro 	= 3,		/* operands with Read but not Write access */
+	op_wo 	= 4,		/* operands with Write but not Read access */
+	op_xo 	= 5,		/* operands with Execute access */
+	op_rw 	= 6,		/* operands with Read AND Write access */
+	op_implicit = 0x10,	/* operands that are implied by the opcode */
+	op_explicit = 0x20	/* operands that are not side-effects */
+};
+
+
+/* free the operand list associated with an instruction -- useful for
+ * preventing memory leaks when free()ing an x86_insn_t */
+void x86_oplist_free( x86_insn_t *insn );
+
+/* Operand foreach: invokes 'func' with 'insn' and 'arg' as arguments. The
+ * 'type' parameter is used to select only operands matching specific
+ * criteria. */
+int x86_operand_foreach( x86_insn_t *insn, x86_operand_fn func, void *arg,
+	       	  	 enum x86_op_foreach_type type);
+
+/* convenience routine: returns count of operands matching 'type' */
+size_t x86_operand_count( x86_insn_t *insn, enum x86_op_foreach_type type );
+
+/* accessor functions for the operands */
+x86_op_t * x86_operand_1st( x86_insn_t *insn );
+x86_op_t * x86_operand_2nd( x86_insn_t *insn );
+x86_op_t * x86_operand_3rd( x86_insn_t *insn );
+
+/* these allow libdisasm 2.0 accessor functions to still be used */
+#define x86_get_dest_operand( insn ) x86_operand_1st( insn )
+#define x86_get_src_operand( insn ) x86_operand_2nd( insn )
+#define x86_get_imm_operand( insn ) x86_operand_3rd( insn )
+
+/* get size of operand data in bytes */
+unsigned int x86_operand_size( x86_op_t *op );
+
+/* Operand Convenience Routines: the following three routines are common
+ * operations on operands, intended to ease the burden of the programmer. */
+
+/* Get Address: return the value of an offset operand, or the offset of
+ * a segment:offset absolute address */
+uint32_t x86_get_address( x86_insn_t *insn );
+
+/* Get Relative Offset: return as a sign-extended int32_t the near or far
+ * relative offset operand, or 0 if there is none. There can be only one
+ * relaive offset operand in an instruction. */
+int32_t x86_get_rel_offset( x86_insn_t *insn );
+
+/* Get Branch Target: return the x86_op_t containing the target of
+ * a jump or call operand, or NULL if there is no branch target. 
+ * Internally, a 'branch target' is defined as any operand with
+ * Execute Access set. There can be only one branch target per instruction. */
+x86_op_t * x86_get_branch_target( x86_insn_t *insn );
+
+/* Get Immediate: return the x86_op_t containing the immediate operand
+ * for this instruction, or NULL if there is no immediate operand. There
+ * can be only one immediate operand per instruction */
+x86_op_t * x86_get_imm( x86_insn_t *insn );
+
+/* Get Raw Immediate Data: returns a pointer to the immediate data encoded
+ * in the instruction. This is useful for large data types [>32 bits] currently
+ * not supported by libdisasm, or for determining if the disassembler
+ * screwed up the conversion of the immediate data. Note that 'imm' in this
+ * context refers to immediate data encoded at the end of an instruction as
+ * detailed in the Intel Manual Vol II Chapter 2; it does not refer to the
+ * 'op_imm' operand (the third operand in instructions like 'mul' */
+unsigned char * x86_get_raw_imm( x86_insn_t *insn );
+
+
+/* More accessor fuctions, this time for user-defined info... */
+/* set the address (usually RVA) of the insn */
+void x86_set_insn_addr( x86_insn_t *insn, uint32_t addr );
+
+/* set the offset (usually offset into file) of the insn */
+void x86_set_insn_offset( x86_insn_t *insn, unsigned int offset );
+
+/* set a pointer to the function owning the instruction. The 
+ * type of 'func' is user-defined; libdisasm does not use the func field. */
+void x86_set_insn_function( x86_insn_t *insn, void * func );
+
+/* set a pointer to the block of code owning the instruction. The 
+ * type of 'block' is user-defined; libdisasm does not use the block field. */
+void x86_set_insn_block( x86_insn_t *insn, void * block );
+
+/* instruction tagging: these routines allow the programmer to mark
+ * instructions as "seen" in a DFS, for example. libdisasm does not use
+ * the tag field.*/ 
+/* set insn->tag to 1 */
+void x86_tag_insn( x86_insn_t *insn );
+/* set insn->tag to 0 */
+void x86_untag_insn( x86_insn_t *insn );
+/* return insn->tag */
+int x86_insn_is_tagged( x86_insn_t *insn );
+
+
+/* Disassembly formats:
+ *      AT&T is standard AS/GAS-style: "mnemonic\tsrc, dest, imm"
+ *      Intel is standard MASM/NASM/TASM: "mnemonic\tdest,src, imm"
+ *      Native is tab-delimited: "RVA\tbytes\tmnemonic\tdest\tsrc\timm"
+ *      XML is your typical <insn> ... </insn>
+ *      Raw is addr|offset|size|bytes|prefix... see libdisasm_formats.7
+ */
+enum x86_asm_format { 
+	unknown_syntax = 0,		/* never use! */
+	native_syntax, 			/* header: 35 bytes */
+	intel_syntax, 			/* header: 23 bytes */
+	att_syntax,  			/* header: 23 bytes */
+	xml_syntax,			/* header: 679 bytes */
+	raw_syntax			/* header: 172 bytes */
+};
+
+/* format (sprintf) an operand into 'buf' using specified syntax */
+int x86_format_operand(x86_op_t *op, char *buf, int len,
+                  enum x86_asm_format format);
+
+/* format (sprintf) an instruction mnemonic into 'buf' using specified syntax */
+int x86_format_mnemonic(x86_insn_t *insn, char *buf, int len,
+                        enum x86_asm_format format);
+
+/* format (sprintf) an instruction into 'buf' using specified syntax;
+ * this includes formatting all operands */
+int x86_format_insn(x86_insn_t *insn, char *buf, int len, enum x86_asm_format);
+
+/* fill 'buf' with a description of the format's syntax */
+int x86_format_header( char *buf, int len, enum x86_asm_format format);
+
+/* Endianness of an x86 CPU : 0 is big, 1 is little; always returns 1 */
+unsigned int x86_endian(void);
+
+/* Default address and operand size in bytes */
+unsigned int x86_addr_size(void);
+unsigned int x86_op_size(void);
+
+/* Size of a machine word in bytes */
+unsigned int x86_word_size(void);
+
+/* maximum size of a code instruction */
+#define x86_max_inst_size(x) x86_max_insn_size(x)
+unsigned int x86_max_insn_size(void);
+
+/* register IDs of Stack, Frame, Instruction pointer and Flags register */
+unsigned int x86_sp_reg(void);
+unsigned int x86_fp_reg(void);
+unsigned int x86_ip_reg(void);
+unsigned int x86_flag_reg(void);
+
+/* fill 'reg' struct with details of register 'id' */
+void x86_reg_from_id( unsigned int id, x86_reg_t * reg );
+
+/* convenience macro demonstrating how to get an aliased register; proto is
+ *   void x86_get_aliased_reg( x86_reg_t *alias_reg, x86_reg_t *output_reg )
+ * where 'alias_reg' is a reg operand and 'output_reg' is filled with the
+ * register that the operand is an alias for */
+#define x86_get_aliased_reg( alias_reg, output_reg )			\
+	x86_reg_from_id( alias_reg->alias, output_reg )
+
+
+/* ================================== Invariant Instruction Representation */
+/* Invariant instructions are used for generating binary signatures; 
+ * the instruction is modified so that all variant bytes in an instruction
+ * are replaced with a wildcard byte. 
+ *
+ * A 'variant byte' is one that is expected to be modified by either the 
+ * static or the dynamic linker: for example, an address encoded in an 
+ * instruction. 
+ *
+ * By comparing the invariant representation of one instruction [or of a
+ * sequence of instructions] with the invariant representation of another,
+ * one determine whether the two invariant representations are from the same
+ * relocatable object [.o] file. Thus one can use binary signatures [which
+ * are just sequences of invariant instruction representations] to look for
+ * library routines which have been statically-linked into a binary.
+ *
+ * The invariant routines are faster and smaller than the disassembly
+ * routines; they can be used to determine the size of an instruction 
+ * without all of the overhead of a full instruction disassembly.
+ */
+
+/* This byte is used to replace variant bytes */
+#define X86_WILDCARD_BYTE 0xF4
+
+typedef struct {
+        enum x86_op_type        type;           /* operand type */
+        enum x86_op_datatype    datatype;       /* operand size */
+        enum x86_op_access      access;         /* operand access [RWX] */
+        enum x86_op_flags       flags;          /* misc flags */
+} x86_invariant_op_t;
+
+typedef struct {
+	unsigned char bytes[64];	/* invariant representation */
+	unsigned int  size;		/* number of bytes in insn */
+        enum x86_insn_group group;      /* meta-type, e.g. INS_EXEC */
+        enum x86_insn_type type;        /* type, e.g. INS_BRANCH */
+	x86_invariant_op_t operands[3];	/* operands: dest, src, imm */
+} x86_invariant_t;
+ 
+
+/* return a version of the instruction with the variant bytes masked out */
+size_t x86_invariant_disasm( unsigned char *buf, int buf_len, 
+			  x86_invariant_t *inv );
+/* return the size in bytes of the intruction pointed to by 'buf';
+ * this used x86_invariant_disasm since it faster than x86_disasm */
+size_t x86_size_disasm( unsigned char *buf, unsigned int buf_len );
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/src/third_party/libdisasm/qword.h b/src/third_party/libdisasm/qword.h
new file mode 100644
index 0000000..5f0e803
--- /dev/null
+++ b/src/third_party/libdisasm/qword.h
@@ -0,0 +1,14 @@
+#ifndef LIBDISASM_QWORD_H
+#define LIBDISASM_QWORD_H
+
+#include <stdint.h>
+
+/* platform independent data types */
+
+#ifdef _MSC_VER
+	typedef __int64         qword_t;
+#else
+	typedef int64_t         qword_t;
+#endif
+
+#endif
diff --git a/src/third_party/libdisasm/swig/Makefile b/src/third_party/libdisasm/swig/Makefile
new file mode 100644
index 0000000..44ef486
--- /dev/null
+++ b/src/third_party/libdisasm/swig/Makefile
@@ -0,0 +1,70 @@
+# change these values if you need to
+SWIG		=	swig	# apt-get install swig !
+GCC		=	gcc
+
+CC_FLAGS	=	-c -fPIC
+LD_FLAGS	=	-shared -L../.. -ldisasm
+
+BASE_NAME	=	x86disasm
+
+export INTERFACE_FILE BASE_NAME SWIG GCC CC_FLAGS LD_FLAGS
+
+#====================================================
+# TARGETS
+
+all: swig
+dummy: swig swig-python swig-ruby swig-perl swig-tcl install uninstall clean
+
+swig: swig-python swig-perl
+# swig-rub swig-tcl
+
+swig-python: 
+	cd python && make -f Makefile-swig
+
+swig-ruby:
+	cd ruby && make -f Makefile-swig
+
+swig-perl:
+	cd perl && make -f Makefile-swig
+
+swig-tcl:
+	cd tcl && make -f Makefile-swig
+
+# ==================================================================
+install: install-python install-perl
+# install-ruby install-tcl
+
+install-python:
+	cd python && sudo make -f Makefile-swig install
+
+install-ruby:
+	cd ruby && sudo make -f Makefile-swig install
+
+install-perl:
+	cd perl && sudo make -f Makefile-swig install
+
+install-tcl:
+	cd tcl && sudo make -f Makefile-swig install
+
+# ==================================================================
+uninstall: uninstall-python
+#uninstall-ruby uninstall-perl uninstall-tcl
+
+uninstall-python:
+	cd python && sudo make -f Makefile-swig uninstall
+
+uninstall-ruby:
+	cd ruby && sudo make -f Makefile-swig uninstall
+
+uninstall-perl:
+	cd perl && sudo make -f Makefile-swig uninstall
+
+uninstall-tcl:
+	cd tcl && sudo make -f Makefile-swig uninstall
+
+# ==================================================================
+clean:
+	cd python && make -f Makefile-swig clean
+	cd ruby && make -f Makefile-swig clean
+	cd perl && make -f Makefile-swig clean
+	cd tcl && make -f Makefile-swig clean
diff --git a/src/third_party/libdisasm/swig/README b/src/third_party/libdisasm/swig/README
new file mode 100644
index 0000000..a9fa79e
--- /dev/null
+++ b/src/third_party/libdisasm/swig/README
@@ -0,0 +1,128 @@
+			Libdisasm SWIG README
+
+The SWIG utility (www.swig.org) can be used to generate 
+
+
+Building SWIG Modules
+---------------------
+
+	make
+	make install
+
+Make and Install both build Python, Perl, Ruby, and Tcl modules. If you
+do not have one of these languages installed, comment out the relevant
+target in the main Makefile.
+
+Install uses 'sudo' to put files in the correct locations; if you
+do not have sudo installed, change the install targets.
+
+The Module API
+--------------
+
+The OOP API
+-----------
+
+
+The Python Module
+-----------------
+
+To test that the module loads:
+
+	bash# python
+	>>> import x86disasm
+	>>> x86disasm.version_string()
+	'0.21-pre'
+	>>>^D
+	bash#
+
+	>>> import x86disasm
+	>>> import array
+	>>> disasm = x86disasm.X86_Disasm( )
+	>>> tgt = open( "/tmp/a.out", "rb" )
+	>>> tgt.seek( 0, 2 )
+	>>> size = tgt.tell()
+	>>> tgt.seek( 0, 0 )
+	>>> buf = array.array( 'B' )
+	>>> buf.fromfile( tgt, size )
+	>>> tgt.close()
+	>>> data = x86disasm.byteArray( size )
+	>>> for i in range( size ):
+	...     data[i] = buf.pop(0)
+	...
+	>>> del buf
+	>>> del tgt
+	>>> insn = disasm.disasm( data, size - 1, 0, 0 )
+	>>> insn.format( x86disasm.att_syntax )
+	 'jg\t0x00000047'
+	>>> insn.format( x86disasm.raw_syntax )
+	'0x00000000|0x00000000|2|7F 45 |||controlflow|jcc|jg|80386|General Purpose|||zero_clear sign_eq_oflow |0|0|relative|sbyte|00000047|'
+	>>> ops = insn.operand_list()
+	>>> node = ops.first()
+	>>> while node is not None:
+	...     s = node.op.format(x86disasm.raw_syntax)
+	...     print s
+	...     node = ops.next()
+	... 
+	relative|sbyte|00000047|
+
+
+
+
+
+
+The Perl Module
+---------------
+
+To test that the module loads:
+
+	bash# perl
+	use x86disasm;
+	print x86disasm::version_string() . "\n";
+	^D
+	0.21-pre
+	bash#
+
+The Ruby Module
+---------------
+
+To test that the module loads:
+
+	bash# irb
+	irb(main):001:0> require 'x86disasm'
+	=> true
+	irb(main):002:0> X86disasm.version_string()
+	=> "0.21-pre"
+	irb(main):003:0> x = X86disasm::X86_Disasm.new
+	=> #<X86disasm::X86_Disasm:0xb7d624a4>
+	irb(main):004:0> x.max_register_string()
+	=> 8
+	irb(main):003:0> ^D
+	bash#
+
+The Tcl Module
+---------------
+
+To test that the module loads:
+
+	bash# tclsh
+	% load /usr/lib/tcl8.3/x86disasm.so X86disasm
+	% version_string
+	0.21-pre
+	% ^D
+	bash#
+
+	% x86_init 0 NULL NULL
+		OR
+	% x86disasm dis
+	_486b0708_p_x86disasm
+	%  puts "[dis cget -last_error]"
+	0
+
+
+
+
+The Interface Files
+-------------------
+
+	libdisasm.i	-- interface file without shadow classes
+	libdisasm_oop.i	-- interface file with shadow classes
diff --git a/src/third_party/libdisasm/swig/libdisasm.i b/src/third_party/libdisasm/swig/libdisasm.i
new file mode 100644
index 0000000..ec12041
--- /dev/null
+++ b/src/third_party/libdisasm/swig/libdisasm.i
@@ -0,0 +1,508 @@
+%module x86disasm
+%{
+#include "../../libdis.h"
+#include "../../../config.h"
+%}
+
+%rename(version_string) x86_version_string;
+%include "../../libdis.h"
+#include "../../../config.h"
+
+%inline %{
+	const char * x86_version_string( void ) {
+		return PACKAGE_VERSION;
+	}
+%}
+
+%rename(report_codes) x86_report_codes;
+%rename(report_error) x86_report_error;
+%rename(options) x86_options;
+%rename(init) x86_init;
+%rename(set_reporter) x86_set_reporter;
+%rename(set_options) x86_set_options;
+%rename(options) x86_get_options;
+%rename(cleanup) x86_cleanup;
+%rename(reg_type) x86_reg_type;
+%rename(reg) x86_reg_t;
+%rename(eaddr) x86_ea_t;
+%rename(op_type) x86_op_type;
+%rename(optype_is_address) x86_optype_is_address;
+%rename(optype_is_relative) x86_optype_is_relative;
+%rename(op_datatype) x86_op_datatype;
+%rename(op_access) x86_op_access;
+%rename(op_flags) x86_op_flags;
+%rename(operand) x86_op_t;
+%rename(insn_group) x86_insn_group; 
+%rename(insn_type) x86_insn_type;
+%rename(insn_note) x86_insn_note ;
+%rename(flag_status) x86_flag_status; 
+%rename(insn_cpu) x86_insn_cpu ;
+%rename(insn_isa) x86_insn_isa ;
+%rename(insn_prefix) x86_insn_prefix ;
+%rename(insn) x86_insn_t;
+%rename(insn_is_valid) x86_insn_is_valid;
+%rename(i_disasm) x86_disasm;
+%rename(i_disasm_range) x86_disasm_range;
+%rename(i_disasm_forward) x86_disasm_forward;
+%rename(insn_operand_count) x86_operand_count;
+%rename(insn_operand_1st) x86_operand_1st;
+%rename(insn_operand_2nd) x86_operand_2nd;
+%rename(insn_operand_3rd) x86_operand_3rd;
+%rename(insn_dest_operand) x86_get_dest_operand;
+%rename(insn_src_operand) x86_get_src_operand;
+%rename(insn_imm_operand) x86_get_imm_operand;
+%rename(operand_size) x86_operand_size;
+%rename(insn_rel_offset) x86_get_rel_offset;
+%rename(insn_branch_target) x86_get_branch_target;
+%rename(insn_imm) x86_get_imm;
+%rename(insn_raw_imm) x86_get_raw_imm;
+%rename(insn_set_addr) x86_set_insn_addr;
+%rename(insn_set_offset) x86_set_insn_offset;
+%rename(insn_set_function) x86_set_insn_function;
+%rename(insn_set_block) x86_set_insn_block;
+%rename(insn_tag) x86_tag_insn;
+%rename(insn_untag) x86_untag_insn;
+%rename(insn_is_tagged) x86_insn_is_tagged;
+%rename(asm_format) x86_asm_format;
+%rename(operand_format) x86_format_operand;
+%rename(insn_format_mnemonic) x86_format_mnemonic;
+%rename(insn_format) x86_format_insn;
+%rename(header_format) x86_format_header;
+%rename(endian) x86_endian;
+%rename(size_default_address) x86_addr_size;
+%rename(size_default_operand) x86_op_size;
+%rename(size_machine_word) x86_word_size;
+%rename(size_max_insn) x86_max_insn_size;
+%rename(reg_sp) x86_sp_reg;
+%rename(reg_fp) x86_fp_reg;
+%rename(reg_ip) x86_ip_reg;
+%rename(reg_from_id) x86_reg_from_id;
+%rename(reg_from_alias) x86_get_aliased_reg;
+%rename(invariant_op) x86_invariant_op_t;
+%rename(invariant) x86_invariant_t;
+%rename(disasm_invariant) x86_invariant_disasm;
+%rename(disasm_size) x86_size_disasm;
+
+%include "carrays.i"
+
+%array_class( unsigned char, byteArray );
+
+
+%apply (unsigned char *STRING, int LENGTH) { 
+	(unsigned char *buf, size_t buf_len) 
+};
+
+
+%newobject x86_op_copy;
+%inline %{
+	x86_op_t * x86_op_copy( x86_op_t * src ) {
+		x86_op_t *op;
+		
+		if (! src ) {
+			return NULL;
+		}
+
+		op = (x86_op_t *) calloc( sizeof(x86_op_t), 1 );
+		if ( op ) {
+			memcpy( op, src, sizeof(x86_op_t) );
+		}
+
+		return op;
+	}
+
+	typedef struct x86_op_list_node {
+		x86_op_t *op;
+		struct x86_op_list_node *next, *prev;
+	} x86_op_list_node;
+
+	typedef struct x86_op_list {
+		size_t count;
+		x86_op_list_node *head, *tail, *curr;
+	} x86_op_list;
+
+	x86_op_list * x86_op_list_new () {
+		x86_op_list *list = (x86_op_list *) 
+				calloc( sizeof(x86_op_list), 1 );
+		list->count = 0;
+		return list;
+	}
+
+	void x86_op_list_free(x86_op_list *list) {
+		x86_op_list_node *node, *next;
+
+		node = list->head;
+		while ( node ) {
+			next = node->next;
+			/* free( node->insn ); */
+			free( node );
+			node = next;
+		}
+
+		free( list );
+	}
+
+	x86_op_list_node * x86_op_list_first(x86_op_list *list) { 
+		return list->head; 
+	}
+
+	x86_op_list_node * x86_op_list_last(x86_op_list *list) { 
+		return list->tail; 
+	}
+
+	x86_op_list_node * x86_op_list_next(x86_op_list *list) { 
+		if (! list->curr ) {
+			list->curr = list->head;
+			return list->head;
+		}
+
+		list->curr = list->curr->next;
+		return list->curr;
+	}
+
+	x86_op_list_node * x86_op_list_prev(x86_op_list *list) { 
+		if (! list->curr ) {
+			list->curr = list->tail;
+			return list->tail;
+		}
+
+		list->curr = list->curr->prev;
+		return list->curr;
+	}
+
+%}
+
+%newobject x86_op_list_append;
+
+%inline %{
+	void x86_op_list_append( x86_op_list * list, x86_op_t *op ) {
+		x86_op_list_node *node = (x86_op_list_node *)
+					calloc( sizeof(x86_op_list_node) , 1 );
+		if (! node ) {
+			return;
+		}
+
+		list->count++;
+		if ( ! list->tail ) {
+			list->head = list->tail = node;
+		} else {
+			list->tail->next = node;
+			node->prev = list->tail;
+			list->tail = node;
+		}
+
+		node->op = x86_op_copy( op );
+	}
+
+	x86_oplist_t * x86_op_list_node_copy( x86_oplist_t * list ) {
+		x86_oplist_t *ptr;
+		ptr = (x86_oplist_t *) calloc( sizeof(x86_oplist_t), 1 );
+		if ( ptr ) {
+			memcpy( &ptr->op, &list->op, sizeof(x86_op_t) );
+		}
+
+		return ptr;
+	}
+
+	x86_insn_t * x86_insn_new() {
+		x86_insn_t *insn = (x86_insn_t *)
+				   calloc( sizeof(x86_insn_t), 1 );
+		return insn;
+	}
+
+	void x86_insn_free( x86_insn_t *insn ) {
+		x86_oplist_free( insn );
+		free( insn );
+	}
+%}
+
+%newobject x86_insn_copy;
+
+%inline %{
+	x86_insn_t * x86_insn_copy( x86_insn_t *src) {
+		x86_oplist_t *ptr, *list, *last = NULL;
+		x86_insn_t *insn = (x86_insn_t *)
+				   calloc( sizeof(x86_insn_t), 1 );
+
+		if ( insn ) {
+			memcpy( insn, src, sizeof(x86_insn_t) );
+			insn->operands = NULL;
+			insn->block = NULL;
+			insn->function = NULL;
+
+			/* copy operand list */
+			for ( list = src->operands; list; list = list->next ) {
+				ptr = x86_op_list_node_copy( list );
+
+				if (! ptr ) {
+					continue;
+				}
+
+				if ( insn->operands ) {
+					last->next = ptr;
+				} else {
+					insn->operands = ptr;
+				}
+				last = ptr;
+			}
+		}
+
+		return insn;
+	}
+
+	x86_op_list * x86_insn_op_list( x86_insn_t *insn ) {
+		x86_oplist_t *list = insn->operands;
+		x86_op_list *op_list = x86_op_list_new();
+
+		for ( list = insn->operands; list; list = list->next ) {
+			x86_op_list_append( op_list, &list->op );
+		}
+
+		return op_list;
+	}
+
+	typedef struct x86_insn_list_node {
+		x86_insn_t *insn;
+		struct x86_insn_list_node *next, *prev;
+	} x86_insn_list_node;
+
+	typedef struct x86_insn_list {
+		size_t count;
+		x86_insn_list_node *head, *tail, *curr;
+	} x86_insn_list;
+
+%}
+
+%newobject x86_insn_list_new;
+
+%inline %{
+	x86_insn_list * x86_insn_list_new () {
+		x86_insn_list *list = (x86_insn_list *) 
+				calloc( sizeof(x86_insn_list), 1 );
+		list->count = 0;
+		return list;
+	}
+
+	void x86_insn_list_free( x86_insn_list * list ) {
+		x86_insn_list_node *node, *next;
+
+		if (! list ) {
+			return;
+		}
+
+		node = list->head;
+		while ( node ) {
+			next = node->next;
+			/* free( node->insn ); */
+			free( node );
+			node = next;
+		}
+
+		free( list );
+	}
+
+	x86_insn_list_node * x86_insn_list_first( x86_insn_list *list ) { 
+		if (! list ) {
+			return NULL;
+		}
+		return list->head; 
+	}
+
+	x86_insn_list_node * x86_insn_list_last( x86_insn_list *list ) { 
+		if (! list ) {
+			return NULL;
+		}
+		return list->tail; 
+	}
+
+	x86_insn_list_node * x86_insn_list_next( x86_insn_list *list ) { 
+		if (! list ) {
+			return NULL;
+		}
+		if (! list->curr ) {
+			list->curr = list->head;
+			return list->head;
+		}
+
+		list->curr = list->curr->next;
+		return list->curr;
+	}
+
+	x86_insn_list_node * x86_insn_list_prev( x86_insn_list *list ) { 
+		if (! list ) {
+			return NULL;
+		}
+		if (! list->curr ) {
+			list->curr = list->tail;
+			return list->tail;
+		}
+
+		list->curr = list->curr->prev;
+		return list->curr;
+	}
+
+%}
+
+%newobject x86_insn_list_append;
+
+%inline %{
+	void x86_insn_list_append( x86_insn_list *list, x86_insn_t *insn ) {
+		x86_insn_list_node *node;
+		if (! list ) {
+			return;
+		}
+
+		node = (x86_insn_list_node *)
+					calloc( sizeof(x86_insn_list_node) , 1 );
+
+		if (! node ) {
+			return;
+		}
+
+		list->count++;
+		if ( ! list->tail ) {
+			list->head = list->tail = node;
+		} else {
+			list->tail->next = node;
+			node->prev = list->tail;
+			list->tail = node;
+		}
+
+		node->insn = x86_insn_copy( insn );
+	}
+
+	typedef struct {
+		enum x86_report_codes last_error;
+		void * last_error_data;
+		void * disasm_callback;
+		void * disasm_resolver;
+	} x86disasm;
+
+	void x86_default_reporter( enum x86_report_codes code, 
+				   void *data, void *arg ) {
+		x86disasm *dis = (x86disasm *) arg;
+		if ( dis ) {
+			dis->last_error = code;
+			dis->last_error_data = data;
+		}
+	}
+
+	void x86_default_callback( x86_insn_t *insn, void *arg ) {
+		x86_insn_list *list = (x86_insn_list *) arg;
+		if ( list ) {
+			x86_insn_list_append( list, insn );
+		}
+	}
+
+	/* TODO: resolver stack, maybe a callback */
+	long x86_default_resolver( x86_op_t *op, x86_insn_t *insn, void *arg ) {
+		x86disasm *dis = (x86disasm *) arg;
+		if ( dis ) {
+			//return dis->resolver( op, insn );
+			return 0;
+		}
+
+		return 0;
+	}
+
+	
+%}
+
+%newobject x86disasm_new;
+
+%inline %{
+	x86disasm * x86disasm_new ( enum x86_options options ) {
+		x86disasm * dis = (x86disasm *)
+				calloc( sizeof( x86disasm ), 1 );
+		x86_init( options, x86_default_reporter, dis );
+		return dis;
+	}
+
+	void x86disasm_free( x86disasm * dis ) {
+		x86_cleanup();
+		free( dis );
+	}
+%}
+
+%newobject x86_disasm;
+
+%inline %{
+	x86_insn_t * disasm( unsigned char *buf, size_t buf_len, 
+		           unsigned long buf_rva, unsigned int offset ) {
+		x86_insn_t *insn = calloc( sizeof( x86_insn_t ), 1 );
+		x86_disasm( buf, buf_len, buf_rva, offset, insn );
+		return insn;
+	}
+
+	int disasm_range( unsigned char *buf, size_t buf_len, 
+	              unsigned long buf_rva, unsigned int offset,
+		      unsigned int len ) {
+
+		x86_insn_list *list = x86_insn_list_new();
+
+		if ( len > buf_len ) {
+			len = buf_len;
+		}
+
+		return x86_disasm_range( buf, buf_rva, offset, len, 
+				x86_default_callback, list );
+	}
+
+	int disasm_forward( unsigned char *buf, size_t buf_len,
+			    unsigned long buf_rva, unsigned int offset ) {
+		x86_insn_list *list = x86_insn_list_new();
+
+		/* use default resolver: damn SWIG callbacks! */
+		return x86_disasm_forward( buf, buf_len, buf_rva, offset,
+			                   x86_default_callback, list, 
+					   x86_default_resolver, NULL );
+	}
+
+	size_t disasm_invariant( unsigned char *buf, size_t buf_len, 
+			  x86_invariant_t *inv ) {
+		return x86_invariant_disasm( buf, buf_len, inv );
+	}
+
+	size_t disasm_size( unsigned char *buf, size_t buf_len ) {
+		return x86_size_disasm( buf, buf_len );
+	}
+
+	int x86_max_operand_string( enum x86_asm_format format ) {
+		switch ( format ) {
+			case xml_syntax:
+				return  MAX_OP_XML_STRING;
+				break;
+			case raw_syntax:
+				return MAX_OP_RAW_STRING;
+				break;
+			case native_syntax:
+			case intel_syntax:
+			case att_syntax:
+			case unknown_syntax:
+			default:
+				return MAX_OP_STRING;
+				break;
+		}
+	}
+
+
+	int x86_max_insn_string( enum x86_asm_format format ) {
+		switch ( format ) {
+			case xml_syntax:
+				return  MAX_INSN_XML_STRING;
+				break;
+			case raw_syntax:
+				return MAX_INSN_RAW_STRING;
+				break;
+			case native_syntax:
+			case intel_syntax:
+			case att_syntax:
+			case unknown_syntax:
+			default:
+				return MAX_INSN_STRING;
+				break;
+		}
+	}
+
+	int x86_max_num_operands( ) { return MAX_NUM_OPERANDS; }
+%}
+
diff --git a/src/third_party/libdisasm/swig/libdisasm_oop.i b/src/third_party/libdisasm/swig/libdisasm_oop.i
new file mode 100644
index 0000000..973a47e
--- /dev/null
+++ b/src/third_party/libdisasm/swig/libdisasm_oop.i
@@ -0,0 +1,1114 @@
+%module x86disasm
+%{
+#ifdef _MSC_VER
+	typedef __int64         qword;
+#else
+	typedef long long       qword;
+#endif
+
+#include <sys/types.h>
+
+#define MAX_REGNAME 8
+#define MAX_PREFIX_STR 32
+#define MAX_MNEM_STR 16
+#define MAX_INSN_SIZE 20
+#define MAX_OP_STRING 32
+#define MAX_OP_RAW_STRING 64
+#define MAX_OP_XML_STRING 256
+#define MAX_NUM_OPERANDS 8
+#define MAX_INSN_STRING 512
+#define MAX_INSN_RAW_STRING 1024
+#define MAX_INSN_XML_STRING 4096
+
+#include "../../../config.h"
+
+
+const char * version_string( void ) {
+	return PACKAGE_VERSION;
+}
+
+%}
+
+const char * version_string( void );
+
+%rename(X86_Register) x86_reg_t;
+%rename(X86_EAddr) x86_ea_t;
+%rename(X86_Operand) x86_op_t;
+//%rename(X86_OpList) x86_oplist_t;
+%rename(X86_Insn) x86_insn_t;
+%rename(X86_InvOperand) x86_invariant_op_t;
+%rename(X86_Invariant) x86_invariant_t;
+
+%include "carrays.i"
+
+%array_class( unsigned char, byteArray );
+
+
+%apply (unsigned char *STRING, int LENGTH) { 
+	(unsigned char *buf, size_t buf_len) 
+};
+
+
+%inline %{
+
+
+enum x86_asm_format { 
+	unknown_syntax = 0,		/* never use! */
+	native_syntax, 			/* header: 35 bytes */
+	intel_syntax, 			/* header: 23 bytes */
+	att_syntax,  			/* header: 23 bytes */
+	xml_syntax,			/* header: 679 bytes */
+	raw_syntax			/* header: 172 bytes */
+};
+%}
+
+/* ================================================================== */
+/* operand class */
+%inline %{
+	enum x86_reg_type {
+	        reg_gen         = 0x00001, reg_in          = 0x00002,
+	        reg_out         = 0x00004, reg_local       = 0x00008,
+	        reg_fpu         = 0x00010, reg_seg         = 0x00020,
+	        reg_simd        = 0x00040, reg_sys         = 0x00080,
+	        reg_sp          = 0x00100, reg_fp          = 0x00200,
+	        reg_pc          = 0x00400, reg_retaddr     = 0x00800,
+	        reg_cond        = 0x01000, reg_zero        = 0x02000,
+	        reg_ret         = 0x04000, reg_src         = 0x10000,
+	        reg_dest        = 0x20000, reg_count       = 0x40000
+	};
+
+	typedef struct {
+       	 	char name[MAX_REGNAME];
+	        enum x86_reg_type type;
+	        unsigned int size;
+	        unsigned int id;
+		unsigned int alias;
+		unsigned int shift;
+	} x86_reg_t;
+
+	void x86_reg_from_id( unsigned int id, x86_reg_t * reg );
+
+	typedef struct {
+	        unsigned int     scale;
+	        x86_reg_t        index, base;
+	        long             disp;
+	        char             disp_sign;
+	        char             disp_size;
+	} x86_ea_t;
+
+	enum x86_op_type {
+	        op_unused = 0,
+	        op_register = 1,
+	        op_immediate = 2,
+	        op_relative_near = 3,
+	        op_relative_far = 4,
+	        op_absolute = 5, 
+	        op_expression = 6,
+	        op_offset = 7,
+	        op_unknown
+	};
+
+	enum x86_op_datatype {
+	       	op_byte = 1, op_word = 2,
+	        op_dword = 3, op_qword = 4,
+	        op_dqword = 5, op_sreal = 6,
+	        op_dreal = 7, op_extreal = 8,
+	        op_bcd = 9,  op_ssimd = 10,
+	        op_dsimd = 11, op_sssimd = 12,
+	        op_sdsimd = 13, op_descr32 = 14,
+		op_descr16 = 15, op_pdescr32 = 16,
+		op_pdescr16 = 17, op_fpuenv = 18,
+		op_fpregset = 19,
+	};
+
+	enum x86_op_access {
+	        op_read = 1,
+	        op_write = 2,
+	        op_execute = 4
+	};
+
+	enum x86_op_flags {
+	        op_signed = 1, op_string = 2, 
+	        op_constant = 4, op_pointer = 8,  
+		op_sysref = 0x010, op_implied = 0x020,
+		op_hardcode = 0x40, op_es_seg = 0x100,
+	        op_cs_seg = 0x200, op_ss_seg = 0x300,
+	        op_ds_seg = 0x400, op_fs_seg = 0x500,
+	        op_gs_seg = 0x600
+	};
+
+	typedef struct {
+	        enum x86_op_type        type;
+	        enum x86_op_datatype    datatype;
+	        enum x86_op_access      access;
+	        enum x86_op_flags       flags;
+	        union {
+	                char            sbyte;
+	                short           sword;
+	                long            sdword;
+	                qword           sqword;
+	                unsigned char   byte;
+	       	         unsigned short  word;
+	                unsigned long   dword;
+	                qword           qword;
+	                float           sreal;
+	                double          dreal;
+	                unsigned char   extreal[10];
+	                unsigned char   bcd[10];
+	                qword           dqword[2];
+	                unsigned char   simd[16];
+	                unsigned char   fpuenv[28];
+	                void            * address;
+	                unsigned long   offset;
+	                x86_reg_t       reg;
+	                char            relative_near;
+	       	         long            relative_far;
+       	         	x86_ea_t        expression;
+        	} data;
+		void * insn;
+	} x86_op_t;
+
+	unsigned int x86_operand_size( x86_op_t *op );
+
+	int x86_format_operand(x86_op_t *op, char *buf, int len,
+        	          enum x86_asm_format format);
+%}
+
+%extend x86_reg_t{
+	x86_reg_t * aliased_reg( ) {
+		x86_reg_t * reg = (x86_reg_t * )
+				  calloc( sizeof(x86_reg_t), 1 );
+		x86_reg_from_id( self->id, reg );
+		return reg;
+	}
+}
+
+%extend x86_op_t{
+	size_t size() {
+		return x86_operand_size( self );
+	}
+	char * format( enum x86_asm_format format ) {
+		char *buf, *str;
+		size_t len;
+
+		switch ( format ) {
+			case xml_syntax:
+				len = MAX_OP_XML_STRING;
+				break;
+			case raw_syntax:
+				len = MAX_OP_RAW_STRING;
+				break;
+			case native_syntax:
+			case intel_syntax:
+			case att_syntax:
+			case unknown_syntax:
+			default:
+				len = MAX_OP_STRING;
+				break;
+		}
+
+		buf = (char * ) calloc( len + 1, 1 );
+		x86_format_operand( self, buf, len, format );
+
+		/* drop buffer down to a reasonable size */
+		str = strdup( buf );
+		free(buf);
+		return str;
+	}
+	
+	int is_address( ) {
+		if ( self->type == op_absolute ||
+		     self->type == op_offset ) {
+		     return 1;
+		}
+
+		return 0;
+	}
+
+	int is_relative( ) {
+		if ( self->type == op_relative_near ||
+		     self->type == op_relative_far ) {
+		     return 1;
+		}
+
+		return 0;
+	}
+
+	%newobject copy;
+	x86_op_t * copy() {
+		x86_op_t *op = (x86_op_t *) calloc( sizeof(x86_op_t), 1 );
+
+		if ( op ) {
+			memcpy( op, self, sizeof(x86_op_t) );
+		}
+
+		return op;
+	}
+}
+
+/* ================================================================== */
+/* operand list class */
+%inline %{
+	typedef struct X86_OpListNode {
+		x86_op_t *op;
+		struct X86_OpListNode *next, *prev;
+	} X86_OpListNode;
+
+	typedef struct X86_OpList {
+		size_t count;
+		X86_OpListNode *head, *tail, *curr;
+	} X86_OpList;
+%}
+
+%extend X86_OpList {
+	X86_OpList () {
+		X86_OpList *list = (X86_OpList *) 
+				calloc( sizeof(X86_OpList), 1 );
+		list->count = 0;
+		return list;
+	}
+
+	~X86_OpList() {
+		X86_OpListNode *node, *next;
+
+		node = self->head;
+		while ( node ) {
+			next = node->next;
+			/* free( node->insn ); */
+			free( node );
+			node = next;
+		}
+
+		free( self );
+	}
+
+	X86_OpListNode * first() { 
+		self->curr = self->head;
+		return self->head; 
+	}
+
+	X86_OpListNode * last() { 
+		self->curr = self->tail;
+		return self->tail; 
+	}
+
+	X86_OpListNode * next() { 
+		if (! self->curr ) {
+			self->curr = self->head;
+			return self->head;
+		}
+
+		self->curr = self->curr->next;
+		return self->curr;
+	}
+
+	X86_OpListNode * prev() { 
+		if (! self->curr ) {
+			self->curr = self->tail;
+			return self->tail;
+		}
+
+		self->curr = self->curr->prev;
+		return self->curr;
+	}
+
+	%newobject append;
+	void append( x86_op_t *op ) {
+		X86_OpListNode *node = (X86_OpListNode *)
+					calloc( sizeof(X86_OpListNode) , 1 );
+		if (! node ) {
+			return;
+		}
+
+		self->count++;
+		if ( ! self->tail ) {
+			self->head = self->tail = node;
+		} else {
+			self->tail->next = node;
+			node->prev = self->tail;
+			self->tail = node;
+		}
+
+		node->op = x86_op_t_copy( op );
+	}
+}
+
+%inline %{
+	typedef struct x86_operand_list {
+		x86_op_t op;
+		struct x86_operand_list *next;
+	} x86_oplist_t;
+%}
+
+%extend x86_oplist_t {
+	%newobject x86_oplist_node_copy;
+}
+
+/* ================================================================== */
+/* instruction class */
+%inline %{
+	x86_oplist_t * x86_oplist_node_copy( x86_oplist_t * list ) {
+		x86_oplist_t *ptr;
+		ptr = (x86_oplist_t *) calloc( sizeof(x86_oplist_t), 1 );
+		if ( ptr ) {
+			memcpy( &ptr->op, &list->op, sizeof(x86_op_t) );
+		}
+
+		return ptr;
+	}
+
+	enum x86_insn_group {
+		insn_none = 0, insn_controlflow = 1,
+	        insn_arithmetic = 2, insn_logic = 3,
+	        insn_stack = 4, insn_comparison = 5,
+	        insn_move = 6, insn_string = 7,
+	        insn_bit_manip = 8, insn_flag_manip = 9,
+	        insn_fpu = 10, insn_interrupt = 13,
+	        insn_system = 14, insn_other = 15
+	};
+
+	enum x86_insn_type {
+		insn_invalid = 0, insn_jmp = 0x1001,
+	        insn_jcc = 0x1002, insn_call = 0x1003,
+	        insn_callcc = 0x1004, insn_return = 0x1005,
+	        insn_add = 0x2001, insn_sub = 0x2002,
+	        insn_mul = 0x2003, insn_div = 0x2004,
+	        insn_inc = 0x2005, insn_dec = 0x2006,
+	        insn_shl = 0x2007, insn_shr = 0x2008,
+	        insn_rol = 0x2009, insn_ror = 0x200A,
+	        insn_and = 0x3001, insn_or = 0x3002,
+	        insn_xor = 0x3003, insn_not = 0x3004,
+	        insn_neg = 0x3005, insn_push = 0x4001,
+	        insn_pop = 0x4002, insn_pushregs = 0x4003,
+	        insn_popregs = 0x4004, insn_pushflags = 0x4005,
+	        insn_popflags = 0x4006, insn_enter = 0x4007,
+	        insn_leave = 0x4008, insn_test = 0x5001,
+	        insn_cmp = 0x5002, insn_mov = 0x6001,
+	        insn_movcc = 0x6002, insn_xchg = 0x6003,
+	        insn_xchgcc = 0x6004, insn_strcmp = 0x7001,
+	        insn_strload = 0x7002, insn_strmov = 0x7003,
+	        insn_strstore = 0x7004, insn_translate = 0x7005,
+	        insn_bittest = 0x8001, insn_bitset = 0x8002,
+	        insn_bitclear = 0x8003, insn_clear_carry = 0x9001,
+	        insn_clear_zero = 0x9002, insn_clear_oflow = 0x9003,
+	        insn_clear_dir = 0x9004, insn_clear_sign = 0x9005,
+	        insn_clear_parity = 0x9006, insn_set_carry = 0x9007,
+	        insn_set_zero = 0x9008, insn_set_oflow = 0x9009,
+	        insn_set_dir = 0x900A, insn_set_sign = 0x900B,
+	        insn_set_parity = 0x900C, insn_tog_carry = 0x9010,
+	        insn_tog_zero = 0x9020, insn_tog_oflow = 0x9030,
+	        insn_tog_dir = 0x9040, insn_tog_sign = 0x9050,
+	        insn_tog_parity = 0x9060, insn_fmov = 0xA001,
+	        insn_fmovcc = 0xA002, insn_fneg = 0xA003,
+	       	insn_fabs = 0xA004, insn_fadd = 0xA005,
+	        insn_fsub = 0xA006, insn_fmul = 0xA007,
+	        insn_fdiv = 0xA008, insn_fsqrt = 0xA009,
+	        insn_fcmp = 0xA00A, insn_fcos = 0xA00C,
+	        insn_fldpi = 0xA00D, insn_fldz = 0xA00E,
+	        insn_ftan = 0xA00F, insn_fsine = 0xA010,
+	        insn_fsys = 0xA020, insn_int = 0xD001,
+	        insn_intcc = 0xD002,   insn_iret = 0xD003,
+	        insn_bound = 0xD004, insn_debug = 0xD005,
+	        insn_trace = 0xD006, insn_invalid_op = 0xD007,
+	        insn_oflow = 0xD008, insn_halt = 0xE001,
+	        insn_in = 0xE002, insn_out = 0xE003, 
+	        insn_cpuid = 0xE004, insn_nop = 0xF001,
+	        insn_bcdconv = 0xF002, insn_szconv = 0xF003 
+	};
+
+	enum x86_insn_note {
+		insn_note_ring0		= 1,
+		insn_note_smm		= 2,
+		insn_note_serial	= 4
+	};
+
+	enum x86_flag_status {
+	        insn_carry_set = 0x1,
+	        insn_zero_set = 0x2,
+	        insn_oflow_set = 0x4,
+	        insn_dir_set = 0x8,
+	        insn_sign_set = 0x10,
+	        insn_parity_set = 0x20,	
+	        insn_carry_or_zero_set = 0x40,
+	        insn_zero_set_or_sign_ne_oflow = 0x80,
+	        insn_carry_clear = 0x100,
+	        insn_zero_clear = 0x200,
+	        insn_oflow_clear = 0x400,
+	        insn_dir_clear = 0x800,
+	        insn_sign_clear = 0x1000,
+	        insn_parity_clear = 0x2000,
+	        insn_sign_eq_oflow = 0x4000,
+	        insn_sign_ne_oflow = 0x8000
+	};
+
+	enum x86_insn_cpu {
+		cpu_8086 	= 1, cpu_80286	= 2,
+		cpu_80386	= 3, cpu_80387	= 4,
+		cpu_80486	= 5, cpu_pentium	= 6,
+		cpu_pentiumpro	= 7, cpu_pentium2	= 8,
+		cpu_pentium3	= 9, cpu_pentium4	= 10,
+		cpu_k6		= 16, cpu_k7		= 32,
+		cpu_athlon	= 48
+	};
+
+	enum x86_insn_isa {
+		isa_gp		= 1, isa_fp		= 2,
+		isa_fpumgt	= 3, isa_mmx		= 4,
+		isa_sse1	= 5, isa_sse2	= 6,
+		isa_sse3	= 7, isa_3dnow	= 8,
+		isa_sys		= 9	
+	};
+	
+	enum x86_insn_prefix {
+	        insn_no_prefix = 0,
+	        insn_rep_zero = 1,
+	        insn_rep_notzero = 2,
+	        insn_lock = 4
+	};
+
+
+	typedef struct {
+        	unsigned long addr;
+	        unsigned long offset;
+	        enum x86_insn_group group;
+	        enum x86_insn_type type;
+		enum x86_insn_note note;
+	        unsigned char bytes[MAX_INSN_SIZE];
+	        unsigned char size;
+		unsigned char addr_size;
+		unsigned char op_size;
+		enum x86_insn_cpu cpu;
+		enum x86_insn_isa isa;
+	        enum x86_flag_status flags_set;
+	        enum x86_flag_status flags_tested;
+		unsigned char stack_mod;
+		long stack_mod_val;
+	        enum x86_insn_prefix prefix;
+	        char prefix_string[MAX_PREFIX_STR];
+	        char mnemonic[MAX_MNEM_STR];
+	        x86_oplist_t *operands;
+		size_t operand_count;
+		size_t explicit_count;
+	        void *block;
+	        void *function;
+	        int tag;
+	} x86_insn_t;
+
+	typedef void (*x86_operand_fn)(x86_op_t *op, x86_insn_t *insn, 
+		      void *arg);
+
+	enum x86_op_foreach_type {
+		op_any 	= 0,
+		op_dest = 1,
+		op_src 	= 2,
+		op_ro 	= 3,
+		op_wo 	= 4,
+		op_xo 	= 5,
+		op_rw 	= 6,
+		op_implicit = 0x10,
+		op_explicit = 0x20
+	};
+
+	size_t x86_operand_count( x86_insn_t *insn, 
+				enum x86_op_foreach_type type );
+	x86_op_t * x86_operand_1st( x86_insn_t *insn );
+	x86_op_t * x86_operand_2nd( x86_insn_t *insn );
+	x86_op_t * x86_operand_3rd( x86_insn_t *insn );
+	long x86_get_rel_offset( x86_insn_t *insn );
+	x86_op_t * x86_get_branch_target( x86_insn_t *insn );
+	x86_op_t * x86_get_imm( x86_insn_t *insn );
+	unsigned char * x86_get_raw_imm( x86_insn_t *insn );
+	void x86_set_insn_addr( x86_insn_t *insn, unsigned long addr );
+	int x86_format_mnemonic(x86_insn_t *insn, char *buf, int len,
+                        enum x86_asm_format format);
+	int x86_format_insn(x86_insn_t *insn, char *buf, int len, 
+				enum x86_asm_format);
+	void x86_oplist_free( x86_insn_t *insn );
+	int x86_insn_is_valid( x86_insn_t *insn );
+%}
+
+%extend x86_insn_t {
+	x86_insn_t() {
+		x86_insn_t *insn = (x86_insn_t *)
+				   calloc( sizeof(x86_insn_t), 1 );
+		return insn;
+	}
+	~x86_insn_t() {
+		x86_oplist_free( self );
+		free( self );
+	}
+
+	int is_valid( ) {
+		return x86_insn_is_valid( self );
+	}
+
+	x86_op_t * operand_1st() {
+		return x86_operand_1st( self );
+	}
+
+	x86_op_t * operand_2nd() {
+		return x86_operand_2nd( self );
+	}
+
+	x86_op_t * operand_3rd() {
+		return x86_operand_3rd( self );
+	}
+
+	x86_op_t * operand_dest() {
+		return x86_operand_1st( self );
+	}
+
+	x86_op_t * operand_src() {
+		return x86_operand_2nd( self );
+	}
+
+	size_t num_operands( enum x86_op_foreach_type type ) {
+		return x86_operand_count( self, type );
+	}
+
+	long rel_offset() {
+		return x86_get_rel_offset( self );
+	}
+
+	x86_op_t * branch_target() {
+		return x86_get_branch_target( self );
+	}
+
+	x86_op_t * imm() {
+		return x86_get_imm( self );
+	}
+
+	unsigned char * raw_imm() {
+		return x86_get_raw_imm( self );
+	}
+
+	%newobject format;
+	char * format( enum x86_asm_format format ) {
+		char *buf, *str;
+		size_t len;
+
+		switch ( format ) {
+			case xml_syntax:
+				len = MAX_INSN_XML_STRING;
+				break;
+			case raw_syntax:
+				len = MAX_INSN_RAW_STRING;
+				break;
+			case native_syntax:
+			case intel_syntax:
+			case att_syntax:
+			case unknown_syntax:
+			default:
+				len = MAX_INSN_STRING;
+				break;
+		}
+
+		buf = (char * ) calloc( len + 1, 1 );
+		x86_format_insn( self, buf, len, format );
+
+		/* drop buffer down to a reasonable size */
+		str = strdup( buf );
+		free(buf);
+		return str;
+	}
+
+	%newobject format_mnemonic;
+	char * format_mnemonic( enum x86_asm_format format ) {
+		char *buf, *str;
+		size_t len = MAX_MNEM_STR + MAX_PREFIX_STR + 4;
+
+		buf = (char * ) calloc( len, 1 );
+		x86_format_mnemonic( self, buf, len, format );
+
+		/* drop buffer down to a reasonable size */
+		str = strdup( buf );
+		free(buf);
+
+		return str;
+	}
+
+	%newobject copy;
+	x86_insn_t * copy() {
+		x86_oplist_t *ptr, *list, *last = NULL;
+		x86_insn_t *insn = (x86_insn_t *)
+				   calloc( sizeof(x86_insn_t), 1 );
+
+		if ( insn ) {
+			memcpy( insn, self, sizeof(x86_insn_t) );
+			insn->operands = NULL;
+			insn->block = NULL;
+			insn->function = NULL;
+
+			/* copy operand list */
+			for ( list = self->operands; list; list = list->next ) {
+				ptr = x86_oplist_node_copy( list );
+
+				if (! ptr ) {
+					continue;
+				}
+
+				if ( insn->operands ) {
+					last->next = ptr;
+				} else {
+					insn->operands = ptr;
+				}
+				last = ptr;
+			}
+		}
+
+		return insn;
+	}
+
+	X86_OpList * operand_list( ) {
+		x86_oplist_t *list = self->operands;
+		X86_OpList *op_list = new_X86_OpList();
+
+		for ( list = self->operands; list; list = list->next ) {
+			X86_OpList_append( op_list, &list->op );
+		}
+
+		return op_list;
+	}
+}
+
+/* ================================================================== */
+/* invariant instruction class */
+%inline %{
+	#define X86_WILDCARD_BYTE 0xF4
+
+	typedef struct {
+        	enum x86_op_type        type;
+        	enum x86_op_datatype    datatype;
+        	enum x86_op_access      access;
+        	enum x86_op_flags       flags;
+	} x86_invariant_op_t;
+
+	typedef struct {
+		unsigned char bytes[64];
+		unsigned int  size;
+        	enum x86_insn_group group;
+        	enum x86_insn_type type;
+		x86_invariant_op_t operands[3];
+	} x86_invariant_t;
+%}
+
+%extend x86_invariant_t {
+
+	x86_invariant_t() {
+		x86_invariant_t *inv = (x86_invariant_t *)
+				calloc( sizeof(x86_invariant_t), 1 );
+		return inv;
+	}
+
+	~x86_invariant_t() {
+		free( self );
+	}
+}
+
+/* ================================================================== */
+/* instruction list class */
+%inline %{
+	typedef struct X86_InsnListNode {
+		x86_insn_t *insn;
+		struct X86_InsnListNode *next, *prev;
+	} X86_InsnListNode;
+
+	typedef struct X86_InsnList {
+		size_t count;
+		X86_InsnListNode *head, *tail, *curr;
+	} X86_InsnList;
+%}
+
+%extend X86_InsnList {
+	X86_InsnList () {
+		X86_InsnList *list = (X86_InsnList *) 
+				calloc( sizeof(X86_InsnList), 1 );
+		list->count = 0;
+		return list;
+	}
+
+	~X86_InsnList() {
+		X86_InsnListNode *node, *next;
+
+		node = self->head;
+		while ( node ) {
+			next = node->next;
+			/* free( node->insn ); */
+			free( node );
+			node = next;
+		}
+
+		free( self );
+	}
+
+	X86_InsnListNode * first() { return self->head; }
+
+	X86_InsnListNode * last() { return self->tail; }
+
+	X86_InsnListNode * next() { 
+		if (! self->curr ) {
+			self->curr = self->head;
+			return self->head;
+		}
+
+		self->curr = self->curr->next;
+		return self->curr;
+	}
+
+	X86_InsnListNode * prev() { 
+		if (! self->curr ) {
+			self->curr = self->tail;
+			return self->tail;
+		}
+
+		self->curr = self->curr->prev;
+		return self->curr;
+	}
+
+	%newobject append;
+	void append( x86_insn_t *insn ) {
+		X86_InsnListNode *node = (X86_InsnListNode *)
+					calloc( sizeof(X86_InsnListNode) , 1 );
+		if (! node ) {
+			return;
+		}
+
+		self->count++;
+		if ( ! self->tail ) {
+			self->head = self->tail = node;
+		} else {
+			self->tail->next = node;
+			node->prev = self->tail;
+			self->tail = node;
+		}
+
+		node->insn = x86_insn_t_copy( insn );
+	}
+}
+
+/* ================================================================== */
+/* address table class */
+/* slight TODO */
+
+/* ================================================================== */
+/* Main disassembler class */
+%inline %{
+
+	enum x86_options {
+		opt_none= 0,
+		opt_ignore_nulls=1,
+		opt_16_bit=2
+		};
+	enum x86_report_codes {
+        	report_disasm_bounds,
+        	report_insn_bounds,
+        	report_invalid_insn,
+        	report_unknown
+	};
+
+
+	typedef struct {
+		enum x86_report_codes last_error;
+		void * last_error_data;
+		void * disasm_callback;
+		void * disasm_resolver;
+	} X86_Disasm;
+
+	typedef void (*DISASM_REPORTER)( enum x86_report_codes code, 
+				 	 void *data, void *arg );
+	typedef void (*DISASM_CALLBACK)( x86_insn_t *insn, void * arg );
+	typedef long (*DISASM_RESOLVER)( x86_op_t *op, 
+					 x86_insn_t * current_insn,
+				 	 void *arg );
+
+	void x86_report_error( enum x86_report_codes code, void *data );
+	int x86_init( enum x86_options options, DISASM_REPORTER reporter, 
+		      void *arg);
+	void x86_set_reporter( DISASM_REPORTER reporter, void *arg);
+	void x86_set_options( enum x86_options options );
+	enum x86_options x86_get_options( void );
+	int x86_cleanup(void);
+	int x86_format_header( char *buf, int len, enum x86_asm_format format);
+	unsigned int x86_endian(void);
+	unsigned int x86_addr_size(void);
+	unsigned int x86_op_size(void);
+	unsigned int x86_word_size(void);
+	unsigned int x86_max_insn_size(void);
+	unsigned int x86_sp_reg(void);
+	unsigned int x86_fp_reg(void);
+	unsigned int x86_ip_reg(void);
+	size_t x86_invariant_disasm( unsigned char *buf, int buf_len, 
+			  x86_invariant_t *inv );
+	size_t x86_size_disasm( unsigned char *buf, unsigned int buf_len );
+	int x86_disasm( unsigned char *buf, unsigned int buf_len,
+	                unsigned long buf_rva, unsigned int offset,
+	                x86_insn_t * insn );
+	int x86_disasm_range( unsigned char *buf, unsigned long buf_rva,
+	                      unsigned int offset, unsigned int len,
+	                      DISASM_CALLBACK func, void *arg );
+	int x86_disasm_forward( unsigned char *buf, unsigned int buf_len,
+	                        unsigned long buf_rva, unsigned int offset,
+	                        DISASM_CALLBACK func, void *arg,
+	                        DISASM_RESOLVER resolver, void *r_arg );
+	
+	void x86_default_reporter( enum x86_report_codes code, 
+				   void *data, void *arg ) {
+		X86_Disasm *dis = (X86_Disasm *) arg;
+		if ( dis ) {
+			dis->last_error = code;
+			dis->last_error_data = data;
+		}
+	}
+
+	void x86_default_callback( x86_insn_t *insn, void *arg ) {
+		X86_InsnList *list = (X86_InsnList *) arg;
+		if ( list ) {
+			X86_InsnList_append( list, insn );
+		}
+	}
+
+	/* TODO: resolver stack, maybe a callback */
+	long x86_default_resolver( x86_op_t *op, x86_insn_t *insn, void *arg ) {
+		X86_Disasm *dis = (X86_Disasm *) arg;
+		if ( dis ) {
+			//return dis->resolver( op, insn );
+			return 0;
+		}
+
+		return 0;
+	}
+
+%}
+
+%extend X86_Disasm { 
+	
+	X86_Disasm( ) {
+		X86_Disasm * dis = (X86_Disasm *)
+				calloc( sizeof( X86_Disasm ), 1 );
+		x86_init( opt_none, x86_default_reporter, dis );
+		return dis;
+	}
+
+	X86_Disasm( enum x86_options options ) {
+		X86_Disasm * dis = (X86_Disasm *)
+				calloc( sizeof( X86_Disasm ), 1 );
+		x86_init( options, x86_default_reporter, dis );
+		return dis;
+	}
+
+	X86_Disasm( enum x86_options options, DISASM_REPORTER reporter ) {
+		X86_Disasm * dis = (X86_Disasm *)
+				calloc( sizeof( X86_Disasm ), 1 );
+		x86_init( options, reporter, NULL );
+		return dis;
+	}
+
+	X86_Disasm( enum x86_options options, DISASM_REPORTER reporter,
+		    void * arg ) {
+		X86_Disasm * dis = (X86_Disasm *)
+				calloc( sizeof( X86_Disasm ), 1 );
+		x86_init( options, reporter, arg );
+		return dis;
+	}
+
+	~X86_Disasm() {
+		x86_cleanup();
+		free( self );
+	}
+
+	void set_options( enum x86_options options ) {
+		return x86_set_options( options );
+	}
+
+	enum x86_options options() {
+		return x86_get_options();
+	}
+
+	void set_callback( void * callback ) {
+		self->disasm_callback = callback;
+	}
+
+	void set_resolver( void * callback ) {
+		self->disasm_resolver = callback;
+	}
+
+	void report_error( enum x86_report_codes code ) {
+		x86_report_error( code, NULL );
+	}
+
+	%newobject disasm;
+	x86_insn_t * disasm( unsigned char *buf, size_t buf_len, 
+		           unsigned long buf_rva, unsigned int offset ) {
+		x86_insn_t *insn = calloc( sizeof( x86_insn_t ), 1 );
+		x86_disasm( buf, buf_len, buf_rva, offset, insn );
+		return insn;
+	}
+
+	int disasm_range( unsigned char *buf, size_t buf_len, 
+	              unsigned long buf_rva, unsigned int offset,
+		      unsigned int len ) {
+
+		X86_InsnList *list = new_X86_InsnList();
+
+		if ( len > buf_len ) {
+			len = buf_len;
+		}
+
+		return x86_disasm_range( buf, buf_rva, offset, len, 
+				x86_default_callback, list );
+	}
+
+	int disasm_forward( unsigned char *buf, size_t buf_len,
+			    unsigned long buf_rva, unsigned int offset ) {
+		X86_InsnList *list = new_X86_InsnList();
+
+		/* use default resolver: damn SWIG callbacks! */
+		return x86_disasm_forward( buf, buf_len, buf_rva, offset,
+			                   x86_default_callback, list, 
+					   x86_default_resolver, NULL );
+	}
+
+	size_t disasm_invariant( unsigned char *buf, size_t buf_len, 
+			  x86_invariant_t *inv ) {
+		return x86_invariant_disasm( buf, buf_len, inv );
+	}
+
+	size_t disasm_size( unsigned char *buf, size_t buf_len ) {
+		return x86_size_disasm( buf, buf_len );
+	}
+
+	%newobject format_header;
+	char * format_header( enum x86_asm_format format) {
+		char *buf, *str;
+		size_t len;
+
+		switch ( format ) {
+			/* these were obtained from x86_format.c */
+			case xml_syntax:
+				len = 679; break;
+			case raw_syntax:
+				len = 172; break;
+			case native_syntax:
+				len = 35; break;
+			case intel_syntax:
+				len = 23; break;
+			case att_syntax:
+				len = 23; break;
+			case unknown_syntax:
+			default:
+				len = 23; break;
+		}
+
+		buf = (char * ) calloc( len + 1, 1 );
+		x86_format_header( buf, len, format );
+
+		return buf;
+	}
+
+	unsigned int endian() {
+		return x86_endian();
+	}
+
+	unsigned int addr_size() {
+		return x86_addr_size();
+	}
+
+	unsigned int op_size() {
+		return x86_op_size();
+	}
+
+	unsigned int word_size() {
+		return x86_word_size();
+	}
+
+	unsigned int max_insn_size() {
+		return x86_max_insn_size();
+	}
+
+	unsigned int sp_reg() {
+		return x86_sp_reg();
+	}
+
+	unsigned int fp_reg() {
+		return x86_fp_reg();
+	}
+
+	unsigned int ip_reg() {
+		return x86_ip_reg();
+	}
+
+	%newobject reg_from_id;
+	x86_reg_t * reg_from_id( unsigned int id ) {
+		x86_reg_t * reg = calloc( sizeof(x86_reg_t), 1 );
+		x86_reg_from_id( id, reg );
+		return reg;
+	}
+
+	unsigned char wildcard_byte() { return X86_WILDCARD_BYTE; }
+
+	int max_register_string() { return MAX_REGNAME; }
+
+	int max_prefix_string() { return MAX_PREFIX_STR; }
+
+	int max_mnemonic_string() { return MAX_MNEM_STR; }
+
+	int max_operand_string( enum x86_asm_format format ) {
+		switch ( format ) {
+			case xml_syntax:
+				return  MAX_OP_XML_STRING;
+				break;
+			case raw_syntax:
+				return MAX_OP_RAW_STRING;
+				break;
+			case native_syntax:
+			case intel_syntax:
+			case att_syntax:
+			case unknown_syntax:
+			default:
+				return MAX_OP_STRING;
+				break;
+		}
+	}
+
+
+	int max_insn_string( enum x86_asm_format format ) {
+		switch ( format ) {
+			case xml_syntax:
+				return  MAX_INSN_XML_STRING;
+				break;
+			case raw_syntax:
+				return MAX_INSN_RAW_STRING;
+				break;
+			case native_syntax:
+			case intel_syntax:
+			case att_syntax:
+			case unknown_syntax:
+			default:
+				return MAX_INSN_STRING;
+				break;
+		}
+	}
+
+	int max_num_operands( ) { return MAX_NUM_OPERANDS; }
+}
+
+/* python callback, per the manual */
+/*%typemap(python,in) PyObject *pyfunc {
+	if (!PyCallable_Check($source)) {
+		PyErr_SetString(PyExc_TypeError, "Need a callable object!");
+ 		return NULL;
+	}
+	$target = $source;
+}*/
+
+/* python FILE * callback, per the manual */
+/*
+%typemap(python,in) FILE * {
+  if (!PyFile_Check($source)) {
+      PyErr_SetString(PyExc_TypeError, "Need a file!");
+      return NULL;
+  }
+  $target = PyFile_AsFile($source);
+}*/
+
+
diff --git a/src/third_party/libdisasm/swig/perl/Makefile-swig b/src/third_party/libdisasm/swig/perl/Makefile-swig
new file mode 100644
index 0000000..9f3a645
--- /dev/null
+++ b/src/third_party/libdisasm/swig/perl/Makefile-swig
@@ -0,0 +1,65 @@
+ifndef BASE_NAME
+BASE_NAME	=	x86disasm
+endif
+
+ifndef SWIG
+SWIG		=	swig	# apt-get install swig !
+endif
+
+ifndef GCC
+GCC		=	gcc
+endif
+
+ifndef CC_FLAGS
+CC_FLAGS	=	-c -fPIC
+endif
+
+ifndef LD_FLAGS
+LD_FLAGS	=	-shared -L.. -ldisasm
+endif
+
+INTERFACE_FILE	=	libdisasm_oop.i
+
+SWIG_INTERFACE	=	../$(INTERFACE_FILE)
+
+# PERL rules
+PERL_MOD	=	blib/arch/auto/$(BASE_NAME)/$(BASE_NAME).so
+PERL_SHADOW	=	$(BASE_NAME)_wrap.c
+PERL_SWIG	=	$(BASE_NAME).pl
+PERL_OBJ	=	$(BASE_NAME)_wrap.o
+PERL_INC	=	`perl -e 'use Config; print $$Config{archlib};'`/CORE
+PERL_CC_FLAGS	=	`perl -e 'use Config; print $$Config{ccflags};'`
+
+#====================================================
+# TARGETS
+
+all: swig-perl
+
+dummy: swig-perl install uninstall clean
+
+swig-perl: $(PERL_MOD)
+
+$(PERL_MOD): $(PERL_OBJ)
+	perl Makefile.PL
+	make
+	#$(GCC) $(LD_FLAGS) $(PERL_OBJ) -o $@
+
+$(PERL_OBJ): $(PERL_SHADOW)
+	$(GCC) $(CC_FLAGS) $(PERL_CC_FLAGS) -I$(PERL_INC) -o $@ $<
+
+$(PERL_SHADOW): $(SWIG_INTERFACE)
+	swig -perl -shadow -o $(PERL_SHADOW) -outdir . $<
+
+# ==================================================================
+install: $(PERL_MOD)
+	make install
+
+# ==================================================================
+uninstall:
+
+# ==================================================================
+clean: 
+	rm $(PERL_MOD) $(PERL_OBJ)
+	rm $(PERL_SHADOW)
+	rm -rf Makefile blib pm_to_blib
+
diff --git a/src/third_party/libdisasm/swig/perl/Makefile.PL b/src/third_party/libdisasm/swig/perl/Makefile.PL
new file mode 100644
index 0000000..6e625df
--- /dev/null
+++ b/src/third_party/libdisasm/swig/perl/Makefile.PL
@@ -0,0 +1,7 @@
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+	'NAME'	=> 'x86disasm',
+	'LIBS'	=> ['-ldisasm'],
+	'OBJECT'	=> 'x86disasm_wrap.o'
+);
diff --git a/src/third_party/libdisasm/swig/python/Makefile-swig b/src/third_party/libdisasm/swig/python/Makefile-swig
new file mode 100644
index 0000000..544681a
--- /dev/null
+++ b/src/third_party/libdisasm/swig/python/Makefile-swig
@@ -0,0 +1,64 @@
+ifndef BASE_NAME
+BASE_NAME	=	x86disasm
+endif
+
+ifndef SWIG
+SWIG		=	swig	# apt-get install swig !
+endif
+
+ifndef GCC
+GCC		=	gcc
+endif
+
+ifndef CC_FLAGS
+CC_FLAGS	=	-c -fPIC
+endif
+
+ifndef LD_FLAGS
+LD_FLAGS	=	-shared -L.. -ldisasm
+endif
+
+INTERFACE_FILE	=	libdisasm_oop.i
+
+SWIG_INTERFACE	=	../$(INTERFACE_FILE)
+
+# PYTHON rules
+PYTHON_MOD	=	$(BASE_NAME)-python.so
+PYTHON_SHADOW	=	$(BASE_NAME)_wrap.c
+PYTHON_SWIG	=	$(BASE_NAME).py
+PYTHON_OBJ	=	$(BASE_NAME)_wrap.o
+PYTHON_INC	=	`/bin/echo -e 'import sys\nprint sys.prefix + "/include/python" + sys.version[:3]' | python`
+PYTHON_LIB	=	`/bin/echo -e 'import sys\nprint sys.prefix + "/lib/python" + sys.version[:3]' | python`
+PYTHON_DEST	=	$(PYTHON_LIB)/lib-dynload/_$(BASE_NAME).so
+
+#====================================================
+# TARGETS
+
+all: swig-python
+
+dummy: swig-python install uninstall clean
+
+swig-python: $(PYTHON_MOD)
+
+$(PYTHON_MOD): $(PYTHON_OBJ)
+	$(GCC) $(LD_FLAGS) $(PYTHON_OBJ) -o $@
+
+$(PYTHON_OBJ): $(PYTHON_SHADOW)
+	$(GCC) $(CC_FLAGS) -I$(PYTHON_INC) -I.. -o $@ $<
+
+$(PYTHON_SHADOW): $(SWIG_INTERFACE)
+	swig -python -shadow -o $(PYTHON_SHADOW) -outdir . $<
+
+# ==================================================================
+install: $(PYTHON_MOD)
+	sudo cp $(PYTHON_MOD) $(PYTHON_DEST)
+	sudo cp $(PYTHON_SWIG) $(PYTHON_LIB)
+
+# ==================================================================
+uninstall:
+
+# ==================================================================
+clean: 
+	rm $(PYTHON_MOD) $(PYTHON_SWIG) $(PYTHON_OBJ)
+	rm $(PYTHON_SHADOW)
+
diff --git a/src/third_party/libdisasm/swig/ruby/Makefile-swig b/src/third_party/libdisasm/swig/ruby/Makefile-swig
new file mode 100644
index 0000000..ee48002
--- /dev/null
+++ b/src/third_party/libdisasm/swig/ruby/Makefile-swig
@@ -0,0 +1,68 @@
+ifndef BASE_NAME
+BASE_NAME	=	x86disasm
+endif
+
+ifndef SWIG
+SWIG		=	swig	# apt-get install swig !
+endif
+
+ifndef GCC
+GCC		=	gcc
+endif
+
+ifndef CC_FLAGS
+CC_FLAGS	=	-c -fPIC
+endif
+
+ifndef LD_FLAGS
+LD_FLAGS	=	-shared -L../.. -ldisasm
+endif
+
+LIBDISASM_DIR	=	../..
+
+INTERFACE_FILE	=	libdisasm_oop.i
+
+SWIG_INTERFACE	=	../$(INTERFACE_FILE)
+
+# RUBY rules
+RUBY_MAKEFILE	=	Makefile
+RUBY_MOD	=	$(BASE_NAME).so
+RUBY_SHADOW	=	$(BASE_NAME)_wrap.c
+#RUBY_SWIG	=	$(BASE_NAME).rb
+RUBY_OBJ	=	$(BASE_NAME)_wrap.o
+RUBY_INC	=	`ruby -e 'puts $$:.join("\n")' | tail -2 | head -1`
+#RUBY_LIB	=	
+#RUBY_DEST	=	
+
+#====================================================
+# TARGETS
+
+all: swig-ruby
+
+dummy: swig-ruby install uninstall clean
+
+swig-ruby: $(RUBY_MOD)
+
+$(RUBY_MOD): $(RUBY_MAKEFILE)
+	make
+
+$(RUBY_MAKEFILE): $(RUBY_OBJ)
+	ruby extconf.rb
+
+$(RUBY_OBJ):$(RUBY_SHADOW)
+	$(GCC) $(CC_FLAGS) -I$(RUBY_INC) -I.. -o $@ $<
+
+$(RUBY_SHADOW): $(SWIG_INTERFACE)
+	swig -ruby -o $(RUBY_SHADOW) -outdir . $<
+
+# ==================================================================
+install: $(RUBY_MOD)
+	make install
+
+# ==================================================================
+uninstall:
+
+# ==================================================================
+clean: 
+	make clean || true
+	rm $(RUBY_SHADOW) $(RUBY_MAKEFILE) $(RUBY_MOD) $(RUBY_OBJ)
diff --git a/src/third_party/libdisasm/swig/ruby/extconf.rb b/src/third_party/libdisasm/swig/ruby/extconf.rb
new file mode 100644
index 0000000..4e74326
--- /dev/null
+++ b/src/third_party/libdisasm/swig/ruby/extconf.rb
@@ -0,0 +1,4 @@
+require 'mkmf'
+find_library('disasm', 'x86_init', "/usr/local/lib", "../..")
+create_makefile('x86disasm')
+
diff --git a/src/third_party/libdisasm/swig/tcl/Makefile-swig b/src/third_party/libdisasm/swig/tcl/Makefile-swig
new file mode 100644
index 0000000..5145a82
--- /dev/null
+++ b/src/third_party/libdisasm/swig/tcl/Makefile-swig
@@ -0,0 +1,63 @@
+ifndef BASE_NAME
+BASE_NAME	=	x86disasm
+endif
+
+ifndef SWIG
+SWIG		=	swig	# apt-get install swig !
+endif
+
+ifndef GCC
+GCC		=	gcc
+endif
+
+ifndef CC_FLAGS
+CC_FLAGS	=	-c -fPIC
+endif
+
+ifndef LD_FLAGS
+LD_FLAGS	=	-shared -L../.. -ldisasm
+endif
+
+INTERFACE_FILE	=	libdisasm.i
+
+SWIG_INTERFACE	=	../$(INTERFACE_FILE)
+
+# TCL rules
+TCL_VERSION	=	8.3
+TCL_MOD		=	$(BASE_NAME)-tcl.so
+TCL_SHADOW	=	$(BASE_NAME)_wrap.c
+TCL_OBJ		=	$(BASE_NAME)_wrap.o
+TCL_INC		=	/usr/include/tcl$(TCL_VERSION)
+TCL_LIB		=	/usr/lib/tcl$(TCL_VERSION)
+TCL_DEST	=	$(TCL_LIB)/$(BASE_NAME).so
+
+#====================================================
+# TARGETS
+
+all: swig-tcl
+
+dummy: swig-tcl install uninstall clean
+
+swig-tcl: $(TCL_MOD)
+
+$(TCL_MOD): $(TCL_OBJ)
+	$(GCC) $(LD_FLAGS) $(TCL_OBJ) -o $@
+
+$(TCL_OBJ): $(TCL_SHADOW)
+	$(GCC) $(CC_FLAGS) -I$(TCL_INC) -I.. -o $@ $<
+
+$(TCL_SHADOW): $(SWIG_INTERFACE)
+	swig -tcl -o $(TCL_SHADOW) -outdir . $<
+
+# ==================================================================
+install: $(TCL_MOD)
+	sudo cp $(TCL_MOD) $(TCL_DEST)
+
+# ==================================================================
+uninstall:
+
+# ==================================================================
+clean: 
+	rm $(TCL_MOD) $(TCL_SWIG) $(TCL_OBJ)
+	rm $(TCL_SHADOW)
+
diff --git a/src/third_party/libdisasm/x86_disasm.c b/src/third_party/libdisasm/x86_disasm.c
new file mode 100644
index 0000000..04574fa
--- /dev/null
+++ b/src/third_party/libdisasm/x86_disasm.c
@@ -0,0 +1,210 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libdis.h"
+#include "ia32_insn.h"
+#include "ia32_invariant.h"
+#include "x86_operand_list.h"
+
+
+#ifdef _MSC_VER
+        #define snprintf        _snprintf
+        #define inline          __inline
+#endif
+
+unsigned int x86_disasm( unsigned char *buf, unsigned int buf_len,
+                uint32_t buf_rva, unsigned int offset,
+                x86_insn_t *insn ){
+        int len, size;
+	unsigned char bytes[MAX_INSTRUCTION_SIZE];
+
+        if ( ! buf || ! insn || ! buf_len ) {
+                /* caller screwed up somehow */
+                return 0;
+        }
+
+
+	/* ensure we are all NULLed up */
+	memset( insn, 0, sizeof(x86_insn_t) );
+        insn->addr = buf_rva + offset;
+        insn->offset = offset;
+	/* default to invalid insn */
+	insn->type = insn_invalid;
+	insn->group = insn_none;
+
+        if ( offset >= buf_len ) {
+                /* another caller screwup ;) */
+                x86_report_error(report_disasm_bounds, (void*)(long)buf_rva+offset);
+                return 0;
+        }
+
+        len = buf_len - offset;
+
+	/* copy enough bytes for disassembly into buffer : this
+	 * helps prevent buffer overruns at the end of a file */
+	memset( bytes, 0, MAX_INSTRUCTION_SIZE );
+	memcpy( bytes, &buf[offset], (len < MAX_INSTRUCTION_SIZE) ? len : 
+		MAX_INSTRUCTION_SIZE );
+
+        /* actually do the disassembly */
+	/* TODO: allow switching when more disassemblers are added */
+        size = ia32_disasm_addr( bytes, len, insn);
+
+        /* check and see if we had an invalid instruction */
+        if (! size ) {
+                x86_report_error(report_invalid_insn, (void*)(long)buf_rva+offset );
+                return 0;
+        }
+
+        /* check if we overran the end of the buffer */
+        if ( size > len ) {
+                x86_report_error( report_insn_bounds, (void*)(long)buf_rva + offset );
+		MAKE_INVALID( insn, bytes );
+		return 0;
+	}
+
+        /* fill bytes field of insn */
+        memcpy( insn->bytes, bytes, size );
+
+        return size;
+}
+
+unsigned int x86_disasm_range( unsigned char *buf, uint32_t buf_rva,
+                      unsigned int offset, unsigned int len,
+                      DISASM_CALLBACK func, void *arg ) {
+        x86_insn_t insn;
+        unsigned int buf_len, size, count = 0, bytes = 0;
+
+        /* buf_len is implied by the arguments */
+        buf_len = len + offset;
+
+        while ( bytes < len ) {
+                size = x86_disasm( buf, buf_len, buf_rva, offset + bytes,
+                                   &insn );
+                if ( size ) {
+                        /* invoke callback if it exists */
+                        if ( func ) {
+                                (*func)( &insn, arg );
+                        }
+                        bytes += size;
+                        count ++;
+                } else {
+                        /* error */
+                        bytes++;        /* try next byte */
+                }
+
+		x86_oplist_free( &insn );
+        }
+
+        return( count );
+}
+
+static inline int follow_insn_dest( x86_insn_t *insn ) {
+        if ( insn->type == insn_jmp || insn->type == insn_jcc ||
+             insn->type == insn_call || insn->type == insn_callcc ) {
+                return(1);
+        }
+        return(0);
+}
+
+static inline int insn_doesnt_return( x86_insn_t *insn ) {
+        return( (insn->type == insn_jmp || insn->type == insn_return) ? 1: 0 );
+}
+
+static int32_t internal_resolver( x86_op_t *op, x86_insn_t *insn ){
+        int32_t next_addr = -1;
+        if ( x86_optype_is_address(op->type) ) {
+                next_addr = op->data.sdword;
+        } else if ( op->type == op_relative_near ) {
+		next_addr = insn->addr + insn->size + op->data.relative_near;
+        } else if ( op->type == op_relative_far ) {
+		next_addr = insn->addr + insn->size + op->data.relative_far;
+        }
+        return( next_addr );
+}
+
+unsigned int x86_disasm_forward( unsigned char *buf, unsigned int buf_len,
+                        uint32_t buf_rva, unsigned int offset,
+                        DISASM_CALLBACK func, void *arg,
+                        DISASM_RESOLVER resolver, void *r_arg ){
+        x86_insn_t insn;
+        x86_op_t *op;
+        int32_t next_addr;
+        uint32_t next_offset;
+        unsigned int size, count = 0, bytes = 0, cont = 1;
+
+        while ( cont && bytes < buf_len ) {
+                size = x86_disasm( buf, buf_len, buf_rva, offset + bytes,
+                           &insn );
+
+                if ( size ) {
+                        /* invoke callback if it exists */
+                        if ( func ) {
+                                (*func)( &insn, arg );
+                        }
+                        bytes += size;
+                        count ++;
+                } else {
+                        /* error */
+                        bytes++;        /* try next byte */
+                }
+
+                if ( follow_insn_dest(&insn) ) {
+                        op = x86_get_dest_operand( &insn );
+                        next_addr = -1;
+
+                        /* if caller supplied a resolver, use it to determine
+                         * the address to disassemble */
+                        if ( resolver ) {
+                                next_addr = resolver(op, &insn, r_arg);
+                        } else {
+                                next_addr = internal_resolver(op, &insn);
+                        }
+
+                        if (next_addr != -1 ) {
+                                next_offset = next_addr - buf_rva;
+                                /* if offset is in this buffer... */
+                                if ( next_offset >= 0 &&
+                                     next_offset < buf_len ) {
+                                        /* go ahead and disassemble */
+                                        count += x86_disasm_forward( buf,
+                                                            buf_len,
+                                                            buf_rva,
+                                                            next_offset,
+                                                            func, arg,
+                                                            resolver, r_arg );
+                                } else  {
+                                        /* report unresolved address */
+                                        x86_report_error( report_disasm_bounds,
+                                                     (void*)(long)next_addr );
+                                }
+                        }
+                } /* end follow_insn */
+
+                if ( insn_doesnt_return(&insn) ) {
+                        /* stop disassembling */
+                        cont = 0;
+                }
+
+		x86_oplist_free( &insn );
+        }
+        return( count );
+}
+
+/* invariant instruction representation */
+size_t x86_invariant_disasm( unsigned char *buf, int buf_len, 
+		x86_invariant_t *inv ){
+	if (! buf || ! buf_len || ! inv  ) {
+		return(0);
+	}
+
+	return ia32_disasm_invariant(buf, buf_len, inv);
+}
+size_t x86_size_disasm( unsigned char *buf, unsigned int buf_len ) {
+	if (! buf || ! buf_len  ) {
+		return(0);
+	}
+
+	return ia32_disasm_size(buf, buf_len);
+}
diff --git a/src/third_party/libdisasm/x86_format.c b/src/third_party/libdisasm/x86_format.c
new file mode 100644
index 0000000..aed8cce
--- /dev/null
+++ b/src/third_party/libdisasm/x86_format.c
@@ -0,0 +1,1430 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libdis.h"
+#include <inttypes.h>
+
+#ifdef _MSC_VER
+        #define snprintf        _snprintf
+        #define inline          __inline
+#endif
+
+
+/*
+ * concatenation macros.  STRNCATF concatenates a format string, buf
+ * only with one argument.
+ */
+#define STRNCAT( buf, str, len ) do {   				\
+	int _i = strlen(str), _blen = strlen(buf), _len = len - 1;  	\
+	if ( len ) {							\
+        	strncat( buf, str, _len );  				\
+		if ( _len <= _i ) {					\
+			buf[_blen+_len] = '\0';				\
+			len = 0;					\
+		} else {						\
+			len -= _i;					\
+		}							\
+	}								\
+} while( 0 )
+
+#define STRNCATF( buf, fmt, data, len ) do {        \
+        char _tmp[MAX_OP_STRING];                   \
+                                                    \
+        snprintf( _tmp, sizeof _tmp, fmt, data );   \
+        STRNCAT( buf, _tmp, len );                  \
+} while( 0 )
+
+
+#define PRINT_DISPLACEMENT( ea ) do {                            \
+        if ( ea->disp_size && ea->disp ) {                       \
+                if ( ea->disp_sign ) {    \
+                        STRNCATF( buf, "-0x%" PRIX32, -ea->disp, len );    \
+                } else {                                         \
+                        STRNCATF( buf, "0x%" PRIX32, ea->disp, len );  \
+                }                                                \
+        }                                                        \
+} while( 0 )
+
+static const char *prefix_strings[] = {
+	"",     /* no prefix */
+	"repz ", /* the trailing spaces make it easy to prepend to mnemonic */
+	"repnz ",
+	"lock ",
+	"branch delay " /* unused in x86 */
+};
+
+static int format_insn_prefix_str( enum x86_insn_prefix prefix, char *buf,
+                                   int len ) {
+
+        int len_orig = len;
+
+        /* concat all prefix strings */
+        if ( prefix & 1 ) { STRNCAT( buf, prefix_strings[1], len ); }
+        if ( prefix & 2 ) { STRNCAT( buf, prefix_strings[2], len ); }
+        if ( prefix & 4 ) { STRNCAT( buf, prefix_strings[3], len ); }
+        if ( prefix & 8 ) { STRNCAT( buf, prefix_strings[4], len ); }
+
+        /* return the number of characters added */
+        return (len_orig - len);
+}
+
+/*
+ * sprint's an operand's data to string str.
+ */
+static void get_operand_data_str( x86_op_t *op, char *str, int len ){
+
+        if ( op->flags & op_signed ) {
+                switch ( op->datatype ) {
+                        case op_byte:
+                                snprintf( str, len, "%" PRId8, op->data.sbyte );
+                                return;
+                        case op_word:
+                                snprintf( str, len, "%" PRId16, op->data.sword );
+                                return;
+                        case op_qword:
+                                snprintf( str, len, "%" PRId64, op->data.sqword );
+                                return;
+                        default:
+                                snprintf( str, len, "%" PRId32, op->data.sdword );
+                                return;
+                }
+        }
+
+        //else
+        switch ( op->datatype ) {
+                case op_byte:
+                        snprintf( str, len, "0x%02" PRIX8, op->data.byte );
+                        return;
+                case op_word:
+                        snprintf( str, len, "0x%04" PRIX16, op->data.word );
+                        return;
+                case op_qword:
+                        snprintf( str, len, "0x%08" PRIX64,op->data.sqword );
+                        return;
+                default:
+                        snprintf( str, len, "0x%08" PRIX32, op->data.dword );
+                        return;
+        }
+}
+
+/*
+ * sprints register types to a string.  the register types can be ORed
+ * together.
+ */
+static void get_operand_regtype_str( int regtype, char *str, int len )
+{
+        static struct {
+                const char *name;
+                int value;
+        } operand_regtypes[] = {
+                {"reg_gen"    , 0x00001},
+                {"reg_in"     , 0x00002},
+                {"reg_out"    , 0x00004},
+                {"reg_local"  , 0x00008},
+                {"reg_fpu"    , 0x00010},
+                {"reg_seg"    , 0x00020},
+                {"reg_simd"   , 0x00040},
+                {"reg_sys"    , 0x00080},
+                {"reg_sp"     , 0x00100},
+                {"reg_fp"     , 0x00200},
+                {"reg_pc"     , 0x00400},
+                {"reg_retaddr", 0x00800},
+                {"reg_cond"   , 0x01000},
+                {"reg_zero"   , 0x02000},
+                {"reg_ret"    , 0x04000},
+                {"reg_src"    , 0x10000},
+                {"reg_dest"   , 0x20000},
+                {"reg_count"  , 0x40000},
+                {NULL, 0}, //end
+        };
+
+        unsigned int i;
+
+        memset( str, 0, len );
+
+        //go thru every type in the enum
+        for ( i = 0; operand_regtypes[i].name; i++ ) {
+                //skip if type is not set
+                if(! (regtype & operand_regtypes[i].value) )
+                        continue;
+
+                //not the first time around
+                if( str[0] ) {
+                        STRNCAT( str, " ", len );
+                }
+
+                STRNCAT(str, operand_regtypes[i].name, len );
+        }
+}
+
+static int format_expr( x86_ea_t *ea, char *buf, int len,
+                        enum x86_asm_format format ) {
+        char str[MAX_OP_STRING];
+
+        if ( format == att_syntax ) {
+		if (ea->base.name[0] || ea->index.name[0] || ea->scale) {
+               		PRINT_DISPLACEMENT(ea);
+	                STRNCAT( buf, "(", len );
+
+	                if ( ea->base.name[0]) {
+	                        STRNCATF( buf, "%%%s", ea->base.name, len );
+	                }
+	                if ( ea->index.name[0]) {
+	                        STRNCATF( buf, ",%%%s", ea->index.name, len );
+	                        if ( ea->scale > 1 ) {
+	                                STRNCATF( buf, ",%d", ea->scale, len );
+	                        }
+	                }
+	                /* handle the syntactic exception */
+	                if ( ! ea->base.name[0] &&
+	                     ! ea->index.name[0]   ) {
+	                        STRNCATF( buf, ",%d", ea->scale, len );
+	                }
+
+	                STRNCAT( buf, ")", len );
+		} else
+			STRNCATF( buf, "0x%" PRIX32, ea->disp, len );
+
+        } else if ( format == xml_syntax ){
+
+                if ( ea->base.name[0]) {
+                        STRNCAT (buf, "\t\t\t<base>\n", len);
+
+                        get_operand_regtype_str (ea->base.type, str,
+                                                 sizeof str);
+                        STRNCAT (buf, "\t\t\t\t<register ", len);
+                        STRNCATF (buf, "name=\"%s\" ", ea->base.name, len);
+                        STRNCATF (buf, "type=\"%s\" ", str, len);
+                        STRNCATF (buf, "size=%d/>\n", ea->base.size, len);
+
+                        STRNCAT (buf, "\t\t\t</base>\n", len);
+                }
+
+                if ( ea->index.name[0]) {
+                        STRNCAT (buf, "\t\t\t<index>\n", len);
+
+                        get_operand_regtype_str (ea->index.type, str,
+                                                 sizeof str);
+
+                        STRNCAT (buf, "\t\t\t\t<register ", len);
+                        STRNCATF (buf, "name=\"%s\" ", ea->index.name, len);
+                        STRNCATF (buf, "type=\"%s\" ", str, len);
+                        STRNCATF (buf, "size=%d/>\n", ea->index.size, len);
+
+                        STRNCAT (buf, "\t\t\t</index>\n", len);
+                }
+
+                //scale
+                STRNCAT (buf, "\t\t\t<scale>\n", len);
+                STRNCAT (buf, "\t\t\t\t<immediate ", len);
+                STRNCATF (buf, "value=\"%d\"/>\n", ea->scale, len);
+                STRNCAT (buf, "\t\t\t</scale>\n", len);
+
+                if ( ea->disp_size ) {
+
+                        STRNCAT (buf, "\t\t\t<displacement>\n", len);
+
+                        if ( ea->disp_size > 1 && ! ea->disp_sign ) {
+                                STRNCAT (buf, "\t\t\t\t<address ", len);
+                                STRNCATF (buf, "value=\"0x%" PRIX32 "\"/>\n", ea->disp,
+                                          len);
+                        } else {
+                                STRNCAT (buf, "\t\t\t\t<immediate ", len);
+                                STRNCATF (buf, "value=%" PRId32 "/>\n", ea->disp, len);
+                        }
+
+                        STRNCAT (buf, "\t\t\t</displacement>\n", len);
+                }
+
+        } else if ( format == raw_syntax ) {
+
+                PRINT_DISPLACEMENT(ea);
+                STRNCAT( buf, "(", len );
+
+                STRNCATF( buf, "%s,", ea->base.name, len );
+                STRNCATF( buf, "%s,", ea->index.name, len );
+                STRNCATF( buf, "%d", ea->scale, len );
+                STRNCAT( buf, ")", len );
+
+        } else {
+
+                STRNCAT( buf, "[", len );
+
+                if ( ea->base.name[0] ) {
+                        STRNCAT( buf, ea->base.name, len );
+                        if ( ea->index.name[0] ||
+                             (ea->disp_size && ! ea->disp_sign) ) {
+                                STRNCAT( buf, "+", len );
+                        }
+                }
+                if ( ea->index.name[0] ) {
+                        STRNCAT( buf, ea->index.name, len );
+                        if ( ea->scale > 1 )
+                        {
+                                STRNCATF( buf, "*%" PRId32, ea->scale, len );
+                        }
+                        if ( ea->disp_size && ! ea->disp_sign )
+                        {
+                                STRNCAT( buf, "+", len );
+                        }
+                }
+
+                if ( ea->disp_size || (! ea->index.name[0] && 
+					! ea->base.name[0] ) )
+                {
+                        PRINT_DISPLACEMENT(ea);
+                }
+
+                STRNCAT( buf, "]", len );
+        }
+
+        return( strlen(buf) );
+}
+
+static int format_seg( x86_op_t *op, char *buf, int len,
+                       enum x86_asm_format format ) {
+        int len_orig = len;
+        const char *reg = "";
+
+        if (! op || ! buf || ! len || ! op->flags) {
+                return(0);
+        }
+        if ( op->type != op_offset && op->type != op_expression ){
+                return(0);
+        }
+        if (! ((int) op->flags & 0xF00) ) {
+                return(0);
+        }
+
+        switch (op->flags & 0xF00) {
+                case op_es_seg: reg = "es"; break;
+                case op_cs_seg: reg = "cs"; break;
+                case op_ss_seg: reg = "ss"; break;
+                case op_ds_seg: reg = "ds"; break;
+                case op_fs_seg: reg = "fs"; break;
+                case op_gs_seg: reg = "gs"; break;
+                default:
+                        break;
+        }
+
+        if (! reg[0] ) {
+                return( 0 );
+        }
+
+        switch( format ) {
+                case xml_syntax:
+                        STRNCAT( buf, "\t\t\t<segment ", len );
+                        STRNCATF( buf, "value=\"%s\"/>\n", reg, len );
+                        break;
+                case att_syntax:
+                        STRNCATF( buf, "%%%s:", reg, len );
+                        break;
+
+                default:
+                        STRNCATF( buf, "%s:", reg, len );
+                        break;
+        }
+
+        return( len_orig - len ); /* return length of appended string */
+}
+
+static const char *get_operand_datatype_str( x86_op_t *op ){
+
+        static const char *types[] = {
+                "sbyte",		/* 0 */
+                "sword",
+                "sqword",
+                "sdword",
+                "sdqword",		/* 4 */
+                "byte",
+                "word",
+                "qword",
+                "dword",		/* 8 */
+                "dqword",
+		"sreal",
+		"dreal",
+		"extreal",		/* 12 */
+		"bcd",
+		"ssimd",
+		"dsimd",
+		"sssimd",		/* 16 */
+		"sdsimd",
+		"descr32",
+		"descr16",
+		"pdescr32",		/* 20 */
+		"pdescr16",
+		"bounds16",
+		"bounds32",
+		"fpu_env16",
+		"fpu_env32",		/* 25 */
+		"fpu_state16",
+		"fpu_state32",
+		"fp_reg_set"
+        };
+
+	/* handle signed values first */
+        if ( op->flags & op_signed ) {
+                switch (op->datatype) {
+                        case op_byte:  return types[0];
+                        case op_word:  return types[1];
+                        case op_qword: return types[2];
+                	case op_dqword: return types[4];
+                        default:       return types[3];
+                }
+        }
+
+        switch (op->datatype) {
+                case op_byte:   	return types[5];
+                case op_word:   	return types[6];
+                case op_qword:  	return types[7];
+                case op_dqword: 	return types[9];
+		case op_sreal:		return types[10];
+		case op_dreal:		return types[11];
+		case op_extreal:	return types[12];
+		case op_bcd:		return types[13];
+		case op_ssimd:		return types[14];
+		case op_dsimd:		return types[15];
+		case op_sssimd:		return types[16];
+		case op_sdsimd:		return types[17];
+		case op_descr32:	return types[18];
+		case op_descr16:	return types[19];
+		case op_pdescr32:	return types[20];
+		case op_pdescr16:	return types[21];
+		case op_bounds16:	return types[22];
+		case op_bounds32:	return types[23];
+		case op_fpustate16: 	return types[24];
+		case op_fpustate32: 	return types[25];
+		case op_fpuenv16: 	return types[26];
+		case op_fpuenv32: 	return types[27];
+		case op_fpregset: 	return types[28];
+                default:        	return types[8];
+        }
+}
+
+static int format_insn_eflags_str( enum x86_flag_status flags, char *buf,
+                                   int len) {
+
+        static struct {
+                const char *name;
+                int  value;
+        } insn_flags[] = {
+                { "carry_set ",                 0x0001 },
+                { "zero_set ",                  0x0002 },
+                { "oflow_set ",                 0x0004 },
+                { "dir_set ",                   0x0008 },
+                { "sign_set ",                  0x0010 },
+                { "parity_set ",                0x0020 },
+                { "carry_or_zero_set ",         0x0040 },
+                { "zero_set_or_sign_ne_oflow ", 0x0080 },
+                { "carry_clear ",               0x0100 },
+                { "zero_clear ",                0x0200 },
+                { "oflow_clear ",               0x0400 },
+                { "dir_clear ",                 0x0800 },
+                { "sign_clear ",                0x1000 },
+                { "parity_clear ",              0x2000 },
+                { "sign_eq_oflow ",             0x4000 },
+                { "sign_ne_oflow ",             0x8000 },
+                { NULL,                         0x0000 }, //end
+        };
+
+        unsigned int i;
+        int len_orig = len;
+
+        for (i = 0; insn_flags[i].name; i++) {
+                if (! (flags & insn_flags[i].value) )
+                        continue;
+
+                STRNCAT( buf, insn_flags[i].name, len );
+        }
+
+        return( len_orig - len );
+}
+
+static const char *get_insn_group_str( enum x86_insn_group gp ) {
+
+        static const char *types[] = {
+                "",           // 0
+                "controlflow",// 1
+                "arithmetic", // 2
+                "logic",      // 3
+                "stack",      // 4
+                "comparison", // 5
+                "move",       // 6
+                "string",     // 7
+                "bit_manip",  // 8
+                "flag_manip", // 9
+                "fpu",        // 10
+                "",           // 11
+                "",           // 12
+                "interrupt",  // 13
+                "system",     // 14
+                "other",      // 15
+        };
+
+        if ( gp > sizeof (types)/sizeof(types[0]) )
+                return "";
+
+        return types[gp];
+}
+
+static const char *get_insn_type_str( enum x86_insn_type type ) {
+
+        static struct {
+                const char *name;
+                int  value;
+        } types[] = {
+                /* insn_controlflow */
+                { "jmp", 0x1001 },
+                { "jcc", 0x1002 },
+                { "call", 0x1003 },
+                { "callcc", 0x1004 },
+                { "return", 0x1005 },
+                { "loop", 0x1006 },
+                /* insn_arithmetic */
+                { "add", 0x2001 },
+                { "sub", 0x2002 },
+                { "mul", 0x2003 },
+                { "div", 0x2004 },
+                { "inc", 0x2005 },
+                { "dec", 0x2006 },
+                { "shl", 0x2007 },
+                { "shr", 0x2008 },
+                { "rol", 0x2009 },
+                { "ror", 0x200A },
+                /* insn_logic */
+                { "and", 0x3001 },
+                { "or", 0x3002 },
+                { "xor", 0x3003 },
+                { "not", 0x3004 },
+                { "neg", 0x3005 },
+                /* insn_stack */
+                { "push", 0x4001 },
+                { "pop", 0x4002 },
+                { "pushregs", 0x4003 },
+                { "popregs", 0x4004 },
+                { "pushflags", 0x4005 },
+                { "popflags", 0x4006 },
+                { "enter", 0x4007 },
+                { "leave", 0x4008 },
+                /* insn_comparison */
+                { "test", 0x5001 },
+                { "cmp", 0x5002 },
+                /* insn_move */
+                { "mov", 0x6001 },      /* move */
+                { "movcc", 0x6002 },    /* conditional move */
+                { "xchg", 0x6003 },     /* exchange */
+                { "xchgcc", 0x6004 },   /* conditional exchange */
+                /* insn_string */
+                { "strcmp", 0x7001 },
+                { "strload", 0x7002 },
+                { "strmov", 0x7003 },
+                { "strstore", 0x7004 },
+                { "translate", 0x7005 },        /* xlat */
+                /* insn_bit_manip */
+                { "bittest", 0x8001 },
+                { "bitset", 0x8002 },
+                { "bitclear", 0x8003 },
+                /* insn_flag_manip */
+                { "clear_carry", 0x9001 },
+                { "clear_zero", 0x9002 },
+                { "clear_oflow", 0x9003 },
+                { "clear_dir", 0x9004 },
+                { "clear_sign", 0x9005 },
+                { "clear_parity", 0x9006 },
+                { "set_carry", 0x9007 },
+                { "set_zero", 0x9008 },
+                { "set_oflow", 0x9009 },
+                { "set_dir", 0x900A },
+                { "set_sign", 0x900B },
+                { "set_parity", 0x900C },
+                { "tog_carry", 0x9010 },
+                { "tog_zero", 0x9020 },
+                { "tog_oflow", 0x9030 },
+                { "tog_dir", 0x9040 },
+                { "tog_sign", 0x9050 },
+                { "tog_parity", 0x9060 },
+                /* insn_fpu */
+                { "fmov", 0xA001 },
+                { "fmovcc", 0xA002 },
+                { "fneg", 0xA003 },
+                { "fabs", 0xA004 },
+                { "fadd", 0xA005 },
+                { "fsub", 0xA006 },
+                { "fmul", 0xA007 },
+                { "fdiv", 0xA008 },
+                { "fsqrt", 0xA009 },
+                { "fcmp", 0xA00A },
+                { "fcos", 0xA00C },
+                { "fldpi", 0xA00D },
+                { "fldz", 0xA00E },
+                { "ftan", 0xA00F },
+                { "fsine", 0xA010 },
+                { "fsys", 0xA020 },
+                /* insn_interrupt */
+                { "int", 0xD001 },
+                { "intcc", 0xD002 },    /* not present in x86 ISA */
+                { "iret", 0xD003 },
+                { "bound", 0xD004 },
+                { "debug", 0xD005 },
+                { "trace", 0xD006 },
+                { "invalid_op", 0xD007 },
+                { "oflow", 0xD008 },
+                /* insn_system */
+                { "halt", 0xE001 },
+                { "in", 0xE002 },       /* input from port/bus */
+                { "out", 0xE003 },      /* output to port/bus */
+                { "cpuid", 0xE004 },
+                /* insn_other */
+                { "nop", 0xF001 },
+                { "bcdconv", 0xF002 },  /* convert to or from BCD */
+                { "szconv", 0xF003 },   /* change size of operand */
+                { NULL, 0 }, //end
+        };
+
+        unsigned int i;
+
+        //go thru every type in the enum
+        for ( i = 0; types[i].name; i++ ) {
+                if ( types[i].value == type )
+                        return types[i].name;
+        }
+
+        return "";
+}
+
+static const char *get_insn_cpu_str( enum x86_insn_cpu cpu ) {
+        static const char *intel[] = {
+                "",           		// 0
+                "8086",           	// 1
+                "80286",           	// 2
+                "80386",           	// 3
+                "80387",           	// 4
+                "80486",           	// 5
+                "Pentium",           	// 6
+                "Pentium Pro",          // 7
+                "Pentium 2",           	// 8
+                "Pentium 3",           	// 9
+                "Pentium 4"           	// 10
+        };
+
+        if ( cpu <= sizeof(intel)/sizeof(intel[0]) ) {
+		return intel[cpu];
+	} else if ( cpu == 16 ) {
+		return "K6";
+	} else if ( cpu == 32 ) {
+		return "K7";
+	} else if ( cpu == 48 ) {
+		return "Athlon";
+	}
+
+        return "";
+}
+
+static const char *get_insn_isa_str( enum x86_insn_isa isa ) {
+        static const char *subset[] = {
+		NULL,				// 0
+                "General Purpose",           	// 1
+                "Floating Point",           	// 2
+                "FPU Management",           	// 3
+                "MMX",           		// 4
+                "SSE",           		// 5
+                "SSE2",           		// 6
+                "SSE3",           		// 7
+                "3DNow!",           		// 8
+                "System"           		// 9
+        };
+
+        if ( isa > sizeof (subset)/sizeof(subset[0]) ) {
+                return "";
+	}
+
+        return subset[isa];
+}
+
+static int format_operand_att( x86_op_t *op, x86_insn_t *insn, char *buf,
+                               int len){
+
+        char str[MAX_OP_STRING];
+
+        memset (str, 0, sizeof str);
+
+        switch ( op->type ) {
+                case op_register:
+                        STRNCATF( buf, "%%%s", op->data.reg.name, len );
+                        break;
+
+                case op_immediate:
+                        get_operand_data_str( op, str, sizeof str );
+                        STRNCATF( buf, "$%s", str, len );
+                        break;
+
+                case op_relative_near: 
+                        STRNCATF( buf, "0x%08X",
+                                 (unsigned int)(op->data.sbyte +
+                                 insn->addr + insn->size), len );
+                        break;
+
+		case op_relative_far:
+                        if (op->datatype == op_word) {
+                                STRNCATF( buf, "0x%08X",
+                                          (unsigned int)(op->data.sword +
+                                          insn->addr + insn->size), len );
+                        } else {
+                        	STRNCATF( buf, "0x%08X",
+                                  	(unsigned int)(op->data.sdword +
+                                  	insn->addr + insn->size), len );
+			}
+                        break;
+
+                case op_absolute:
+			/* ATT uses the syntax $section, $offset */
+                        STRNCATF( buf, "$0x%04" PRIX16 ", ", op->data.absolute.segment,
+				len );
+			if (op->datatype == op_descr16) {
+                        	STRNCATF( buf, "$0x%04" PRIX16, 
+					op->data.absolute.offset.off16, len );
+			} else {
+                        	STRNCATF( buf, "$0x%08" PRIX32, 
+					op->data.absolute.offset.off32, len );
+			}
+                        break;
+                case op_offset:
+                        /* ATT requires a '*' before JMP/CALL ops */
+                        if (insn->type == insn_jmp || insn->type == insn_call)
+                                STRNCAT( buf, "*", len );
+
+                        len -= format_seg( op, buf, len, att_syntax );
+                        STRNCATF( buf, "0x%08" PRIX32, op->data.sdword, len );
+                        break;
+
+                case op_expression:
+                        /* ATT requires a '*' before JMP/CALL ops */
+                        if (insn->type == insn_jmp || insn->type == insn_call)
+                                STRNCAT( buf, "*", len );
+
+                        len -= format_seg( op, buf, len, att_syntax );
+                        len -= format_expr( &op->data.expression, buf, len,
+                                     att_syntax );
+                        break;
+                case op_unused:
+                case op_unknown:
+                        /* return 0-truncated buffer */
+                        break;
+        }
+
+        return ( strlen( buf ) );
+}
+
+static int format_operand_native( x86_op_t *op, x86_insn_t *insn, char *buf,
+                                  int len){
+
+        char str[MAX_OP_STRING];
+
+        switch (op->type) {
+                case op_register:
+                        STRNCAT( buf, op->data.reg.name, len );
+                        break;
+
+                case op_immediate:
+                        get_operand_data_str( op, str, sizeof str );
+                        STRNCAT( buf, str, len );
+                        break;
+
+                case op_relative_near:
+                        STRNCATF( buf, "0x%08" PRIX32,
+                                  (unsigned int)(op->data.sbyte +
+                                  insn->addr + insn->size), len );
+                        break;
+
+                case op_relative_far:
+                        if ( op->datatype == op_word ) {
+                                STRNCATF( buf, "0x%08" PRIX32,
+                                          (unsigned int)(op->data.sword +
+                                          insn->addr + insn->size), len );
+                                break;
+                        } else {
+                        	STRNCATF( buf, "0x%08" PRIX32, op->data.sdword +
+                                	  insn->addr + insn->size, len );
+			}
+                        break;
+
+                case op_absolute:
+                        STRNCATF( buf, "$0x%04" PRIX16 ":", op->data.absolute.segment,
+				len );
+			if (op->datatype == op_descr16) {
+                        	STRNCATF( buf, "0x%04" PRIX16, 
+					op->data.absolute.offset.off16, len );
+			} else {
+                        	STRNCATF( buf, "0x%08" PRIX32, 
+					op->data.absolute.offset.off32, len );
+			}
+                        break;
+
+                case op_offset:
+                        len -= format_seg( op, buf, len, native_syntax );
+                        STRNCATF( buf, "[0x%08" PRIX32 "]", op->data.sdword, len );
+                        break;
+
+                case op_expression:
+                        len -= format_seg( op, buf, len, native_syntax );
+                        len -= format_expr( &op->data.expression, buf, len,
+                                     native_syntax );
+                        break;
+                case op_unused:
+                case op_unknown:
+                        /* return 0-truncated buffer */
+                        break;
+        }
+
+        return( strlen( buf ) );
+}
+
+static int format_operand_xml( x86_op_t *op, x86_insn_t *insn, char *buf,
+                               int len){
+
+        char str[MAX_OP_STRING] = "\0";
+
+        switch (op->type) {
+                case op_register:
+
+                        get_operand_regtype_str( op->data.reg.type, str,
+                                                 sizeof str );
+
+                        STRNCAT( buf, "\t\t<register ", len );
+                        STRNCATF( buf, "name=\"%s\" ", op->data.reg.name, len );
+                        STRNCATF( buf, "type=\"%s\" ", str, len );
+                        STRNCATF( buf, "size=%d/>\n", op->data.reg.size, len );
+                        break;
+
+                case op_immediate:
+
+                        get_operand_data_str( op, str, sizeof str );
+
+                        STRNCAT( buf, "\t\t<immediate ", len );
+                        STRNCATF( buf, "type=\"%s\" ",
+                                  get_operand_datatype_str (op), len );
+                        STRNCATF( buf, "value=\"%s\"/>\n", str, len );
+                        break;
+
+                case op_relative_near:
+                        STRNCAT( buf, "\t\t<relative_offset ", len );
+
+                        STRNCATF( buf, "value=\"0x%08" PRIX32 "\"/>\n",
+                                  (unsigned int)(op->data.sbyte +
+                                  insn->addr + insn->size), len );
+                        break;
+
+                case op_relative_far:
+                        STRNCAT( buf, "\t\t<relative_offset ", len );
+
+                        if (op->datatype == op_word) {
+                                STRNCATF( buf, "value=\"0x%08" PRIX32 "\"/>\n",
+                                          (unsigned int)(op->data.sword +
+                                          insn->addr + insn->size), len);
+                                break;
+                        } else {
+
+                        	STRNCATF( buf, "value=\"0x%08" PRIX32 "\"/>\n",
+                                      op->data.sdword + insn->addr + insn->size,
+                                      len );
+			}
+                        break;
+
+                case op_absolute:
+
+                        STRNCATF( buf, 
+				"\t\t<absolute_address segment=\"0x%04" PRIX16 "\"",
+                        	op->data.absolute.segment, len );
+
+			if (op->datatype == op_descr16) {
+                        	STRNCATF( buf, "offset=\"0x%04" PRIX16 "\">", 
+					op->data.absolute.offset.off16, len );
+			} else {
+                        	STRNCATF( buf, "offset=\"0x%08" PRIX32 "\">", 
+					op->data.absolute.offset.off32, len );
+			}
+
+                        STRNCAT( buf, "\t\t</absolute_address>\n", len );
+                        break;
+
+                case op_expression:
+			
+
+                        STRNCAT( buf, "\t\t<address_expression>\n", len );
+
+                        len -= format_seg( op, buf, len, xml_syntax );
+                        len -= format_expr( &op->data.expression, buf, len,
+                                     xml_syntax );
+
+                        STRNCAT( buf, "\t\t</address_expression>\n", len );
+                        break;
+
+                case op_offset:
+
+                        STRNCAT( buf, "\t\t<segment_offset>\n", len );
+
+                        len -= format_seg( op, buf, len, xml_syntax );
+
+                        STRNCAT( buf, "\t\t\t<address ", len);
+                        STRNCATF( buf, "value=\"0x%08" PRIX32 "\"/>\n",
+                                          op->data.sdword, len );
+                        STRNCAT( buf, "\t\t</segment_offset>\n", len );
+                        break;
+
+                case op_unused:
+                case op_unknown:
+                        /* return 0-truncated buffer */
+                        break;
+        }
+
+        return( strlen( buf ) );
+}
+
+static int format_operand_raw( x86_op_t *op, x86_insn_t *insn, char *buf,
+                               int len){
+
+        char str[MAX_OP_RAW_STRING];
+	const char *datatype = get_operand_datatype_str(op);
+
+        switch (op->type) {
+                case op_register:
+
+                        get_operand_regtype_str( op->data.reg.type, str,
+                                                 sizeof str );
+
+                        STRNCAT( buf, "reg|", len );
+                        STRNCATF( buf, "%s|", datatype, len );
+                        STRNCATF( buf, "%s:", op->data.reg.name, len );
+                        STRNCATF( buf, "%s:", str, len );
+                        STRNCATF( buf, "%d|", op->data.reg.size, len );
+                        break;
+
+                case op_immediate:
+
+                        get_operand_data_str( op, str, sizeof str );
+
+                        STRNCAT( buf, "immediate|", len );
+                        STRNCATF( buf, "%s|", datatype, len );
+                        STRNCATF( buf, "%s|", str, len );
+                        break;
+
+                case op_relative_near:
+			/* NOTE: in raw format, we print the
+			 * relative offset, not the actual
+			 * address of the jump target */
+
+                        STRNCAT( buf, "relative|", len );
+                        STRNCATF( buf, "%s|", datatype, len );
+                        STRNCATF( buf, "%" PRId8 "|", op->data.sbyte, len );
+                        break;
+
+                case op_relative_far:
+
+                        STRNCAT( buf, "relative|", len );
+                        STRNCATF( buf, "%s|", datatype, len );
+
+                        if (op->datatype == op_word) {
+                                STRNCATF( buf, "%" PRId16 "|", op->data.sword, len);
+                                break;
+                        } else {
+                        	STRNCATF( buf, "%" PRId32 "|", op->data.sdword, len );
+			}
+                        break;
+
+                case op_absolute:
+
+                        STRNCAT( buf, "absolute_address|", len );
+                        STRNCATF( buf, "%s|", datatype, len );
+
+                        STRNCATF( buf, "$0x%04" PRIX16 ":", op->data.absolute.segment,
+				len );
+			if (op->datatype == op_descr16) {
+                        	STRNCATF( buf, "0x%04" PRIX16 "|", 
+					op->data.absolute.offset.off16, len );
+			} else {
+                        	STRNCATF( buf, "0x%08" PRIX32 "|", 
+					op->data.absolute.offset.off32, len );
+			}
+
+                        break;
+
+                case op_expression:
+
+                        STRNCAT( buf, "address_expression|", len );
+                        STRNCATF( buf, "%s|", datatype, len );
+
+                        len -= format_seg( op, buf, len, native_syntax );
+                        len -= format_expr( &op->data.expression, buf, len,
+                                     raw_syntax );
+
+                        STRNCAT( buf, "|", len );
+                        break;
+
+                case op_offset:
+
+                        STRNCAT( buf, "segment_offset|", len );
+                        STRNCATF( buf, "%s|", datatype, len );
+
+                        len -= format_seg( op, buf, len, xml_syntax );
+
+                        STRNCATF( buf, "%08" PRIX32 "|", op->data.sdword, len );
+                        break;
+
+                case op_unused:
+                case op_unknown:
+                        /* return 0-truncated buffer */
+                        break;
+        }
+
+        return( strlen( buf ) );
+}
+
+int x86_format_operand( x86_op_t *op, char *buf, int len,
+                        enum x86_asm_format format ){
+	x86_insn_t *insn;
+
+        if ( ! op || ! buf || len < 1 ) {
+                return(0);
+        }
+
+	/* insn is stored in x86_op_t since .21-pre3 */
+	insn = (x86_insn_t *) op->insn;
+
+        memset( buf, 0, len );
+
+        switch ( format ) {
+                case att_syntax:
+                        return format_operand_att( op, insn, buf, len );
+                case xml_syntax:
+                        return format_operand_xml( op, insn, buf, len );
+                case raw_syntax:
+                        return format_operand_raw( op, insn, buf, len );
+                case native_syntax:
+                case intel_syntax:
+                default:
+                        return format_operand_native( op, insn, buf, len );
+        }
+}
+
+#define is_imm_jmp(op)   (op->type == op_absolute   || \
+                          op->type == op_immediate  || \
+                          op->type == op_offset)
+#define is_memory_op(op) (op->type == op_absolute   || \
+                          op->type == op_expression || \
+                          op->type == op_offset)
+
+static int format_att_mnemonic( x86_insn_t *insn, char *buf, int len) {
+        int size = 0;
+        const char *suffix;
+
+        if (! insn || ! buf || ! len )
+                return(0);
+
+        memset( buf, 0, len );
+
+        /* do long jump/call prefix */
+        if ( insn->type == insn_jmp || insn->type == insn_call ) {
+                if (! is_imm_jmp( x86_operand_1st(insn) ) ||
+                     (x86_operand_1st(insn))->datatype != op_byte ) {
+                    /* far jump/call, use "l" prefix */
+                    STRNCAT( buf, "l", len );
+                }
+                STRNCAT( buf, insn->mnemonic, len );
+
+                return ( strlen( buf ) );
+        }
+
+        /* do mnemonic */
+        STRNCAT( buf, insn->mnemonic, len );
+
+        /* do suffixes for memory operands */
+        if (!(insn->note & insn_note_nosuffix) &&
+            (insn->group == insn_arithmetic ||
+             insn->group == insn_logic ||
+             insn->group == insn_move ||
+             insn->group == insn_stack ||
+             insn->group == insn_string ||
+             insn->group == insn_comparison ||
+             insn->type == insn_in ||
+             insn->type == insn_out
+            )) {
+            if ( x86_operand_count( insn, op_explicit ) > 0 &&
+                 is_memory_op( x86_operand_1st(insn) ) ){
+                size = x86_operand_size( x86_operand_1st( insn ) );
+            } else if ( x86_operand_count( insn, op_explicit ) > 1 &&
+                        is_memory_op( x86_operand_2nd(insn) ) ){
+                size = x86_operand_size( x86_operand_2nd( insn ) );
+            }
+        }
+
+        if ( size == 1 ) suffix = "b";
+        else if ( size == 2 ) suffix = "w";
+        else if ( size == 4 ) suffix = "l";
+        else if ( size == 8 ) suffix = "q";
+        else suffix = "";
+
+        STRNCAT( buf, suffix, len );
+        return ( strlen( buf ) );
+}
+
+int x86_format_mnemonic(x86_insn_t *insn, char *buf, int len,
+                        enum x86_asm_format format){
+        char str[MAX_OP_STRING];
+
+        memset( buf, 0, len );
+        STRNCAT( buf, insn->prefix_string, len );
+        if ( format == att_syntax ) {
+                format_att_mnemonic( insn, str, sizeof str );
+                STRNCAT( buf, str, len );
+        } else {
+                STRNCAT( buf, insn->mnemonic, len );
+        }
+
+        return( strlen( buf ) );
+}
+
+struct op_string { char *buf; size_t len; };
+
+static void format_op_raw( x86_op_t *op, x86_insn_t *insn, void *arg ) {
+	struct op_string * opstr = (struct op_string *) arg;
+
+        format_operand_raw(op, insn, opstr->buf, opstr->len);
+}
+
+static int format_insn_note(x86_insn_t *insn, char *buf, int len){
+	char note[32] = {0};
+	int len_orig = len, note_len = 32;
+
+	if ( insn->note & insn_note_ring0 ) {
+        	STRNCATF( note, "%s", "Ring0 ", note_len );
+	}
+	if ( insn->note & insn_note_smm ) {
+        	STRNCATF( note, "%s", "SMM ", note_len );
+	}
+	if ( insn->note & insn_note_serial ) {
+        	STRNCATF(note, "%s", "Serialize ", note_len );
+	}
+        STRNCATF( buf, "%s|", note, len );
+
+        return( len_orig - len );
+}
+
+static int format_raw_insn( x86_insn_t *insn, char *buf, int len ){
+	struct op_string opstr = { buf, len };
+        int i;
+
+        /* RAW style:
+         * ADDRESS|OFFSET|SIZE|BYTES|
+         * PREFIX|PREFIX_STRING|GROUP|TYPE|NOTES|
+	 * MNEMONIC|CPU|ISA|FLAGS_SET|FLAGS_TESTED|
+	 * STACK_MOD|STACK_MOD_VAL
+	 * [|OP_TYPE|OP_DATATYPE|OP_ACCESS|OP_FLAGS|OP]*
+         *
+         * Register values are encoded as:
+         * NAME:TYPE:SIZE
+         *
+         * Effective addresses are encoded as:
+         * disp(base_reg,index_reg,scale)
+         */
+        STRNCATF( buf, "0x%08" PRIX32 "|", insn->addr  , len );
+        STRNCATF( buf, "0x%08" PRIX32 "|", insn->offset, len );
+        STRNCATF( buf, "%d|"    , insn->size  , len );
+
+        /* print bytes */
+        for ( i = 0; i < insn->size; i++ ) {
+                STRNCATF( buf, "%02X ", insn->bytes[i], len );
+        }
+        STRNCAT( buf, "|", len );
+
+        len -= format_insn_prefix_str( insn->prefix, buf, len );
+        STRNCATF( buf, "|%s|", insn->prefix_string             , len );
+        STRNCATF( buf, "%s|", get_insn_group_str( insn->group ), len );
+        STRNCATF( buf, "%s|", get_insn_type_str( insn->type )  , len );
+        STRNCATF( buf, "%s|", insn->mnemonic                   , len );
+        STRNCATF( buf, "%s|", get_insn_cpu_str( insn->cpu )  , len );
+        STRNCATF( buf, "%s|", get_insn_isa_str( insn->isa )  , len );
+
+	/* insn note */
+	len -= format_insn_note( insn, buf, len );
+
+        len -= format_insn_eflags_str( insn->flags_set, buf, len );
+        STRNCAT( buf, "|", len );
+        len -= format_insn_eflags_str( insn->flags_tested, buf, len );
+        STRNCAT( buf, "|", len );
+        STRNCATF( buf, "%d|", insn->stack_mod, len );
+        STRNCATF( buf, "%" PRId32 "|", insn->stack_mod_val, len );
+
+	opstr.len = len;
+	x86_operand_foreach( insn, format_op_raw, &opstr, op_any );
+
+        return( strlen (buf) );
+}
+
+static int format_xml_insn( x86_insn_t *insn, char *buf, int len ) {
+        char str[MAX_OP_XML_STRING];
+        int i;
+
+        STRNCAT( buf, "<x86_insn>\n", len );
+
+        STRNCATF( buf, "\t<address rva=\"0x%08" PRIX32 "\" ", insn->addr, len );
+        STRNCATF( buf, "offset=\"0x%08" PRIX32 "\" ", insn->offset, len );
+        STRNCATF( buf, "size=%d bytes=\"", insn->size, len );
+
+        for ( i = 0; i < insn->size; i++ ) {
+                STRNCATF( buf, "%02X ", insn->bytes[i], len );
+        }
+        STRNCAT( buf, "\"/>\n", len );
+
+        STRNCAT( buf, "\t<prefix type=\"", len );
+        len -= format_insn_prefix_str( insn->prefix, buf, len );
+        STRNCATF( buf, "\" string=\"%s\"/>\n", insn->prefix_string, len );
+
+        STRNCATF( buf, "\t<mnemonic group=\"%s\" ",
+                  get_insn_group_str (insn->group), len );
+        STRNCATF( buf, "type=\"%s\" ", get_insn_type_str (insn->type), len );
+        STRNCATF( buf, "string=\"%s\"/>\n", insn->mnemonic, len );
+
+        STRNCAT( buf, "\t<flags type=set>\n", len );
+        STRNCAT( buf, "\t\t<flag name=\"", len );
+        len -= format_insn_eflags_str( insn->flags_set, buf, len );
+        STRNCAT( buf, "\"/>\n\t</flags>\n", len );
+
+
+        STRNCAT( buf, "\t<flags type=tested>\n", len );
+        STRNCAT( buf, "\t\t<flag name=\"", len );
+        len -= format_insn_eflags_str( insn->flags_tested, buf, len );
+        STRNCAT( buf, "\"/>\n\t</flags>\n", len );
+
+	if ( x86_operand_1st( insn ) ) {
+        	x86_format_operand( x86_operand_1st(insn), str,
+                           sizeof str, xml_syntax);
+        	STRNCAT( buf, "\t<operand name=dest>\n", len );
+        	STRNCAT( buf, str, len );
+        	STRNCAT( buf, "\t</operand>\n", len );
+	}
+
+	if ( x86_operand_2nd( insn ) ) {
+        	x86_format_operand( x86_operand_2nd( insn ), str,
+                           sizeof str, xml_syntax);
+        	STRNCAT( buf, "\t<operand name=src>\n", len );
+        	STRNCAT( buf, str, len );
+        	STRNCAT( buf, "\t</operand>\n", len );
+	}
+
+	if ( x86_operand_3rd( insn ) ) {
+        	x86_format_operand( x86_operand_3rd(insn), str,
+                           sizeof str, xml_syntax);
+        	STRNCAT( buf, "\t<operand name=imm>\n", len );
+        	STRNCAT( buf, str, len );
+        	STRNCAT( buf, "\t</operand>\n", len );
+	}
+
+        STRNCAT( buf, "</x86_insn>\n", len );
+
+        return strlen (buf);
+}
+
+int x86_format_header( char *buf, int len, enum x86_asm_format format ) {
+        switch (format) {
+                case att_syntax:
+                        snprintf( buf, len, "MNEMONIC\tSRC, DEST, IMM" );
+                        break;
+                case intel_syntax:
+                        snprintf( buf, len, "MNEMONIC\tDEST, SRC, IMM" );
+                        break;
+                case native_syntax:
+                        snprintf( buf, len, "ADDRESS\tBYTES\tMNEMONIC\t"
+                                            "DEST\tSRC\tIMM" );
+                        break;
+                case raw_syntax:
+                        snprintf( buf, len, "ADDRESS|OFFSET|SIZE|BYTES|"
+                               "PREFIX|PREFIX_STRING|GROUP|TYPE|NOTES|"
+			       "MNEMONIC|CPU|ISA|FLAGS_SET|FLAGS_TESTED|"
+			       "STACK_MOD|STACK_MOD_VAL"
+			       "[|OP_TYPE|OP_DATATYPE|OP_ACCESS|OP_FLAGS|OP]*"
+                                );
+                        break;
+                case xml_syntax:
+                        snprintf( buf, len,
+                                  "<x86_insn>"
+                                      "<address rva= offset= size= bytes=/>"
+                                      "<prefix type= string=/>"
+                                      "<mnemonic group= type= string= "
+				      "cpu= isa= note= />"
+                                      "<flags type=set>"
+                                          "<flag name=>"
+                                      "</flags>"
+				      "<stack_mod val= >"
+                                      "<flags type=tested>"
+                                          "<flag name=>"
+                                      "</flags>"
+                                      "<operand name=>"
+                                          "<register name= type= size=/>"
+                                          "<immediate type= value=/>"
+                                          "<relative_offset value=/>"
+                                          "<absolute_address value=>"
+                                              "<segment value=/>"
+                                          "</absolute_address>"
+                                          "<address_expression>"
+                                              "<segment value=/>"
+                                              "<base>"
+                                                  "<register name= type= size=/>"
+                                              "</base>"
+                                              "<index>"
+                                                  "<register name= type= size=/>"
+                                              "</index>"
+                                              "<scale>"
+                                                  "<immediate value=/>"
+                                              "</scale>"
+                                              "<displacement>"
+                                                  "<immediate value=/>"
+                                                  "<address value=/>"
+                                              "</displacement>"
+                                          "</address_expression>"
+                                          "<segment_offset>"
+                                              "<address value=/>"
+                                          "</segment_offset>"
+                                      "</operand>"
+                                  "</x86_insn>"
+                                );
+                        break;
+		case unknown_syntax:
+			if ( len ) {
+				buf[0] = '\0';
+			}
+			break;
+        }
+
+        return( strlen(buf) );
+}
+
+int x86_format_insn( x86_insn_t *insn, char *buf, int len,
+                     enum x86_asm_format format ){
+        char str[MAX_OP_STRING];
+        x86_op_t *src, *dst;
+        int i;
+
+        memset(buf, 0, len);
+        if ( format == intel_syntax ) {
+                /* INTEL STYLE: mnemonic dest, src, imm */
+                STRNCAT( buf, insn->prefix_string, len );
+                STRNCAT( buf, insn->mnemonic, len );
+                STRNCAT( buf, "\t", len );
+
+                /* dest */
+		if ( (dst = x86_operand_1st( insn )) && !(dst->flags & op_implied) ) {
+        		x86_format_operand( dst, str, MAX_OP_STRING, format);
+                	STRNCAT( buf, str, len );
+                }
+
+                /* src */
+		if ( (src = x86_operand_2nd( insn )) ) {
+                        if ( !(dst->flags & op_implied) ) {
+                	        STRNCAT( buf, ", ", len );
+                        }
+        		x86_format_operand( src, str, MAX_OP_STRING, format);
+                	STRNCAT( buf, str, len );
+                }
+
+                /* imm */
+		if ( x86_operand_3rd( insn )) {
+                	STRNCAT( buf, ", ", len );
+        		x86_format_operand( x86_operand_3rd( insn ), 
+				str, MAX_OP_STRING, format);
+                	STRNCAT( buf, str, len );
+		}
+
+        } else if ( format == att_syntax ) {
+                /* ATT STYLE: mnemonic src, dest, imm */
+                STRNCAT( buf, insn->prefix_string, len );
+                format_att_mnemonic(insn, str, MAX_OP_STRING);
+                STRNCATF( buf, "%s\t", str, len);
+
+
+		/* not sure which is correct? sometimes GNU as requires
+		 * an imm as the first operand, sometimes as the third... */
+                /* imm */
+		if ( x86_operand_3rd( insn ) ) {
+        		x86_format_operand(x86_operand_3rd( insn ), 
+				str, MAX_OP_STRING, format);
+                	STRNCAT( buf, str, len );
+			/* there is always 'dest' operand if there is 'src' */
+			STRNCAT( buf, ", ", len );
+		}
+
+                if ( (insn->note & insn_note_nonswap ) == 0 ) {
+                        /* regular AT&T style swap */
+                        src = x86_operand_2nd( insn );
+                        dst = x86_operand_1st( insn );
+                }
+                else {
+                        /* special-case instructions */
+                        src = x86_operand_1st( insn );
+                        dst = x86_operand_2nd( insn );
+                }
+
+                /* src */
+                if ( src ) {
+                        x86_format_operand(src, str, MAX_OP_STRING, format);
+                        STRNCAT( buf, str, len );
+                        /* there is always 'dest' operand if there is 'src' */
+                        if ( dst && !(dst->flags & op_implied) ) {
+                                STRNCAT( buf, ", ", len );
+                        }
+                }
+
+                /* dest */
+                if ( dst && !(dst->flags & op_implied) ) {
+                        x86_format_operand( dst, str, MAX_OP_STRING, format);
+                        STRNCAT( buf, str, len );
+                }
+
+
+        } else if ( format == raw_syntax ) {
+                format_raw_insn( insn, buf, len );
+        } else if ( format == xml_syntax ) {
+                format_xml_insn( insn, buf, len );
+        } else { /* default to native */
+                /* NATIVE style: RVA\tBYTES\tMNEMONIC\tOPERANDS */
+                /* print address */
+                STRNCATF( buf, "%08" PRIX32 "\t", insn->addr, len );
+
+                /* print bytes */
+                for ( i = 0; i < insn->size; i++ ) {
+                        STRNCATF( buf, "%02X ", insn->bytes[i], len );
+                }
+
+                STRNCAT( buf, "\t", len );
+
+                /* print mnemonic */
+                STRNCAT( buf, insn->prefix_string, len );
+                STRNCAT( buf, insn->mnemonic, len );
+                STRNCAT( buf, "\t", len );
+
+                /* print operands */
+                /* dest */
+		if ( x86_operand_1st( insn )  ) {
+        		x86_format_operand( x86_operand_1st( insn ), 
+				str, MAX_OP_STRING, format);
+                	STRNCATF( buf, "%s\t", str, len );
+		}
+
+                /* src */
+		if ( x86_operand_2nd( insn ) ) {
+        		x86_format_operand(x86_operand_2nd( insn ), 
+				str, MAX_OP_STRING, format);
+                	STRNCATF( buf, "%s\t", str, len );
+		}
+
+                /* imm */
+		if ( x86_operand_3rd( insn )) {
+        		x86_format_operand( x86_operand_3rd( insn ), 
+				str, MAX_OP_STRING, format);
+                	STRNCAT( buf, str, len );
+		}
+        }
+
+        return( strlen( buf ) );
+}
+
diff --git a/src/third_party/libdisasm/x86_imm.c b/src/third_party/libdisasm/x86_imm.c
new file mode 100644
index 0000000..cd59bfc
--- /dev/null
+++ b/src/third_party/libdisasm/x86_imm.c
@@ -0,0 +1,70 @@
+#include "qword.h"
+#include "x86_imm.h"
+
+#include <stdio.h>
+
+unsigned int x86_imm_signsized( unsigned char * buf, size_t buf_len,
+				void *dest, unsigned int size ) {
+	signed char *cp = (signed char *) dest;
+	signed short *sp = (signed short *) dest;
+	int32_t *lp = (int32_t *) dest;
+	qword_t *qp = (qword_t *) dest;
+
+	if ( size > buf_len ) {
+		return 0;
+	}
+
+	/* Copy 'size' bytes from *buf to *op
+	 * return number of bytes copied */
+	switch (size) {
+		case 1:		/* BYTE */
+			*cp =  *((signed char *) buf);
+			break;
+		case 2:		/* WORD */
+			*sp =  *((signed short *) buf);
+			break;
+		case 6:
+		case 8:		/* QWORD */
+			*qp = *((qword_t *) buf);
+			break;
+		case 4:		/* DWORD */
+		default:
+			*lp = *((int32_t *) buf);
+			break;
+	}
+	return (size);
+}
+
+unsigned int x86_imm_sized( unsigned char * buf, size_t buf_len, void *dest,
+			    unsigned int size ) {
+	unsigned char *cp = (unsigned char *) dest;
+	unsigned short *sp = (unsigned short *) dest;
+	uint32_t *lp = (uint32_t *) dest;
+	qword_t *qp = (qword_t *) dest;
+
+	if ( size > buf_len ) {
+		return 0;
+	}
+
+	/* Copy 'size' bytes from *buf to *op
+	 * return number of bytes copied */
+	switch (size) {
+		case 1:		/* BYTE */
+			*cp =  *((unsigned char *) buf);
+			break;
+		case 2:		/* WORD */
+			*sp =  *((unsigned short *) buf);
+			break;
+		case 6:
+		case 8:		/* QWORD */
+			*qp = *((qword_t *) buf);
+			break;
+		case 4:		/* DWORD */
+		default:
+			*lp = *((uint32_t *) buf);
+			break;
+	}
+
+	return (size);
+}
+
diff --git a/src/third_party/libdisasm/x86_imm.h b/src/third_party/libdisasm/x86_imm.h
new file mode 100644
index 0000000..fa35ff2
--- /dev/null
+++ b/src/third_party/libdisasm/x86_imm.h
@@ -0,0 +1,18 @@
+#ifndef x86_IMM_H
+#define x86_IMM_H
+
+#include "./qword.h"
+#include <sys/types.h>
+
+#ifdef WIN32
+#include <windows.h>
+#endif
+
+/* these are in the global x86 namespace but are not a part of the
+ * official API */
+unsigned int x86_imm_sized( unsigned char *buf, size_t buf_len, void *dest,
+			    unsigned int size );
+
+unsigned int x86_imm_signsized( unsigned char *buf, size_t buf_len, void *dest,
+				unsigned int size );
+#endif
diff --git a/src/third_party/libdisasm/x86_insn.c b/src/third_party/libdisasm/x86_insn.c
new file mode 100644
index 0000000..5649b89
--- /dev/null
+++ b/src/third_party/libdisasm/x86_insn.c
@@ -0,0 +1,182 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "libdis.h"
+
+#ifdef _MSC_VER
+        #define snprintf        _snprintf
+        #define inline          __inline
+#endif
+
+int x86_insn_is_valid( x86_insn_t *insn ) {
+	if ( insn && insn->type != insn_invalid && insn->size > 0 ) {
+		return 1;
+	}
+
+	return 0;
+}
+
+uint32_t x86_get_address( x86_insn_t *insn ) {
+	x86_oplist_t *op_lst;
+        if (! insn || ! insn->operands ) {
+        	return 0;
+        }
+
+	for (op_lst = insn->operands; op_lst; op_lst = op_lst->next ) {
+		if ( op_lst->op.type == op_offset ) {
+			return op_lst->op.data.offset;
+		} else if ( op_lst->op.type == op_absolute ) {
+			if ( op_lst->op.datatype == op_descr16 ) {
+				return (uint32_t)
+					op_lst->op.data.absolute.offset.off16;
+			}
+			return op_lst->op.data.absolute.offset.off32;
+		}
+	}
+	
+	return 0;
+}
+
+int32_t x86_get_rel_offset( x86_insn_t *insn ) {
+	x86_oplist_t *op_lst;
+        if (! insn || ! insn->operands ) {
+        	return 0;
+        }
+
+	for (op_lst = insn->operands; op_lst; op_lst = op_lst->next ) {
+		if ( op_lst->op.type == op_relative_near ) {
+			return (int32_t) op_lst->op.data.relative_near;
+		} else if ( op_lst->op.type == op_relative_far ) {
+			return op_lst->op.data.relative_far;
+		}
+	}
+	
+	return 0;
+}
+
+x86_op_t * x86_get_branch_target( x86_insn_t *insn ) {
+	x86_oplist_t *op_lst;
+        if (! insn || ! insn->operands ) {
+        	return NULL;
+        }
+
+	for (op_lst = insn->operands; op_lst; op_lst = op_lst->next ) {
+		if ( op_lst->op.access & op_execute ) {
+			return &(op_lst->op);
+		}
+	}
+	
+	return NULL;
+}
+x86_op_t * x86_get_imm( x86_insn_t *insn ) {
+	x86_oplist_t *op_lst;
+        if (! insn || ! insn->operands ) {
+        	return NULL;
+        }
+
+	for (op_lst = insn->operands; op_lst; op_lst = op_lst->next ) {
+		if ( op_lst->op.type == op_immediate ) {
+			return &(op_lst->op);
+		}
+	}
+	
+	return NULL;
+}
+
+#define IS_PROPER_IMM( x ) \
+	x->op.type == op_immediate && ! (x->op.flags & op_hardcode)
+							   
+
+/* if there is an immediate value in the instruction, return a pointer to
+ * it */
+unsigned char * x86_get_raw_imm( x86_insn_t *insn ) {
+        int size, offset;
+        x86_op_t *op  = NULL;
+
+        if (! insn || ! insn->operands ) {
+        	return(NULL);
+        }
+
+	/* a bit inelegant, but oh well... */
+	if ( IS_PROPER_IMM( insn->operands ) ) {
+		op = &insn->operands->op;
+	} else if ( insn->operands->next ) {
+		if ( IS_PROPER_IMM( insn->operands->next ) ) {
+			op = &insn->operands->next->op;
+		} else if ( insn->operands->next->next && 
+			    IS_PROPER_IMM( insn->operands->next->next ) ) {
+			op = &insn->operands->next->next->op;
+		}
+	}
+	
+	if (! op ) {
+		return( NULL );
+	}
+
+	/* immediate data is at the end of the insn */
+	size = x86_operand_size( op );
+	offset = insn->size - size;
+	return( &insn->bytes[offset] );
+}
+
+
+unsigned int x86_operand_size( x86_op_t *op ) {
+        switch (op->datatype ) {
+                case op_byte:    return 1;
+                case op_word:    return 2;
+                case op_dword:   return 4;
+                case op_qword:   return 8;
+                case op_dqword:  return 16;
+                case op_sreal:   return 4;
+                case op_dreal:   return 8;
+                case op_extreal: return 10;
+                case op_bcd:     return 10;
+                case op_ssimd:   return 16;
+                case op_dsimd:   return 16;
+                case op_sssimd:  return 4;
+                case op_sdsimd:  return 8;
+                case op_descr32: return 6;
+                case op_descr16: return 4;
+                case op_pdescr32: return 6;
+                case op_pdescr16: return 6;
+		case op_bounds16: return 4;
+		case op_bounds32: return 8;
+                case op_fpuenv16:  return 14;
+                case op_fpuenv32:  return 28;
+                case op_fpustate16:  return 94;
+                case op_fpustate32:  return 108;
+                case op_fpregset: return 512;
+		case op_fpreg: return 10;
+		case op_none: return 0;
+        }
+        return(4);      /* default size */
+}
+
+void x86_set_insn_addr( x86_insn_t *insn, uint32_t addr ) {
+        if ( insn ) insn->addr = addr;
+}
+
+void x86_set_insn_offset( x86_insn_t *insn, unsigned int offset ){
+        if ( insn ) insn->offset = offset;
+}
+
+void x86_set_insn_function( x86_insn_t *insn, void * func ){
+        if ( insn ) insn->function = func;
+}
+
+void x86_set_insn_block( x86_insn_t *insn, void * block ){
+        if ( insn ) insn->block = block;
+}
+
+void x86_tag_insn( x86_insn_t *insn ){
+        if ( insn ) insn->tag = 1;
+}
+
+void x86_untag_insn( x86_insn_t *insn ){
+        if ( insn ) insn->tag = 0;
+}
+
+int x86_insn_is_tagged( x86_insn_t *insn ){
+        return insn->tag;
+}
+
diff --git a/src/third_party/libdisasm/x86_misc.c b/src/third_party/libdisasm/x86_misc.c
new file mode 100644
index 0000000..3d2dd0a
--- /dev/null
+++ b/src/third_party/libdisasm/x86_misc.c
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libdis.h"
+#include "ia32_insn.h"
+#include "ia32_reg.h"		/* for ia32_reg wrapper */
+#include "ia32_settings.h"
+extern ia32_settings_t ia32_settings;
+
+#ifdef _MSC_VER
+        #define snprintf        _snprintf
+        #define inline          __inline
+#endif
+
+
+/* =========================================================== INIT/TERM */
+static DISASM_REPORTER __x86_reporter_func = NULL;
+static void * __x86_reporter_arg = NULL;
+
+int x86_init( enum x86_options options, DISASM_REPORTER reporter, void * arg )
+{
+        ia32_settings.options = options;
+        __x86_reporter_func = reporter;
+	__x86_reporter_arg = arg;
+
+        return 1;
+}
+
+void x86_set_reporter( DISASM_REPORTER reporter, void * arg ) {
+        __x86_reporter_func = reporter;
+	__x86_reporter_arg = arg;
+}
+
+void x86_set_options( enum x86_options options ){
+        ia32_settings.options = options;
+}
+
+enum x86_options x86_get_options( void ) {
+        return ia32_settings.options;
+}
+
+int x86_cleanup( void )
+{
+        return 1;
+}
+
+/* =========================================================== ERRORS */
+void x86_report_error( enum x86_report_codes code, void *data ) {
+        if ( __x86_reporter_func ) {
+                (*__x86_reporter_func)(code, data, __x86_reporter_arg);
+        }
+}
+
+
+/* =========================================================== MISC */
+unsigned int x86_endian(void)        { return ia32_settings.endian;  }
+unsigned int x86_addr_size(void)     { return ia32_settings.sz_addr; }
+unsigned int x86_op_size(void)       { return ia32_settings.sz_oper; }
+unsigned int x86_word_size(void)     { return ia32_settings.sz_word; }
+unsigned int x86_max_insn_size(void) { return ia32_settings.max_insn; }
+unsigned int x86_sp_reg(void)        { return ia32_settings.id_sp_reg;      }
+unsigned int x86_fp_reg(void)        { return ia32_settings.id_fp_reg;      }
+unsigned int x86_ip_reg(void)        { return ia32_settings.id_ip_reg;      }
+unsigned int x86_flag_reg(void)        { return ia32_settings.id_flag_reg;  }
+
+/* wrapper function to hide the IA32 register fn */
+void x86_reg_from_id( unsigned int id, x86_reg_t * reg ) {
+	ia32_handle_register( reg, id );
+	return;
+}
diff --git a/src/third_party/libdisasm/x86_operand_list.c b/src/third_party/libdisasm/x86_operand_list.c
new file mode 100644
index 0000000..95409e0
--- /dev/null
+++ b/src/third_party/libdisasm/x86_operand_list.c
@@ -0,0 +1,191 @@
+#include <stdlib.h>
+#include "libdis.h"
+
+
+static void x86_oplist_append( x86_insn_t *insn, x86_oplist_t *op ) {
+	x86_oplist_t *list;
+
+	if (! insn ) {	
+		return;
+	}
+
+	list = insn->operands;
+	if (! list ) {
+		insn->operand_count = 1;
+		/* Note that we have no way of knowing if this is an
+		 * exlicit operand or not, since the caller fills 
+		 * the x86_op_t after we return. We increase the
+		 * explicit count automatically, and ia32_insn_implicit_ops
+		 * decrements it */
+		insn->explicit_count = 1;
+		insn->operands = op;
+		return;
+	}
+
+	/* get to end of list */
+	for ( ; list->next; list = list->next ) 
+		;
+
+	insn->operand_count = insn->operand_count + 1;
+	insn->explicit_count = insn->explicit_count + 1;
+	list->next = op;
+
+	return;
+}
+	
+x86_op_t * x86_operand_new( x86_insn_t *insn ) {
+	x86_oplist_t *op;
+
+	if (! insn ) {	
+		return(NULL);
+	}
+	op = calloc( sizeof(x86_oplist_t), 1 );
+	op->op.insn = insn;
+	x86_oplist_append( insn, op );
+	return( &(op->op) );
+}
+
+void x86_oplist_free( x86_insn_t *insn ) {
+	x86_oplist_t *op, *list;
+
+	if (! insn ) {
+		return;
+	}
+
+	for ( list = insn->operands; list; ) {
+		op = list;
+		list = list->next;
+		free(op);
+	}
+
+	insn->operands = NULL;
+	insn->operand_count = 0;
+	insn->explicit_count = 0;
+
+	return;
+}
+
+/* ================================================== LIBDISASM API */
+/* these could probably just be #defines, but that means exposing the
+   enum... yet one more confusing thing in the API */
+int x86_operand_foreach( x86_insn_t *insn, x86_operand_fn func, void *arg, 
+	       		enum x86_op_foreach_type type ){
+	x86_oplist_t *list;
+	char explicit = 1, implicit = 1;
+
+	if (! insn || ! func ) {
+		return 0;
+	}
+	
+	/* note: explicit and implicit can be ORed together to
+	 * allow an "all" limited by access type, even though the
+	 * user is stupid to do this since it is default behavior :) */
+	if ( (type & op_explicit) && ! (type & op_implicit) ) {
+		implicit = 0;
+	}
+	if ( (type & op_implicit) && ! (type & op_explicit) ) {
+		explicit = 0;
+	}
+
+	type = type & 0x0F; /* mask out explicit/implicit operands */
+
+	for ( list = insn->operands; list; list = list->next ) {
+		if (! implicit && (list->op.flags & op_implied) ) {
+			/* operand is implicit */
+			continue;
+		}
+
+		if (! explicit && ! (list->op.flags & op_implied) ) {
+			/* operand is not implicit */
+			continue;
+		}
+
+		switch ( type ) {
+			case op_any:
+				break;
+			case op_dest:
+				if (! (list->op.access & op_write) ) {
+					continue;
+				}
+				break;
+			case op_src:
+				if (! (list->op.access & op_read) ) {
+					continue;
+				}
+				break;
+			case op_ro:
+				if (! (list->op.access & op_read) ||
+				      (list->op.access & op_write ) ) {
+					continue;
+				}
+				break;
+			case op_wo:
+				if (! (list->op.access & op_write) ||
+				      (list->op.access & op_read ) ) {
+					continue;
+				}
+				break;
+			case op_xo:
+				if (! (list->op.access & op_execute) ) {
+					continue;
+				}
+				break;
+			case op_rw:
+				if (! (list->op.access & op_write) ||
+				    ! (list->op.access & op_read ) ) {
+					continue;
+				}
+				break;
+			case op_implicit: case op_explicit: /* make gcc happy */
+					  break;
+		}
+		/* any non-continue ends up here: invoke the callback */
+		(*func)( &list->op, insn, arg );
+	}
+
+	return 1;
+}
+
+static void count_operand( x86_op_t *op, x86_insn_t *insn, void *arg ) {
+	size_t * count = (size_t *) arg;
+	*count = *count + 1;
+}
+
+size_t x86_operand_count( x86_insn_t *insn, enum x86_op_foreach_type type ) {
+	size_t count = 0;
+	
+	/* save us a list traversal for common counts... */
+	if ( type == op_any ) {
+		return insn->operand_count;
+	} else if ( type == op_explicit ) {
+		return insn->explicit_count;
+	}
+
+	x86_operand_foreach( insn, count_operand, &count, type );
+	return count;
+}
+
+/* accessor functions */
+x86_op_t * x86_operand_1st( x86_insn_t *insn ) {
+	if (! insn->explicit_count ) {
+		return NULL;
+	}
+
+	return &(insn->operands->op);
+}
+
+x86_op_t * x86_operand_2nd( x86_insn_t *insn ) {
+	if ( insn->explicit_count < 2 ) {
+		return NULL;
+	}
+
+	return &(insn->operands->next->op);
+}
+
+x86_op_t * x86_operand_3rd( x86_insn_t *insn ) {
+	if ( insn->explicit_count < 3 ) {
+		return NULL;
+	}
+
+	return &(insn->operands->next->next->op);
+}
diff --git a/src/third_party/libdisasm/x86_operand_list.h b/src/third_party/libdisasm/x86_operand_list.h
new file mode 100644
index 0000000..5366865
--- /dev/null
+++ b/src/third_party/libdisasm/x86_operand_list.h
@@ -0,0 +1,8 @@
+#ifndef X86_OPERAND_LIST_H
+#define X86_OPERAND_LIST_H
+#include "libdis.h"
+
+
+x86_op_t * x86_operand_new( x86_insn_t *insn );
+
+#endif
diff --git a/src/third_party/linux/include/glog/log_severity.h b/src/third_party/linux/include/glog/log_severity.h
deleted file mode 100644
index 17805fb..0000000
--- a/src/third_party/linux/include/glog/log_severity.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (c) 2007, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#ifndef BASE_LOG_SEVERITY_H__
-#define BASE_LOG_SEVERITY_H__
-
-// Annoying stuff for windows -- makes sure clients can import these functions
-#ifndef GOOGLE_GLOG_DLL_DECL
-# if defined(_WIN32) && !defined(__CYGWIN__)
-#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)
-# else
-#   define GOOGLE_GLOG_DLL_DECL
-# endif
-#endif
-
-// Variables of type LogSeverity are widely taken to lie in the range
-// [0, NUM_SEVERITIES-1].  Be careful to preserve this assumption if
-// you ever need to change their values or add a new severity.
-typedef int LogSeverity;
-
-const int INFO = 0, WARNING = 1, ERROR = 2, FATAL = 3, NUM_SEVERITIES = 4;
-
-// DFATAL is FATAL in debug mode, ERROR in normal mode
-#ifdef NDEBUG
-#define DFATAL_LEVEL ERROR
-#else
-#define DFATAL_LEVEL FATAL
-#endif
-
-extern GOOGLE_GLOG_DLL_DECL const char* const LogSeverityNames[NUM_SEVERITIES];
-
-// NDEBUG usage helpers related to (RAW_)DCHECK:
-//
-// DEBUG_MODE is for small !NDEBUG uses like
-//   if (DEBUG_MODE) foo.CheckThatFoo();
-// instead of substantially more verbose
-//   #ifndef NDEBUG
-//     foo.CheckThatFoo();
-//   #endif
-//
-// IF_DEBUG_MODE is for small !NDEBUG uses like
-//   IF_DEBUG_MODE( string error; )
-//   DCHECK(Foo(&error)) << error;
-// instead of substantially more verbose
-//   #ifndef NDEBUG
-//     string error;
-//     DCHECK(Foo(&error)) << error;
-//   #endif
-//
-#ifdef NDEBUG
-enum { DEBUG_MODE = 0 };
-#define IF_DEBUG_MODE(x)
-#else
-enum { DEBUG_MODE = 1 };
-#define IF_DEBUG_MODE(x) x
-#endif
-
-#endif  // BASE_LOG_SEVERITY_H__
diff --git a/src/third_party/linux/include/glog/logging.h b/src/third_party/linux/include/glog/logging.h
deleted file mode 100644
index 718c971..0000000
--- a/src/third_party/linux/include/glog/logging.h
+++ /dev/null
@@ -1,1499 +0,0 @@
-// Copyright (c) 1999, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Author: Ray Sidney
-//
-// This file contains #include information about logging-related stuff.
-// Pretty much everybody needs to #include this file so that they can
-// log various happenings.
-//
-#ifndef _LOGGING_H_
-#define _LOGGING_H_
-
-#include <errno.h>
-#include <string.h>
-#include <time.h>
-#include <string>
-#if 1
-# include <unistd.h>
-#endif
-#ifdef __DEPRECATED
-// Make GCC quiet.
-# undef __DEPRECATED
-# include <strstream>
-# define __DEPRECATED
-#else
-# include <strstream>
-#endif
-#include <vector>
-
-// Annoying stuff for windows -- makes sure clients can import these functions
-#ifndef GOOGLE_GLOG_DLL_DECL
-# if defined(_WIN32) && !defined(__CYGWIN__)
-#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)
-# else
-#   define GOOGLE_GLOG_DLL_DECL
-# endif
-#endif
-
-// We care a lot about number of bits things take up.  Unfortunately,
-// systems define their bit-specific ints in a lot of different ways.
-// We use our own way, and have a typedef to get there.
-// Note: these commands below may look like "#if 1" or "#if 0", but
-// that's because they were constructed that way at ./configure time.
-// Look at logging.h.in to see how they're calculated (based on your config).
-#if 1
-#include <stdint.h>             // the normal place uint16_t is defined
-#endif
-#if 1
-#include <sys/types.h>          // the normal place u_int16_t is defined
-#endif
-#if 1
-#include <inttypes.h>           // a third place for uint16_t or u_int16_t
-#endif
-
-#if 0
-#include <gflags/gflags.h>
-#endif
-
-namespace google {
-
-#if 1      // the C99 format
-typedef int32_t int32;
-typedef uint32_t uint32;
-typedef int64_t int64;
-typedef uint64_t uint64;
-#elif 1   // the BSD format
-typedef int32_t int32;
-typedef u_int32_t uint32;
-typedef int64_t int64;
-typedef u_int64_t uint64;
-#elif 0    // the windows (vc7) format
-typedef __int32 int32;
-typedef unsigned __int32 uint32;
-typedef __int64 int64;
-typedef unsigned __int64 uint64;
-#else
-#error Do not know how to define a 32-bit integer quantity on your system
-#endif
-
-}
-
-// The global value of GOOGLE_STRIP_LOG. All the messages logged to
-// LOG(XXX) with severity less than GOOGLE_STRIP_LOG will not be displayed.
-// If it can be determined at compile time that the message will not be
-// printed, the statement will be compiled out.
-//
-// Example: to strip out all INFO and WARNING messages, use the value
-// of 2 below. To make an exception for WARNING messages from a single
-// file, add "#define GOOGLE_STRIP_LOG 1" to that file _before_ including
-// base/logging.h
-#ifndef GOOGLE_STRIP_LOG
-#define GOOGLE_STRIP_LOG 0
-#endif
-
-// GCC can be told that a certain branch is not likely to be taken (for
-// instance, a CHECK failure), and use that information in static analysis.
-// Giving it this information can help it optimize for the common case in
-// the absence of better information (ie. -fprofile-arcs).
-//
-#ifndef GOOGLE_PREDICT_BRANCH_NOT_TAKEN
-#if 1
-#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) (__builtin_expect(x, 0))
-#else
-#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) x
-#endif
-#endif
-
-// Make a bunch of macros for logging.  The way to log things is to stream
-// things to LOG(<a particular severity level>).  E.g.,
-//
-//   LOG(INFO) << "Found " << num_cookies << " cookies";
-//
-// You can capture log messages in a string, rather than reporting them
-// immediately:
-//
-//   vector<string> errors;
-//   LOG_STRING(ERROR, &errors) << "Couldn't parse cookie #" << cookie_num;
-//
-// This pushes back the new error onto 'errors'; if given a NULL pointer,
-// it reports the error via LOG(ERROR).
-//
-// You can also do conditional logging:
-//
-//   LOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";
-//
-// You can also do occasional logging (log every n'th occurrence of an
-// event):
-//
-//   LOG_EVERY_N(INFO, 10) << "Got the " << COUNTER << "th cookie";
-//
-// The above will cause log messages to be output on the 1st, 11th, 21st, ...
-// times it is executed.  Note that the special COUNTER value is used to
-// identify which repetition is happening.
-//
-// You can also do occasional conditional logging (log every n'th
-// occurrence of an event, when condition is satisfied):
-//
-//   LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << COUNTER
-//                                           << "th big cookie";
-//
-// You can log messages the first N times your code executes a line. E.g.
-//
-//   LOG_FIRST_N(INFO, 20) << "Got the " << COUNTER << "th cookie";
-//
-// Outputs log messages for the first 20 times it is executed.
-//
-// Analogous SYSLOG, SYSLOG_IF, and SYSLOG_EVERY_N macros are available.
-// These log to syslog as well as to the normal logs.  If you use these at
-// all, you need to be aware that syslog can drastically reduce performance,
-// especially if it is configured for remote logging!  Don't use these
-// unless you fully understand this and have a concrete need to use them.
-// Even then, try to minimize your use of them.
-//
-// There are also "debug mode" logging macros like the ones above:
-//
-//   DLOG(INFO) << "Found cookies";
-//
-//   DLOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";
-//
-//   DLOG_EVERY_N(INFO, 10) << "Got the " << COUNTER << "th cookie";
-//
-// All "debug mode" logging is compiled away to nothing for non-debug mode
-// compiles.
-//
-// We also have
-//
-//   LOG_ASSERT(assertion);
-//   DLOG_ASSERT(assertion);
-//
-// which is syntactic sugar for {,D}LOG_IF(FATAL, assert fails) << assertion;
-//
-// There are "verbose level" logging macros.  They look like
-//
-//   VLOG(1) << "I'm printed when you run the program with --v=1 or more";
-//   VLOG(2) << "I'm printed when you run the program with --v=2 or more";
-//
-// These always log at the INFO log level (when they log at all).
-// The verbose logging can also be turned on module-by-module.  For instance,
-//    --vmodule=mapreduce=2,file=1,gfs*=3 --v=0
-// will cause:
-//   a. VLOG(2) and lower messages to be printed from mapreduce.{h,cc}
-//   b. VLOG(1) and lower messages to be printed from file.{h,cc}
-//   c. VLOG(3) and lower messages to be printed from files prefixed with "gfs"
-//   d. VLOG(0) and lower messages to be printed from elsewhere
-//
-// The wildcarding functionality shown by (c) supports both '*' (match
-// 0 or more characters) and '?' (match any single character) wildcards.
-//
-// There's also VLOG_IS_ON(n) "verbose level" condition macro. To be used as
-//
-//   if (VLOG_IS_ON(2)) {
-//     // do some logging preparation and logging
-//     // that can't be accomplished with just VLOG(2) << ...;
-//   }
-//
-// There are also VLOG_IF, VLOG_EVERY_N and VLOG_IF_EVERY_N "verbose level"
-// condition macros for sample cases, when some extra computation and
-// preparation for logs is not needed.
-//   VLOG_IF(1, (size > 1024))
-//      << "I'm printed when size is more than 1024 and when you run the "
-//         "program with --v=1 or more";
-//   VLOG_EVERY_N(1, 10)
-//      << "I'm printed every 10th occurrence, and when you run the program "
-//         "with --v=1 or more. Present occurence is " << COUNTER;
-//   VLOG_IF_EVERY_N(1, (size > 1024), 10)
-//      << "I'm printed on every 10th occurence of case when size is more "
-//         " than 1024, when you run the program with --v=1 or more. ";
-//         "Present occurence is " << COUNTER;
-//
-// The supported severity levels for macros that allow you to specify one
-// are (in increasing order of severity) INFO, WARNING, ERROR, and FATAL.
-// Note that messages of a given severity are logged not only in the
-// logfile for that severity, but also in all logfiles of lower severity.
-// E.g., a message of severity FATAL will be logged to the logfiles of
-// severity FATAL, ERROR, WARNING, and INFO.
-//
-// There is also the special severity of DFATAL, which logs FATAL in
-// debug mode, ERROR in normal mode.
-//
-// Very important: logging a message at the FATAL severity level causes
-// the program to terminate (after the message is logged).
-//
-// Unless otherwise specified, logs will be written to the filename
-// "<program name>.<hostname>.<user name>.log.<severity level>.", followed
-// by the date, time, and pid (you can't prevent the date, time, and pid
-// from being in the filename).
-//
-// The logging code takes two flags:
-//     --v=#           set the verbose level
-//     --logtostderr   log all the messages to stderr instead of to logfiles
-
-// LOG LINE PREFIX FORMAT
-//
-// Log lines have this form:
-//
-//     Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg...
-//
-// where the fields are defined as follows:
-//
-//   L                A single character, representing the log level
-//                    (eg 'I' for INFO)
-//   mm               The month (zero padded; ie May is '05')
-//   dd               The day (zero padded)
-//   hh:mm:ss.uuuuuu  Time in hours, minutes and fractional seconds
-//   threadid         The space-padded thread ID as returned by GetTID()
-//                    (this matches the PID on Linux)
-//   file             The file name
-//   line             The line number
-//   msg              The user-supplied message
-//
-// Example:
-//
-//   I1103 11:57:31.739339 24395 google.cc:2341] Command line: ./some_prog
-//   I1103 11:57:31.739403 24395 google.cc:2342] Process id 24395
-//
-// NOTE: although the microseconds are useful for comparing events on
-// a single machine, clocks on different machines may not be well
-// synchronized.  Hence, use caution when comparing the low bits of
-// timestamps from different machines.
-
-#ifndef DECLARE_VARIABLE
-#define MUST_UNDEF_GFLAGS_DECLARE_MACROS
-#define DECLARE_VARIABLE(type, name, tn)                                      \
-  namespace FLAG__namespace_do_not_use_directly_use_DECLARE_##tn##_instead {  \
-  extern GOOGLE_GLOG_DLL_DECL type FLAGS_##name;                              \
-  }                                                                           \
-  using FLAG__namespace_do_not_use_directly_use_DECLARE_##tn##_instead::FLAGS_##name
-
-// bool specialization
-#define DECLARE_bool(name) \
-  DECLARE_VARIABLE(bool, name, bool)
-
-// int32 specialization
-#define DECLARE_int32(name) \
-  DECLARE_VARIABLE(google::int32, name, int32)
-
-// Special case for string, because we have to specify the namespace
-// std::string, which doesn't play nicely with our FLAG__namespace hackery.
-#define DECLARE_string(name)                                          \
-  namespace FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead {  \
-  extern GOOGLE_GLOG_DLL_DECL std::string FLAGS_##name;                       \
-  }                                                                           \
-  using FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead::FLAGS_##name
-#endif
-
-// Set whether log messages go to stderr instead of logfiles
-DECLARE_bool(logtostderr);
-
-// Set whether log messages go to stderr in addition to logfiles.
-DECLARE_bool(alsologtostderr);
-
-// Log messages at a level >= this flag are automatically sent to
-// stderr in addition to log files.
-DECLARE_int32(stderrthreshold);
-
-// Set whether the log prefix should be prepended to each line of output.
-DECLARE_bool(log_prefix);
-
-// Log messages at a level <= this flag are buffered.
-// Log messages at a higher level are flushed immediately.
-DECLARE_int32(logbuflevel);
-
-// Sets the maximum number of seconds which logs may be buffered for.
-DECLARE_int32(logbufsecs);
-
-// Log suppression level: messages logged at a lower level than this
-// are suppressed.
-DECLARE_int32(minloglevel);
-
-// If specified, logfiles are written into this directory instead of the
-// default logging directory.
-DECLARE_string(log_dir);
-
-// Sets the path of the directory into which to put additional links
-// to the log files.
-DECLARE_string(log_link);
-
-DECLARE_int32(v);  // in vlog_is_on.cc
-
-// Sets the maximum log file size (in MB).
-DECLARE_int32(max_log_size);
-
-// Sets whether to avoid logging to the disk if the disk is full.
-DECLARE_bool(stop_logging_if_full_disk);
-
-#ifdef MUST_UNDEF_GFLAGS_DECLARE_MACROS
-#undef MUST_UNDEF_GFLAGS_DECLARE_MACROS
-#undef DECLARE_VARIABLE
-#undef DECLARE_bool
-#undef DECLARE_int32
-#undef DECLARE_string
-#endif
-
-// Log messages below the GOOGLE_STRIP_LOG level will be compiled away for
-// security reasons. See LOG(severtiy) below.
-
-// A few definitions of macros that don't generate much code.  Since
-// LOG(INFO) and its ilk are used all over our code, it's
-// better to have compact code for these operations.
-
-#if GOOGLE_STRIP_LOG == 0
-#define COMPACT_GOOGLE_LOG_INFO google::LogMessage( \
-      __FILE__, __LINE__)
-#define LOG_TO_STRING_INFO(message) google::LogMessage( \
-      __FILE__, __LINE__, google::INFO, message)
-#else
-#define COMPACT_GOOGLE_LOG_INFO google::NullStream()
-#define LOG_TO_STRING_INFO(message) google::NullStream()
-#endif
-
-#if GOOGLE_STRIP_LOG <= 1
-#define COMPACT_GOOGLE_LOG_WARNING google::LogMessage( \
-      __FILE__, __LINE__, google::WARNING)
-#define LOG_TO_STRING_WARNING(message) google::LogMessage( \
-      __FILE__, __LINE__, google::WARNING, message)
-#else
-#define COMPACT_GOOGLE_LOG_WARNING google::NullStream()
-#define LOG_TO_STRING_WARNING(message) google::NullStream()
-#endif
-
-#if GOOGLE_STRIP_LOG <= 2
-#define COMPACT_GOOGLE_LOG_ERROR google::LogMessage( \
-      __FILE__, __LINE__, google::ERROR)
-#define LOG_TO_STRING_ERROR(message) google::LogMessage( \
-      __FILE__, __LINE__, google::ERROR, message)
-#else
-#define COMPACT_GOOGLE_LOG_ERROR google::NullStream()
-#define LOG_TO_STRING_ERROR(message) google::NullStream()
-#endif
-
-#if GOOGLE_STRIP_LOG <= 3
-#define COMPACT_GOOGLE_LOG_FATAL google::LogMessageFatal( \
-      __FILE__, __LINE__)
-#define LOG_TO_STRING_FATAL(message) google::LogMessage( \
-      __FILE__, __LINE__, google::FATAL, message)
-#else
-#define COMPACT_GOOGLE_LOG_FATAL google::NullStreamFatal()
-#define LOG_TO_STRING_FATAL(message) google::NullStreamFatal()
-#endif
-
-// For DFATAL, we want to use LogMessage (as opposed to
-// LogMessageFatal), to be consistent with the original behavior.
-#ifdef NDEBUG
-#define COMPACT_GOOGLE_LOG_DFATAL COMPACT_GOOGLE_LOG_ERROR
-#elif GOOGLE_STRIP_LOG <= 3
-#define COMPACT_GOOGLE_LOG_DFATAL LogMessage( \
-      __FILE__, __LINE__, google::FATAL)
-#else
-#define COMPACT_GOOGLE_LOG_DFATAL google::NullStreamFatal()
-#endif
-
-#define GOOGLE_LOG_INFO(counter) google::LogMessage(__FILE__, __LINE__, google::INFO, counter, &google::LogMessage::SendToLog)
-#define SYSLOG_INFO(counter) \
-  google::LogMessage(__FILE__, __LINE__, google::INFO, counter, \
-  &google::LogMessage::SendToSyslogAndLog)
-#define GOOGLE_LOG_WARNING(counter)  \
-  google::LogMessage(__FILE__, __LINE__, google::WARNING, counter, \
-  &google::LogMessage::SendToLog)
-#define SYSLOG_WARNING(counter)  \
-  google::LogMessage(__FILE__, __LINE__, google::WARNING, counter, \
-  &google::LogMessage::SendToSyslogAndLog)
-#define GOOGLE_LOG_ERROR(counter)  \
-  google::LogMessage(__FILE__, __LINE__, google::ERROR, counter, \
-  &google::LogMessage::SendToLog)
-#define SYSLOG_ERROR(counter)  \
-  google::LogMessage(__FILE__, __LINE__, google::ERROR, counter, \
-  &google::LogMessage::SendToSyslogAndLog)
-#define GOOGLE_LOG_FATAL(counter) \
-  google::LogMessage(__FILE__, __LINE__, google::FATAL, counter, \
-  &google::LogMessage::SendToLog)
-#define SYSLOG_FATAL(counter) \
-  google::LogMessage(__FILE__, __LINE__, google::FATAL, counter, \
-  &google::LogMessage::SendToSyslogAndLog)
-#define GOOGLE_LOG_DFATAL(counter) \
-  google::LogMessage(__FILE__, __LINE__, google::DFATAL_LEVEL, counter, \
-  &google::LogMessage::SendToLog)
-#define SYSLOG_DFATAL(counter) \
-  google::LogMessage(__FILE__, __LINE__, google::DFATAL_LEVEL, counter, \
-  &google::LogMessage::SendToSyslogAndLog)
-
-#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) || defined(__CYGWIN32__)
-// A very useful logging macro to log windows errors:
-#define LOG_SYSRESULT(result) \
-  if (FAILED(result)) { \
-    LPTSTR message = NULL; \
-    LPTSTR msg = reinterpret_cast<LPTSTR>(&message); \
-    DWORD message_length = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | \
-                         FORMAT_MESSAGE_FROM_SYSTEM, \
-                         0, result, 0, msg, 100, NULL); \
-    if (message_length > 0) { \
-      google::LogMessage(__FILE__, __LINE__, ERROR, 0, \
-          &google::LogMessage::SendToLog).stream() << message; \
-      LocalFree(message); \
-    } \
-  }
-#endif
-
-// We use the preprocessor's merging operator, "##", so that, e.g.,
-// LOG(INFO) becomes the token GOOGLE_LOG_INFO.  There's some funny
-// subtle difference between ostream member streaming functions (e.g.,
-// ostream::operator<<(int) and ostream non-member streaming functions
-// (e.g., ::operator<<(ostream&, string&): it turns out that it's
-// impossible to stream something like a string directly to an unnamed
-// ostream. We employ a neat hack by calling the stream() member
-// function of LogMessage which seems to avoid the problem.
-#define LOG(severity) COMPACT_GOOGLE_LOG_ ## severity.stream()
-#define SYSLOG(severity) SYSLOG_ ## severity(0).stream()
-
-namespace google {
-
-// They need the definitions of integer types.
-#include "glog/log_severity.h"
-#include "glog/vlog_is_on.h"
-
-// Initialize google's logging library. You will see the program name
-// specified by argv0 in log outputs.
-GOOGLE_GLOG_DLL_DECL void InitGoogleLogging(const char* argv0);
-
-// Install a function which will be called after LOG(FATAL).
-GOOGLE_GLOG_DLL_DECL void InstallFailureFunction(void (*fail_func)());
-
-class LogSink;  // defined below
-
-// If a non-NULL sink pointer is given, we push this message to that sink.
-// For LOG_TO_SINK we then do normal LOG(severity) logging as well.
-// This is useful for capturing messages and passing/storing them
-// somewhere more specific than the global log of the process.
-// Argument types:
-//   LogSink* sink;
-//   LogSeverity severity;
-// The cast is to disambiguate NULL arguments.
-#define LOG_TO_SINK(sink, severity) \
-  google::LogMessage(                                    \
-      __FILE__, __LINE__,                                               \
-      google::severity,                                  \
-      static_cast<google::LogSink*>(sink), true).stream()
-#define LOG_TO_SINK_BUT_NOT_TO_LOGFILE(sink, severity)                  \
-  google::LogMessage(                                    \
-      __FILE__, __LINE__,                                               \
-      google::severity,                                  \
-      static_cast<google::LogSink*>(sink), false).stream()
-
-// If a non-NULL string pointer is given, we write this message to that string.
-// We then do normal LOG(severity) logging as well.
-// This is useful for capturing messages and storing them somewhere more
-// specific than the global log of the process.
-// Argument types:
-//   string* message;
-//   LogSeverity severity;
-// The cast is to disambiguate NULL arguments.
-// NOTE: LOG(severity) expands to LogMessage().stream() for the specified
-// severity.
-#define LOG_TO_STRING(severity, message) \
-  LOG_TO_STRING_##severity(static_cast<string*>(message)).stream()
-
-// If a non-NULL pointer is given, we push the message onto the end
-// of a vector of strings; otherwise, we report it with LOG(severity).
-// This is handy for capturing messages and perhaps passing them back
-// to the caller, rather than reporting them immediately.
-// Argument types:
-//   LogSeverity severity;
-//   vector<string> *outvec;
-// The cast is to disambiguate NULL arguments.
-#define LOG_STRING(severity, outvec) \
-  LOG_TO_STRING_##severity(static_cast<vector<string>*>(outvec)).stream()
-
-#define LOG_IF(severity, condition) \
-  !(condition) ? (void) 0 : google::LogMessageVoidify() & LOG(severity)
-#define SYSLOG_IF(severity, condition) \
-  !(condition) ? (void) 0 : google::LogMessageVoidify() & SYSLOG(severity)
-
-#define LOG_ASSERT(condition)  \
-  LOG_IF(FATAL, !(condition)) << "Assert failed: " #condition
-#define SYSLOG_ASSERT(condition) \
-  SYSLOG_IF(FATAL, !(condition)) << "Assert failed: " #condition
-
-// CHECK dies with a fatal error if condition is not true.  It is *not*
-// controlled by NDEBUG, so the check will be executed regardless of
-// compilation mode.  Therefore, it is safe to do things like:
-//    CHECK(fp->Write(x) == 4)
-#define CHECK(condition)  \
-      LOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \
-             << "Check failed: " #condition " "
-
-// A container for a string pointer which can be evaluated to a bool -
-// true iff the pointer is NULL.
-struct CheckOpString {
-  CheckOpString(std::string* str) : str_(str) { }
-  // No destructor: if str_ is non-NULL, we're about to LOG(FATAL),
-  // so there's no point in cleaning up str_.
-  operator bool() const {
-    return GOOGLE_PREDICT_BRANCH_NOT_TAKEN(str_ != NULL);
-  }
-  std::string* str_;
-};
-
-// Function is overloaded for integral types to allow static const
-// integrals declared in classes and not defined to be used as arguments to
-// CHECK* macros. It's not encouraged though.
-template <class T>
-inline const T&       GetReferenceableValue(const T&           t) { return t; }
-inline char           GetReferenceableValue(char               t) { return t; }
-inline unsigned char  GetReferenceableValue(unsigned char      t) { return t; }
-inline signed char    GetReferenceableValue(signed char        t) { return t; }
-inline short          GetReferenceableValue(short              t) { return t; }
-inline unsigned short GetReferenceableValue(unsigned short     t) { return t; }
-inline int            GetReferenceableValue(int                t) { return t; }
-inline unsigned int   GetReferenceableValue(unsigned int       t) { return t; }
-inline long           GetReferenceableValue(long               t) { return t; }
-inline unsigned long  GetReferenceableValue(unsigned long      t) { return t; }
-inline long long      GetReferenceableValue(long long          t) { return t; }
-inline unsigned long long GetReferenceableValue(unsigned long long t) {
-  return t;
-}
-
-// This is a dummy class to define the following operator.
-struct DummyClassToDefineOperator {};
-
-}
-
-// Define global operator<< to declare using ::operator<<.
-// This declaration will allow use to use CHECK macros for user
-// defined classes which have operator<< (e.g., stl_logging.h).
-inline std::ostream& operator<<(
-    std::ostream& out, const google::DummyClassToDefineOperator&) {
-  return out;
-}
-
-namespace google {
-
-// Build the error message string.
-template<class t1, class t2>
-std::string* MakeCheckOpString(const t1& v1, const t2& v2, const char* names) {
-  // It means that we cannot use stl_logging if compiler doesn't
-  // support using expression for operator.
-  // TODO(hamaji): Figure out a way to fix.
-#if 1
-  using ::operator<<;
-#endif
-  std::strstream ss;
-  ss << names << " (" << v1 << " vs. " << v2 << ")";
-  return new std::string(ss.str(), ss.pcount());
-}
-
-// Helper functions for CHECK_OP macro.
-// The (int, int) specialization works around the issue that the compiler
-// will not instantiate the template version of the function on values of
-// unnamed enum type - see comment below.
-#define DEFINE_CHECK_OP_IMPL(name, op) \
-  template <class t1, class t2> \
-  inline std::string* Check##name##Impl(const t1& v1, const t2& v2, \
-                                        const char* names) { \
-    if (v1 op v2) return NULL; \
-    else return MakeCheckOpString(v1, v2, names); \
-  } \
-  inline std::string* Check##name##Impl(int v1, int v2, const char* names) { \
-    return Check##name##Impl<int, int>(v1, v2, names); \
-  }
-
-// Use _EQ, _NE, _LE, etc. in case the file including base/logging.h
-// provides its own #defines for the simpler names EQ, NE, LE, etc.
-// This happens if, for example, those are used as token names in a
-// yacc grammar.
-DEFINE_CHECK_OP_IMPL(_EQ, ==)
-DEFINE_CHECK_OP_IMPL(_NE, !=)
-DEFINE_CHECK_OP_IMPL(_LE, <=)
-DEFINE_CHECK_OP_IMPL(_LT, < )
-DEFINE_CHECK_OP_IMPL(_GE, >=)
-DEFINE_CHECK_OP_IMPL(_GT, > )
-#undef DEFINE_CHECK_OP_IMPL
-
-// Helper macro for binary operators.
-// Don't use this macro directly in your code, use CHECK_EQ et al below.
-
-#if defined(STATIC_ANALYSIS)
-// Only for static analysis tool to know that it is equivalent to assert
-#define CHECK_OP_LOG(name, op, val1, val2, log) CHECK((val1) op (val2))
-#elif !defined(NDEBUG)
-// In debug mode, avoid constructing CheckOpStrings if possible,
-// to reduce the overhead of CHECK statments by 2x.
-// Real DCHECK-heavy tests have seen 1.5x speedups.
-
-// The meaning of "string" might be different between now and 
-// when this macro gets invoked (e.g., if someone is experimenting
-// with other string implementations that get defined after this
-// file is included).  Save the current meaning now and use it 
-// in the macro.
-typedef std::string _Check_string;
-#define CHECK_OP_LOG(name, op, val1, val2, log) \
-  while (google::_Check_string* _result =                \
-         google::Check##name##Impl(                      \
-             google::GetReferenceableValue(val1),        \
-             google::GetReferenceableValue(val2),        \
-             #val1 " " #op " " #val2))                                  \
-    log(__FILE__, __LINE__,                                             \
-        google::CheckOpString(_result)).stream()
-#else
-// In optimized mode, use CheckOpString to hint to compiler that
-// the while condition is unlikely.
-#define CHECK_OP_LOG(name, op, val1, val2, log) \
-  while (google::CheckOpString _result = \
-         google::Check##name##Impl(GetReferenceableValue(val1), \
-                           GetReferenceableValue(val2), \
-                           #val1 " " #op " " #val2)) \
-    log(__FILE__, __LINE__, _result).stream()
-#endif  // STATIC_ANALYSIS, !NDEBUG
-
-#if GOOGLE_STRIP_LOG <= 3
-#define CHECK_OP(name, op, val1, val2) \
-  CHECK_OP_LOG(name, op, val1, val2, google::LogMessageFatal)
-#else
-#define CHECK_OP(name, op, val1, val2) \
-  CHECK_OP_LOG(name, op, val1, val2, google::NullStreamFatal)
-#endif // STRIP_LOG <= 3
-
-// Equality/Inequality checks - compare two values, and log a FATAL message
-// including the two values when the result is not as expected.  The values
-// must have operator<<(ostream, ...) defined.
-//
-// You may append to the error message like so:
-//   CHECK_NE(1, 2) << ": The world must be ending!";
-//
-// We are very careful to ensure that each argument is evaluated exactly
-// once, and that anything which is legal to pass as a function argument is
-// legal here.  In particular, the arguments may be temporary expressions
-// which will end up being destroyed at the end of the apparent statement,
-// for example:
-//   CHECK_EQ(string("abc")[1], 'b');
-//
-// WARNING: These don't compile correctly if one of the arguments is a pointer
-// and the other is NULL. To work around this, simply static_cast NULL to the
-// type of the desired pointer.
-
-#define CHECK_EQ(val1, val2) CHECK_OP(_EQ, ==, val1, val2)
-#define CHECK_NE(val1, val2) CHECK_OP(_NE, !=, val1, val2)
-#define CHECK_LE(val1, val2) CHECK_OP(_LE, <=, val1, val2)
-#define CHECK_LT(val1, val2) CHECK_OP(_LT, < , val1, val2)
-#define CHECK_GE(val1, val2) CHECK_OP(_GE, >=, val1, val2)
-#define CHECK_GT(val1, val2) CHECK_OP(_GT, > , val1, val2)
-
-// Check that the input is non NULL.  This very useful in constructor
-// initializer lists.
-
-#define CHECK_NOTNULL(val) \
-  google::CheckNotNull(__FILE__, __LINE__, "'" #val "' Must be non NULL", (val))
-
-// Helper functions for string comparisons.
-// To avoid bloat, the definitions are in logging.cc.
-#define DECLARE_CHECK_STROP_IMPL(func, expected) \
-  GOOGLE_GLOG_DLL_DECL std::string* Check##func##expected##Impl( \
-      const char* s1, const char* s2, const char* names);
-DECLARE_CHECK_STROP_IMPL(strcmp, true)
-DECLARE_CHECK_STROP_IMPL(strcmp, false)
-DECLARE_CHECK_STROP_IMPL(strcasecmp, true)
-DECLARE_CHECK_STROP_IMPL(strcasecmp, false)
-#undef DECLARE_CHECK_STROP_IMPL
-
-// Helper macro for string comparisons.
-// Don't use this macro directly in your code, use CHECK_STREQ et al below.
-#define CHECK_STROP(func, op, expected, s1, s2) \
-  while (google::CheckOpString _result = \
-         google::Check##func##expected##Impl((s1), (s2), \
-                                     #s1 " " #op " " #s2)) \
-    LOG(FATAL) << *_result.str_
-
-
-// String (char*) equality/inequality checks.
-// CASE versions are case-insensitive.
-//
-// Note that "s1" and "s2" may be temporary strings which are destroyed
-// by the compiler at the end of the current "full expression"
-// (e.g. CHECK_STREQ(Foo().c_str(), Bar().c_str())).
-
-#define CHECK_STREQ(s1, s2) CHECK_STROP(strcmp, ==, true, s1, s2)
-#define CHECK_STRNE(s1, s2) CHECK_STROP(strcmp, !=, false, s1, s2)
-#define CHECK_STRCASEEQ(s1, s2) CHECK_STROP(strcasecmp, ==, true, s1, s2)
-#define CHECK_STRCASENE(s1, s2) CHECK_STROP(strcasecmp, !=, false, s1, s2)
-
-#define CHECK_INDEX(I,A) CHECK(I < (sizeof(A)/sizeof(A[0])))
-#define CHECK_BOUND(B,A) CHECK(B <= (sizeof(A)/sizeof(A[0])))
-
-#define CHECK_DOUBLE_EQ(val1, val2)              \
-  do {                                           \
-    CHECK_LE((val1), (val2)+0.000000000000001L); \
-    CHECK_GE((val1), (val2)-0.000000000000001L); \
-  } while (0)
-
-#define CHECK_NEAR(val1, val2, margin)           \
-  do {                                           \
-    CHECK_LE((val1), (val2)+(margin));           \
-    CHECK_GE((val1), (val2)-(margin));           \
-  } while (0)
-
-// perror()..googly style!
-//
-// PLOG() and PLOG_IF() and PCHECK() behave exactly like their LOG* and
-// CHECK equivalents with the addition that they postpend a description
-// of the current state of errno to their output lines.
-
-#define PLOG(severity) GOOGLE_PLOG(severity, 0).stream()
-
-#define GOOGLE_PLOG(severity, counter)  \
-  google::ErrnoLogMessage( \
-      __FILE__, __LINE__, google::severity, counter, \
-      &google::LogMessage::SendToLog)
-
-#define PLOG_IF(severity, condition) \
-  !(condition) ? (void) 0 : google::LogMessageVoidify() & PLOG(severity)
-
-// A CHECK() macro that postpends errno if the condition is false. E.g.
-//
-// if (poll(fds, nfds, timeout) == -1) { PCHECK(errno == EINTR); ... }
-#define PCHECK(condition)  \
-      PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \
-              << "Check failed: " #condition " "
-
-// A CHECK() macro that lets you assert the success of a function that
-// returns -1 and sets errno in case of an error. E.g.
-//
-// CHECK_ERR(mkdir(path, 0700));
-//
-// or
-//
-// int fd = open(filename, flags); CHECK_ERR(fd) << ": open " << filename;
-#define CHECK_ERR(invocation)                                          \
-PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN((invocation) == -1))    \
-        << #invocation
-
-// Use macro expansion to create, for each use of LOG_EVERY_N(), static
-// variables with the __LINE__ expansion as part of the variable name.
-#define LOG_EVERY_N_VARNAME(base, line) LOG_EVERY_N_VARNAME_CONCAT(base, line)
-#define LOG_EVERY_N_VARNAME_CONCAT(base, line) base ## line
-
-#define LOG_OCCURRENCES LOG_EVERY_N_VARNAME(occurrences_, __LINE__)
-#define LOG_OCCURRENCES_MOD_N LOG_EVERY_N_VARNAME(occurrences_mod_n_, __LINE__)
-
-#define SOME_KIND_OF_LOG_EVERY_N(severity, n, what_to_do) \
-  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
-  ++LOG_OCCURRENCES; \
-  if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \
-  if (LOG_OCCURRENCES_MOD_N == 1) \
-    google::LogMessage( \
-        __FILE__, __LINE__, google::severity, LOG_OCCURRENCES, \
-        &what_to_do).stream()
-
-#define SOME_KIND_OF_LOG_IF_EVERY_N(severity, condition, n, what_to_do) \
-  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
-  ++LOG_OCCURRENCES; \
-  if (condition && \
-      ((LOG_OCCURRENCES_MOD_N=(LOG_OCCURRENCES_MOD_N + 1) % n) == (1 % n))) \
-    google::LogMessage( \
-        __FILE__, __LINE__, google::severity, LOG_OCCURRENCES, \
-                 &what_to_do).stream()
-
-#define SOME_KIND_OF_PLOG_EVERY_N(severity, n, what_to_do) \
-  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
-  ++LOG_OCCURRENCES; \
-  if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \
-  if (LOG_OCCURRENCES_MOD_N == 1) \
-    google::ErrnoLogMessage( \
-        __FILE__, __LINE__, google::severity, LOG_OCCURRENCES, \
-        &what_to_do).stream()
-
-#define SOME_KIND_OF_LOG_FIRST_N(severity, n, what_to_do) \
-  static int LOG_OCCURRENCES = 0; \
-  if (LOG_OCCURRENCES <= n) \
-    ++LOG_OCCURRENCES; \
-  if (LOG_OCCURRENCES <= n) \
-    google::LogMessage( \
-        __FILE__, __LINE__, google::severity, LOG_OCCURRENCES, \
-        &what_to_do).stream()
-
-namespace glog_internal_namespace_ {
-template <bool>
-struct CompileAssert {
-};
-struct CrashReason;
-}  // namespace glog_internal_namespace_
-
-#define GOOGLE_GLOG_COMPILE_ASSERT(expr, msg) \
-  typedef google::glog_internal_namespace_::CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
-
-#define LOG_EVERY_N(severity, n)                                        \
-  GOOGLE_GLOG_COMPILE_ASSERT(google::severity <          \
-                             google::NUM_SEVERITIES,     \
-                             INVALID_REQUESTED_LOG_SEVERITY);           \
-  SOME_KIND_OF_LOG_EVERY_N(severity, (n), google::LogMessage::SendToLog)
-
-#define SYSLOG_EVERY_N(severity, n) \
-  SOME_KIND_OF_LOG_EVERY_N(severity, (n), google::LogMessage::SendToSyslogAndLog)
-
-#define PLOG_EVERY_N(severity, n) \
-  SOME_KIND_OF_PLOG_EVERY_N(severity, (n), google::LogMessage::SendToLog)
-
-#define LOG_FIRST_N(severity, n) \
-  SOME_KIND_OF_LOG_FIRST_N(severity, (n), google::LogMessage::SendToLog)
-
-#define LOG_IF_EVERY_N(severity, condition, n) \
-  SOME_KIND_OF_LOG_IF_EVERY_N(severity, (condition), (n), google::LogMessage::SendToLog)
-
-// We want the special COUNTER value available for LOG_EVERY_X()'ed messages
-enum PRIVATE_Counter {COUNTER};
-
-
-// Plus some debug-logging macros that get compiled to nothing for production
-
-#ifndef NDEBUG
-
-#define DLOG(severity) LOG(severity)
-#define DVLOG(verboselevel) VLOG(verboselevel)
-#define DLOG_IF(severity, condition) LOG_IF(severity, condition)
-#define DLOG_EVERY_N(severity, n) LOG_EVERY_N(severity, n)
-#define DLOG_IF_EVERY_N(severity, condition, n) \
-  LOG_IF_EVERY_N(severity, condition, n)
-#define DLOG_ASSERT(condition) LOG_ASSERT(condition)
-
-// debug-only checking.  not executed in NDEBUG mode.
-#define DCHECK(condition) CHECK(condition)
-#define DCHECK_EQ(val1, val2) CHECK_EQ(val1, val2)
-#define DCHECK_NE(val1, val2) CHECK_NE(val1, val2)
-#define DCHECK_LE(val1, val2) CHECK_LE(val1, val2)
-#define DCHECK_LT(val1, val2) CHECK_LT(val1, val2)
-#define DCHECK_GE(val1, val2) CHECK_GE(val1, val2)
-#define DCHECK_GT(val1, val2) CHECK_GT(val1, val2)
-#define DCHECK_STREQ(str1, str2) CHECK_STREQ(str1, str2)
-#define DCHECK_STRCASEEQ(str1, str2) CHECK_STRCASEEQ(str1, str2)
-#define DCHECK_STRNE(str1, str2) CHECK_STRNE(str1, str2)
-#define DCHECK_STRCASENE(str1, str2) CHECK_STRCASENE(str1, str2)
-
-#else  // NDEBUG
-
-#define DLOG(severity) \
-  true ? (void) 0 : google::LogMessageVoidify() & LOG(severity)
-
-#define DVLOG(verboselevel) \
-  (true || !VLOG_IS_ON(verboselevel)) ?\
-    (void) 0 : google::LogMessageVoidify() & LOG(INFO)
-
-#define DLOG_IF(severity, condition) \
-  (true || !(condition)) ? (void) 0 : google::LogMessageVoidify() & LOG(severity)
-
-#define DLOG_EVERY_N(severity, n) \
-  true ? (void) 0 : google::LogMessageVoidify() & LOG(severity)
-
-#define DLOG_IF_EVERY_N(severity, condition, n) \
-  (true || !(condition))? (void) 0 : google::LogMessageVoidify() & LOG(severity)
-
-#define DLOG_ASSERT(condition) \
-  true ? (void) 0 : LOG_ASSERT(condition)
-
-#define DCHECK(condition) \
-  while (false) \
-    CHECK(condition)
-
-#define DCHECK_EQ(val1, val2) \
-  while (false) \
-    CHECK_EQ(val1, val2)
-
-#define DCHECK_NE(val1, val2) \
-  while (false) \
-    CHECK_NE(val1, val2)
-
-#define DCHECK_LE(val1, val2) \
-  while (false) \
-    CHECK_LE(val1, val2)
-
-#define DCHECK_LT(val1, val2) \
-  while (false) \
-    CHECK_LT(val1, val2)
-
-#define DCHECK_GE(val1, val2) \
-  while (false) \
-    CHECK_GE(val1, val2)
-
-#define DCHECK_GT(val1, val2) \
-  while (false) \
-    CHECK_GT(val1, val2)
-
-#define DCHECK_STREQ(str1, str2) \
-  while (false) \
-    CHECK_STREQ(str1, str2)
-
-#define DCHECK_STRCASEEQ(str1, str2) \
-  while (false) \
-    CHECK_STRCASEEQ(str1, str2)
-
-#define DCHECK_STRNE(str1, str2) \
-  while (false) \
-    CHECK_STRNE(str1, str2)
-
-#define DCHECK_STRCASENE(str1, str2) \
-  while (false) \
-    CHECK_STRCASENE(str1, str2)
-
-
-#endif  // NDEBUG
-
-// Log only in verbose mode.
-
-#define VLOG(verboselevel) LOG_IF(INFO, VLOG_IS_ON(verboselevel))
-
-#define VLOG_IF(verboselevel, condition) \
-  LOG_IF(INFO, (condition) && VLOG_IS_ON(verboselevel))
-
-#define VLOG_EVERY_N(verboselevel, n) \
-  LOG_IF_EVERY_N(INFO, VLOG_IS_ON(verboselevel), n)
-
-#define VLOG_IF_EVERY_N(verboselevel, condition, n) \
-  LOG_IF_EVERY_N(INFO, (condition) && VLOG_IS_ON(verboselevel), n)
-
-//
-// This class more or less represents a particular log message.  You
-// create an instance of LogMessage and then stream stuff to it.
-// When you finish streaming to it, ~LogMessage is called and the
-// full message gets streamed to the appropriate destination.
-//
-// You shouldn't actually use LogMessage's constructor to log things,
-// though.  You should use the LOG() macro (and variants thereof)
-// above.
-class GOOGLE_GLOG_DLL_DECL LogMessage {
-public:
-  enum {
-    // Passing kNoLogPrefix for the line number disables the
-    // log-message prefix. Useful for using the LogMessage
-    // infrastructure as a printing utility. See also the --log_prefix
-    // flag for controlling the log-message prefix on an
-    // application-wide basis.
-    kNoLogPrefix = -1
-  };
-
-  // LogStream inherit from non-DLL-exported class (std::ostrstream)
-  // and VC++ produces a warning for this situation.
-  // However, MSDN says "C4275 can be ignored in Microsoft Visual C++
-  // 2005 if you are deriving from a type in the Standard C++ Library"
-  // http://msdn.microsoft.com/en-us/library/3tdb471s(VS.80).aspx
-  // Let's just ignore the warning.
-#ifdef _MSC_VER
-# pragma warning(disable: 4275)
-#endif
-  class GOOGLE_GLOG_DLL_DECL LogStream : public std::ostrstream {
-#ifdef _MSC_VER
-# pragma warning(default: 4275)
-#endif
-  public:
-    LogStream(char *buf, int len, int ctr)
-      : ostrstream(buf, len),
-        ctr_(ctr) {
-      self_ = this;
-    }
-
-    int ctr() const { return ctr_; }
-    void set_ctr(int ctr) { ctr_ = ctr; }
-    LogStream* self() const { return self_; }
-
-  private:
-    int ctr_;  // Counter hack (for the LOG_EVERY_X() macro)
-    LogStream *self_;  // Consistency check hack
-  };
-
-public:
-  // icc 8 requires this typedef to avoid an internal compiler error.
-  typedef void (LogMessage::*SendMethod)();
-
-  LogMessage(const char* file, int line, LogSeverity severity, int ctr,
-             SendMethod send_method);
-
-  // Two special constructors that generate reduced amounts of code at
-  // LOG call sites for common cases.
-
-  // Used for LOG(INFO): Implied are:
-  // severity = INFO, ctr = 0, send_method = &LogMessage::SendToLog.
-  //
-  // Using this constructor instead of the more complex constructor above
-  // saves 19 bytes per call site.
-  LogMessage(const char* file, int line);
-
-  // Used for LOG(severity) where severity != INFO.  Implied
-  // are: ctr = 0, send_method = &LogMessage::SendToLog
-  //
-  // Using this constructor instead of the more complex constructor above
-  // saves 17 bytes per call site.
-  LogMessage(const char* file, int line, LogSeverity severity);
-
-  // Constructor to log this message to a specified sink (if not NULL).
-  // Implied are: ctr = 0, send_method = &LogMessage::SendToSinkAndLog if
-  // also_send_to_log is true, send_method = &LogMessage::SendToSink otherwise.
-  LogMessage(const char* file, int line, LogSeverity severity, LogSink* sink,
-             bool also_send_to_log);
-
-  // Constructor where we also give a vector<string> pointer
-  // for storing the messages (if the pointer is not NULL).
-  // Implied are: ctr = 0, send_method = &LogMessage::SaveOrSendToLog.
-  LogMessage(const char* file, int line, LogSeverity severity,
-             std::vector<std::string>* outvec);
-
-  // Constructor where we also give a string pointer for storing the
-  // message (if the pointer is not NULL).  Implied are: ctr = 0,
-  // send_method = &LogMessage::WriteToStringAndLog.
-  LogMessage(const char* file, int line, LogSeverity severity,
-             std::string* message);
-
-  // A special constructor used for check failures
-  LogMessage(const char* file, int line, const CheckOpString& result);
-
-  ~LogMessage();
-
-  // Flush a buffered message to the sink set in the constructor.  Always
-  // called by the destructor, it may also be called from elsewhere if
-  // needed.  Only the first call is actioned; any later ones are ignored.
-  void Flush();
-
-  // An arbitrary limit on the length of a single log message.  This
-  // is so that streaming can be done more efficiently.
-  static const size_t kMaxLogMessageLen;
-
-  // Theses should not be called directly outside of logging.*,
-  // only passed as SendMethod arguments to other LogMessage methods:
-  void SendToLog();  // Actually dispatch to the logs
-  void SendToSyslogAndLog();  // Actually dispatch to syslog and the logs
-
-  // Call abort() or similar to perform LOG(FATAL) crash.
-  static void Fail() __attribute__ ((noreturn));
-
-  std::ostream& stream() { return *(data_->stream_); }
-
-  int preserved_errno() const { return data_->preserved_errno_; }
-
-  // Must be called without the log_mutex held.  (L < log_mutex)
-  static int64 num_messages(int severity);
-
-private:
-  // Fully internal SendMethod cases:
-  void SendToSinkAndLog();  // Send to sink if provided and dispatch to the logs
-  void SendToSink();  // Send to sink if provided, do nothing otherwise.
-
-  // Write to string if provided and dispatch to the logs.
-  void WriteToStringAndLog();
-
-  void SaveOrSendToLog();  // Save to stringvec if provided, else to logs
-
-  void Init(const char* file, int line, LogSeverity severity,
-            void (LogMessage::*send_method)());
-
-  // Used to fill in crash information during LOG(FATAL) failures.
-  void RecordCrashReason(glog_internal_namespace_::CrashReason* reason);
-
-  // Counts of messages sent at each priority:
-  static int64 num_messages_[NUM_SEVERITIES];  // under log_mutex
-
-  // We keep the data in a separate struct so that each instance of
-  // LogMessage uses less stack space.
-  struct GOOGLE_GLOG_DLL_DECL LogMessageData {
-    LogMessageData() {};
-
-    int preserved_errno_;      // preserved errno
-    char* buf_;
-    char* message_text_;  // Complete message text (points to selected buffer)
-    LogStream* stream_alloc_;
-    LogStream* stream_;
-    char severity_;      // What level is this LogMessage logged at?
-    int line_;                 // line number where logging call is.
-    void (LogMessage::*send_method_)();  // Call this in destructor to send
-    union {  // At most one of these is used: union to keep the size low.
-      LogSink* sink_;             // NULL or sink to send message to
-      std::vector<std::string>* outvec_; // NULL or vector to push message onto
-      std::string* message_;             // NULL or string to write message into
-    };
-    time_t timestamp_;            // Time of creation of LogMessage
-    struct ::tm tm_time_;         // Time of creation of LogMessage
-    size_t num_prefix_chars_;     // # of chars of prefix in this message
-    size_t num_chars_to_log_;     // # of chars of msg to send to log
-    size_t num_chars_to_syslog_;  // # of chars of msg to send to syslog
-    const char* basename_;        // basename of file that called LOG
-    const char* fullname_;        // fullname of file that called LOG
-    bool has_been_flushed_;       // false => data has not been flushed
-    bool first_fatal_;            // true => this was first fatal msg
-
-    ~LogMessageData();
-   private:
-    LogMessageData(const LogMessageData&);
-    void operator=(const LogMessageData&);
-  };
-
-  static LogMessageData fatal_msg_data_exclusive_;
-  static LogMessageData fatal_msg_data_shared_;
-
-  LogMessageData* allocated_;
-  LogMessageData* data_;
-
-  friend class LogDestination;
-
-  LogMessage(const LogMessage&);
-  void operator=(const LogMessage&);
-};
-
-// This class happens to be thread-hostile because all instances share
-// a single data buffer, but since it can only be created just before
-// the process dies, we don't worry so much.
-class GOOGLE_GLOG_DLL_DECL LogMessageFatal : public LogMessage {
- public:
-  LogMessageFatal(const char* file, int line);
-  LogMessageFatal(const char* file, int line, const CheckOpString& result);
-  ~LogMessageFatal() __attribute__ ((noreturn));
-};
-
-// A non-macro interface to the log facility; (useful
-// when the logging level is not a compile-time constant).
-inline void LogAtLevel(int const severity, std::string const &msg) {
-  LogMessage(__FILE__, __LINE__, severity).stream() << msg;
-}
-
-// A macro alternative of LogAtLevel. New code may want to use this
-// version since there are two advantages: 1. this version outputs the
-// file name and the line number where this macro is put like other
-// LOG macros, 2. this macro can be used as C++ stream.
-#define LOG_AT_LEVEL(severity) LogMessage(__FILE__, __LINE__, severity).stream()
-
-// A small helper for CHECK_NOTNULL().
-template <typename T>
-T* CheckNotNull(const char *file, int line, const char *names, T* t) {
-  if (t == NULL) {
-    LogMessageFatal(file, line, new std::string(names));
-  }
-  return t;
-}
-
-// Allow folks to put a counter in the LOG_EVERY_X()'ed messages. This
-// only works if ostream is a LogStream. If the ostream is not a
-// LogStream you'll get an assert saying as much at runtime.
-GOOGLE_GLOG_DLL_DECL std::ostream& operator<<(std::ostream &os,
-                                              const PRIVATE_Counter&);
-
-
-// Derived class for PLOG*() above.
-class GOOGLE_GLOG_DLL_DECL ErrnoLogMessage : public LogMessage {
- public:
-
-  ErrnoLogMessage(const char* file, int line, LogSeverity severity, int ctr,
-                  void (LogMessage::*send_method)());
-
-  // Postpends ": strerror(errno) [errno]".
-  ~ErrnoLogMessage();
-
- private:
-  ErrnoLogMessage(const ErrnoLogMessage&);
-  void operator=(const ErrnoLogMessage&);
-};
-
-
-// This class is used to explicitly ignore values in the conditional
-// logging macros.  This avoids compiler warnings like "value computed
-// is not used" and "statement has no effect".
-
-class GOOGLE_GLOG_DLL_DECL LogMessageVoidify {
- public:
-  LogMessageVoidify() { }
-  // This has to be an operator with a precedence lower than << but
-  // higher than ?:
-  void operator&(std::ostream&) { }
-};
-
-
-// Flushes all log files that contains messages that are at least of
-// the specified severity level.  Thread-safe.
-GOOGLE_GLOG_DLL_DECL void FlushLogFiles(LogSeverity min_severity);
-
-// Flushes all log files that contains messages that are at least of
-// the specified severity level. Thread-hostile because it ignores
-// locking -- used for catastrophic failures.
-GOOGLE_GLOG_DLL_DECL void FlushLogFilesUnsafe(LogSeverity min_severity);
-
-//
-// Set the destination to which a particular severity level of log
-// messages is sent.  If base_filename is "", it means "don't log this
-// severity".  Thread-safe.
-//
-GOOGLE_GLOG_DLL_DECL void SetLogDestination(LogSeverity severity,
-                                            const char* base_filename);
-
-//
-// Set the basename of the symlink to the latest log file at a given
-// severity.  If symlink_basename is empty, do not make a symlink.  If
-// you don't call this function, the symlink basename is the
-// invocation name of the program.  Thread-safe.
-//
-GOOGLE_GLOG_DLL_DECL void SetLogSymlink(LogSeverity severity,
-                                        const char* symlink_basename);
-
-//
-// Used to send logs to some other kind of destination
-// Users should subclass LogSink and override send to do whatever they want.
-// Implementations must be thread-safe because a shared instance will
-// be called from whichever thread ran the LOG(XXX) line.
-class GOOGLE_GLOG_DLL_DECL LogSink {
- public:
-  virtual ~LogSink();
-
-  // Sink's logging logic (message_len is such as to exclude '\n' at the end).
-  // This method can't use LOG() or CHECK() as logging system mutex(s) are held
-  // during this call.
-  virtual void send(LogSeverity severity, const char* full_filename,
-                    const char* base_filename, int line,
-                    const struct ::tm* tm_time,
-                    const char* message, size_t message_len) = 0;
-
-  // Redefine this to implement waiting for
-  // the sink's logging logic to complete.
-  // It will be called after each send() returns,
-  // but before that LogMessage exits or crashes.
-  // By default this function does nothing.
-  // Using this function one can implement complex logic for send()
-  // that itself involves logging; and do all this w/o causing deadlocks and
-  // inconsistent rearrangement of log messages.
-  // E.g. if a LogSink has thread-specific actions, the send() method
-  // can simply add the message to a queue and wake up another thread that
-  // handles real logging while itself making some LOG() calls;
-  // WaitTillSent() can be implemented to wait for that logic to complete.
-  // See our unittest for an example.
-  virtual void WaitTillSent();
-
-  // Returns the normal text output of the log message.
-  // Can be useful to implement send().
-  static std::string ToString(LogSeverity severity, const char* file, int line,
-                              const struct ::tm* tm_time,
-                              const char* message, size_t message_len);
-};
-
-// Add or remove a LogSink as a consumer of logging data.  Thread-safe.
-GOOGLE_GLOG_DLL_DECL void AddLogSink(LogSink *destination);
-GOOGLE_GLOG_DLL_DECL void RemoveLogSink(LogSink *destination);
-
-//
-// Specify an "extension" added to the filename specified via
-// SetLogDestination.  This applies to all severity levels.  It's
-// often used to append the port we're listening on to the logfile
-// name.  Thread-safe.
-//
-GOOGLE_GLOG_DLL_DECL void SetLogFilenameExtension(
-    const char* filename_extension);
-
-//
-// Make it so that all log messages of at least a particular severity
-// are logged to stderr (in addition to logging to the usual log
-// file(s)).  Thread-safe.
-//
-GOOGLE_GLOG_DLL_DECL void SetStderrLogging(LogSeverity min_severity);
-
-//
-// Make it so that all log messages go only to stderr.  Thread-safe.
-//
-GOOGLE_GLOG_DLL_DECL void LogToStderr();
-
-//
-// Make it so that all log messages of at least a particular severity are
-// logged via email to a list of addresses (in addition to logging to the
-// usual log file(s)).  The list of addresses is just a string containing
-// the email addresses to send to (separated by spaces, say).  Thread-safe.
-//
-GOOGLE_GLOG_DLL_DECL void SetEmailLogging(LogSeverity min_severity,
-                                          const char* addresses);
-
-// A simple function that sends email. dest is a commma-separated
-// list of addressess.  Thread-safe.
-GOOGLE_GLOG_DLL_DECL bool SendEmail(const char *dest,
-                                    const char *subject, const char *body);
-
-GOOGLE_GLOG_DLL_DECL const std::vector<std::string>& GetLoggingDirectories();
-
-// For tests only:  Clear the internal [cached] list of logging directories to
-// force a refresh the next time GetLoggingDirectories is called.
-// Thread-hostile.
-void TestOnly_ClearLoggingDirectoriesList();
-
-// Returns a set of existing temporary directories, which will be a
-// subset of the directories returned by GetLogginDirectories().
-// Thread-safe.
-GOOGLE_GLOG_DLL_DECL void GetExistingTempDirectories(
-    std::vector<std::string>* list);
-
-// Print any fatal message again -- useful to call from signal handler
-// so that the last thing in the output is the fatal message.
-// Thread-hostile, but a race is unlikely.
-GOOGLE_GLOG_DLL_DECL void ReprintFatalMessage();
-
-// Truncate a log file that may be the append-only output of multiple
-// processes and hence can't simply be renamed/reopened (typically a
-// stdout/stderr).  If the file "path" is > "limit" bytes, copy the
-// last "keep" bytes to offset 0 and truncate the rest. Since we could
-// be racing with other writers, this approach has the potential to
-// lose very small amounts of data. For security, only follow symlinks
-// if the path is /proc/self/fd/*
-GOOGLE_GLOG_DLL_DECL void TruncateLogFile(const char *path,
-                                          int64 limit, int64 keep);
-
-// Truncate stdout and stderr if they are over the value specified by
-// --max_log_size; keep the final 1MB.  This function has the same
-// race condition as TruncateLogFile.
-GOOGLE_GLOG_DLL_DECL void TruncateStdoutStderr();
-
-// Return the string representation of the provided LogSeverity level.
-// Thread-safe.
-GOOGLE_GLOG_DLL_DECL const char* GetLogSeverityName(LogSeverity severity);
-
-// ---------------------------------------------------------------------
-// Implementation details that are not useful to most clients
-// ---------------------------------------------------------------------
-
-// A Logger is the interface used by logging modules to emit entries
-// to a log.  A typical implementation will dump formatted data to a
-// sequence of files.  We also provide interfaces that will forward
-// the data to another thread so that the invoker never blocks.
-// Implementations should be thread-safe since the logging system
-// will write to them from multiple threads.
-
-namespace base {
-
-class GOOGLE_GLOG_DLL_DECL Logger {
- public:
-  virtual ~Logger();
-
-  // Writes "message[0,message_len-1]" corresponding to an event that
-  // occurred at "timestamp".  If "force_flush" is true, the log file
-  // is flushed immediately.
-  //
-  // The input message has already been formatted as deemed
-  // appropriate by the higher level logging facility.  For example,
-  // textual log messages already contain timestamps, and the
-  // file:linenumber header.
-  virtual void Write(bool force_flush,
-                     time_t timestamp,
-                     const char* message,
-                     int message_len) = 0;
-
-  // Flush any buffered messages
-  virtual void Flush() = 0;
-
-  // Get the current LOG file size.
-  // The returned value is approximate since some
-  // logged data may not have been flushed to disk yet.
-  virtual uint32 LogSize() = 0;
-};
-
-// Get the logger for the specified severity level.  The logger
-// remains the property of the logging module and should not be
-// deleted by the caller.  Thread-safe.
-extern GOOGLE_GLOG_DLL_DECL Logger* GetLogger(LogSeverity level);
-
-// Set the logger for the specified severity level.  The logger
-// becomes the property of the logging module and should not
-// be deleted by the caller.  Thread-safe.
-extern GOOGLE_GLOG_DLL_DECL void SetLogger(LogSeverity level, Logger* logger);
-
-}
-
-// glibc has traditionally implemented two incompatible versions of
-// strerror_r(). There is a poorly defined convention for picking the
-// version that we want, but it is not clear whether it even works with
-// all versions of glibc.
-// So, instead, we provide this wrapper that automatically detects the
-// version that is in use, and then implements POSIX semantics.
-// N.B. In addition to what POSIX says, we also guarantee that "buf" will
-// be set to an empty string, if this function failed. This means, in most
-// cases, you do not need to check the error code and you can directly
-// use the value of "buf". It will never have an undefined value.
-GOOGLE_GLOG_DLL_DECL int posix_strerror_r(int err, char *buf, size_t len);
-
-
-// A class for which we define operator<<, which does nothing.
-class GOOGLE_GLOG_DLL_DECL NullStream : public LogMessage::LogStream {
- public:
-  // Initialize the LogStream so the messages can be written somewhere
-  // (they'll never be actually displayed). This will be needed if a
-  // NullStream& is implicitly converted to LogStream&, in which case
-  // the overloaded NullStream::operator<< will not be invoked.
-  NullStream() : LogMessage::LogStream(message_buffer_, 1, 0) { }
-  NullStream(const char* /*file*/, int /*line*/,
-             const CheckOpString& /*result*/) :
-      LogMessage::LogStream(message_buffer_, 1, 0) { }
-  NullStream &stream() { return *this; }
- private:
-  // A very short buffer for messages (which we discard anyway). This
-  // will be needed if NullStream& converted to LogStream& (e.g. as a
-  // result of a conditional expression).
-  char message_buffer_[2];
-};
-
-// Do nothing. This operator is inline, allowing the message to be
-// compiled away. The message will not be compiled away if we do
-// something like (flag ? LOG(INFO) : LOG(ERROR)) << message; when
-// SKIP_LOG=WARNING. In those cases, NullStream will be implicitly
-// converted to LogStream and the message will be computed and then
-// quietly discarded.
-template<class T>
-inline NullStream& operator<<(NullStream &str, const T &value) { return str; }
-
-// Similar to NullStream, but aborts the program (without stack
-// trace), like LogMessageFatal.
-class GOOGLE_GLOG_DLL_DECL NullStreamFatal : public NullStream {
- public:
-  NullStreamFatal() { }
-  NullStreamFatal(const char* file, int line, const CheckOpString& result) :
-      NullStream(file, line, result) { }
-  __attribute__ ((noreturn)) ~NullStreamFatal() { _exit(1); }
-};
-
-// Install a signal handler that will dump signal information and a stack
-// trace when the program crashes on certain signals.  We'll install the
-// signal handler for the following signals.
-//
-// SIGSEGV, SIGILL, SIGFPE, SIGABRT, SIGBUS, and SIGTERM.
-//
-// By default, the signal handler will write the failure dump to the
-// standard error.  You can customize the destination by installing your
-// own writer function by InstallFailureWriter() below.
-//
-// Note on threading:
-//
-// The function should be called before threads are created, if you want
-// to use the failure signal handler for all threads.  The stack trace
-// will be shown only for the thread that receives the signal.  In other
-// words, stack traces of other threads won't be shown.
-GOOGLE_GLOG_DLL_DECL void InstallFailureSignalHandler();
-
-// Installs a function that is used for writing the failure dump.  "data"
-// is the pointer to the beginning of a message to be written, and "size"
-// is the size of the message.  You should not expect the data is
-// terminated with '\0'.
-GOOGLE_GLOG_DLL_DECL void InstallFailureWriter(
-    void (*writer)(const char* data, int size));
-
-}
-
-#endif // _LOGGING_H_
diff --git a/src/third_party/linux/include/glog/raw_logging.h b/src/third_party/linux/include/glog/raw_logging.h
deleted file mode 100644
index 9e9b377..0000000
--- a/src/third_party/linux/include/glog/raw_logging.h
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright (c) 2006, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Author: Maxim Lifantsev
-//
-// Thread-safe logging routines that do not allocate any memory or
-// acquire any locks, and can therefore be used by low-level memory
-// allocation and synchronization code.
-
-#ifndef BASE_RAW_LOGGING_H_
-#define BASE_RAW_LOGGING_H_
-
-#include <time.h>
-
-namespace google {
-
-#include "glog/log_severity.h"
-#include "glog/vlog_is_on.h"
-
-// Annoying stuff for windows -- makes sure clients can import these functions
-#ifndef GOOGLE_GLOG_DLL_DECL
-# if defined(_WIN32) && !defined(__CYGWIN__)
-#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)
-# else
-#   define GOOGLE_GLOG_DLL_DECL
-# endif
-#endif
-
-// This is similar to LOG(severity) << format... and VLOG(level) << format..,
-// but
-// * it is to be used ONLY by low-level modules that can't use normal LOG()
-// * it is desiged to be a low-level logger that does not allocate any
-//   memory and does not need any locks, hence:
-// * it logs straight and ONLY to STDERR w/o buffering
-// * it uses an explicit format and arguments list
-// * it will silently chop off really long message strings
-// Usage example:
-//   RAW_LOG(ERROR, "Failed foo with %i: %s", status, error);
-//   RAW_VLOG(3, "status is %i", status);
-// These will print an almost standard log lines like this to stderr only:
-//   E0821 211317 file.cc:123] RAW: Failed foo with 22: bad_file
-//   I0821 211317 file.cc:142] RAW: status is 20
-#define RAW_LOG(severity, ...) \
-  do { \
-    switch (google::severity) {  \
-      case 0: \
-        RAW_LOG_INFO(__VA_ARGS__); \
-        break; \
-      case 1: \
-        RAW_LOG_WARNING(__VA_ARGS__); \
-        break; \
-      case 2: \
-        RAW_LOG_ERROR(__VA_ARGS__); \
-        break; \
-      case 3: \
-        RAW_LOG_FATAL(__VA_ARGS__); \
-        break; \
-      default: \
-        break; \
-    } \
-  } while (0)
-
-// The following STRIP_LOG testing is performed in the header file so that it's
-// possible to completely compile out the logging code and the log messages.
-#if STRIP_LOG == 0
-#define RAW_VLOG(verboselevel, ...) \
-  do { \
-    if (VLOG_IS_ON(verboselevel)) { \
-      RAW_LOG_INFO(__VA_ARGS__); \
-    } \
-  } while (0)
-#else
-#define RAW_VLOG(verboselevel, ...) RawLogStub__(0, __VA_ARGS__)
-#endif // STRIP_LOG == 0
-
-#if STRIP_LOG == 0
-#define RAW_LOG_INFO(...) google::RawLog__(google::INFO, \
-                                   __FILE__, __LINE__, __VA_ARGS__)
-#else
-#define RAW_LOG_INFO(...) google::RawLogStub__(0, __VA_ARGS__)
-#endif // STRIP_LOG == 0
-
-#if STRIP_LOG <= 1
-#define RAW_LOG_WARNING(...) google::RawLog__(google::WARNING,   \
-                                      __FILE__, __LINE__, __VA_ARGS__)
-#else
-#define RAW_LOG_WARNING(...) google::RawLogStub__(0, __VA_ARGS__)
-#endif // STRIP_LOG <= 1
-
-#if STRIP_LOG <= 2
-#define RAW_LOG_ERROR(...) google::RawLog__(google::ERROR,       \
-                                    __FILE__, __LINE__, __VA_ARGS__)
-#else
-#define RAW_LOG_ERROR(...) google::RawLogStub__(0, __VA_ARGS__)
-#endif // STRIP_LOG <= 2
-
-#if STRIP_LOG <= 3
-#define RAW_LOG_FATAL(...) google::RawLog__(google::FATAL,       \
-                                    __FILE__, __LINE__, __VA_ARGS__)
-#else
-#define RAW_LOG_FATAL(...) \
-  do { \
-    google::RawLogStub__(0, __VA_ARGS__);        \
-    exit(1); \
-  } while (0)
-#endif // STRIP_LOG <= 3
-
-// Similar to CHECK(condition) << message,
-// but for low-level modules: we use only RAW_LOG that does not allocate memory.
-// We do not want to provide args list here to encourage this usage:
-//   if (!cond)  RAW_LOG(FATAL, "foo ...", hard_to_compute_args);
-// so that the args are not computed when not needed.
-#define RAW_CHECK(condition, message)                                   \
-  do {                                                                  \
-    if (!(condition)) {                                                 \
-      RAW_LOG(FATAL, "Check %s failed: %s", #condition, message);       \
-    }                                                                   \
-  } while (0)
-
-// Debug versions of RAW_LOG and RAW_CHECK
-#ifndef NDEBUG
-
-#define RAW_DLOG(severity, ...) RAW_LOG(severity, __VA_ARGS__)
-#define RAW_DCHECK(condition, message) RAW_CHECK(condition, message)
-
-#else  // NDEBUG
-
-#define RAW_DLOG(severity, ...)                                 \
-  while (false)                                                 \
-    RAW_LOG(severity, __VA_ARGS__)
-#define RAW_DCHECK(condition, message) \
-  while (false) \
-    RAW_CHECK(condition, message)
-
-#endif  // NDEBUG
-
-// Stub log function used to work around for unused variable warnings when
-// building with STRIP_LOG > 0.
-static inline void RawLogStub__(int ignored, ...) {
-}
-
-// Helper function to implement RAW_LOG and RAW_VLOG
-// Logs format... at "severity" level, reporting it
-// as called from file:line.
-// This does not allocate memory or acquire locks.
-GOOGLE_GLOG_DLL_DECL void RawLog__(LogSeverity severity,
-                                   const char* file,
-                                   int line,
-                                   const char* format, ...)
-   __attribute__((__format__ (__printf__, 4, 5)));
-
-// Hack to propagate time information into this module so that
-// this module does not have to directly call localtime_r(),
-// which could allocate memory.
-GOOGLE_GLOG_DLL_DECL void RawLog__SetLastTime(const struct tm& t, int usecs);
-
-}
-
-#endif  // BASE_RAW_LOGGING_H_
diff --git a/src/third_party/linux/include/glog/stl_logging.h b/src/third_party/linux/include/glog/stl_logging.h
deleted file mode 100644
index 42f2560..0000000
--- a/src/third_party/linux/include/glog/stl_logging.h
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright (c) 2003, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Stream output operators for STL containers; to be used for logging *only*.
-// Inclusion of this file lets you do:
-//
-// list<string> x;
-// LOG(INFO) << "data: " << x;
-// vector<int> v1, v2;
-// CHECK_EQ(v1, v2);
-//
-// Note that if you want to use these operators from the non-global namespace,
-// you may get an error since they are not in namespace std (and they are not
-// in namespace std since that would result in undefined behavior). You may
-// need to write
-//
-//   using ::operator<<;
-//
-// to fix these errors.
-
-#ifndef UTIL_GTL_STL_LOGGING_INL_H_
-#define UTIL_GTL_STL_LOGGING_INL_H_
-
-#if !1
-# error We do not support stl_logging for this compiler
-#endif
-
-#include <deque>
-#include <list>
-#include <map>
-#include <ostream>
-#include <set>
-#include <utility>
-#include <vector>
-
-#ifdef __GNUC__
-# include <ext/hash_set>
-# include <ext/hash_map>
-# include <ext/slist>
-#endif
-
-template<class First, class Second>
-inline std::ostream& operator<<(std::ostream& out,
-                                const std::pair<First, Second>& p) {
-  out << '(' << p.first << ", " << p.second << ')';
-  return out;
-}
-
-namespace google {
-
-template<class Iter>
-inline void PrintSequence(std::ostream& out, Iter begin, Iter end) {
-  using ::operator<<;
-  // Output at most 100 elements -- appropriate if used for logging.
-  for (int i = 0; begin != end && i < 100; ++i, ++begin) {
-    if (i > 0) out << ' ';
-    out << *begin;
-  }
-  if (begin != end) {
-    out << " ...";
-  }
-}
-
-}
-
-#define OUTPUT_TWO_ARG_CONTAINER(Sequence) \
-template<class T1, class T2> \
-inline std::ostream& operator<<(std::ostream& out, \
-                                const Sequence<T1, T2>& seq) { \
-  google::PrintSequence(out, seq.begin(), seq.end()); \
-  return out; \
-}
-
-OUTPUT_TWO_ARG_CONTAINER(std::vector)
-OUTPUT_TWO_ARG_CONTAINER(std::deque)
-OUTPUT_TWO_ARG_CONTAINER(std::list)
-#ifdef __GNUC__
-OUTPUT_TWO_ARG_CONTAINER(__gnu_cxx::slist)
-#endif
-
-#undef OUTPUT_TWO_ARG_CONTAINER
-
-#define OUTPUT_THREE_ARG_CONTAINER(Sequence) \
-template<class T1, class T2, class T3> \
-inline std::ostream& operator<<(std::ostream& out, \
-                                const Sequence<T1, T2, T3>& seq) { \
-  google::PrintSequence(out, seq.begin(), seq.end()); \
-  return out; \
-}
-
-OUTPUT_THREE_ARG_CONTAINER(std::set)
-OUTPUT_THREE_ARG_CONTAINER(std::multiset)
-
-#undef OUTPUT_THREE_ARG_CONTAINER
-
-#define OUTPUT_FOUR_ARG_CONTAINER(Sequence) \
-template<class T1, class T2, class T3, class T4> \
-inline std::ostream& operator<<(std::ostream& out, \
-                                const Sequence<T1, T2, T3, T4>& seq) { \
-  google::PrintSequence(out, seq.begin(), seq.end()); \
-  return out; \
-}
-
-OUTPUT_FOUR_ARG_CONTAINER(std::map)
-OUTPUT_FOUR_ARG_CONTAINER(std::multimap)
-#ifdef __GNUC__
-OUTPUT_FOUR_ARG_CONTAINER(__gnu_cxx::hash_set)
-OUTPUT_FOUR_ARG_CONTAINER(__gnu_cxx::hash_multiset)
-#endif
-
-#undef OUTPUT_FOUR_ARG_CONTAINER
-
-#define OUTPUT_FIVE_ARG_CONTAINER(Sequence) \
-template<class T1, class T2, class T3, class T4, class T5> \
-inline std::ostream& operator<<(std::ostream& out, \
-                                const Sequence<T1, T2, T3, T4, T5>& seq) { \
-  google::PrintSequence(out, seq.begin(), seq.end()); \
-  return out; \
-}
-
-#ifdef __GNUC__
-OUTPUT_FIVE_ARG_CONTAINER(__gnu_cxx::hash_map)
-OUTPUT_FIVE_ARG_CONTAINER(__gnu_cxx::hash_multimap)
-#endif
-
-#undef OUTPUT_FIVE_ARG_CONTAINER
-
-#endif  // UTIL_GTL_STL_LOGGING_INL_H_
diff --git a/src/third_party/linux/include/glog/vlog_is_on.h b/src/third_party/linux/include/glog/vlog_is_on.h
deleted file mode 100644
index 7d94efc..0000000
--- a/src/third_party/linux/include/glog/vlog_is_on.h
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright (c) 1999, 2007, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Author: Ray Sidney and many others
-//
-// Defines the VLOG_IS_ON macro that controls the variable-verbosity
-// conditional logging.
-//
-// It's used by VLOG and VLOG_IF in logging.h
-// and by RAW_VLOG in raw_logging.h to trigger the logging.
-//
-// It can also be used directly e.g. like this:
-//   if (VLOG_IS_ON(2)) {
-//     // do some logging preparation and logging
-//     // that can't be accomplished e.g. via just VLOG(2) << ...;
-//   }
-//
-// The truth value that VLOG_IS_ON(level) returns is determined by 
-// the three verbosity level flags:
-//   --v=<n>  Gives the default maximal active V-logging level;
-//            0 is the default.
-//            Normally positive values are used for V-logging levels.
-//   --vmodule=<str>  Gives the per-module maximal V-logging levels to override
-//                    the value given by --v.
-//                    E.g. "my_module=2,foo*=3" would change the logging level
-//                    for all code in source files "my_module.*" and "foo*.*"
-//                    ("-inl" suffixes are also disregarded for this matching).
-//
-// SetVLOGLevel helper function is provided to do limited dynamic control over
-// V-logging by overriding the per-module settings given via --vmodule flag.
-//
-// CAVEAT: --vmodule functionality is not available in non gcc compilers.
-//
-
-#ifndef BASE_VLOG_IS_ON_H_
-#define BASE_VLOG_IS_ON_H_
-
-#include "glog/log_severity.h"
-
-// Annoying stuff for windows -- makes sure clients can import these functions
-#ifndef GOOGLE_GLOG_DLL_DECL
-# if defined(_WIN32) && !defined(__CYGWIN__)
-#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)
-# else
-#   define GOOGLE_GLOG_DLL_DECL
-# endif
-#endif
-
-#if defined(__GNUC__)
-// We emit an anonymous static int* variable at every VLOG_IS_ON(n) site.
-// (Normally) the first time every VLOG_IS_ON(n) site is hit,
-// we determine what variable will dynamically control logging at this site:
-// it's either FLAGS_v or an appropriate internal variable
-// matching the current source file that represents results of
-// parsing of --vmodule flag and/or SetVLOGLevel calls.
-#define VLOG_IS_ON(verboselevel)                                \
-  ({ static google::int32* vlocal__ = &google::kLogSiteUninitialized;           \
-     google::int32 verbose_level__ = (verboselevel);                    \
-     (*vlocal__ >= verbose_level__) &&                          \
-     ((vlocal__ != &google::kLogSiteUninitialized) ||                   \
-      (google::InitVLOG3__(&vlocal__, &FLAGS_v,                         \
-                   __FILE__, verbose_level__))); })
-#else
-// GNU extensions not available, so we do not support --vmodule.
-// Dynamic value of FLAGS_v always controls the logging level.
-#define VLOG_IS_ON(verboselevel) (FLAGS_v >= (verboselevel))
-#endif
-
-// Set VLOG(_IS_ON) level for module_pattern to log_level.
-// This lets us dynamically control what is normally set by the --vmodule flag.
-// Returns the level that previously applied to module_pattern.
-// NOTE: To change the log level for VLOG(_IS_ON) sites
-//	 that have already executed after/during InitGoogleLogging,
-//	 one needs to supply the exact --vmodule pattern that applied to them.
-//       (If no --vmodule pattern applied to them
-//       the value of FLAGS_v will continue to control them.)
-extern GOOGLE_GLOG_DLL_DECL int SetVLOGLevel(const char* module_pattern,
-                                             int log_level);
-
-// Various declarations needed for VLOG_IS_ON above: =========================
-
-// Special value used to indicate that a VLOG_IS_ON site has not been
-// initialized.  We make this a large value, so the common-case check
-// of "*vlocal__ >= verbose_level__" in VLOG_IS_ON definition
-// passes in such cases and InitVLOG3__ is then triggered.
-extern google::int32 kLogSiteUninitialized;
-
-// Helper routine which determines the logging info for a particalur VLOG site.
-//   site_flag     is the address of the site-local pointer to the controlling
-//                 verbosity level
-//   site_default  is the default to use for *site_flag
-//   fname         is the current source file name
-//   verbose_level is the argument to VLOG_IS_ON
-// We will return the return value for VLOG_IS_ON
-// and if possible set *site_flag appropriately.
-extern GOOGLE_GLOG_DLL_DECL bool InitVLOG3__(
-    google::int32** site_flag,
-    google::int32* site_default,
-    const char* fname,
-    google::int32 verbose_level);
-
-#endif  // BASE_VLOG_IS_ON_H_
diff --git a/src/tools/linux/core2md/linux_dumper.cc b/src/tools/linux/core2md/linux_dumper.cc
index 3e90f5e..d5ce321 100644
--- a/src/tools/linux/core2md/linux_dumper.cc
+++ b/src/tools/linux/core2md/linux_dumper.cc
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// This file is a patched version from Google Breakpad revision 598 to
+// This file is a patched version from Google Breakpad revision 734 to
 // support core dump to minidump conversion.  Original copyright follows.
 //
-// Copyright (c) 2009, Google Inc.
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -41,14 +41,19 @@
 
 #include "tools/linux/core2md/linux_dumper.h"
 
+#include <asm/ptrace.h>
 #include <assert.h>
+#include <errno.h>
+#include <fcntl.h>
 #include <limits.h>
+#if !defined(__ANDROID__)
+#include <link.h>
+#endif
 #include <stddef.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 
-#include <unistd.h>
 #include <elf.h>
 #include <errno.h>
 #include <fcntl.h>
@@ -58,6 +63,7 @@
 #include <sys/procfs.h>
 #include <sys/ptrace.h>
 #include <sys/wait.h>
+#include <unistd.h>
 
 #include <algorithm>
 
@@ -65,10 +71,11 @@
 #include "client/linux/minidump_writer/line_reader.h"
 #include "common/linux/file_id.h"
 #include "common/linux/linux_libc_support.h"
-#include "common/linux/linux_syscall_support.h"
+#include "third_party/lss/linux_syscall_support.h"
 #include "tools/linux/core2md/core_reader.h"
 
 static const char kMappedFileUnsafePrefix[] = "/dev/";
+static const char kDeletedSuffix[] = " (deleted)";
 
 // Suspend a thread by attaching to it.
 static bool SuspendThread(pid_t pid) {
@@ -84,6 +91,26 @@
       return false;
     }
   }
+#if defined(__i386) || defined(__x86_64)
+  // On x86, the stack pointer is NULL or -1, when executing trusted code in
+  // the seccomp sandbox. Not only does this cause difficulties down the line
+  // when trying to dump the thread's stack, it also results in the minidumps
+  // containing information about the trusted threads. This information is
+  // generally completely meaningless and just pollutes the minidumps.
+  // We thus test the stack pointer and exclude any threads that are part of
+  // the seccomp sandbox's trusted code.
+  user_regs_struct regs;
+  if (sys_ptrace(PTRACE_GETREGS, pid, NULL, &regs) == -1 ||
+#if defined(__i386)
+      !regs.esp
+#elif defined(__x86_64)
+      !regs.rsp
+#endif
+      ) {
+    sys_ptrace(PTRACE_DETACH, pid, NULL, NULL);
+    return false;
+  }
+#endif
   return true;
 }
 
@@ -137,11 +164,19 @@
     return true;
   if (threads_suspended_)
     return true;
-  bool good = true;
-  for (size_t i = 0; i < threads_.size(); ++i)
-    good &= SuspendThread(threads_[i]);
+  for (size_t i = 0; i < threads_.size(); ++i) {
+    if (!SuspendThread(threads_[i])) {
+      // If the thread either disappeared before we could attach to it, or if
+      // it was part of the seccomp sandbox's trusted code, it is OK to
+      // silently drop it from the minidump.
+      memmove(&threads_[i], &threads_[i+1],
+              (threads_.size() - i - 1) * sizeof(threads_[i]));
+      threads_.resize(threads_.size() - 1);
+      --i;
+    }
+  }
   threads_suspended_ = true;
-  return good;
+  return threads_.size() > 0;
 }
 
 bool LinuxDumper::ThreadsResume() {
@@ -211,7 +246,7 @@
     memcpy(path + override_procfs_prefix_len, "/", 1);
     memcpy(path + override_procfs_prefix_len + 1, node, node_len);
   }
-  memcpy(path + total_length, "\0", 1);
+  path[total_length] = '\0';
 }
 
 bool
@@ -220,11 +255,20 @@
 {
   assert(mapping_id < mappings_.size());
   my_memset(identifier, 0, sizeof(MDGUID));
-  const MappingInfo* mapping = mappings_[mapping_id];
-  if (IsMappedFileOpenUnsafe(mapping)) {
+  MappingInfo* mapping = mappings_[mapping_id];
+  if (IsMappedFileOpenUnsafe(mapping))
     return false;
-  }
-  int fd = sys_open(mapping->name, O_RDONLY, 0);
+
+  char filename[NAME_MAX];
+  size_t filename_len = my_strlen(mapping->name);
+  assert(filename_len < NAME_MAX);
+  if (filename_len >= NAME_MAX)
+    return false;
+  memcpy(filename, mapping->name, filename_len);
+  filename[filename_len] = '\0';
+  bool filename_modified = HandleDeletedFileInMapping(filename);
+
+  int fd = sys_open(filename, O_RDONLY, 0);
   if (fd < 0)
     return false;
   struct kernel_stat st;
@@ -242,6 +286,8 @@
 
   bool success = FileID::ElfFileIdentifierFromMappedFile(base, identifier);
   sys_munmap(base, st.st_size);
+  if (success && filename_modified)
+    mapping->name[filename_len - sizeof(kDeletedSuffix) + 1] = '\0';
   return success;
 }
 
@@ -500,11 +546,16 @@
   if (info->ppid == -1 || info->tgid == -1)
     return false;
 
-  if (sys_ptrace(PTRACE_GETREGS, tid, NULL, &info->regs) == -1 ||
-      sys_ptrace(PTRACE_GETFPREGS, tid, NULL, &info->fpregs) == -1) {
+  if (sys_ptrace(PTRACE_GETREGS, tid, NULL, &info->regs) == -1) {
     return false;
   }
 
+#if !defined(__ANDROID__)
+  if (sys_ptrace(PTRACE_GETFPREGS, tid, NULL, &info->fpregs) == -1) {
+    return false;
+  }
+#endif
+
 #if defined(__i386)
   if (sys_ptrace(PTRACE_GETFPXREGS, tid, NULL, &info->fpxregs) == -1)
     return false;
@@ -544,16 +595,13 @@
 #elif defined(__x86_64)
   memcpy(&stack_pointer, &info->regs.rsp, sizeof(info->regs.rsp));
 #elif defined(__ARM_EABI__)
-  memcpy(&stack_pointer, &info->regs.uregs[R13], sizeof(info->regs.uregs[R13]));
+  memcpy(&stack_pointer, &info->regs.ARM_sp, sizeof(info->regs.ARM_sp));
 #else
 #error "This code hasn't been ported to your platform yet."
 #endif
 
-  if (!GetStackInfo(&info->stack, &info->stack_len,
-                    (uintptr_t) stack_pointer))
-    return false;
-
-  return true;
+  return GetStackInfo(&info->stack, &info->stack_len,
+                      (uintptr_t) stack_pointer);
 }
 
 // Get information about the stack, given the stack pointer. We don't try to
@@ -568,7 +616,7 @@
       reinterpret_cast<uint8_t*>(int_stack_pointer & ~(page_size - 1));
 
   // The number of bytes of stack which we try to capture.
-  static ptrdiff_t kStackToCapture = 32 * 1024;
+  static const ptrdiff_t kStackToCapture = 32 * 1024;
 
   const MappingInfo* mapping = FindMapping(stack_pointer);
   if (!mapping)
@@ -649,4 +697,42 @@
   return NULL;
 }
 
+bool LinuxDumper::HandleDeletedFileInMapping(char* path) {
+  static const size_t kDeletedSuffixLen = sizeof(kDeletedSuffix) - 1;
+
+  // Check for ' (deleted)' in |path|.
+  // |path| has to be at least as long as "/x (deleted)".
+  const size_t path_len = my_strlen(path);
+  if (path_len < kDeletedSuffixLen + 2)
+    return false;
+  if (my_strncmp(path + path_len - kDeletedSuffixLen, kDeletedSuffix,
+                 kDeletedSuffixLen) != 0) {
+    return false;
+  }
+
+  // Check |path| against the /proc/pid/exe 'symlink'.
+  char exe_link[NAME_MAX];
+  char new_path[NAME_MAX];
+  BuildProcPath(exe_link, pid_, "exe");
+  ssize_t new_path_len = sys_readlink(exe_link, new_path, NAME_MAX);
+  if (new_path_len <= 0 || new_path_len == NAME_MAX)
+    return false;
+  new_path[new_path_len] = '\0';
+  if (my_strcmp(path, new_path) != 0)
+    return false;
+
+  // Check to see if someone actually named their executable 'foo (deleted)'.
+  struct kernel_stat exe_stat;
+  struct kernel_stat new_path_stat;
+  if (sys_stat(exe_link, &exe_stat) == 0 &&
+      sys_stat(new_path, &new_path_stat) == 0 &&
+      exe_stat.st_dev == new_path_stat.st_dev &&
+      exe_stat.st_ino == new_path_stat.st_ino) {
+    return false;
+  }
+
+  memcpy(path, exe_link, NAME_MAX);
+  return true;
+}
+
 }  // namespace google_breakpad
diff --git a/src/tools/linux/core2md/linux_dumper.h b/src/tools/linux/core2md/linux_dumper.h
index 17251c7..c70afe3 100644
--- a/src/tools/linux/core2md/linux_dumper.h
+++ b/src/tools/linux/core2md/linux_dumper.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// This file is a patched version from Google Breakpad revision 598 to
+// This file is a patched version from Google Breakpad revision 734 to
 // support core dump to minidump conversion.  Original copyright follows.
 //
-// Copyright (c) 2009, Google Inc.
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -41,21 +41,41 @@
 #include <linux/limits.h>
 #include <stdint.h>
 #include <sys/types.h>
+#if !defined(__ANDROID__)
 #include <sys/user.h>
+#endif
 
 #include <map>
 
-#include "common/linux/memory.h"
 #include "common/linux/mmapped_range.h"
+#include "common/memory.h"
 #include "google_breakpad/common/minidump_format.h"
 
 namespace google_breakpad {
 
+#if defined(__i386) || defined(__x86_64)
 typedef typeof(((struct user*) 0)->u_debugreg[0]) debugreg_t;
+#endif
 
 // Typedef for our parsing of the auxv variables in /proc/pid/auxv.
 #if defined(__i386) || defined(__ARM_EABI__)
+#if !defined(__ANDROID__)
 typedef Elf32_auxv_t elf_aux_entry;
+#else
+// Android is missing this structure definition
+typedef struct
+{
+  uint32_t a_type;              /* Entry type */
+  union
+    {
+      uint32_t a_val;           /* Integer value */
+    } a_un;
+} elf_aux_entry;
+
+#if !defined(AT_SYSINFO_EHDR)
+#define AT_SYSINFO_EHDR 33
+#endif
+#endif  // __ANDROID__
 #elif defined(__x86_64__)
 typedef Elf64_auxv_t elf_aux_entry;
 #endif
@@ -86,8 +106,12 @@
 
 #elif defined(__ARM_EABI__)
   // Mimicking how strace does this(see syscall.c, search for GETREGS)
+#if defined(__ANDROID__)
+  struct pt_regs regs;
+#else
   struct user_regs regs;
   struct user_fpregs fpregs;
+#endif  // __ANDROID__
 #endif
 };
 
@@ -164,6 +188,10 @@
     *exception_code = core_exception_information_.crashing_signal;
   }
 
+  bool IsPostMortem() const {
+    return core_path_ != NULL;
+  }
+
  private:
   typedef std::map<int, google_breakpad::ThreadInfo>::iterator ThreadIterator;
 
@@ -180,9 +208,17 @@
   bool EnumerateMappings(wasteful_vector<MappingInfo*>* result) const;
   bool EnumerateThreads(wasteful_vector<pid_t>* result) const;
 
-  bool IsPostMortem() const {
-    return core_path_ != NULL;
-  }
+  // For the case where a running program has been deleted, it'll show up in
+  // /proc/pid/maps as "/path/to/program (deleted)". If this is the case, then
+  // see if '/path/to/program (deleted)' matches /proc/pid/exe and return
+  // /proc/pid/exe in |path| so ELF identifier generation works correctly. This
+  // also checks to see if '/path/to/program (deleted)' exists, so it does not
+  // get fooled by a poorly named binary.
+  // For programs that don't end with ' (deleted)', this is a no-op.
+  // This assumes |path| is a buffer with length NAME_MAX.
+  // Returns true if |path| is modified.
+  bool HandleDeletedFileInMapping(char* path);
+
   bool LoadCoreFile();
   void CopyFromCore(void* dest, pid_t child, const void* src,
                     size_t length);
diff --git a/src/tools/linux/core2md/minidump_writer.cc b/src/tools/linux/core2md/minidump_writer.cc
index f9e303d..40a6b92 100644
--- a/src/tools/linux/core2md/minidump_writer.cc
+++ b/src/tools/linux/core2md/minidump_writer.cc
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// This file is a patched version from Google Breakpad revision 598 to
+// This file is a patched version from Google Breakpad revision 734 to
 // support core dump to minidump conversion.  Original copyright follows.
 //
-// Copyright (c) 2009, Google Inc.
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -55,34 +55,35 @@
 
 #include <errno.h>
 #include <fcntl.h>
+#if !defined(__ANDROID__)
+#include <link.h>
+#endif
 #include <stdio.h>
 #include <unistd.h>
+#if !defined(__ANDROID__)
 #include <sys/ucontext.h>
 #include <sys/user.h>
+#endif
 #include <sys/utsname.h>
 
+#include <algorithm>
+
 #include "client/minidump_file_writer.h"
 #include "google_breakpad/common/minidump_format.h"
 #include "google_breakpad/common/minidump_cpu_amd64.h"
 #include "google_breakpad/common/minidump_cpu_x86.h"
 
+#if defined(__ANDROID__)
+#include "client/linux/android_link.h"
+#include "client/linux/android_ucontext.h"
+#endif
 #include "client/linux/handler/exception_handler.h"
 #include "client/linux/minidump_writer/line_reader.h"
+#include "client/linux/minidump_writer/minidump_extension_linux.h"
 #include "common/linux/linux_libc_support.h"
-#include "common/linux/linux_syscall_support.h"
+#include "third_party/lss/linux_syscall_support.h"
 #include "tools/linux/core2md/linux_dumper.h"
 
-// These are additional minidump stream values which are specific to the linux
-// breakpad implementation.
-enum {
-  MD_LINUX_CPU_INFO              = 0x47670003,    /* /proc/cpuinfo    */
-  MD_LINUX_PROC_STATUS           = 0x47670004,    /* /proc/$x/status  */
-  MD_LINUX_LSB_RELEASE           = 0x47670005,    /* /etc/lsb-release */
-  MD_LINUX_CMD_LINE              = 0x47670006,    /* /proc/$x/cmdline */
-  MD_LINUX_ENVIRON               = 0x47670007,    /* /proc/$x/environ */
-  MD_LINUX_AUXV                  = 0x47670008     /* /proc/$x/auxv    */
-};
-
 // Minidump defines register structures which are different from the raw
 // structures which we get from the kernel. These are platform specific
 // functions to juggle the ucontext and user structures into minidump format.
@@ -258,9 +259,9 @@
   out->flt_save.tag_word = info.fpregs.ftw;
   out->flt_save.error_opcode = info.fpregs.fop;
   out->flt_save.error_offset = info.fpregs.rip;
-  out->flt_save.error_selector = 0; // We don't have this.
+  out->flt_save.error_selector = 0;  // We don't have this.
   out->flt_save.data_offset = info.fpregs.rdp;
-  out->flt_save.data_selector = 0;  // We don't have this.
+  out->flt_save.data_selector = 0;   // We don't have this.
   out->flt_save.mx_csr = info.fpregs.mxcsr;
   out->flt_save.mx_csr_mask = info.fpregs.mxcr_mask;
   memcpy(&out->flt_save.float_registers, &info.fpregs.st_space, 8 * 16);
@@ -306,7 +307,7 @@
   out->flt_save.error_opcode = fpregs->fop;
   out->flt_save.error_offset = fpregs->rip;
   out->flt_save.data_offset = fpregs->rdp;
-  out->flt_save.error_selector = 0; // We don't have this.
+  out->flt_save.error_selector = 0;  // We don't have this.
   out->flt_save.data_selector = 0;  // We don't have this.
   out->flt_save.mx_csr = fpregs->mxcsr;
   out->flt_save.mx_csr_mask = fpregs->mxcr_mask;
@@ -325,11 +326,13 @@
     out->iregs[i] = info.regs.uregs[i];
   // No CPSR register in ThreadInfo(it's not accessible via ptrace)
   out->cpsr = 0;
+#if !defined(__ANDROID__)
   out->float_save.fpscr = info.fpregs.fpsr |
     (static_cast<u_int64_t>(info.fpregs.fpcr) << 32);
-  //TODO: sort this out, actually collect floating point registers
+  // TODO: sort this out, actually collect floating point registers
   memset(&out->float_save.regs, 0, sizeof(out->float_save.regs));
   memset(&out->float_save.extra, 0, sizeof(out->float_save.extra));
+#endif
 }
 
 static void CPUFillFromUContext(MDRawContextARM *out, const ucontext *uc,
@@ -356,7 +359,7 @@
 
   out->cpsr = uc->uc_mcontext.arm_cpsr;
 
-  //TODO: fix this after fixing ExceptionHandler
+  // TODO: fix this after fixing ExceptionHandler
   out->float_save.fpscr = 0;
   memset(&out->float_save.regs, 0, sizeof(out->float_save.regs));
   memset(&out->float_save.extra, 0, sizeof(out->float_save.extra));
@@ -379,11 +382,12 @@
 #if !defined(__ARM_EABI__)
         float_state_(&context->float_state),
 #else
-        //TODO: fix this after fixing ExceptionHandler
+        // TODO: fix this after fixing ExceptionHandler
         float_state_(NULL),
 #endif
         crashing_tid_(context->tid),
-        dumper_(crashing_pid) {
+        dumper_(crashing_pid),
+        memory_blocks_(dumper_.allocator()) {
   }
 
   // Construct a minidump writer which uses a core file for
@@ -397,7 +401,8 @@
         ucontext_(NULL),
         float_state_(NULL),
         crashing_tid_(0),
-        dumper_(0) {
+        dumper_(0),
+        memory_blocks_(dumper_.allocator()) {
     // Note that crashing tid will be set once dumper_ is Initialized.
     dumper_.SetCore(core_path, procfs_override);
   }
@@ -418,9 +423,39 @@
   }
 
   bool Dump() {
+    // The dynamic linker makes information available that helps gdb find all
+    // DSOs loaded into the program. If we can access this information, we dump
+    // it to a MD_LINUX_DSO_DEBUG stream.
+    struct r_debug* r_debug = NULL;
+    uint32_t dynamic_length = 0;
+#if !defined(__ANDROID__)
+    // This code assumes the crashing process is the same as this process and
+    // may hang or take a long time to complete if not so.  This is never so
+    // for post-mortem based minidump writing.
+    if (!dumper_.IsPostMortem()) {
+    // The Android NDK is missing structure definitions for most of this.
+    // For now, it's simpler just to skip it.
+    for (int i = 0;;) {
+      ElfW(Dyn) dyn;
+      dynamic_length += sizeof(dyn);
+      // Note, use of _DYNAMIC assumes this is the same process as the
+      // crashing process.  This loop will go forever if it's out of bounds.
+      dumper_.CopyFromProcess(&dyn, crashing_tid_, _DYNAMIC+i++, sizeof(dyn));
+      if (dyn.d_tag == DT_DEBUG) {
+        r_debug = (struct r_debug*)dyn.d_un.d_ptr;
+        continue;
+      } else if (dyn.d_tag == DT_NULL) {
+        break;
+      }
+    }
+    }
+#endif
+
     // A minidump file contains a number of tagged streams. This is the number
     // of stream which we write.
-    static const unsigned kNumWriters = 11;
+    unsigned kNumWriters = 12;
+    if (r_debug)
+      ++kNumWriters;
 
     TypedMDRVA<MDRawHeader> header(&minidump_writer_);
     TypedMDRVA<MDRawDirectory> dir(&minidump_writer_);
@@ -447,6 +482,10 @@
       return false;
     dir.CopyIndex(dir_index++, &dirent);
 
+    if (!WriteMemoryListStream(&dirent))
+      return false;
+    dir.CopyIndex(dir_index++, &dirent);
+
     if (!WriteExceptionStream(&dirent))
       return false;
     dir.CopyIndex(dir_index++, &dirent);
@@ -485,11 +524,18 @@
       NullifyDirectoryEntry(&dirent);
     dir.CopyIndex(dir_index++, &dirent);
 
-    dirent.stream_type = MD_LINUX_AUXV;
+    dirent.stream_type = MD_LINUX_MAPS;
     if (!WriteProcFile(&dirent.location, crashing_tid_, "maps"))
       NullifyDirectoryEntry(&dirent);
     dir.CopyIndex(dir_index++, &dirent);
 
+    if (r_debug) {
+      dirent.stream_type = MD_LINUX_DSO_DEBUG;
+      if (!WriteDSODebugStream(&dirent, r_debug, dynamic_length))
+        NullifyDirectoryEntry(&dirent);
+      dir.CopyIndex(dir_index++, &dirent);
+    }
+
     // If you add more directory entries, don't forget to update kNumWriters,
     // above.
 
@@ -497,6 +543,123 @@
     return true;
   }
 
+  // Check if the top of the stack is part of a system call that has been
+  // redirected by the seccomp sandbox. If so, try to pop the stack frames
+  // all the way back to the point where the interception happened.
+  void PopSeccompStackFrame(RawContextCPU* cpu, const MDRawThread& thread,
+                            uint8_t* stack_copy) {
+#if defined(__x86_64)
+    u_int64_t bp = cpu->rbp;
+    u_int64_t top = thread.stack.start_of_memory_range;
+    for (int i = 4; i--; ) {
+      if (bp < top ||
+          bp + sizeof(bp) > thread.stack.start_of_memory_range +
+          thread.stack.memory.data_size ||
+          bp & 1) {
+        break;
+      }
+      uint64_t old_top = top;
+      top = bp;
+      u_int8_t* bp_addr = stack_copy + bp - thread.stack.start_of_memory_range;
+      memcpy(&bp, bp_addr, sizeof(bp));
+      if (bp == 0xDEADBEEFDEADBEEFull) {
+        struct {
+          uint64_t r15;
+          uint64_t r14;
+          uint64_t r13;
+          uint64_t r12;
+          uint64_t r11;
+          uint64_t r10;
+          uint64_t r9;
+          uint64_t r8;
+          uint64_t rdi;
+          uint64_t rsi;
+          uint64_t rdx;
+          uint64_t rcx;
+          uint64_t rbx;
+          uint64_t deadbeef;
+          uint64_t rbp;
+          uint64_t fakeret;
+          uint64_t ret;
+          /* char redzone[128]; */
+        } seccomp_stackframe;
+        if (top - offsetof(typeof(seccomp_stackframe), deadbeef) < old_top ||
+            top - offsetof(typeof(seccomp_stackframe), deadbeef) +
+            sizeof(seccomp_stackframe) >
+            thread.stack.start_of_memory_range+thread.stack.memory.data_size) {
+          break;
+        }
+        memcpy(&seccomp_stackframe,
+               bp_addr - offsetof(typeof(seccomp_stackframe), deadbeef),
+               sizeof(seccomp_stackframe));
+        cpu->rbx = seccomp_stackframe.rbx;
+        cpu->rcx = seccomp_stackframe.rcx;
+        cpu->rdx = seccomp_stackframe.rdx;
+        cpu->rsi = seccomp_stackframe.rsi;
+        cpu->rdi = seccomp_stackframe.rdi;
+        cpu->rbp = seccomp_stackframe.rbp;
+        cpu->rsp = top + 4*sizeof(uint64_t) + 128;
+        cpu->r8  = seccomp_stackframe.r8;
+        cpu->r9  = seccomp_stackframe.r9;
+        cpu->r10 = seccomp_stackframe.r10;
+        cpu->r11 = seccomp_stackframe.r11;
+        cpu->r12 = seccomp_stackframe.r12;
+        cpu->r13 = seccomp_stackframe.r13;
+        cpu->r14 = seccomp_stackframe.r14;
+        cpu->r15 = seccomp_stackframe.r15;
+        cpu->rip = seccomp_stackframe.fakeret;
+        return;
+      }
+    }
+#elif defined(__i386)
+    u_int32_t bp = cpu->ebp;
+    u_int32_t top = thread.stack.start_of_memory_range;
+    for (int i = 4; i--; ) {
+      if (bp < top ||
+          bp + sizeof(bp) > thread.stack.start_of_memory_range +
+          thread.stack.memory.data_size ||
+          bp & 1) {
+        break;
+      }
+      uint32_t old_top = top;
+      top = bp;
+      u_int8_t* bp_addr = stack_copy + bp - thread.stack.start_of_memory_range;
+      memcpy(&bp, bp_addr, sizeof(bp));
+      if (bp == 0xDEADBEEFu) {
+        struct {
+          uint32_t edi;
+          uint32_t esi;
+          uint32_t edx;
+          uint32_t ecx;
+          uint32_t ebx;
+          uint32_t deadbeef;
+          uint32_t ebp;
+          uint32_t fakeret;
+          uint32_t ret;
+        } seccomp_stackframe;
+        if (top - offsetof(typeof(seccomp_stackframe), deadbeef) < old_top ||
+            top - offsetof(typeof(seccomp_stackframe), deadbeef) +
+            sizeof(seccomp_stackframe) >
+            thread.stack.start_of_memory_range+thread.stack.memory.data_size) {
+          break;
+        }
+        memcpy(&seccomp_stackframe,
+               bp_addr - offsetof(typeof(seccomp_stackframe), deadbeef),
+               sizeof(seccomp_stackframe));
+        cpu->ebx = seccomp_stackframe.ebx;
+        cpu->ecx = seccomp_stackframe.ecx;
+        cpu->edx = seccomp_stackframe.edx;
+        cpu->esi = seccomp_stackframe.esi;
+        cpu->edi = seccomp_stackframe.edi;
+        cpu->ebp = seccomp_stackframe.ebp;
+        cpu->esp = top + 4*sizeof(void*);
+        cpu->eip = seccomp_stackframe.fakeret;
+        return;
+      }
+    }
+#endif
+  }
+
   // Write information about the threads.
   bool WriteThreadListStream(MDRawDirectory* dirent) {
     const unsigned num_threads = dumper_.threads().size();
@@ -531,11 +694,57 @@
         memory.Copy(stack_copy, stack_len);
         thread.stack.start_of_memory_range = (uintptr_t) (stack);
         thread.stack.memory = memory.location();
+        memory_blocks_.push_back(thread.stack);
+
+        // Copy 256 bytes around crashing instruction pointer to minidump.
+        const size_t kIPMemorySize = 256;
+        u_int64_t ip = GetInstructionPointer();
+        // Bound it to the upper and lower bounds of the memory map
+        // it's contained within. If it's not in mapped memory,
+        // don't bother trying to write it.
+        bool ip_is_mapped = false;
+        MDMemoryDescriptor ip_memory_d;
+        for (unsigned i = 0; i < dumper_.mappings().size(); ++i) {
+          const MappingInfo& mapping = *dumper_.mappings()[i];
+          if (ip >= mapping.start_addr &&
+              ip < mapping.start_addr + mapping.size) {
+            ip_is_mapped = true;
+            // Try to get 128 bytes before and after the IP, but
+            // settle for whatever's available.
+            ip_memory_d.start_of_memory_range =
+              std::max(mapping.start_addr,
+                       uintptr_t(ip - (kIPMemorySize / 2)));
+            uintptr_t end_of_range =
+              std::min(uintptr_t(ip + (kIPMemorySize / 2)),
+                       uintptr_t(mapping.start_addr + mapping.size));
+            ip_memory_d.memory.data_size =
+              end_of_range - ip_memory_d.start_of_memory_range;
+            break;
+          }
+        }
+
+        if (ip_is_mapped) {
+          UntypedMDRVA ip_memory(&minidump_writer_);
+          if (!ip_memory.Allocate(ip_memory_d.memory.data_size))
+            return false;
+          uint8_t* memory_copy =
+            (uint8_t*) dumper_.allocator()->Alloc(ip_memory_d.memory.data_size);
+          dumper_.CopyFromProcess(
+            memory_copy,
+            thread.thread_id,
+            reinterpret_cast<void*>(ip_memory_d.start_of_memory_range),
+            ip_memory_d.memory.data_size);
+          ip_memory.Copy(memory_copy, ip_memory_d.memory.data_size);
+          ip_memory_d.memory = ip_memory.location();
+          memory_blocks_.push_back(ip_memory_d);
+        }
+
         TypedMDRVA<RawContextCPU> cpu(&minidump_writer_);
         if (!cpu.Allocate())
           return false;
         my_memset(cpu.get(), 0, sizeof(RawContextCPU));
         CPUFillFromUContext(cpu.get(), ucontext_, float_state_);
+        PopSeccompStackFrame(cpu.get(), thread, stack_copy);
         thread.thread_context = cpu.location();
         crashing_thread_context_ = cpu.location();
       } else {
@@ -552,11 +761,14 @@
         memory.Copy(stack_copy, info.stack_len);
         thread.stack.start_of_memory_range = (uintptr_t)(info.stack);
         thread.stack.memory = memory.location();
+        memory_blocks_.push_back(thread.stack);
+
         TypedMDRVA<RawContextCPU> cpu(&minidump_writer_);
         if (!cpu.Allocate())
           return false;
         my_memset(cpu.get(), 0, sizeof(RawContextCPU));
         CPUFillFromThreadInfo(cpu.get(), info);
+        PopSeccompStackFrame(cpu.get(), thread, stack_copy);
         thread.thread_context = cpu.location();
         if (dumper_.threads()[i] == crashing_tid_) {
           assert(IsPostMortem());
@@ -571,8 +783,8 @@
   }
 
   static bool ShouldIncludeMapping(const MappingInfo& mapping) {
-    if (mapping.name[0] == 0 || // we only want modules with filenames.
-        mapping.offset || // we only want to include one mapping per shared lib.
+    if (mapping.name[0] == 0 ||  // only want modules with filenames.
+        mapping.offset ||  // only want to include one mapping per shared lib.
         mapping.size < 4096) {  // too small to get a signature for.
       return false;
     }
@@ -655,6 +867,24 @@
     return true;
   }
 
+  bool WriteMemoryListStream(MDRawDirectory* dirent) {
+    TypedMDRVA<uint32_t> list(&minidump_writer_);
+    if (!list.AllocateObjectAndArray(memory_blocks_.size(),
+                                     sizeof(MDMemoryDescriptor)))
+      return false;
+
+    dirent->stream_type = MD_MEMORY_LIST_STREAM;
+    dirent->location = list.location();
+
+    *list.get() = memory_blocks_.size();
+
+    for (size_t i = 0; i < memory_blocks_.size(); ++i) {
+      list.CopyIndexAfterObject(i, &memory_blocks_[i],
+                                sizeof(MDMemoryDescriptor));
+    }
+    return true;
+  }
+
   bool WriteExceptionStream(MDRawDirectory* dirent) {
     TypedMDRVA<MDRawExceptionStream> exc(&minidump_writer_);
     if (!exc.Allocate())
@@ -696,6 +926,87 @@
     return true;
   }
 
+  bool WriteDSODebugStream(MDRawDirectory* dirent, struct r_debug* r_debug,
+                           uint32_t dynamic_length) {
+#if defined(__ANDROID__)
+    return false;
+#else
+    // The caller provided us with a pointer to "struct r_debug". We can
+    // look up the "r_map" field to get a linked list of all loaded DSOs.
+    // Our list of DSOs potentially is different from the ones in the crashing
+    // process. So, we have to be careful to never dereference pointers
+    // directly. Instead, we use CopyFromProcess() everywhere.
+    // See <link.h> for a more detailed discussion of the how the dynamic
+    // loader communicates with debuggers.
+
+    // Count the number of loaded DSOs
+    int dso_count = 0;
+    struct r_debug debug_entry;
+    dumper_.CopyFromProcess(&debug_entry, crashing_tid_, r_debug,
+                            sizeof(debug_entry));
+    for (struct link_map* ptr = debug_entry.r_map; ptr; ) {
+      struct link_map map;
+      dumper_.CopyFromProcess(&map, crashing_tid_, ptr, sizeof(map));
+      ptr = map.l_next;
+      dso_count++;
+    }
+
+    MDRVA linkmap_rva = minidump_writer_.kInvalidMDRVA;
+    if (dso_count > 0) {
+      // If we have at least one DSO, create an array of MDRawLinkMap
+      // entries in the minidump file.
+      TypedMDRVA<MDRawLinkMap> linkmap(&minidump_writer_);
+      if (!linkmap.AllocateArray(dso_count))
+        return false;
+      linkmap_rva = linkmap.location().rva;
+      int idx = 0;
+
+      // Iterate over DSOs and write their information to mini dump
+      for (struct link_map* ptr = debug_entry.r_map; ptr; ) {
+        struct link_map map;
+        dumper_.CopyFromProcess(&map, crashing_tid_, ptr, sizeof(map));
+        ptr = map.l_next;
+        char filename[257] = { 0 };
+        if (map.l_name) {
+          dumper_.CopyFromProcess(filename, crashing_tid_, map.l_name,
+                                  sizeof(filename) - 1);
+        }
+        MDLocationDescriptor location;
+        if (!minidump_writer_.WriteString(filename, 0, &location))
+          return false;
+        MDRawLinkMap entry;
+        entry.name = location.rva;
+        entry.addr = (void*)map.l_addr;
+        entry.ld = (void*)map.l_ld;
+        linkmap.CopyIndex(idx++, &entry);
+      }
+    }
+
+    // Write MD_LINUX_DSO_DEBUG record
+    TypedMDRVA<MDRawDebug> debug(&minidump_writer_);
+    if (!debug.AllocateObjectAndArray(1, dynamic_length))
+      return false;
+    my_memset(debug.get(), 0, sizeof(MDRawDebug));
+    dirent->stream_type = MD_LINUX_DSO_DEBUG;
+    dirent->location = debug.location();
+
+    debug.get()->version = debug_entry.r_version;
+    debug.get()->map = linkmap_rva;
+    debug.get()->dso_count = dso_count;
+    debug.get()->brk = (void*)debug_entry.r_brk;
+    debug.get()->ldbase = (void*)debug_entry.r_ldbase;
+    debug.get()->dynamic = (void*)&_DYNAMIC;
+
+    char *dso_debug_data = new char[dynamic_length];
+    dumper_.CopyFromProcess(dso_debug_data, crashing_tid_, &_DYNAMIC,
+                            dynamic_length);
+    debug.CopyIndexAfterObject(0, dso_debug_data, dynamic_length);
+    delete[] dso_debug_data;
+
+    return true;
+#endif
+  }
+
  private:
   bool IsPostMortem() const {
     return siginfo_ == NULL;
@@ -705,14 +1016,26 @@
   uintptr_t GetStackPointer() {
     return ucontext_->uc_mcontext.gregs[REG_ESP];
   }
+
+  uintptr_t GetInstructionPointer() {
+    return ucontext_->uc_mcontext.gregs[REG_EIP];
+  }
 #elif defined(__x86_64)
   uintptr_t GetStackPointer() {
     return ucontext_->uc_mcontext.gregs[REG_RSP];
   }
+
+  uintptr_t GetInstructionPointer() {
+    return ucontext_->uc_mcontext.gregs[REG_RIP];
+  }
 #elif defined(__ARM_EABI__)
   uintptr_t GetStackPointer() {
     return ucontext_->uc_mcontext.arm_sp;
   }
+
+  uintptr_t GetInstructionPointer() {
+    return ucontext_->uc_mcontext.arm_ip;
+  }
 #else
 #error "This code has not been ported to your platform yet."
 #endif
@@ -765,7 +1088,7 @@
              i < sizeof(cpu_info_table) / sizeof(cpu_info_table[0]);
              i++) {
           CpuInfoEntry* entry = &cpu_info_table[i];
-          if (entry->found)
+          if (entry->found && i)
             continue;
           if (!strncmp(line, entry->info_name, strlen(entry->info_name))) {
             const char* value = strchr(line, ':');
@@ -814,7 +1137,7 @@
           }
         }
 
-popline:
+ popline:
         line_reader->PopLine(line_len);
       }
       sys_close(fd);
@@ -851,29 +1174,48 @@
     // We can't stat the files because several of the files that we want to
     // read are kernel seqfiles, which always have a length of zero. So we have
     // to read as much as we can into a buffer.
-    static const unsigned kMaxFileSize = 1024;
-    uint8_t* data = (uint8_t*) dumper_.allocator()->Alloc(kMaxFileSize);
+    static const unsigned kBufSize = 1024 - 2*sizeof(void*);
+    struct Buffers {
+      struct Buffers* next;
+      size_t len;
+      uint8_t data[kBufSize];
+    } *buffers =
+        (struct Buffers*) dumper_.allocator()->Alloc(sizeof(struct Buffers));
+    buffers->next = NULL;
+    buffers->len = 0;
 
-    size_t done = 0;
-    while (done < kMaxFileSize) {
+    size_t total = 0;
+    for (struct Buffers* bufptr = buffers;;) {
       ssize_t r;
       do {
-        r = sys_read(fd, data + done, kMaxFileSize - done);
+        r = sys_read(fd, &bufptr->data[bufptr->len], kBufSize - bufptr->len);
       } while (r == -1 && errno == EINTR);
 
       if (r < 1)
         break;
-      done += r;
+
+      total += r;
+      bufptr->len += r;
+      if (bufptr->len == kBufSize) {
+        bufptr->next =
+          (struct Buffers*) dumper_.allocator()->Alloc(sizeof(struct Buffers));
+        bufptr = bufptr->next;
+        bufptr->next = NULL;
+        bufptr->len = 0;
+      }
     }
     sys_close(fd);
 
-    if (!done)
+    if (!total)
       return false;
 
     UntypedMDRVA memory(&minidump_writer_);
-    if (!memory.Allocate(done))
+    if (!memory.Allocate(total))
       return false;
-    memory.Copy(data, done);
+    for (MDRVA pos = memory.position(); buffers; buffers = buffers->next) {
+      memory.Copy(pos, &buffers->data, buffers->len);
+      pos += buffers->len;
+    }
     *result = memory.location();
     return true;
   }
@@ -939,6 +1281,10 @@
   LinuxDumper dumper_;
   MinidumpFileWriter minidump_writer_;
   MDLocationDescriptor crashing_thread_context_;
+  // Blocks of memory written to the dump. These are all currently
+  // written while writing the thread list stream, but saved here
+  // so a memory list stream can be written afterwards.
+  wasteful_vector<MDMemoryDescriptor> memory_blocks_;
 };
 
 bool WriteMinidump(const char* filename, pid_t crashing_process,
diff --git a/src/tools/linux/core2md/minidump_writer.h b/src/tools/linux/core2md/minidump_writer.h
index 97ade5f..0695d9a 100644
--- a/src/tools/linux/core2md/minidump_writer.h
+++ b/src/tools/linux/core2md/minidump_writer.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// This file is a patched version from Google Breakpad revision 598 to
+// This file is a patched version from Google Breakpad revision 734 to
 // support core dump to minidump conversion.  Original copyright follows.
 //
-// Copyright (c) 2009, Google Inc.
+// Copyright (c) 2010, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
diff --git a/src/tools/linux/dump_syms/Makefile b/src/tools/linux/dump_syms/Makefile
index 17f9472..011482d 100644
--- a/src/tools/linux/dump_syms/Makefile
+++ b/src/tools/linux/dump_syms/Makefile
@@ -255,10 +255,7 @@
 check: check-dwarf_cu_to_module_unittest
 check-dwarf_cu_to_module_unittest: dwarf_cu_to_module_unittest
 dwarf_cu_to_module_unittest:      		\
-	bytereader.o				\
-	dwarf2reader.o				\
 	dwarf_cu_to_module.o			\
-	dwarf_line_to_module.o			\
 	gmock-all.o				\
 	gtest-all.o				\
 	gtest_main.o				\
@@ -323,7 +320,6 @@
 	cfi_assembler.o				\
 	gtest-all.o				\
 	gtest_main.o				\
-	module.o				\
 	test_assembler.o			\
 	$(empty)
 CPP_EXECUTABLES += bytereader_unittest
diff --git a/src/tools/linux/dump_syms/dump_syms.cc b/src/tools/linux/dump_syms/dump_syms.cc
index 5b127b1..7d721a8 100644
--- a/src/tools/linux/dump_syms/dump_syms.cc
+++ b/src/tools/linux/dump_syms/dump_syms.cc
@@ -27,27 +27,26 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+#include <stdio.h>
 #include <string>
-#include <cstdio>
 
 #include "common/linux/dump_symbols.h"
 
-using namespace google_breakpad;
+using google_breakpad::WriteSymbolFile;
 
 int main(int argc, char **argv) {
-  if (argc != 2 && argc != 3) {
-    fprintf(stderr, "Usage:\n\n"
-            "  For a standard ELF file with both debug info and code:\n"
-            "    %s <single-ELF>\n\n"
-            "  For a pair of ELF files split into debug info and code:\n"
-            "    %s <debug-ELF> <code-ELF>\n\n", argv[0], argv[0]);
+  if (argc < 2 || argc > 3) {
+    fprintf(stderr, "Usage: %s <binary-with-debugging-info> "
+            "[directory-for-debug-file]\n", argv[0]);
     return 1;
   }
 
-  const char *debug_file = argv[1];
-  const char *text_file = argc == 3 ? argv[2] : argv[1];
+  const char *binary = argv[1];
+  std::string debug_dir;
+  if (argc == 3)
+    debug_dir = argv[2];
 
-  if (!WriteSymbolFile(debug_file, text_file, stdout)) {
+  if (!WriteSymbolFile(binary, debug_dir, stdout)) {
     fprintf(stderr, "Failed to write symbol file.\n");
     return 1;
   }
diff --git a/src/tools/linux/md2core/minidump-2-core.cc b/src/tools/linux/md2core/minidump-2-core.cc
index 29ae328..960d445 100644
--- a/src/tools/linux/md2core/minidump-2-core.cc
+++ b/src/tools/linux/md2core/minidump-2-core.cc
@@ -31,40 +31,39 @@
 // Large parts lifted from the userspace core dumper:
 //   http://code.google.com/p/google-coredumper/
 //
-// Usage: minidump-2-core 1234.dmp > core
-
-#include <vector>
-
-#include <stdio.h>
-#include <string.h>
+// Usage: minidump-2-core [-v] 1234.dmp > core
 
 #include <elf.h>
 #include <errno.h>
-#include <unistd.h>
 #include <fcntl.h>
-#include <sys/user.h>
+#include <link.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #include <sys/mman.h>
+#include <sys/user.h>
+#include <unistd.h>
 
+#include <map>
+#include <string>
+#include <vector>
+
+#include "client/linux/minidump_writer/minidump_extension_linux.h"
 #include "google_breakpad/common/minidump_format.h"
 #include "google_breakpad/common/minidump_cpu_x86.h"
-#include "common/linux/linux_syscall_support.h"
-#include "common/linux/minidump_format_linux.h"
+#include "third_party/lss/linux_syscall_support.h"
+
 
 #if __WORDSIZE == 64
   #define ELF_CLASS ELFCLASS64
-  #define Ehdr      Elf64_Ehdr
-  #define Phdr      Elf64_Phdr
-  #define Shdr      Elf64_Shdr
-  #define Nhdr      Elf64_Nhdr
-  #define auxv_t    Elf64_auxv_t
 #else
   #define ELF_CLASS ELFCLASS32
-  #define Ehdr      Elf32_Ehdr
-  #define Phdr      Elf32_Phdr
-  #define Shdr      Elf32_Shdr
-  #define Nhdr      Elf32_Nhdr
-  #define auxv_t    Elf32_auxv_t
 #endif
+#define Ehdr   ElfW(Ehdr)
+#define Phdr   ElfW(Phdr)
+#define Shdr   ElfW(Shdr)
+#define Nhdr   ElfW(Nhdr)
+#define auxv_t ElfW(auxv_t)
 
 
 #if defined(__x86_64__)
@@ -77,8 +76,11 @@
   #define ELF_ARCH  EM_MIPS
 #endif
 
+static const MDRVA kInvalidMDRVA = static_cast<MDRVA>(-1);
+static bool verbose;
+
 static int usage(const char* argv0) {
-  fprintf(stderr, "Usage: %s <minidump file>\n", argv0);
+  fprintf(stderr, "Usage: %s [-v] <minidump file>\n", argv0);
   return 1;
 }
 
@@ -113,7 +115,7 @@
 
   // Get an object of |length| bytes at |offset| and return a pointer to it
   // unless it's out of bounds.
-  const void* GetObject(size_t offset, size_t length) {
+  const void* GetObject(size_t offset, size_t length) const {
     if (offset + length < offset)
       return NULL;
     if (offset + length > length_)
@@ -123,11 +125,24 @@
 
   // Get element |index| of an array of objects of length |length| starting at
   // |offset| bytes. Return NULL if out of bounds.
-  const void* GetArrayElement(size_t offset, size_t length, unsigned index) {
+  const void* GetArrayElement(size_t offset, size_t length,
+                              unsigned index) const {
     const size_t element_offset = offset + index * length;
     return GetObject(element_offset, length);
   }
 
+  // Get a zero-terminated string. This method only works correctly for ASCII
+  // characters and does not convert between UTF-16 and UTF-8.
+  const std::string GetString(size_t offset) const {
+    const MDString* s = (const MDString*) GetObject(offset, sizeof(MDString));
+    const u_int16_t* buf = &s->buffer[0];
+    std::string str;
+    for (unsigned i = 0; i < s->length && buf[i]; ++i) {
+      str.push_back(buf[i]);
+    }
+    return str;
+  }
+
   // Return a new range which is a subset of this range.
   MMappedRange Subrange(const MDLocationDescriptor& location) const {
     if (location.rva > length_ ||
@@ -204,7 +219,7 @@
   char           pr_psargs[80]; /* Initial part of arg list                  */
 } prpsinfo;
 
-// We parse the minidump file and keep the parsed information in this structure.
+// We parse the minidump file and keep the parsed information in this structure
 struct CrashedProcess {
   CrashedProcess()
       : crashing_tid(-1),
@@ -212,12 +227,23 @@
         auxv_length(0) {
     memset(&prps, 0, sizeof(prps));
     prps.pr_sname = 'R';
+    memset(&debug, 0, sizeof(debug));
   }
 
   struct Mapping {
-    uint64_t start_address, end_address;
+    Mapping()
+      : permissions(0xFFFFFFFF),
+        start_address(0),
+        end_address(0),
+        offset(0) {
+    }
+
+    uint32_t permissions;
+    uint64_t start_address, end_address, offset;
+    std::string filename;
+    std::string data;
   };
-  std::vector<Mapping> mappings;
+  std::map<uint64_t, Mapping> mappings;
 
   pid_t crashing_tid;
   int fatal_signal;
@@ -226,7 +252,9 @@
     pid_t tid;
     user_regs_struct regs;
     user_fpregs_struct fpregs;
+#if defined(__i386__)
     user_fpxregs_struct fpxregs;
+#endif
     uintptr_t stack_addr;
     const uint8_t* stack;
     size_t stack_length;
@@ -237,8 +265,15 @@
   size_t auxv_length;
 
   prpsinfo prps;
+
+  std::map<uintptr_t, std::string> signatures;
+
+  std::string dynamic_data;
+  MDRawDebug debug;
+  std::vector<MDRawLinkMap> link_map;
 };
 
+#if defined(__i386__)
 static uint32_t
 U32(const uint8_t* data) {
   uint32_t v;
@@ -253,7 +288,6 @@
   return v;
 }
 
-#if defined(__i386__)
 static void
 ParseThreadRegisters(CrashedProcess::Thread* thread, MMappedRange range) {
   const MDRawContextX86* rawregs =
@@ -299,6 +333,51 @@
   memcpy(thread->fpxregs.st_space, rawregs->extended_registers + 32, 128);
   memcpy(thread->fpxregs.xmm_space, rawregs->extended_registers + 160, 128);
 }
+#elif defined(__x86_64__)
+static void
+ParseThreadRegisters(CrashedProcess::Thread* thread, MMappedRange range) {
+  const MDRawContextAMD64* rawregs =
+      (const MDRawContextAMD64*) range.GetObject(0, sizeof(MDRawContextAMD64));
+
+  thread->regs.r15 = rawregs->r15;
+  thread->regs.r14 = rawregs->r14;
+  thread->regs.r13 = rawregs->r13;
+  thread->regs.r12 = rawregs->r12;
+  thread->regs.rbp = rawregs->rbp;
+  thread->regs.rbx = rawregs->rbx;
+  thread->regs.r11 = rawregs->r11;
+  thread->regs.r10 = rawregs->r10;
+  thread->regs.r9 = rawregs->r9;
+  thread->regs.r8 = rawregs->r8;
+  thread->regs.rax = rawregs->rax;
+  thread->regs.rcx = rawregs->rcx;
+  thread->regs.rdx = rawregs->rdx;
+  thread->regs.rsi = rawregs->rsi;
+  thread->regs.rdi = rawregs->rdi;
+  thread->regs.orig_rax = rawregs->rax;
+  thread->regs.rip = rawregs->rip;
+  thread->regs.cs  = rawregs->cs;
+  thread->regs.eflags = rawregs->eflags;
+  thread->regs.rsp = rawregs->rsp;
+  thread->regs.ss = rawregs->ss;
+  thread->regs.fs_base = 0;
+  thread->regs.gs_base = 0;
+  thread->regs.ds = rawregs->ds;
+  thread->regs.es = rawregs->es;
+  thread->regs.fs = rawregs->fs;
+  thread->regs.gs = rawregs->gs;
+
+  thread->fpregs.cwd = rawregs->flt_save.control_word;
+  thread->fpregs.swd = rawregs->flt_save.status_word;
+  thread->fpregs.ftw = rawregs->flt_save.tag_word;
+  thread->fpregs.fop = rawregs->flt_save.error_opcode;
+  thread->fpregs.rip = rawregs->flt_save.error_offset;
+  thread->fpregs.rdp = rawregs->flt_save.data_offset;
+  thread->fpregs.mxcsr = rawregs->flt_save.mx_csr;
+  thread->fpregs.mxcr_mask = rawregs->flt_save.mx_csr_mask;
+  memcpy(thread->fpregs.st_space, rawregs->flt_save.float_registers, 8 * 16);
+  memcpy(thread->fpregs.xmm_space, rawregs->flt_save.xmm_registers, 16 * 16);
+}
 #else
 #error "This code has not been ported to your platform yet"
 #endif
@@ -308,6 +387,13 @@
                 const MMappedRange& full_file) {
   const uint32_t num_threads =
       *(const uint32_t*) range.GetObject(0, sizeof(uint32_t));
+  if (verbose) {
+    fprintf(stderr,
+            "MD_THREAD_LIST_STREAM:\n"
+            "Found %d threads\n"
+            "\n\n",
+            num_threads);
+  }
   for (unsigned i = 0; i < num_threads; ++i) {
     CrashedProcess::Thread thread;
     memset(&thread, 0, sizeof(thread));
@@ -328,43 +414,304 @@
 }
 
 static void
+ParseSystemInfo(CrashedProcess* crashinfo, MMappedRange range,
+                const MMappedRange &full_file) {
+  const MDRawSystemInfo* sysinfo =
+    (MDRawSystemInfo*) range.GetObject(0, sizeof(MDRawSystemInfo));
+  if (!sysinfo) {
+    fprintf(stderr, "Failed to access MD_SYSTEM_INFO_STREAM\n");
+    _exit(1);
+  }
+#if defined(__i386__)
+  if (sysinfo->processor_architecture != MD_CPU_ARCHITECTURE_X86) {
+    fprintf(stderr,
+            "This version of minidump-2-core only supports x86 (32bit)%s.\n",
+            sysinfo->processor_architecture == MD_CPU_ARCHITECTURE_AMD64 ?
+            ",\nbut the minidump file is from a 64bit machine" : "");
+    _exit(1);
+  }
+#elif defined(__x86_64__)
+  if (sysinfo->processor_architecture != MD_CPU_ARCHITECTURE_AMD64) {
+    fprintf(stderr,
+            "This version of minidump-2-core only supports x86 (64bit)%s.\n",
+            sysinfo->processor_architecture == MD_CPU_ARCHITECTURE_X86 ?
+            ",\nbut the minidump file is from a 32bit machine" : "");
+    _exit(1);
+  }
+#else
+#error "This code has not been ported to your platform yet"
+#endif
+  if (!strstr(full_file.GetString(sysinfo->csd_version_rva).c_str(), "Linux")){
+    fprintf(stderr, "This minidump was not generated by Linux.\n");
+    _exit(1);
+  }
+
+  if (verbose) {
+    fprintf(stderr,
+            "MD_SYSTEM_INFO_STREAM:\n"
+            "Architecture: %s\n"
+            "Number of processors: %d\n"
+            "Processor level: %d\n"
+            "Processor model: %d\n"
+            "Processor stepping: %d\n",
+            sysinfo->processor_architecture == MD_CPU_ARCHITECTURE_X86
+            ? "i386"
+            : sysinfo->processor_architecture == MD_CPU_ARCHITECTURE_AMD64
+            ? "x86-64"
+            : sysinfo->processor_architecture == MD_CPU_ARCHITECTURE_ARM
+            ? "ARM"
+            : "???",
+            sysinfo->number_of_processors,
+            sysinfo->processor_level,
+            sysinfo->processor_revision >> 8,
+            sysinfo->processor_revision & 0xFF);
+    if (sysinfo->processor_architecture == MD_CPU_ARCHITECTURE_X86 ||
+        sysinfo->processor_architecture == MD_CPU_ARCHITECTURE_AMD64) {
+      fputs("Vendor id: ", stderr);
+      const char *nul =
+        (const char *)memchr(sysinfo->cpu.x86_cpu_info.vendor_id, 0,
+                             sizeof(sysinfo->cpu.x86_cpu_info.vendor_id));
+      fwrite(sysinfo->cpu.x86_cpu_info.vendor_id,
+             nul ? nul - (const char *)&sysinfo->cpu.x86_cpu_info.vendor_id[0]
+             : sizeof(sysinfo->cpu.x86_cpu_info.vendor_id), 1, stderr);
+      fputs("\n", stderr);
+    }
+    fprintf(stderr, "OS: %s\n",
+            full_file.GetString(sysinfo->csd_version_rva).c_str());
+    fputs("\n\n", stderr);
+  }
+}
+
+static void
+ParseCPUInfo(CrashedProcess* crashinfo, MMappedRange range) {
+  if (verbose) {
+    fputs("MD_LINUX_CPU_INFO:\n", stderr);
+    fwrite(range.data(), range.length(), 1, stderr);
+    fputs("\n\n\n", stderr);
+  }
+}
+
+static void
+ParseProcessStatus(CrashedProcess* crashinfo, MMappedRange range) {
+  if (verbose) {
+    fputs("MD_LINUX_PROC_STATUS:\n", stderr);
+    fwrite(range.data(), range.length(), 1, stderr);
+    fputs("\n\n", stderr);
+  }
+}
+
+static void
+ParseLSBRelease(CrashedProcess* crashinfo, MMappedRange range) {
+  if (verbose) {
+    fputs("MD_LINUX_LSB_RELEASE:\n", stderr);
+    fwrite(range.data(), range.length(), 1, stderr);
+    fputs("\n\n", stderr);
+  }
+}
+
+static void
+ParseMaps(CrashedProcess* crashinfo, MMappedRange range) {
+  if (verbose) {
+    fputs("MD_LINUX_MAPS:\n", stderr);
+    fwrite(range.data(), range.length(), 1, stderr);
+  }
+  for (const u_int8_t* ptr = range.data();
+       ptr < range.data() + range.length();) {
+    const u_int8_t* eol = (u_int8_t*)memchr(ptr, '\n',
+                                       range.data() + range.length() - ptr);
+    std::string line((const char*)ptr,
+                     eol ? eol - ptr : range.data() + range.length() - ptr);
+    ptr = eol ? eol + 1 : range.data() + range.length();
+    unsigned long long start, stop, offset;
+    char* permissions = NULL;
+    char* filename = NULL;
+    sscanf(line.c_str(), "%llx-%llx %m[-rwxp] %llx %*[:0-9a-f] %*d %ms",
+           &start, &stop, &permissions, &offset, &filename);
+    if (filename && *filename == '/') {
+      CrashedProcess::Mapping mapping;
+      mapping.permissions = 0;
+      if (strchr(permissions, 'r')) {
+        mapping.permissions |= PF_R;
+      }
+      if (strchr(permissions, 'w')) {
+        mapping.permissions |= PF_W;
+      }
+      if (strchr(permissions, 'x')) {
+        mapping.permissions |= PF_X;
+      }
+      mapping.start_address = start;
+      mapping.end_address = stop;
+      mapping.offset = offset;
+      if (filename) {
+        mapping.filename = filename;
+      }
+      crashinfo->mappings[mapping.start_address] = mapping;
+    }
+    free(permissions);
+    free(filename);
+  }
+  if (verbose) {
+    fputs("\n\n\n", stderr);
+  }
+}
+
+static void
+ParseEnvironment(CrashedProcess* crashinfo, MMappedRange range) {
+  if (verbose) {
+    fputs("MD_LINUX_ENVIRON:\n", stderr);
+    char *env = new char[range.length()];
+    memcpy(env, range.data(), range.length());
+    int nul_count = 0;
+    for (char *ptr = env;;) {
+      ptr = (char *)memchr(ptr, '\000', range.length() - (ptr - env));
+      if (!ptr) {
+        break;
+      }
+      if (ptr > env && ptr[-1] == '\n') {
+        if (++nul_count > 5) {
+          // Some versions of Chrome try to rewrite the process' command line
+          // in a way that causes the environment to be corrupted. Afterwards,
+          // part of the environment will contain the trailing bit of the
+          // command line. The rest of the environment will be filled with
+          // NUL bytes.
+          // We detect this corruption by counting the number of consecutive
+          // NUL bytes. Normally, we would not expect any consecutive NUL
+          // bytes. But we are conservative and only suppress printing of
+          // the environment if we see at least five consecutive NULs.
+          fputs("Environment has been corrupted; no data available", stderr);
+          goto env_corrupted;
+        }
+      } else {
+        nul_count = 0;
+      }
+      *ptr = '\n';
+    }
+    fwrite(env, range.length(), 1, stderr);
+  env_corrupted:
+    delete[] env;
+    fputs("\n\n\n", stderr);
+  }
+}
+
+static void
 ParseAuxVector(CrashedProcess* crashinfo, MMappedRange range) {
+  // Some versions of Chrome erroneously used the MD_LINUX_AUXV stream value
+  // when dumping /proc/$x/maps
+  if (range.length() > 17) {
+    // The AUXV vector contains binary data, whereas the maps always begin
+    // with an 8+ digit hex address followed by a hyphen and another 8+ digit
+    // address.
+    char addresses[18];
+    memcpy(addresses, range.data(), 17);
+    addresses[17] = '\000';
+    if (strspn(addresses, "0123456789abcdef-") == 17) {
+      ParseMaps(crashinfo, range);
+      return;
+    }
+  }
+
   crashinfo->auxv = range.data();
   crashinfo->auxv_length = range.length();
 }
 
 static void
 ParseCmdLine(CrashedProcess* crashinfo, MMappedRange range) {
+  // The command line is supposed to use NUL bytes to separate arguments.
+  // As Chrome rewrites its own command line and (incorrectly) substitutes
+  // spaces, this is often not the case in our minidump files.
   const char* cmdline = (const char*) range.data();
+  if (verbose) {
+    fputs("MD_LINUX_CMD_LINE:\n", stderr);
+    unsigned i = 0;
+    for (; i < range.length() && cmdline[i] && cmdline[i] != ' '; ++i) { }
+    fputs("argv[0] = \"", stderr);
+    fwrite(cmdline, i, 1, stderr);
+    fputs("\"\n", stderr);
+    for (unsigned j = ++i, argc = 1; j < range.length(); ++j) {
+      if (!cmdline[j] || cmdline[j] == ' ') {
+        fprintf(stderr, "argv[%d] = \"", argc++);
+        fwrite(cmdline + i, j - i, 1, stderr);
+        fputs("\"\n", stderr);
+        i = j + 1;
+      }
+    }
+    fputs("\n\n", stderr);
+  }
+
+  const char *binary_name = cmdline;
   for (size_t i = 0; i < range.length(); ++i) {
-    if (cmdline[i] == 0) {
+    if (cmdline[i] == '/') {
+      binary_name = cmdline + i + 1;
+    } else if (cmdline[i] == 0 || cmdline[i] == ' ') {
       static const size_t fname_len = sizeof(crashinfo->prps.pr_fname) - 1;
       static const size_t args_len = sizeof(crashinfo->prps.pr_psargs) - 1;
       memset(crashinfo->prps.pr_fname, 0, fname_len + 1);
       memset(crashinfo->prps.pr_psargs, 0, args_len + 1);
-      const char* binary_name = strrchr(cmdline, '/');
-      if (binary_name) {
-        binary_name++;
-        const unsigned len = strlen(binary_name);
-        memcpy(crashinfo->prps.pr_fname, binary_name,
+      unsigned len = cmdline + i - binary_name;
+      memcpy(crashinfo->prps.pr_fname, binary_name,
                len > fname_len ? fname_len : len);
-      } else {
-        memcpy(crashinfo->prps.pr_fname, cmdline,
-               i > fname_len ? fname_len : i);
-      }
 
-      const unsigned len = range.length() > args_len ?
-                           args_len : range.length();
+      len = range.length() > args_len ? args_len : range.length();
       memcpy(crashinfo->prps.pr_psargs, cmdline, len);
       for (unsigned i = 0; i < len; ++i) {
         if (crashinfo->prps.pr_psargs[i] == 0)
           crashinfo->prps.pr_psargs[i] = ' ';
       }
+      break;
     }
   }
 }
 
 static void
+ParseDSODebugInfo(CrashedProcess* crashinfo, MMappedRange range,
+                  const MMappedRange &full_file) {
+  const MDRawDebug* debug =
+    (MDRawDebug*) range.GetObject(0, sizeof(MDRawDebug));
+  if (!debug) {
+    return;
+  }
+  if (verbose) {
+    fprintf(stderr,
+            "MD_LINUX_DSO_DEBUG:\n"
+            "Version: %d\n"
+            "Number of DSOs: %d\n"
+            "Brk handler: %p\n"
+            "Dynamic loader at: %p\n"
+            "_DYNAMIC: %p\n",
+            debug->version,
+            debug->dso_count,
+            debug->brk,
+            debug->ldbase,
+            debug->dynamic);
+  }
+  crashinfo->debug = *debug;
+  if (range.length() > sizeof(MDRawDebug)) {
+    char* dynamic_data = (char*)range.data() + sizeof(MDRawDebug);
+    crashinfo->dynamic_data.assign(dynamic_data,
+                                   range.length() - sizeof(MDRawDebug));
+  }
+  if (debug->map != kInvalidMDRVA) {
+    for (int i = 0; i < debug->dso_count; ++i) {
+      const MDRawLinkMap* link_map =
+        (MDRawLinkMap*) full_file.GetArrayElement(debug->map,
+                                                  sizeof(MDRawLinkMap), i);
+      if (link_map) {
+        if (verbose) {
+          fprintf(stderr,
+                  "#%03d: %p, %p, \"%s\"\n",
+                  i, link_map->addr, link_map->ld,
+                  full_file.GetString(link_map->name).c_str());
+        }
+        crashinfo->link_map.push_back(*link_map);
+      }
+    }
+  }
+  if (verbose) {
+    fputs("\n\n", stderr);
+  }
+}
+
+static void
 ParseExceptionStream(CrashedProcess* crashinfo, MMappedRange range) {
   const MDRawExceptionStream* exp =
       (MDRawExceptionStream*) range.GetObject(0, sizeof(MDRawExceptionStream));
@@ -401,6 +748,7 @@
     return false;
   }
 
+#if defined(__i386__)
   nhdr.n_descsz = sizeof(user_fpxregs_struct);
   nhdr.n_type = NT_PRXFPREG;
   if (!writea(1, &nhdr, sizeof(nhdr)) ||
@@ -408,12 +756,17 @@
       !writea(1, &thread.fpxregs, sizeof(user_fpxregs_struct))) {
     return false;
   }
+#endif
 
   return true;
 }
 
 static void
-ParseModuleStream(CrashedProcess* crashinfo, MMappedRange range) {
+ParseModuleStream(CrashedProcess* crashinfo, MMappedRange range,
+                  const MMappedRange &full_file) {
+  if (verbose) {
+    fputs("MD_MODULE_LIST_STREAM:\n", stderr);
+  }
   const uint32_t num_mappings =
       *(const uint32_t*) range.GetObject(0, sizeof(uint32_t));
   for (unsigned i = 0; i < num_mappings; ++i) {
@@ -424,16 +777,199 @@
     mapping.start_address = rawmodule->base_of_image;
     mapping.end_address = rawmodule->size_of_image + rawmodule->base_of_image;
 
-    crashinfo->mappings.push_back(mapping);
+    if (crashinfo->mappings.find(mapping.start_address) ==
+        crashinfo->mappings.end()) {
+      // We prefer data from MD_LINUX_MAPS over MD_MODULE_LIST_STREAM, as
+      // the former is a strict superset of the latter.
+      crashinfo->mappings[mapping.start_address] = mapping;
+    }
+
+    const MDCVInfoPDB70* record =
+      (const MDCVInfoPDB70*)full_file.GetObject(rawmodule->cv_record.rva,
+                                                MDCVInfoPDB70_minsize);
+    char guid[40];
+    sprintf(guid, "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
+            record->signature.data1, record->signature.data2,
+            record->signature.data3,
+            record->signature.data4[0], record->signature.data4[1],
+            record->signature.data4[2], record->signature.data4[3],
+            record->signature.data4[4], record->signature.data4[5],
+            record->signature.data4[6], record->signature.data4[7]);
+    std::string filename = full_file.GetString(rawmodule->module_name_rva);
+    size_t slash = filename.find_last_of('/');
+    std::string basename = slash == std::string::npos ?
+      filename : filename.substr(slash + 1);
+    if (strcmp(guid, "00000000-0000-0000-0000-000000000000")) {
+      crashinfo->signatures[rawmodule->base_of_image] =
+        std::string("/var/lib/breakpad/") + guid + "-" + basename;
+    }
+
+    if (verbose) {
+      fprintf(stderr, "0x%08llX-0x%08llX, ChkSum: 0x%08X, GUID: %s, \"%s\"\n",
+              (unsigned long long)rawmodule->base_of_image,
+              (unsigned long long)rawmodule->base_of_image +
+              rawmodule->size_of_image,
+              rawmodule->checksum, guid, filename.c_str());
+    }
+  }
+  if (verbose) {
+    fputs("\n\n", stderr);
+  }
+}
+
+static void
+AddDataToMapping(CrashedProcess* crashinfo, const std::string& data,
+                 uintptr_t addr) {
+  for (std::map<uint64_t, CrashedProcess::Mapping>::iterator
+         iter = crashinfo->mappings.begin();
+       iter != crashinfo->mappings.end();
+       ++iter) {
+    if (addr >= iter->second.start_address &&
+        addr < iter->second.end_address) {
+      CrashedProcess::Mapping mapping = iter->second;
+      if ((addr & ~4095) != iter->second.start_address) {
+        // If there are memory pages in the mapping prior to where the
+        // data starts, truncate the existing mapping so that it ends with
+        // the page immediately preceding the data region.
+        iter->second.end_address = addr & ~4095;
+        if (!mapping.filename.empty()) {
+          // "mapping" is a copy of "iter->second". We are splitting the
+          // existing mapping into two separate ones when we write the data
+          // to the core file. The first one does not have any associated
+          // data in the core file, the second one is backed by data that is
+          // included with the core file.
+          // If this mapping wasn't supposed to be anonymous, then we also
+          // have to update the file offset upon splitting the mapping.
+          mapping.offset += iter->second.end_address -
+            iter->second.start_address;
+        }
+      }
+      // Create a new mapping that contains the data contents. We often
+      // limit the amount of data that is actually written to the core
+      // file. But it is OK if the mapping itself extends past the end of
+      // the data.
+      mapping.start_address = addr & ~4095;
+      mapping.data.assign(addr & 4095, 0).append(data);
+      mapping.data.append(-mapping.data.size() & 4095, 0);
+      crashinfo->mappings[mapping.start_address] = mapping;
+      return;
+    }
+  }
+  // Didn't find a suitable existing mapping for the data. Create a new one.
+  CrashedProcess::Mapping mapping;
+  mapping.permissions = PF_R | PF_W;
+  mapping.start_address = addr & ~4095;
+  mapping.end_address =
+    (addr + data.size() + 4095) & ~4095;
+  mapping.data.assign(addr & 4095, 0).append(data);
+  mapping.data.append(-mapping.data.size() & 4095, 0);
+  crashinfo->mappings[mapping.start_address] = mapping;
+}
+
+static void
+AugmentMappings(CrashedProcess* crashinfo,
+                const MMappedRange &full_file) {
+  // For each thread, find the memory mapping that matches the thread's stack.
+  // Then adjust the mapping to include the stack dump.
+  for (unsigned i = 0; i < crashinfo->threads.size(); ++i) {
+    const CrashedProcess::Thread& thread = crashinfo->threads[i];
+    AddDataToMapping(crashinfo,
+                     std::string((char *)thread.stack, thread.stack_length),
+                     thread.stack_addr);
+  }
+
+  // Create a new link map with information about DSOs. We move this map to
+  // the beginning of the address space, as this area should always be
+  // available.
+  static const uintptr_t start_addr = 4096;
+  std::string data;
+  struct r_debug debug = { 0 };
+  debug.r_version = crashinfo->debug.version;
+  debug.r_brk = (ElfW(Addr))crashinfo->debug.brk;
+  debug.r_state = r_debug::RT_CONSISTENT;
+  debug.r_ldbase = (ElfW(Addr))crashinfo->debug.ldbase;
+  debug.r_map = crashinfo->debug.dso_count > 0 ?
+    (struct link_map*)(start_addr + sizeof(debug)) : 0;
+  data.append((char*)&debug, sizeof(debug));
+
+  struct link_map* prev = 0;
+  for (std::vector<MDRawLinkMap>::iterator iter = crashinfo->link_map.begin();
+       iter != crashinfo->link_map.end();
+       ++iter) {
+    struct link_map link_map = { 0 };
+    link_map.l_addr = (ElfW(Addr))iter->addr;
+    link_map.l_name = (char*)(start_addr + data.size() + sizeof(link_map));
+    link_map.l_ld = (ElfW(Dyn)*)iter->ld;
+    link_map.l_prev = prev;
+    prev = (struct link_map*)(start_addr + data.size());
+    std::string filename = full_file.GetString(iter->name);
+
+    // Look up signature for this filename. If available, change filename
+    // to point to GUID, instead.
+    std::map<uintptr_t, std::string>::const_iterator guid =
+      crashinfo->signatures.find((uintptr_t)iter->addr);
+    if (guid != crashinfo->signatures.end()) {
+      filename = guid->second;
+    }
+
+    if (std::distance(iter, crashinfo->link_map.end()) == 1) {
+      link_map.l_next = 0;
+    } else {
+      link_map.l_next = (struct link_map*)(start_addr + data.size() +
+                                           sizeof(link_map) +
+                                           ((filename.size() + 8) & ~7));
+    }
+    data.append((char*)&link_map, sizeof(link_map));
+    data.append(filename);
+    data.append(8 - (filename.size() & 7), 0);
+  }
+  AddDataToMapping(crashinfo, data, start_addr);
+
+  // Map the page containing the _DYNAMIC array
+  if (!crashinfo->dynamic_data.empty()) {
+    // Make _DYNAMIC DT_DEBUG entry point to our link map
+    for (int i = 0;; ++i) {
+      ElfW(Dyn) dyn;
+      if ((i+1)*sizeof(dyn) > crashinfo->dynamic_data.length()) {
+      no_dt_debug:
+        if (verbose) {
+          fprintf(stderr, "No DT_DEBUG entry found\n");
+        }
+        return;
+      }
+      memcpy(&dyn, crashinfo->dynamic_data.c_str() + i*sizeof(dyn),
+             sizeof(dyn));
+      if (dyn.d_tag == DT_DEBUG) {
+        crashinfo->dynamic_data.replace(i*sizeof(dyn) +
+                                       offsetof(ElfW(Dyn), d_un.d_ptr),
+                                       sizeof(start_addr),
+                                       (char*)&start_addr, sizeof(start_addr));
+        break;
+      } else if (dyn.d_tag == DT_NULL) {
+        goto no_dt_debug;
+      }
+    }
+    AddDataToMapping(crashinfo, crashinfo->dynamic_data,
+                     (uintptr_t)crashinfo->debug.dynamic);
   }
 }
 
 int
 main(int argc, char** argv) {
-  if (argc != 2)
+  int argi = 1;
+  while (argi < argc && argv[argi][0] == '-') {
+    if (!strcmp(argv[argi], "-v")) {
+      verbose = true;
+    } else {
+      return usage(argv[0]);
+    }
+    argi++;
+  }
+
+  if (argc != argi + 1)
     return usage(argv[0]);
 
-  const int fd = open(argv[1], O_RDONLY);
+  const int fd = open(argv[argi], O_RDONLY);
   if (fd < 0)
     return usage(argv[0]);
 
@@ -454,6 +990,27 @@
 
   CrashedProcess crashinfo;
 
+  // Always check the system info first, as that allows us to tell whether
+  // this is a minidump file that is compatible with our converter.
+  bool ok = false;
+  for (unsigned i = 0; i < header->stream_count; ++i) {
+    const MDRawDirectory* dirent =
+        (const MDRawDirectory*) dump.GetArrayElement(
+            header->stream_directory_rva, sizeof(MDRawDirectory), i);
+    switch (dirent->stream_type) {
+      case MD_SYSTEM_INFO_STREAM:
+        ParseSystemInfo(&crashinfo, dump.Subrange(dirent->location), dump);
+        ok = true;
+        break;
+      default:
+        break;
+    }
+  }
+  if (!ok) {
+    fprintf(stderr, "Cannot determine input file format.\n");
+    _exit(1);
+  }
+
   for (unsigned i = 0; i < header->stream_count; ++i) {
     const MDRawDirectory* dirent =
         (const MDRawDirectory*) dump.GetArrayElement(
@@ -462,22 +1019,44 @@
       case MD_THREAD_LIST_STREAM:
         ParseThreadList(&crashinfo, dump.Subrange(dirent->location), dump);
         break;
+      case MD_LINUX_CPU_INFO:
+        ParseCPUInfo(&crashinfo, dump.Subrange(dirent->location));
+        break;
+      case MD_LINUX_PROC_STATUS:
+        ParseProcessStatus(&crashinfo, dump.Subrange(dirent->location));
+        break;
+      case MD_LINUX_LSB_RELEASE:
+        ParseLSBRelease(&crashinfo, dump.Subrange(dirent->location));
+        break;
+      case MD_LINUX_ENVIRON:
+        ParseEnvironment(&crashinfo, dump.Subrange(dirent->location));
+        break;
+      case MD_LINUX_MAPS:
+        ParseMaps(&crashinfo, dump.Subrange(dirent->location));
+        break;
       case MD_LINUX_AUXV:
         ParseAuxVector(&crashinfo, dump.Subrange(dirent->location));
         break;
       case MD_LINUX_CMD_LINE:
         ParseCmdLine(&crashinfo, dump.Subrange(dirent->location));
         break;
+      case MD_LINUX_DSO_DEBUG:
+        ParseDSODebugInfo(&crashinfo, dump.Subrange(dirent->location), dump);
+        break;
       case MD_EXCEPTION_STREAM:
         ParseExceptionStream(&crashinfo, dump.Subrange(dirent->location));
         break;
       case MD_MODULE_LIST_STREAM:
-        ParseModuleStream(&crashinfo, dump.Subrange(dirent->location));
+        ParseModuleStream(&crashinfo, dump.Subrange(dirent->location), dump);
+        break;
       default:
-        fprintf(stderr, "Skipping %x\n", dirent->stream_type);
+        if (verbose)
+          fprintf(stderr, "Skipping %x\n", dirent->stream_type);
     }
   }
 
+  AugmentMappings(&crashinfo, dump);
+
   // Write the ELF header. The file will look like:
   //   ELF header
   //   Phdr for the PT_NOTE
@@ -499,21 +1078,23 @@
   ehdr.e_phoff    = sizeof(Ehdr);
   ehdr.e_ehsize   = sizeof(Ehdr);
   ehdr.e_phentsize= sizeof(Phdr);
-  ehdr.e_phnum    = 1 + crashinfo.threads.size() + crashinfo.mappings.size();
+  ehdr.e_phnum    = 1 +                         // PT_NOTE
+                    crashinfo.mappings.size();  // memory mappings
   ehdr.e_shentsize= sizeof(Shdr);
   if (!writea(1, &ehdr, sizeof(Ehdr)))
     return 1;
 
-  size_t offset = sizeof(Ehdr) +
-                  (1 + crashinfo.threads.size() +
-                   crashinfo.mappings.size()) * sizeof(Phdr);
+  size_t offset = sizeof(Ehdr) + ehdr.e_phnum * sizeof(Phdr);
   size_t filesz = sizeof(Nhdr) + 8 + sizeof(prpsinfo) +
                   // sizeof(Nhdr) + 8 + sizeof(user) +
                   sizeof(Nhdr) + 8 + crashinfo.auxv_length +
                   crashinfo.threads.size() * (
                     (sizeof(Nhdr) + 8 + sizeof(prstatus)) +
-                     sizeof(Nhdr) + 8 + sizeof(user_fpregs_struct) +
-                     sizeof(Nhdr) + 8 + sizeof(user_fpxregs_struct));
+                     sizeof(Nhdr) + 8 + sizeof(user_fpregs_struct)
+#if defined(__i386__)
+                   + sizeof(Nhdr) + 8 + sizeof(user_fpxregs_struct)
+#endif
+                    );
 
   Phdr phdr;
   memset(&phdr, 0, sizeof(Phdr));
@@ -524,31 +1105,35 @@
     return 1;
 
   phdr.p_type = PT_LOAD;
-  phdr.p_align = getpagesize();
+  phdr.p_align = 4096;
   size_t note_align = phdr.p_align - ((offset+filesz) % phdr.p_align);
   if (note_align == phdr.p_align)
     note_align = 0;
   offset += note_align;
 
-  for (unsigned i = 0; i < crashinfo.threads.size(); ++i) {
-    const CrashedProcess::Thread& thread = crashinfo.threads[i];
-    offset += filesz;
-    filesz = thread.stack_length;
-    phdr.p_offset = offset;
-    phdr.p_vaddr = thread.stack_addr;
-    phdr.p_filesz = phdr.p_memsz = filesz;
-    phdr.p_flags = PF_R | PF_W;
-    if (!writea(1, &phdr, sizeof(phdr)))
-      return 1;
-  }
-
-  for (unsigned i = 0; i < crashinfo.mappings.size(); ++i) {
-    const CrashedProcess::Mapping& mapping = crashinfo.mappings[i];
-    phdr.p_offset = 0;
+  for (std::map<uint64_t, CrashedProcess::Mapping>::const_iterator iter =
+         crashinfo.mappings.begin();
+       iter != crashinfo.mappings.end(); ++iter) {
+    const CrashedProcess::Mapping& mapping = iter->second;
+    if (mapping.permissions == 0xFFFFFFFF) {
+      // This is a map that we found in MD_MODULE_LIST_STREAM (as opposed to
+      // MD_LINUX_MAPS). It lacks some of the information that we would like
+      // to include.
+      phdr.p_flags = PF_R;
+    } else {
+      phdr.p_flags = mapping.permissions;
+    }
     phdr.p_vaddr = mapping.start_address;
-    phdr.p_filesz = 0;
-    phdr.p_flags = PF_R;
     phdr.p_memsz = mapping.end_address - mapping.start_address;
+    if (mapping.data.size()) {
+      offset += filesz;
+      filesz = mapping.data.size();
+      phdr.p_filesz = mapping.data.size();
+      phdr.p_offset = offset;
+    } else {
+      phdr.p_filesz = 0;
+      phdr.p_offset = 0;
+    }
     if (!writea(1, &phdr, sizeof(phdr)))
       return 1;
   }
@@ -591,10 +1176,14 @@
       return 1;
   }
 
-  for (unsigned i = 0; i < crashinfo.threads.size(); ++i) {
-    const CrashedProcess::Thread& thread = crashinfo.threads[i];
-    if (!writea(1, thread.stack, thread.stack_length))
-      return 1;
+  for (std::map<uint64_t, CrashedProcess::Mapping>::const_iterator iter =
+         crashinfo.mappings.begin();
+       iter != crashinfo.mappings.end(); ++iter) {
+    const CrashedProcess::Mapping& mapping = iter->second;
+    if (mapping.data.size()) {
+      if (!writea(1, mapping.data.c_str(), mapping.data.size()))
+        return 1;
+    }
   }
 
   munmap(const_cast<void*>(bytes), st.st_size);
diff --git a/src/tools/linux/symupload/minidump_upload.cc b/src/tools/linux/symupload/minidump_upload.cc
index 0b58984..6f1748a 100644
--- a/src/tools/linux/symupload/minidump_upload.cc
+++ b/src/tools/linux/symupload/minidump_upload.cc
@@ -27,14 +27,15 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// minidump_upload.m: Upload a minidump to a HTTP server.  The upload is sent as
-// a multipart/form-data POST request with the following parameters:
+// minidump_upload.cc: Upload a minidump to a HTTP server.
+// The upload is sent as a multipart/form-data POST request with
+// the following parameters:
 //  prod: the product name
 //  ver: the product version
 //  symbol_file: the breakpad format symbol file
 
-#include <stdio.h>  // for printf() and stderr
-#include <stdlib.h>  // for exit()
+#include <stdio.h>
+#include <stdlib.h>
 #include <unistd.h>
 
 #include <string>
@@ -68,6 +69,7 @@
                                          "upload_file_minidump",
                                          options->proxy,
                                          options->proxy_user_pwd,
+                                         "",
                                          &response,
                                          &error);
 
diff --git a/src/tools/linux/symupload/sym_upload.cc b/src/tools/linux/symupload/sym_upload.cc
index 351e6e5..a4d5be7 100644
--- a/src/tools/linux/symupload/sym_upload.cc
+++ b/src/tools/linux/symupload/sym_upload.cc
@@ -39,12 +39,11 @@
 //  cpu: the CPU that the module was built for
 //  symbol_file: the contents of the breakpad-format symbol file
 
-#include <stdlib.h>  // for exit()
-#include <unistd.h>
+#include <assert.h>
+#include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
 
-#include <cstdio>
-#include <cassert>
 #include <functional>
 #include <iostream>
 #include <string>
@@ -146,6 +145,7 @@
                                          "symbol_file",
                                          options->proxy,
                                          options->proxy_user_pwd,
+                                         "",
                                          &response,
                                          &error);
 
diff --git a/src/tools/mac/crash_report/crash_report.mm b/src/tools/mac/crash_report/crash_report.mm
index 2129a41..78eb6f2 100644
--- a/src/tools/mac/crash_report/crash_report.mm
+++ b/src/tools/mac/crash_report/crash_report.mm
@@ -88,12 +88,12 @@
 
 //=============================================================================
 static void PrintStack(const CallStack *stack, const string &cpu) {
-  int frame_count = stack->frames()->size();
+  size_t frame_count = stack->frames()->size();
   char buffer[1024];
-  for (int frame_index = 0; frame_index < frame_count; ++frame_index) {
+  for (size_t frame_index = 0; frame_index < frame_count; ++frame_index) {
     const StackFrame *frame = stack->frames()->at(frame_index);
     const CodeModule *module = frame->module;
-    printf("%2d ", frame_index);
+    printf("%2zu ", frame_index);
 
     if (module) {
       // Module name (20 chars max)
@@ -106,7 +106,7 @@
       buffer[maxStr] = 0;
 
       printf("%-*s",maxStr, buffer);
-      
+
       u_int64_t instruction = frame->instruction;
 
       // PPC only: Adjust the instruction to match that of Crash reporter.  The
@@ -195,16 +195,16 @@
 static void PrintModules(const CodeModules *modules) {
   if (!modules)
     return;
-        
+
   printf("\n");
   printf("Loaded modules:\n");
-        
+
   u_int64_t main_address = 0;
   const CodeModule *main_module = modules->GetMainModule();
   if (main_module) {
     main_address = main_module->base_address();
   }
-        
+
   unsigned int module_count = modules->module_count();
   for (unsigned int module_sequence = 0;
        module_sequence < module_count;
@@ -223,7 +223,7 @@
 }
 
 static void ProcessSingleReport(Options *options, NSString *file_path) {
-  string minidump_file([file_path fileSystemRepresentation]);  
+  string minidump_file([file_path fileSystemRepresentation]);
   BasicSourceLineResolver resolver;
   string search_dir = options->searchDir ?
     [options->searchDir fileSystemRepresentation] : "";
@@ -279,7 +279,7 @@
   }
 
   // Print all of the threads in the dump.
-  int thread_count = process_state.threads()->size();
+  int thread_count = static_cast<int>(process_state.threads()->size());
   const std::vector<google_breakpad::MinidumpMemoryRegion*>
     *thread_memory_regions = process_state.thread_memory_regions();
 
@@ -338,15 +338,15 @@
 static void Usage(int argc, const char *argv[]) {
   fprintf(stderr, "Convert a minidump to a crash report.  Breakpad symbol "
                   "files will be used (or created if missing) in /tmp.\n"
-                  "If a symbol-file-search-dir is specified, any symbol " 
-                  "files in it will be used instead of being loaded from "  
-                  "modules on disk.\n" 
+                  "If a symbol-file-search-dir is specified, any symbol "
+                  "files in it will be used instead of being loaded from "
+                  "modules on disk.\n"
                   "If modules cannot be found at the paths stored in the "
-                  "minidump file, they will be searched for at "    
+                  "minidump file, they will be searched for at "
                   "<module-search-dir>/<path-in-minidump-file>.\n");
   fprintf(stderr, "Usage: %s [-s module-search-dir] [-S symbol-file-search-dir] "
 	          "minidump-file\n", argv[0]);
-  fprintf(stderr, "\t-s: Specify a search directory to use for missing modules\n" 
+  fprintf(stderr, "\t-s: Specify a search directory to use for missing modules\n"
                   "\t-S: Specify a search directory to use for symbol files\n"
                   "\t-t: Print thread stack memory in hex\n"
                   "\t-h: Usage\n"
@@ -371,7 +371,7 @@
           stringWithFileSystemRepresentation:optarg
                                       length:strlen(optarg)];
         break;
-        
+
       case 't':
         options->printThreadMemory = YES;
         break;
diff --git a/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj b/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj
index 5759ab4..902df75 100644
--- a/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj
+++ b/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj
@@ -3,24 +3,43 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 42;
+	objectVersion = 45;
 	objects = {
 
 /* Begin PBXBuildFile section */
+		4D2C721B126F9ACC00B43EAF /* source_line_resolver_base.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C721A126F9ACC00B43EAF /* source_line_resolver_base.cc */; };
+		4D2C721F126F9ADE00B43EAF /* exploitability.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C721E126F9ADE00B43EAF /* exploitability.cc */; };
+		4D2C7223126F9AF900B43EAF /* exploitability_win.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7222126F9AF900B43EAF /* exploitability_win.cc */; };
+		4D2C7227126F9B0F00B43EAF /* disassembler_x86.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7226126F9B0F00B43EAF /* disassembler_x86.cc */; };
+		4D2C722B126F9B5A00B43EAF /* x86_disasm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C722A126F9B5A00B43EAF /* x86_disasm.c */; };
+		4D2C722D126F9B6E00B43EAF /* x86_misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C722C126F9B6E00B43EAF /* x86_misc.c */; };
+		4D2C722F126F9B8300B43EAF /* x86_operand_list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C722E126F9B8300B43EAF /* x86_operand_list.c */; };
+		4D2C7233126F9BB000B43EAF /* ia32_invariant.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7232126F9BB000B43EAF /* ia32_invariant.c */; settings = {COMPILER_FLAGS = "-Wno-error"; }; };
+		4D2C7235126F9BC200B43EAF /* ia32_settings.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7234126F9BC200B43EAF /* ia32_settings.c */; };
+		4D2C7246126F9C0B00B43EAF /* ia32_insn.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7245126F9C0B00B43EAF /* ia32_insn.c */; };
+		4D2C724A126F9C2300B43EAF /* ia32_opcode_tables.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7249126F9C2300B43EAF /* ia32_opcode_tables.c */; settings = {COMPILER_FLAGS = "-Wno-error"; }; };
+		4D2C724C126F9C3800B43EAF /* ia32_implicit.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C724B126F9C3800B43EAF /* ia32_implicit.c */; settings = {COMPILER_FLAGS = "-Wno-error"; }; };
+		4D2C724E126F9C4D00B43EAF /* ia32_reg.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C724D126F9C4D00B43EAF /* ia32_reg.c */; settings = {COMPILER_FLAGS = "-Wno-error"; }; };
+		4D2C725B126F9C8000B43EAF /* ia32_operand.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C725A126F9C8000B43EAF /* ia32_operand.c */; };
+		4D2C725D126F9C9200B43EAF /* x86_insn.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C725C126F9C9200B43EAF /* x86_insn.c */; };
+		4D2C7264126F9CBB00B43EAF /* ia32_modrm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7261126F9CBB00B43EAF /* ia32_modrm.c */; };
+		4D2C726D126F9CDC00B43EAF /* x86_imm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C7263126F9CBB00B43EAF /* x86_imm.c */; };
 		557800400BE1F28500EC23E0 /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5578003E0BE1F28500EC23E0 /* macho_utilities.cc */; };
-		557800410BE1F28500EC23E0 /* macho_utilities.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5578003F0BE1F28500EC23E0 /* macho_utilities.h */; };
+		8B31FF2A11F0C62700FCF3E4 /* dwarf_cfi_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF2411F0C62700FCF3E4 /* dwarf_cfi_to_module.cc */; };
+		8B31FF2B11F0C62700FCF3E4 /* dwarf_cu_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF2611F0C62700FCF3E4 /* dwarf_cu_to_module.cc */; };
+		8B31FF2C11F0C62700FCF3E4 /* dwarf_line_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF2811F0C62700FCF3E4 /* dwarf_line_to_module.cc */; };
+		8B31FF4111F0C64400FCF3E4 /* stabs_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF3D11F0C64400FCF3E4 /* stabs_reader.cc */; };
+		8B31FF4211F0C64400FCF3E4 /* stabs_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF3F11F0C64400FCF3E4 /* stabs_to_module.cc */; };
+		8B31FF7411F0C6E000FCF3E4 /* macho_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF7211F0C6E000FCF3E4 /* macho_reader.cc */; };
+		8B31FF8811F0C6FB00FCF3E4 /* language.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF8411F0C6FB00FCF3E4 /* language.cc */; };
+		8B31FF8911F0C6FB00FCF3E4 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FF8611F0C6FB00FCF3E4 /* module.cc */; };
+		8B31FFC511F0C8AB00FCF3E4 /* dwarf2diehandler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B31FFC311F0C8AB00FCF3E4 /* dwarf2diehandler.cc */; };
 		8B40BDC00C0638E4009535AF /* logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B40BDBF0C0638E4009535AF /* logging.cc */; };
+		8B4BDBBD120131CA009C7060 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B4BDBBC120131CA009C7060 /* libcrypto.dylib */; };
 		8DD76F9A0486AA7600D96B5E /* crash_report.mm in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* crash_report.mm */; settings = {ATTRIBUTES = (); }; };
 		8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
-		9B35FEE40B2675F9008DE8C7 /* code_module.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B35FEE20B2675F9008DE8C7 /* code_module.h */; };
-		9B35FEE50B2675F9008DE8C7 /* code_modules.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B35FEE30B2675F9008DE8C7 /* code_modules.h */; };
-		9B35FEE90B26761C008DE8C7 /* basic_code_module.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B35FEE60B26761C008DE8C7 /* basic_code_module.h */; };
 		9B35FEEA0B26761C008DE8C7 /* basic_code_modules.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9B35FEE70B26761C008DE8C7 /* basic_code_modules.cc */; };
-		9B35FEEB0B26761C008DE8C7 /* basic_code_modules.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B35FEE80B26761C008DE8C7 /* basic_code_modules.h */; };
-		9B3904960B2E52D90059FABE /* basic_source_line_resolver.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B3904940B2E52D90059FABE /* basic_source_line_resolver.h */; };
-		9B3904970B2E52D90059FABE /* source_line_resolver_interface.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B3904950B2E52D90059FABE /* source_line_resolver_interface.h */; };
 		9B3904990B2E52FD0059FABE /* basic_source_line_resolver.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9B3904980B2E52FD0059FABE /* basic_source_line_resolver.cc */; };
-		9B44619E0B66C66B00BBB817 /* system_info.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B44619D0B66C66B00BBB817 /* system_info.h */; };
 		9BDF172C0B1B8B2400F8391B /* call_stack.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF172A0B1B8B2400F8391B /* call_stack.cc */; };
 		9BDF172D0B1B8B2400F8391B /* minidump_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF172B0B1B8B2400F8391B /* minidump_processor.cc */; };
 		9BDF17410B1B8B9A00F8391B /* minidump.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF173F0B1B8B9A00F8391B /* minidump.cc */; };
@@ -28,21 +47,12 @@
 		9BDF17550B1B8BF900F8391B /* stackwalker_x86.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF17520B1B8BF900F8391B /* stackwalker_x86.cc */; };
 		9BDF17560B1B8BF900F8391B /* stackwalker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF17530B1B8BF900F8391B /* stackwalker.cc */; };
 		9BDF175D0B1B8C1B00F8391B /* process_state.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF175B0B1B8C1B00F8391B /* process_state.cc */; };
-		9BDF176D0B1B8CB100F8391B /* on_demand_symbol_supplier.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BDF176B0B1B8CB100F8391B /* on_demand_symbol_supplier.h */; };
 		9BDF176E0B1B8CB100F8391B /* on_demand_symbol_supplier.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF176C0B1B8CB100F8391B /* on_demand_symbol_supplier.mm */; };
 		9BDF1A280B1BD58200F8391B /* pathname_stripper.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF1A270B1BD58200F8391B /* pathname_stripper.cc */; };
-		9BDF1AB90B1BE70C00F8391B /* range_map.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BDF1A7B0B1BE30100F8391B /* range_map.h */; };
-		9BDF1ABA0B1BE70D00F8391B /* range_map-inl.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BDF1A7A0B1BE30100F8391B /* range_map-inl.h */; };
-		9BDF1AFC0B1BEB6300F8391B /* address_map-inl.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BDF1AFA0B1BEB6300F8391B /* address_map-inl.h */; };
-		9BDF1AFD0B1BEB6300F8391B /* address_map.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BDF1AFB0B1BEB6300F8391B /* address_map.h */; };
-		9BDF21A60B1E825400F8391B /* dump_syms.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BDF192D0B1BC15D00F8391B /* dump_syms.h */; };
 		9BDF21A70B1E825400F8391B /* dump_syms.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF192E0B1BC15D00F8391B /* dump_syms.mm */; };
 		9BE650B20B52FE3000611104 /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650AC0B52FE3000611104 /* file_id.cc */; };
-		9BE650B30B52FE3000611104 /* file_id.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BE650AD0B52FE3000611104 /* file_id.h */; };
 		9BE650B40B52FE3000611104 /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650AE0B52FE3000611104 /* macho_id.cc */; };
-		9BE650B50B52FE3000611104 /* macho_id.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BE650AF0B52FE3000611104 /* macho_id.h */; };
 		9BE650B60B52FE3000611104 /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650B00B52FE3000611104 /* macho_walker.cc */; };
-		9BE650B70B52FE3000611104 /* macho_walker.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BE650B10B52FE3000611104 /* macho_walker.h */; };
 		D2A5DD4D1188651100081F03 /* cfi_frame_info.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2A5DD4C1188651100081F03 /* cfi_frame_info.cc */; };
 		D2A5DD631188658B00081F03 /* tokenize.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2A5DD621188658B00081F03 /* tokenize.cc */; };
 		F9C7ECE50E8ABCA600E953AD /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C7ECE20E8ABCA600E953AD /* bytereader.cc */; };
@@ -51,45 +61,53 @@
 		F9F0706710FBC02D0037B88B /* stackwalker_arm.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9F0706510FBC02D0037B88B /* stackwalker_arm.cc */; };
 		FD6625CD0CF4D45C004AC844 /* stackwalker_amd64.cc in Sources */ = {isa = PBXBuildFile; fileRef = FD6625C40CF4D438004AC844 /* stackwalker_amd64.cc */; };
 		FD8EDEAE0CADDAD400A5EDF1 /* stackwalker_sparc.cc in Sources */ = {isa = PBXBuildFile; fileRef = FD8EDEAC0CADDAD400A5EDF1 /* stackwalker_sparc.cc */; };
-		FD8EDEAF0CADDAD400A5EDF1 /* stackwalker_sparc.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FD8EDEAD0CADDAD400A5EDF1 /* stackwalker_sparc.h */; };
 /* End PBXBuildFile section */
 
-/* Begin PBXCopyFilesBuildPhase section */
-		8DD76F9E0486AA7600D96B5E /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 8;
-			dstPath = /usr/share/man/man1/;
-			dstSubfolderSpec = 0;
-			files = (
-				9BDF176D0B1B8CB100F8391B /* on_demand_symbol_supplier.h in CopyFiles */,
-				9BDF1AB90B1BE70C00F8391B /* range_map.h in CopyFiles */,
-				9BDF1ABA0B1BE70D00F8391B /* range_map-inl.h in CopyFiles */,
-				9BDF1AFC0B1BEB6300F8391B /* address_map-inl.h in CopyFiles */,
-				9BDF1AFD0B1BEB6300F8391B /* address_map.h in CopyFiles */,
-				9BDF21A60B1E825400F8391B /* dump_syms.h in CopyFiles */,
-				9B35FEE40B2675F9008DE8C7 /* code_module.h in CopyFiles */,
-				9B35FEE50B2675F9008DE8C7 /* code_modules.h in CopyFiles */,
-				9B35FEE90B26761C008DE8C7 /* basic_code_module.h in CopyFiles */,
-				9B35FEEB0B26761C008DE8C7 /* basic_code_modules.h in CopyFiles */,
-				9B3904960B2E52D90059FABE /* basic_source_line_resolver.h in CopyFiles */,
-				9B3904970B2E52D90059FABE /* source_line_resolver_interface.h in CopyFiles */,
-				9BE650B30B52FE3000611104 /* file_id.h in CopyFiles */,
-				9BE650B50B52FE3000611104 /* macho_id.h in CopyFiles */,
-				9BE650B70B52FE3000611104 /* macho_walker.h in CopyFiles */,
-				9B44619E0B66C66B00BBB817 /* system_info.h in CopyFiles */,
-				557800410BE1F28500EC23E0 /* macho_utilities.h in CopyFiles */,
-				FD8EDEAF0CADDAD400A5EDF1 /* stackwalker_sparc.h in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 1;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
 /* Begin PBXFileReference section */
 		08FB7796FE84155DC02AAC07 /* crash_report.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = crash_report.mm; sourceTree = "<group>"; };
-		08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
+		08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		4D2C721A126F9ACC00B43EAF /* source_line_resolver_base.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = source_line_resolver_base.cc; path = ../../../processor/source_line_resolver_base.cc; sourceTree = SOURCE_ROOT; };
+		4D2C721E126F9ADE00B43EAF /* exploitability.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exploitability.cc; path = ../../../processor/exploitability.cc; sourceTree = SOURCE_ROOT; };
+		4D2C7222126F9AF900B43EAF /* exploitability_win.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exploitability_win.cc; path = ../../../processor/exploitability_win.cc; sourceTree = SOURCE_ROOT; };
+		4D2C7226126F9B0F00B43EAF /* disassembler_x86.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = disassembler_x86.cc; path = ../../../processor/disassembler_x86.cc; sourceTree = SOURCE_ROOT; };
+		4D2C722A126F9B5A00B43EAF /* x86_disasm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = x86_disasm.c; path = ../../../third_party/libdisasm/x86_disasm.c; sourceTree = SOURCE_ROOT; };
+		4D2C722C126F9B6E00B43EAF /* x86_misc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = x86_misc.c; path = ../../../third_party/libdisasm/x86_misc.c; sourceTree = SOURCE_ROOT; };
+		4D2C722E126F9B8300B43EAF /* x86_operand_list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = x86_operand_list.c; path = ../../../third_party/libdisasm/x86_operand_list.c; sourceTree = SOURCE_ROOT; };
+		4D2C7232126F9BB000B43EAF /* ia32_invariant.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_invariant.c; path = ../../../third_party/libdisasm/ia32_invariant.c; sourceTree = SOURCE_ROOT; };
+		4D2C7234126F9BC200B43EAF /* ia32_settings.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_settings.c; path = ../../../third_party/libdisasm/ia32_settings.c; sourceTree = SOURCE_ROOT; };
+		4D2C7245126F9C0B00B43EAF /* ia32_insn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_insn.c; path = ../../../third_party/libdisasm/ia32_insn.c; sourceTree = SOURCE_ROOT; };
+		4D2C7249126F9C2300B43EAF /* ia32_opcode_tables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_opcode_tables.c; path = ../../../third_party/libdisasm/ia32_opcode_tables.c; sourceTree = SOURCE_ROOT; };
+		4D2C724B126F9C3800B43EAF /* ia32_implicit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_implicit.c; path = ../../../third_party/libdisasm/ia32_implicit.c; sourceTree = SOURCE_ROOT; };
+		4D2C724D126F9C4D00B43EAF /* ia32_reg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_reg.c; path = ../../../third_party/libdisasm/ia32_reg.c; sourceTree = SOURCE_ROOT; };
+		4D2C725A126F9C8000B43EAF /* ia32_operand.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_operand.c; path = ../../../third_party/libdisasm/ia32_operand.c; sourceTree = SOURCE_ROOT; };
+		4D2C725C126F9C9200B43EAF /* x86_insn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = x86_insn.c; path = ../../../third_party/libdisasm/x86_insn.c; sourceTree = SOURCE_ROOT; };
+		4D2C7261126F9CBB00B43EAF /* ia32_modrm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ia32_modrm.c; path = ../../../third_party/libdisasm/ia32_modrm.c; sourceTree = SOURCE_ROOT; };
+		4D2C7263126F9CBB00B43EAF /* x86_imm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = x86_imm.c; path = ../../../third_party/libdisasm/x86_imm.c; sourceTree = SOURCE_ROOT; };
 		5578003E0BE1F28500EC23E0 /* macho_utilities.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_utilities.cc; path = ../../../common/mac/macho_utilities.cc; sourceTree = SOURCE_ROOT; };
 		5578003F0BE1F28500EC23E0 /* macho_utilities.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_utilities.h; path = ../../../common/mac/macho_utilities.h; sourceTree = SOURCE_ROOT; };
+		8B31025311F0D2D400FCF3E4 /* Breakpad.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Breakpad.xcconfig; path = ../../../common/mac/Breakpad.xcconfig; sourceTree = SOURCE_ROOT; };
+		8B3102DA11F0D65600FCF3E4 /* BreakpadDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadDebug.xcconfig; path = ../../../common/mac/BreakpadDebug.xcconfig; sourceTree = SOURCE_ROOT; };
+		8B3102DB11F0D65600FCF3E4 /* BreakpadRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadRelease.xcconfig; path = ../../../common/mac/BreakpadRelease.xcconfig; sourceTree = SOURCE_ROOT; };
+		8B31FF2411F0C62700FCF3E4 /* dwarf_cfi_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cfi_to_module.cc; path = ../../../common/dwarf_cfi_to_module.cc; sourceTree = SOURCE_ROOT; };
+		8B31FF2511F0C62700FCF3E4 /* dwarf_cfi_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_cfi_to_module.h; path = ../../../common/dwarf_cfi_to_module.h; sourceTree = SOURCE_ROOT; };
+		8B31FF2611F0C62700FCF3E4 /* dwarf_cu_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cu_to_module.cc; path = ../../../common/dwarf_cu_to_module.cc; sourceTree = SOURCE_ROOT; };
+		8B31FF2711F0C62700FCF3E4 /* dwarf_cu_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_cu_to_module.h; path = ../../../common/dwarf_cu_to_module.h; sourceTree = SOURCE_ROOT; };
+		8B31FF2811F0C62700FCF3E4 /* dwarf_line_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_line_to_module.cc; path = ../../../common/dwarf_line_to_module.cc; sourceTree = SOURCE_ROOT; };
+		8B31FF2911F0C62700FCF3E4 /* dwarf_line_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_line_to_module.h; path = ../../../common/dwarf_line_to_module.h; sourceTree = SOURCE_ROOT; };
+		8B31FF3D11F0C64400FCF3E4 /* stabs_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_reader.cc; path = ../../../common/stabs_reader.cc; sourceTree = SOURCE_ROOT; };
+		8B31FF3E11F0C64400FCF3E4 /* stabs_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stabs_reader.h; path = ../../../common/stabs_reader.h; sourceTree = SOURCE_ROOT; };
+		8B31FF3F11F0C64400FCF3E4 /* stabs_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_to_module.cc; path = ../../../common/stabs_to_module.cc; sourceTree = SOURCE_ROOT; };
+		8B31FF4011F0C64400FCF3E4 /* stabs_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stabs_to_module.h; path = ../../../common/stabs_to_module.h; sourceTree = SOURCE_ROOT; };
+		8B31FF7211F0C6E000FCF3E4 /* macho_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_reader.cc; path = ../../../common/mac/macho_reader.cc; sourceTree = SOURCE_ROOT; };
+		8B31FF7311F0C6E000FCF3E4 /* macho_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_reader.h; path = ../../../common/mac/macho_reader.h; sourceTree = SOURCE_ROOT; };
+		8B31FF8411F0C6FB00FCF3E4 /* language.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = language.cc; path = ../../../common/language.cc; sourceTree = SOURCE_ROOT; };
+		8B31FF8511F0C6FB00FCF3E4 /* language.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = language.h; path = ../../../common/language.h; sourceTree = SOURCE_ROOT; };
+		8B31FF8611F0C6FB00FCF3E4 /* module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = module.cc; path = ../../../common/module.cc; sourceTree = SOURCE_ROOT; };
+		8B31FF8711F0C6FB00FCF3E4 /* module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = module.h; path = ../../../common/module.h; sourceTree = SOURCE_ROOT; };
+		8B31FFC311F0C8AB00FCF3E4 /* dwarf2diehandler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2diehandler.cc; path = ../../../common/dwarf/dwarf2diehandler.cc; sourceTree = SOURCE_ROOT; };
+		8B31FFC411F0C8AB00FCF3E4 /* dwarf2diehandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2diehandler.h; path = ../../../common/dwarf/dwarf2diehandler.h; sourceTree = SOURCE_ROOT; };
 		8B40BDBF0C0638E4009535AF /* logging.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = logging.cc; path = ../../../processor/logging.cc; sourceTree = SOURCE_ROOT; };
+		8B4BDBBC120131CA009C7060 /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; };
 		8DD76FA10486AA7600D96B5E /* crash_report */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = crash_report; sourceTree = BUILT_PRODUCTS_DIR; };
 		9B35FEE20B2675F9008DE8C7 /* code_module.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = code_module.h; path = ../../../google_breakpad/processor/code_module.h; sourceTree = SOURCE_ROOT; };
 		9B35FEE30B2675F9008DE8C7 /* code_modules.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = code_modules.h; path = ../../../google_breakpad/processor/code_modules.h; sourceTree = SOURCE_ROOT; };
@@ -152,6 +170,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */,
+				8B4BDBBD120131CA009C7060 /* libcrypto.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -161,15 +180,35 @@
 		08FB7794FE84155DC02AAC07 /* crash_report */ = {
 			isa = PBXGroup;
 			children = (
+				8B31025311F0D2D400FCF3E4 /* Breakpad.xcconfig */,
+				8B3102DA11F0D65600FCF3E4 /* BreakpadDebug.xcconfig */,
+				8B3102DB11F0D65600FCF3E4 /* BreakpadRelease.xcconfig */,
 				F9C7ECE10E8ABC7F00E953AD /* DWARF */,
 				5578003E0BE1F28500EC23E0 /* macho_utilities.cc */,
 				5578003F0BE1F28500EC23E0 /* macho_utilities.h */,
+				8B31FF7211F0C6E000FCF3E4 /* macho_reader.cc */,
+				8B31FF7311F0C6E000FCF3E4 /* macho_reader.h */,
 				9BDF192D0B1BC15D00F8391B /* dump_syms.h */,
 				9BDF192E0B1BC15D00F8391B /* dump_syms.mm */,
 				08FB7796FE84155DC02AAC07 /* crash_report.mm */,
 				9BDF176B0B1B8CB100F8391B /* on_demand_symbol_supplier.h */,
 				9BDF176C0B1B8CB100F8391B /* on_demand_symbol_supplier.mm */,
+				8B31FF2411F0C62700FCF3E4 /* dwarf_cfi_to_module.cc */,
+				8B31FF2511F0C62700FCF3E4 /* dwarf_cfi_to_module.h */,
+				8B31FF2611F0C62700FCF3E4 /* dwarf_cu_to_module.cc */,
+				8B31FF2711F0C62700FCF3E4 /* dwarf_cu_to_module.h */,
+				8B31FF2811F0C62700FCF3E4 /* dwarf_line_to_module.cc */,
+				8B31FF2911F0C62700FCF3E4 /* dwarf_line_to_module.h */,
+				8B31FF3D11F0C64400FCF3E4 /* stabs_reader.cc */,
+				8B31FF3E11F0C64400FCF3E4 /* stabs_reader.h */,
+				8B31FF3F11F0C64400FCF3E4 /* stabs_to_module.cc */,
+				8B31FF4011F0C64400FCF3E4 /* stabs_to_module.h */,
+				8B31FF8411F0C6FB00FCF3E4 /* language.cc */,
+				8B31FF8511F0C6FB00FCF3E4 /* language.h */,
+				8B31FF8611F0C6FB00FCF3E4 /* module.cc */,
+				8B31FF8711F0C6FB00FCF3E4 /* module.h */,
 				08FB7795FE84155DC02AAC07 /* breakpad */,
+				4D2C726E126F9CE200B43EAF /* libdisasm */,
 				08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */,
 				1AB674ADFE9D54B511CA2CBB /* Products */,
 			);
@@ -189,6 +228,7 @@
 		08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = {
 			isa = PBXGroup;
 			children = (
+				8B4BDBBC120131CA009C7060 /* libcrypto.dylib */,
 				08FB779EFE84155DC02AAC07 /* Foundation.framework */,
 			);
 			name = "External Frameworks and Libraries";
@@ -202,6 +242,27 @@
 			name = Products;
 			sourceTree = "<group>";
 		};
+		4D2C726E126F9CE200B43EAF /* libdisasm */ = {
+			isa = PBXGroup;
+			children = (
+				4D2C7226126F9B0F00B43EAF /* disassembler_x86.cc */,
+				4D2C724B126F9C3800B43EAF /* ia32_implicit.c */,
+				4D2C7245126F9C0B00B43EAF /* ia32_insn.c */,
+				4D2C7232126F9BB000B43EAF /* ia32_invariant.c */,
+				4D2C7261126F9CBB00B43EAF /* ia32_modrm.c */,
+				4D2C7249126F9C2300B43EAF /* ia32_opcode_tables.c */,
+				4D2C725A126F9C8000B43EAF /* ia32_operand.c */,
+				4D2C724D126F9C4D00B43EAF /* ia32_reg.c */,
+				4D2C7234126F9BC200B43EAF /* ia32_settings.c */,
+				4D2C722A126F9B5A00B43EAF /* x86_disasm.c */,
+				4D2C7263126F9CBB00B43EAF /* x86_imm.c */,
+				4D2C725C126F9C9200B43EAF /* x86_insn.c */,
+				4D2C722C126F9B6E00B43EAF /* x86_misc.c */,
+				4D2C722E126F9B8300B43EAF /* x86_operand_list.c */,
+			);
+			name = libdisasm;
+			sourceTree = "<group>";
+		};
 		9BDF16F70B1B8ACD00F8391B /* google_breakpad */ = {
 			isa = PBXGroup;
 			children = (
@@ -245,6 +306,9 @@
 		9BDF17280B1B8B0200F8391B /* processor */ = {
 			isa = PBXGroup;
 			children = (
+				4D2C7222126F9AF900B43EAF /* exploitability_win.cc */,
+				4D2C721E126F9ADE00B43EAF /* exploitability.cc */,
+				4D2C721A126F9ACC00B43EAF /* source_line_resolver_base.cc */,
 				D2A5DD621188658B00081F03 /* tokenize.cc */,
 				D2A5DD4C1188651100081F03 /* cfi_frame_info.cc */,
 				F9F0706510FBC02D0037B88B /* stackwalker_arm.cc */,
@@ -292,6 +356,8 @@
 			children = (
 				F9C7ECE20E8ABCA600E953AD /* bytereader.cc */,
 				F9C7ECE30E8ABCA600E953AD /* dwarf2reader.cc */,
+				8B31FFC311F0C8AB00FCF3E4 /* dwarf2diehandler.cc */,
+				8B31FFC411F0C8AB00FCF3E4 /* dwarf2diehandler.h */,
 				F9C7ECE40E8ABCA600E953AD /* functioninfo.cc */,
 			);
 			name = DWARF;
@@ -306,7 +372,6 @@
 			buildPhases = (
 				8DD76F990486AA7600D96B5E /* Sources */,
 				8DD76F9B0486AA7600D96B5E /* Frameworks */,
-				8DD76F9E0486AA7600D96B5E /* CopyFiles */,
 			);
 			buildRules = (
 			);
@@ -324,7 +389,7 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "crash_report" */;
-			compatibilityVersion = "Xcode 2.4";
+			compatibilityVersion = "Xcode 3.1";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* crash_report */;
 			projectDirPath = "";
@@ -366,6 +431,32 @@
 				F9F0706710FBC02D0037B88B /* stackwalker_arm.cc in Sources */,
 				D2A5DD4D1188651100081F03 /* cfi_frame_info.cc in Sources */,
 				D2A5DD631188658B00081F03 /* tokenize.cc in Sources */,
+				8B31FF2A11F0C62700FCF3E4 /* dwarf_cfi_to_module.cc in Sources */,
+				8B31FF2B11F0C62700FCF3E4 /* dwarf_cu_to_module.cc in Sources */,
+				8B31FF2C11F0C62700FCF3E4 /* dwarf_line_to_module.cc in Sources */,
+				8B31FF4111F0C64400FCF3E4 /* stabs_reader.cc in Sources */,
+				8B31FF4211F0C64400FCF3E4 /* stabs_to_module.cc in Sources */,
+				8B31FF7411F0C6E000FCF3E4 /* macho_reader.cc in Sources */,
+				8B31FF8811F0C6FB00FCF3E4 /* language.cc in Sources */,
+				8B31FF8911F0C6FB00FCF3E4 /* module.cc in Sources */,
+				8B31FFC511F0C8AB00FCF3E4 /* dwarf2diehandler.cc in Sources */,
+				4D2C721B126F9ACC00B43EAF /* source_line_resolver_base.cc in Sources */,
+				4D2C721F126F9ADE00B43EAF /* exploitability.cc in Sources */,
+				4D2C7223126F9AF900B43EAF /* exploitability_win.cc in Sources */,
+				4D2C7227126F9B0F00B43EAF /* disassembler_x86.cc in Sources */,
+				4D2C722B126F9B5A00B43EAF /* x86_disasm.c in Sources */,
+				4D2C722D126F9B6E00B43EAF /* x86_misc.c in Sources */,
+				4D2C722F126F9B8300B43EAF /* x86_operand_list.c in Sources */,
+				4D2C7233126F9BB000B43EAF /* ia32_invariant.c in Sources */,
+				4D2C7235126F9BC200B43EAF /* ia32_settings.c in Sources */,
+				4D2C7246126F9C0B00B43EAF /* ia32_insn.c in Sources */,
+				4D2C724A126F9C2300B43EAF /* ia32_opcode_tables.c in Sources */,
+				4D2C724C126F9C3800B43EAF /* ia32_implicit.c in Sources */,
+				4D2C724E126F9C4D00B43EAF /* ia32_reg.c in Sources */,
+				4D2C725B126F9C8000B43EAF /* ia32_operand.c in Sources */,
+				4D2C725D126F9C9200B43EAF /* x86_insn.c in Sources */,
+				4D2C7264126F9CBB00B43EAF /* ia32_modrm.c in Sources */,
+				4D2C726D126F9CDC00B43EAF /* x86_imm.c in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -375,65 +466,32 @@
 		1DEB927508733DD40010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				GCC_C_LANGUAGE_STANDARD = c99;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = NO;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"$(GCC_PREPROCESSOR_DEFINITIONS)",
-					_GLIBCXX_DEBUG_PEDANTIC,
-					_GLIBCXX_DEBUG,
-					_GLIBCPP_CONCEPT_CHECKS,
-				);
-				INSTALL_PATH = "$(HOME)/bin";
-				OTHER_LDFLAGS = "-lcrypto";
+				HEADER_SEARCH_PATHS = ../../../../src;
 				PRODUCT_NAME = crash_report;
-				USER_HEADER_SEARCH_PATHS = "../../../../** $(inherited)";
-				ZERO_LINK = NO;
 			};
 			name = Debug;
 		};
 		1DEB927608733DD40010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = (
-					ppc,
-					i386,
-				);
-				GCC_C_LANGUAGE_STANDARD = c99;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = NO;
-				INSTALL_PATH = "$(HOME)/bin";
-				OTHER_LDFLAGS = "-lcrypto";
+				HEADER_SEARCH_PATHS = ../../../../src;
 				PRODUCT_NAME = crash_report;
-				USER_HEADER_SEARCH_PATHS = "../../../../** $(inherited)";
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		1DEB927908733DD40010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 8B3102DA11F0D65600FCF3E4 /* BreakpadDebug.xcconfig */;
 			buildSettings = {
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+				GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
 			};
 			name = Debug;
 		};
 		1DEB927A08733DD40010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 8B3102DB11F0D65600FCF3E4 /* BreakpadRelease.xcconfig */;
 			buildSettings = {
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+				GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
 			};
 			name = Release;
 		};
diff --git a/src/tools/mac/crash_report/on_demand_symbol_supplier.h b/src/tools/mac/crash_report/on_demand_symbol_supplier.h
index 9c0e8b7..28002c6 100644
--- a/src/tools/mac/crash_report/on_demand_symbol_supplier.h
+++ b/src/tools/mac/crash_report/on_demand_symbol_supplier.h
@@ -61,6 +61,16 @@
                                      const SystemInfo *system_info,
                                      string *symbol_file,
                                      string *symbol_data);
+  // Allocates data buffer on heap, and takes the ownership of
+  // the data buffer.
+  virtual SymbolResult GetCStringSymbolData(const CodeModule *module,
+                                            const SystemInfo *system_info,
+                                            string *symbol_file,
+                                            char **symbol_data);
+
+  // Delete the data buffer allocated for module in GetCStringSymbolData().
+  virtual void FreeSymbolData(const CodeModule *module);
+
  protected:
   // Search directory
   string search_dir_;
@@ -70,6 +80,9 @@
   // and the path to that module's symbol file.
   map<string, string> module_file_map_;
 
+  // Map of allocated data buffers, keyed by module->code_file().
+  map<string, char *> memory_buffers_;
+
   // Return the name for |module|  This will be the value used as the key
   // to the |module_file_map_|.
   string GetNameForModule(const CodeModule *module);
diff --git a/src/tools/mac/crash_report/on_demand_symbol_supplier.mm b/src/tools/mac/crash_report/on_demand_symbol_supplier.mm
index 4123a27..00360f6 100644
--- a/src/tools/mac/crash_report/on_demand_symbol_supplier.mm
+++ b/src/tools/mac/crash_report/on_demand_symbol_supplier.mm
@@ -32,6 +32,7 @@
 #include <string>
 #include <iostream>
 #include <fstream>
+#include <utility>
 
 #include "google_breakpad/processor/basic_source_line_resolver.h"
 #include "google_breakpad/processor/minidump.h"
@@ -49,11 +50,11 @@
 using google_breakpad::SymbolSupplier;
 using google_breakpad::SystemInfo;
 
-OnDemandSymbolSupplier::OnDemandSymbolSupplier(const string &search_dir, 
+OnDemandSymbolSupplier::OnDemandSymbolSupplier(const string &search_dir,
                                                const string &symbol_search_dir)
   : search_dir_(search_dir) {
   NSFileManager *mgr = [NSFileManager defaultManager];
-  int length = symbol_search_dir.length();
+  size_t length = symbol_search_dir.length();
   if (length) {
     // Load all sym files in symbol_search_dir into our module_file_map
     // A symbol file always starts with a line like this:
@@ -87,6 +88,7 @@
           BOOL goodScan = [scanner scanString:@"MODULE mac " intoString:nil];
           if (goodScan) {
             goodScan = ([scanner scanString:@"x86 " intoString:nil] ||
+                        [scanner scanString:@"x86_64 " intoString:nil] ||
                         [scanner scanString:@"ppc " intoString:nil]);
             if (goodScan) {
               NSString *moduleID;
@@ -149,7 +151,7 @@
 
 
   if (s == FOUND) {
-    ifstream in(symbol_file->c_str());
+    std::ifstream in(symbol_file->c_str());
     getline(in, *symbol_data, std::string::traits_type::to_char_type(
                 std::string::traits_type::eof()));
     in.close();
@@ -158,6 +160,36 @@
   return s;
 }
 
+SymbolSupplier::SymbolResult
+OnDemandSymbolSupplier::GetCStringSymbolData(const CodeModule *module,
+                                             const SystemInfo *system_info,
+                                             string *symbol_file,
+                                             char **symbol_data) {
+  std::string symbol_data_string;
+  SymbolSupplier::SymbolResult result = GetSymbolFile(module,
+                                                      system_info,
+                                                      symbol_file,
+                                                      &symbol_data_string);
+  if (result == FOUND) {
+    *symbol_data = new char[symbol_data_string.size() + 1];
+    if (*symbol_data == NULL) {
+      // Should return INTERRUPT on memory allocation failure.
+      return INTERRUPT;
+    }
+    strcpy(*symbol_data, symbol_data_string.c_str());
+    memory_buffers_.insert(make_pair(module->code_file(), *symbol_data));
+  }
+  return result;
+}
+
+void OnDemandSymbolSupplier::FreeSymbolData(const CodeModule *module) {
+  map<string, char *>::iterator it = memory_buffers_.find(module->code_file());
+  if (it != memory_buffers_.end()) {
+    delete [] it->second;
+    memory_buffers_.erase(it);
+  }
+}
+
 string OnDemandSymbolSupplier::GetLocalModulePath(const CodeModule *module) {
   NSFileManager *mgr = [NSFileManager defaultManager];
   const char *moduleStr = module->code_file().c_str();
@@ -174,14 +206,14 @@
   // search string and stop if a file (not dir) is found or all components
   // have been appended
   NSArray *pathComponents = [modulePath componentsSeparatedByString:@"/"];
-  int count = [pathComponents count];
+  size_t count = [pathComponents count];
   NSMutableString *path = [NSMutableString string];
 
-  for (int i = 0; i < count; ++i) {
+  for (size_t i = 0; i < count; ++i) {
     [path setString:searchDir];
 
-    for (int j = 0; j < i + 1; ++j) {
-      int idx = count - 1 - i + j;
+    for (size_t j = 0; j < i + 1; ++j) {
+      size_t idx = count - 1 - i + j;
       [path appendFormat:@"/%@", [pathComponents objectAtIndex:idx]];
     }
 
@@ -214,7 +246,7 @@
   struct stat file_stat;
   if (stat(path, &file_stat) == 0)
     result = (float)file_stat.st_mtimespec.tv_sec +
-      (float)file_stat.st_mtimespec.tv_nsec / 1.0e9;
+      (float)file_stat.st_mtimespec.tv_nsec / 1.0e9f;
 
   return result;
 }
@@ -236,7 +268,7 @@
   if ([[NSFileManager defaultManager] fileExistsAtPath:symbol_path]) {
     // Check if the module file is newer than the saved symbols
     float cache_time =
-    GetFileModificationTime([symbol_path fileSystemRepresentation]);
+      GetFileModificationTime([symbol_path fileSystemRepresentation]);
     float module_time =
       GetFileModificationTime(module_path.c_str());
 
@@ -248,15 +280,34 @@
     NSString *module_str = [[NSFileManager defaultManager]
       stringWithFileSystemRepresentation:module_path.c_str()
                                   length:module_path.length()];
-    DumpSymbols *dump = [[DumpSymbols alloc] initWithContentsOfFile:module_str];
-    const char *archStr = system_info->cpu.c_str();
-    if ([dump setArchitecture:[NSString stringWithUTF8String:archStr]]) {
-      [dump writeSymbolFile:symbol_path];
+    DumpSymbols dump;
+    if (dump.Read(module_str)) {
+      // What Breakpad calls "x86" should be given to the system as "i386".
+      std::string architecture;
+      if (system_info->cpu.compare("x86") == 0) {
+        architecture = "i386";
+      } else {
+        architecture = system_info->cpu;
+      }
+
+      if (dump.SetArchitecture(architecture)) {
+        FILE *file = fopen([symbol_path fileSystemRepresentation],"w");
+        if (file) {
+          dump.WriteSymbolFile(file);
+          fclose(file);
+        } else {
+          printf("Unable to open %s (%d)\n", name.c_str(), errno);
+          result = false;
+        }
+      } else {
+        printf("Architecture %s not available for %s\n",
+               system_info->cpu.c_str(), name.c_str());
+        result = false;
+      }
     } else {
-      printf("Architecture %s not available for %s\n", archStr, name.c_str());
+      printf("Unable to open %s\n", [module_str UTF8String]);
       result = false;
     }
-    [dump release];
   }
 
   // Add the mapping
diff --git a/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj b/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj
index d6b6d7e..2ddaf2c 100644
--- a/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj
+++ b/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj
@@ -3,12 +3,92 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 42;
+	objectVersion = 45;
 	objects = {
 
+/* Begin PBXAggregateTarget section */
+		B88FAFC9116BDCAD00407530 /* all_unittests */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = B88FAFCC116BDCCC00407530 /* Build configuration list for PBXAggregateTarget "all_unittests" */;
+			buildPhases = (
+				B88FB094116CE73E00407530 /* ShellScript */,
+			);
+			dependencies = (
+				B88FB15B116CF53E00407530 /* PBXTargetDependency */,
+				B88FAFCF116BDD7000407530 /* PBXTargetDependency */,
+				B88FB01D116BDF9800407530 /* PBXTargetDependency */,
+				B88FB167116CF54B00407530 /* PBXTargetDependency */,
+				B88FAFD1116BDD7000407530 /* PBXTargetDependency */,
+				B88FB165116CF54B00407530 /* PBXTargetDependency */,
+				B88FB161116CF54B00407530 /* PBXTargetDependency */,
+				B88FB15F116CF54B00407530 /* PBXTargetDependency */,
+				B88FB15D116CF54B00407530 /* PBXTargetDependency */,
+				B84A9201116CF7D2006C210E /* PBXTargetDependency */,
+				B88FB0C8116CEB4A00407530 /* PBXTargetDependency */,
+				8B31051511F100CF00FCF3E4 /* PBXTargetDependency */,
+			);
+			name = all_unittests;
+			productName = all_unittests;
+		};
+/* End PBXAggregateTarget section */
+
 /* Begin PBXBuildFile section */
-		B89E0E601166556C00DD08C9 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B89E0E5F1166556C00DD08C9 /* libcrypto.dylib */; };
-		B8C5B5161166534700D34F4E /* functioninfo.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C7ED420E8AD93000E953AD /* functioninfo.cc */; };
+		8B4BDBCA12013288009C7060 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B4BDBC912013288009C7060 /* libcrypto.dylib */; };
+		B84A91F8116CF78F006C210E /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+		B84A91FB116CF7AF006C210E /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+		B84A91FC116CF7AF006C210E /* stabs_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE3C11666C8900407530 /* stabs_to_module.cc */; };
+		B84A91FD116CF7AF006C210E /* stabs_to_module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D8116CEC0600407530 /* stabs_to_module_unittest.cc */; };
+		B88FAE1911665FE400407530 /* dwarf2diehandler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE1711665FE400407530 /* dwarf2diehandler.cc */; };
+		B88FAE261166603300407530 /* dwarf_cu_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */; };
+		B88FAE271166603300407530 /* dwarf_line_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE201166603300407530 /* dwarf_line_to_module.cc */; };
+		B88FAE281166603300407530 /* language.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE221166603300407530 /* language.cc */; };
+		B88FAE291166603300407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+		B88FAE2C1166606200407530 /* macho_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E6E1166571D00DD08C9 /* macho_reader.cc */; };
+		B88FAE351166673E00407530 /* dwarf_cfi_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE331166673E00407530 /* dwarf_cfi_to_module.cc */; };
+		B88FAE3B11666C6F00407530 /* stabs_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE3911666C6F00407530 /* stabs_reader.cc */; };
+		B88FAE3E11666C8900407530 /* stabs_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE3C11666C8900407530 /* stabs_to_module.cc */; };
+		B88FAF37116A595400407530 /* cfi_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAF34116A595400407530 /* cfi_assembler.cc */; };
+		B88FAF38116A595400407530 /* dwarf2reader_cfi_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAF36116A595400407530 /* dwarf2reader_cfi_unittest.cc */; };
+		B88FAF3F116A5A2E00407530 /* dwarf2reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */; };
+		B88FAF40116A5A2E00407530 /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422C0E0E22D100DBDE83 /* bytereader.cc */; };
+		B88FB00F116BDEA700407530 /* stabs_reader_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB003116BDE7200407530 /* stabs_reader_unittest.cc */; };
+		B88FB010116BDEA700407530 /* stabs_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE3911666C6F00407530 /* stabs_reader.cc */; };
+		B88FB028116BE03100407530 /* test_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE0911665B5700407530 /* test_assembler.cc */; };
+		B88FB029116BE03100407530 /* gmock-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0EA311665AEA00DD08C9 /* gmock-all.cc */; };
+		B88FB02A116BE03100407530 /* gtest_main.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E9F11665AC300DD08C9 /* gtest_main.cc */; };
+		B88FB02B116BE03100407530 /* gtest-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0EA011665AC300DD08C9 /* gtest-all.cc */; };
+		B88FB03F116BE24200407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+		B88FB042116BE3C400407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+		B88FB057116C0CDE00407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+		B88FB0BD116CEAE000407530 /* module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0B5116CEA8A00407530 /* module_unittest.cc */; };
+		B88FB0C1116CEB0600407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+		B88FB0C4116CEB4100407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+		B88FB0E3116CEEB000407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+		B88FB0E5116CEED300407530 /* dwarf2diehandler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE1711665FE400407530 /* dwarf2diehandler.cc */; };
+		B88FB0E6116CEED300407530 /* dwarf2diehandler_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0DB116CEC5800407530 /* dwarf2diehandler_unittest.cc */; };
+		B88FB0F6116CEF2000407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+		B88FB0FA116CF00E00407530 /* dwarf_line_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE201166603300407530 /* dwarf_line_to_module.cc */; };
+		B88FB0FB116CF00E00407530 /* dwarf_line_to_module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D7116CEC0600407530 /* dwarf_line_to_module_unittest.cc */; };
+		B88FB0FE116CF02400407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+		B88FB10E116CF08100407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+		B88FB112116CF1F000407530 /* dwarf_cu_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */; };
+		B88FB113116CF1F000407530 /* dwarf_cu_to_module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D6116CEC0600407530 /* dwarf_cu_to_module_unittest.cc */; };
+		B88FB114116CF1F000407530 /* language.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE221166603300407530 /* language.cc */; };
+		B88FB115116CF1F000407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+		B88FB123116CF28500407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+		B88FB129116CF2DD00407530 /* module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE241166603300407530 /* module.cc */; };
+		B88FB12A116CF2DD00407530 /* dwarf_cfi_to_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE331166673E00407530 /* dwarf_cfi_to_module.cc */; };
+		B88FB12B116CF2DD00407530 /* dwarf_cfi_to_module_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D5116CEC0600407530 /* dwarf_cfi_to_module_unittest.cc */; };
+		B88FB139116CF31600407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+		B88FB13D116CF38300407530 /* cfi_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAF34116A595400407530 /* cfi_assembler.cc */; };
+		B88FB13E116CF38300407530 /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422C0E0E22D100DBDE83 /* bytereader.cc */; };
+		B88FB13F116CF38300407530 /* bytereader_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0DA116CEC5800407530 /* bytereader_unittest.cc */; };
+		B88FB14F116CF4AE00407530 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+		B88FB152116CF4D300407530 /* byte_cursor_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D4116CEC0600407530 /* byte_cursor_unittest.cc */; };
+		B89E0E781166576C00DD08C9 /* macho_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E6E1166571D00DD08C9 /* macho_reader.cc */; };
+		B89E0E7A1166576C00DD08C9 /* macho_dump.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E701166573700DD08C9 /* macho_dump.cc */; };
+		B89E0E9911665A7200DD08C9 /* macho_reader_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E6D1166571D00DD08C9 /* macho_reader_unittest.cc */; };
+		B89E0E9A11665A7200DD08C9 /* macho_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = B89E0E6E1166571D00DD08C9 /* macho_reader.cc */; };
 		B8C5B5171166534700D34F4E /* dwarf2reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */; };
 		B8C5B5181166534700D34F4E /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95B422C0E0E22D100DBDE83 /* bytereader.cc */; };
 		B8C5B5191166534700D34F4E /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 557800890BE1F3AB00EC23E0 /* macho_utilities.cc */; };
@@ -18,13 +98,184 @@
 		B8C5B51D1166534700D34F4E /* dump_syms.mm in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* dump_syms.mm */; };
 		B8C5B51E1166534700D34F4E /* dump_syms_tool.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF186E0B1BB43700F8391B /* dump_syms_tool.mm */; };
 		B8C5B523116653BA00D34F4E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
+		D21F97D711CBA12300239E38 /* test_assembler_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */; };
+		D21F97D811CBA13D00239E38 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
+		D21F97E911CBA1FF00239E38 /* test_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE0911665B5700407530 /* test_assembler.cc */; };
 /* End PBXBuildFile section */
 
+/* Begin PBXContainerItemProxy section */
+		8B31051411F100CF00FCF3E4 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = D21F97D111CBA0F200239E38;
+			remoteInfo = test_assembler_unittest;
+		};
+		B84A91F9116CF796006C210E /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB023116BDFFF00407530;
+			remoteInfo = gtestmockall;
+		};
+		B84A9200116CF7D2006C210E /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B84A91F3116CF784006C210E;
+			remoteInfo = stabs_to_module_unittest;
+		};
+		B88FAFCE116BDD7000407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B89E0E9411665A6400DD08C9;
+			remoteInfo = macho_reader_unittest;
+		};
+		B88FAFD0116BDD7000407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FAF2E116A591D00407530;
+			remoteInfo = dwarf2reader_cfi_unittest;
+		};
+		B88FB01C116BDF9800407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB006116BDE8300407530;
+			remoteInfo = stabs_reader_unittest;
+		};
+		B88FB039116BE17E00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB023116BDFFF00407530;
+			remoteInfo = gtestmockall;
+		};
+		B88FB087116CE6D800407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB023116BDFFF00407530;
+			remoteInfo = gtestmockall;
+		};
+		B88FB08F116CE71000407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB023116BDFFF00407530;
+			remoteInfo = gtestmockall;
+		};
+		B88FB0BF116CEAFE00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB023116BDFFF00407530;
+			remoteInfo = gtestmockall;
+		};
+		B88FB0C7116CEB4A00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB0B8116CEABF00407530;
+			remoteInfo = module_unittest;
+		};
+		B88FB0E7116CEEDA00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB023116BDFFF00407530;
+			remoteInfo = gtestmockall;
+		};
+		B88FB0F7116CEF2E00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB023116BDFFF00407530;
+			remoteInfo = gtestmockall;
+		};
+		B88FB10F116CF08A00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB023116BDFFF00407530;
+			remoteInfo = gtestmockall;
+		};
+		B88FB124116CF29E00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB023116BDFFF00407530;
+			remoteInfo = gtestmockall;
+		};
+		B88FB13B116CF35C00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB023116BDFFF00407530;
+			remoteInfo = gtestmockall;
+		};
+		B88FB150116CF4C100407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB023116BDFFF00407530;
+			remoteInfo = gtestmockall;
+		};
+		B88FB15A116CF53E00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB14A116CF4A700407530;
+			remoteInfo = byte_cursor_unittest;
+		};
+		B88FB15C116CF54B00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB11E116CF27F00407530;
+			remoteInfo = dwarf_cfi_to_module_unittest;
+		};
+		B88FB15E116CF54B00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB0F1116CEF1900407530;
+			remoteInfo = dwarf_line_to_module_unittest;
+		};
+		B88FB160116CF54B00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB109116CF07900407530;
+			remoteInfo = dwarf_cu_to_module_unittest;
+		};
+		B88FB164116CF54B00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB0DE116CEEA800407530;
+			remoteInfo = dwarf2diehandler_unittest;
+		};
+		B88FB166116CF54B00407530 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = B88FB134116CF30F00407530;
+			remoteInfo = bytereader_unittest;
+		};
+/* End PBXContainerItemProxy section */
+
 /* Begin PBXFileReference section */
 		08FB7796FE84155DC02AAC07 /* dump_syms.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = dump_syms.mm; path = ../../../common/mac/dump_syms.mm; sourceTree = "<group>"; };
-		08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
+		08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		557800890BE1F3AB00EC23E0 /* macho_utilities.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_utilities.cc; path = ../../../common/mac/macho_utilities.cc; sourceTree = SOURCE_ROOT; };
 		5578008A0BE1F3AB00EC23E0 /* macho_utilities.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_utilities.h; path = ../../../common/mac/macho_utilities.h; sourceTree = SOURCE_ROOT; };
+		8B31023E11F0CF1C00FCF3E4 /* Breakpad.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Breakpad.xcconfig; path = ../../../common/mac/Breakpad.xcconfig; sourceTree = SOURCE_ROOT; };
+		8B3102D411F0D60300FCF3E4 /* BreakpadDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadDebug.xcconfig; path = ../../../common/mac/BreakpadDebug.xcconfig; sourceTree = SOURCE_ROOT; };
+		8B3102D511F0D60300FCF3E4 /* BreakpadRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadRelease.xcconfig; path = ../../../common/mac/BreakpadRelease.xcconfig; sourceTree = SOURCE_ROOT; };
+		8B4BDBC912013288009C7060 /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; };
 		9BDF186D0B1BB43700F8391B /* dump_syms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dump_syms.h; path = ../../../common/mac/dump_syms.h; sourceTree = "<group>"; };
 		9BDF186E0B1BB43700F8391B /* dump_syms_tool.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = dump_syms_tool.mm; sourceTree = "<group>"; };
 		9BE650410B52F6D800611104 /* file_id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = file_id.cc; path = ../../../common/mac/file_id.cc; sourceTree = SOURCE_ROOT; };
@@ -33,9 +284,61 @@
 		9BE650440B52F6D800611104 /* macho_id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_id.h; path = ../../../common/mac/macho_id.h; sourceTree = SOURCE_ROOT; };
 		9BE650450B52F6D800611104 /* macho_walker.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_walker.cc; path = ../../../common/mac/macho_walker.cc; sourceTree = SOURCE_ROOT; };
 		9BE650460B52F6D800611104 /* macho_walker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_walker.h; path = ../../../common/mac/macho_walker.h; sourceTree = SOURCE_ROOT; };
-		B89E0E5F1166556C00DD08C9 /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = /usr/lib/libcrypto.dylib; sourceTree = "<absolute>"; };
+		B84A91F4116CF784006C210E /* stabs_to_module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = stabs_to_module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+		B88FAE0911665B5700407530 /* test_assembler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_assembler.cc; path = ../../../common/test_assembler.cc; sourceTree = SOURCE_ROOT; };
+		B88FAE0A11665B5700407530 /* test_assembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_assembler.h; path = ../../../common/test_assembler.h; sourceTree = SOURCE_ROOT; };
+		B88FAE1711665FE400407530 /* dwarf2diehandler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2diehandler.cc; path = ../../../common/dwarf/dwarf2diehandler.cc; sourceTree = SOURCE_ROOT; };
+		B88FAE1811665FE400407530 /* dwarf2diehandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2diehandler.h; path = ../../../common/dwarf/dwarf2diehandler.h; sourceTree = SOURCE_ROOT; };
+		B88FAE1D1166603300407530 /* byte_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = byte_cursor.h; path = ../../../common/byte_cursor.h; sourceTree = SOURCE_ROOT; };
+		B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cu_to_module.cc; path = ../../../common/dwarf_cu_to_module.cc; sourceTree = SOURCE_ROOT; };
+		B88FAE1F1166603300407530 /* dwarf_cu_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_cu_to_module.h; path = ../../../common/dwarf_cu_to_module.h; sourceTree = SOURCE_ROOT; };
+		B88FAE201166603300407530 /* dwarf_line_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_line_to_module.cc; path = ../../../common/dwarf_line_to_module.cc; sourceTree = SOURCE_ROOT; };
+		B88FAE211166603300407530 /* dwarf_line_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_line_to_module.h; path = ../../../common/dwarf_line_to_module.h; sourceTree = SOURCE_ROOT; };
+		B88FAE221166603300407530 /* language.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = language.cc; path = ../../../common/language.cc; sourceTree = SOURCE_ROOT; };
+		B88FAE231166603300407530 /* language.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = language.h; path = ../../../common/language.h; sourceTree = SOURCE_ROOT; };
+		B88FAE241166603300407530 /* module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = module.cc; path = ../../../common/module.cc; sourceTree = SOURCE_ROOT; };
+		B88FAE251166603300407530 /* module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = module.h; path = ../../../common/module.h; sourceTree = SOURCE_ROOT; };
+		B88FAE331166673E00407530 /* dwarf_cfi_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cfi_to_module.cc; path = ../../../common/dwarf_cfi_to_module.cc; sourceTree = SOURCE_ROOT; };
+		B88FAE341166673E00407530 /* dwarf_cfi_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf_cfi_to_module.h; path = ../../../common/dwarf_cfi_to_module.h; sourceTree = SOURCE_ROOT; };
+		B88FAE3911666C6F00407530 /* stabs_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_reader.cc; path = ../../../common/stabs_reader.cc; sourceTree = SOURCE_ROOT; };
+		B88FAE3A11666C6F00407530 /* stabs_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stabs_reader.h; path = ../../../common/stabs_reader.h; sourceTree = SOURCE_ROOT; };
+		B88FAE3C11666C8900407530 /* stabs_to_module.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_to_module.cc; path = ../../../common/stabs_to_module.cc; sourceTree = SOURCE_ROOT; };
+		B88FAE3D11666C8900407530 /* stabs_to_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stabs_to_module.h; path = ../../../common/stabs_to_module.h; sourceTree = SOURCE_ROOT; };
+		B88FAF2F116A591E00407530 /* dwarf2reader_cfi_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf2reader_cfi_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+		B88FAF34116A595400407530 /* cfi_assembler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cfi_assembler.cc; path = ../../../common/dwarf/cfi_assembler.cc; sourceTree = SOURCE_ROOT; };
+		B88FAF35116A595400407530 /* cfi_assembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cfi_assembler.h; path = ../../../common/dwarf/cfi_assembler.h; sourceTree = SOURCE_ROOT; };
+		B88FAF36116A595400407530 /* dwarf2reader_cfi_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2reader_cfi_unittest.cc; path = ../../../common/dwarf/dwarf2reader_cfi_unittest.cc; sourceTree = SOURCE_ROOT; };
+		B88FB003116BDE7200407530 /* stabs_reader_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_reader_unittest.cc; path = ../../../common/stabs_reader_unittest.cc; sourceTree = SOURCE_ROOT; };
+		B88FB007116BDE8300407530 /* stabs_reader_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = stabs_reader_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+		B88FB024116BDFFF00407530 /* libgtestmockall.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgtestmockall.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		B88FB0B5116CEA8A00407530 /* module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = module_unittest.cc; path = ../../../common/module_unittest.cc; sourceTree = SOURCE_ROOT; };
+		B88FB0B9116CEABF00407530 /* module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+		B88FB0D4116CEC0600407530 /* byte_cursor_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = byte_cursor_unittest.cc; path = ../../../common/byte_cursor_unittest.cc; sourceTree = SOURCE_ROOT; };
+		B88FB0D5116CEC0600407530 /* dwarf_cfi_to_module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cfi_to_module_unittest.cc; path = ../../../common/dwarf_cfi_to_module_unittest.cc; sourceTree = SOURCE_ROOT; };
+		B88FB0D6116CEC0600407530 /* dwarf_cu_to_module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_cu_to_module_unittest.cc; path = ../../../common/dwarf_cu_to_module_unittest.cc; sourceTree = SOURCE_ROOT; };
+		B88FB0D7116CEC0600407530 /* dwarf_line_to_module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf_line_to_module_unittest.cc; path = ../../../common/dwarf_line_to_module_unittest.cc; sourceTree = SOURCE_ROOT; };
+		B88FB0D8116CEC0600407530 /* stabs_to_module_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stabs_to_module_unittest.cc; path = ../../../common/stabs_to_module_unittest.cc; sourceTree = SOURCE_ROOT; };
+		B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_assembler_unittest.cc; path = ../../../common/test_assembler_unittest.cc; sourceTree = SOURCE_ROOT; };
+		B88FB0DA116CEC5800407530 /* bytereader_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader_unittest.cc; path = ../../../common/dwarf/bytereader_unittest.cc; sourceTree = SOURCE_ROOT; };
+		B88FB0DB116CEC5800407530 /* dwarf2diehandler_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2diehandler_unittest.cc; path = ../../../common/dwarf/dwarf2diehandler_unittest.cc; sourceTree = SOURCE_ROOT; };
+		B88FB0DF116CEEA800407530 /* dwarf2diehandler_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf2diehandler_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+		B88FB0F2116CEF1900407530 /* dwarf_line_to_module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf_line_to_module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+		B88FB10A116CF07900407530 /* dwarf_cu_to_module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf_cu_to_module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+		B88FB11F116CF27F00407530 /* dwarf_cfi_to_module_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dwarf_cfi_to_module_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+		B88FB135116CF30F00407530 /* bytereader_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = bytereader_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+		B88FB14B116CF4A700407530 /* byte_cursor_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = byte_cursor_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+		B89E0E6D1166571D00DD08C9 /* macho_reader_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_reader_unittest.cc; path = ../../../common/mac/macho_reader_unittest.cc; sourceTree = SOURCE_ROOT; };
+		B89E0E6E1166571D00DD08C9 /* macho_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_reader.cc; path = ../../../common/mac/macho_reader.cc; sourceTree = SOURCE_ROOT; };
+		B89E0E6F1166571D00DD08C9 /* macho_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_reader.h; path = ../../../common/mac/macho_reader.h; sourceTree = SOURCE_ROOT; };
+		B89E0E701166573700DD08C9 /* macho_dump.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = macho_dump.cc; sourceTree = "<group>"; };
+		B89E0E741166575200DD08C9 /* macho_dump */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = macho_dump; sourceTree = BUILT_PRODUCTS_DIR; };
+		B89E0E9511665A6400DD08C9 /* macho_reader_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = macho_reader_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+		B89E0E9F11665AC300DD08C9 /* gtest_main.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gtest_main.cc; path = ../../../testing/gtest/src/gtest_main.cc; sourceTree = SOURCE_ROOT; };
+		B89E0EA011665AC300DD08C9 /* gtest-all.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gtest-all.cc"; path = "../../../testing/gtest/src/gtest-all.cc"; sourceTree = SOURCE_ROOT; };
+		B89E0EA311665AEA00DD08C9 /* gmock-all.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gmock-all.cc"; path = "../../../testing/src/gmock-all.cc"; sourceTree = SOURCE_ROOT; };
 		B8C5B5111166531A00D34F4E /* dump_syms */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dump_syms; sourceTree = BUILT_PRODUCTS_DIR; };
 		B8E8CA0C1156C854009E61B2 /* byteswap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = byteswap.h; path = ../../../common/mac/byteswap.h; sourceTree = SOURCE_ROOT; };
+		D21F97D211CBA0F200239E38 /* test_assembler_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test_assembler_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
 		F95B422B0E0E22D100DBDE83 /* bytereader-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "bytereader-inl.h"; path = "../../../common/dwarf/bytereader-inl.h"; sourceTree = SOURCE_ROOT; };
 		F95B422C0E0E22D100DBDE83 /* bytereader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader.cc; path = ../../../common/dwarf/bytereader.cc; sourceTree = SOURCE_ROOT; };
 		F95B422D0E0E22D100DBDE83 /* bytereader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bytereader.h; path = ../../../common/dwarf/bytereader.h; sourceTree = SOURCE_ROOT; };
@@ -43,17 +346,125 @@
 		F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2reader.cc; path = ../../../common/dwarf/dwarf2reader.cc; sourceTree = SOURCE_ROOT; };
 		F95B42300E0E22D100DBDE83 /* dwarf2reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2reader.h; path = ../../../common/dwarf/dwarf2reader.h; sourceTree = SOURCE_ROOT; };
 		F95B42310E0E22D100DBDE83 /* line_state_machine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = line_state_machine.h; path = ../../../common/dwarf/line_state_machine.h; sourceTree = SOURCE_ROOT; };
-		F9C7ED420E8AD93000E953AD /* functioninfo.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = functioninfo.cc; path = ../../../common/dwarf/functioninfo.cc; sourceTree = SOURCE_ROOT; };
-		F9F5344D0E7C902C0012363F /* functioninfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = functioninfo.h; path = ../../../common/dwarf/functioninfo.h; sourceTree = SOURCE_ROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
+		B84A91F2116CF784006C210E /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B84A91F8116CF78F006C210E /* libgtestmockall.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FAF2D116A591D00407530 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB042116BE3C400407530 /* libgtestmockall.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB005116BDE8300407530 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB03F116BE24200407530 /* libgtestmockall.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB022116BDFFF00407530 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB0B7116CEABF00407530 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB0C1116CEB0600407530 /* libgtestmockall.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB0DD116CEEA800407530 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB0E3116CEEB000407530 /* libgtestmockall.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB0F0116CEF1900407530 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB0F6116CEF2000407530 /* libgtestmockall.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB108116CF07900407530 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB10E116CF08100407530 /* libgtestmockall.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB11D116CF27F00407530 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB123116CF28500407530 /* libgtestmockall.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB133116CF30F00407530 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB139116CF31600407530 /* libgtestmockall.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB149116CF4A700407530 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB14F116CF4AE00407530 /* libgtestmockall.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B89E0E721166575200DD08C9 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B89E0E9311665A6400DD08C9 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB057116C0CDE00407530 /* libgtestmockall.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		B8C5B50F1166531A00D34F4E /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
 				B8C5B523116653BA00D34F4E /* Foundation.framework in Frameworks */,
-				B89E0E601166556C00DD08C9 /* libcrypto.dylib in Frameworks */,
+				8B4BDBCA12013288009C7060 /* libcrypto.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D21F97D011CBA0F200239E38 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D21F97D811CBA13D00239E38 /* libgtestmockall.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -63,19 +474,23 @@
 		08FB7794FE84155DC02AAC07 /* dump_syms */ = {
 			isa = PBXGroup;
 			children = (
+				8B31023E11F0CF1C00FCF3E4 /* Breakpad.xcconfig */,
+				8B3102D411F0D60300FCF3E4 /* BreakpadDebug.xcconfig */,
+				8B3102D511F0D60300FCF3E4 /* BreakpadRelease.xcconfig */,
+				B89E0E9D11665A9500DD08C9 /* TESTING */,
 				F9F5344B0E7C8FFC0012363F /* DWARF */,
+				B89E0E6C1166569700DD08C9 /* MACHO */,
+				B88FAE3811666A1700407530 /* STABS */,
+				B88FAE1C11665FFD00407530 /* MODULE */,
+				B88FAE1D1166603300407530 /* byte_cursor.h */,
+				B88FB0D4116CEC0600407530 /* byte_cursor_unittest.cc */,
 				B8E8CA0C1156C854009E61B2 /* byteswap.h */,
-				557800890BE1F3AB00EC23E0 /* macho_utilities.cc */,
-				5578008A0BE1F3AB00EC23E0 /* macho_utilities.h */,
 				9BE650410B52F6D800611104 /* file_id.cc */,
 				9BE650420B52F6D800611104 /* file_id.h */,
-				9BE650430B52F6D800611104 /* macho_id.cc */,
-				9BE650440B52F6D800611104 /* macho_id.h */,
-				9BE650450B52F6D800611104 /* macho_walker.cc */,
-				9BE650460B52F6D800611104 /* macho_walker.h */,
 				9BDF186D0B1BB43700F8391B /* dump_syms.h */,
 				08FB7796FE84155DC02AAC07 /* dump_syms.mm */,
 				9BDF186E0B1BB43700F8391B /* dump_syms_tool.mm */,
+				B89E0E701166573700DD08C9 /* macho_dump.cc */,
 				08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */,
 				1AB674ADFE9D54B511CA2CBB /* Products */,
 			);
@@ -85,8 +500,8 @@
 		08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = {
 			isa = PBXGroup;
 			children = (
+				8B4BDBC912013288009C7060 /* libcrypto.dylib */,
 				08FB779EFE84155DC02AAC07 /* Foundation.framework */,
-				B89E0E5F1166556C00DD08C9 /* libcrypto.dylib */,
 			);
 			name = "External Frameworks and Libraries";
 			sourceTree = "<group>";
@@ -95,29 +510,341 @@
 			isa = PBXGroup;
 			children = (
 				B8C5B5111166531A00D34F4E /* dump_syms */,
+				B89E0E741166575200DD08C9 /* macho_dump */,
+				B89E0E9511665A6400DD08C9 /* macho_reader_unittest */,
+				B88FAF2F116A591E00407530 /* dwarf2reader_cfi_unittest */,
+				B88FB007116BDE8300407530 /* stabs_reader_unittest */,
+				B88FB024116BDFFF00407530 /* libgtestmockall.a */,
+				B88FB0B9116CEABF00407530 /* module_unittest */,
+				B88FB0DF116CEEA800407530 /* dwarf2diehandler_unittest */,
+				B88FB0F2116CEF1900407530 /* dwarf_line_to_module_unittest */,
+				B88FB10A116CF07900407530 /* dwarf_cu_to_module_unittest */,
+				B88FB11F116CF27F00407530 /* dwarf_cfi_to_module_unittest */,
+				B88FB135116CF30F00407530 /* bytereader_unittest */,
+				B88FB14B116CF4A700407530 /* byte_cursor_unittest */,
+				B84A91F4116CF784006C210E /* stabs_to_module_unittest */,
+				D21F97D211CBA0F200239E38 /* test_assembler_unittest */,
 			);
 			name = Products;
 			sourceTree = "<group>";
 		};
+		B88FAE1C11665FFD00407530 /* MODULE */ = {
+			isa = PBXGroup;
+			children = (
+				B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */,
+				B88FAE1F1166603300407530 /* dwarf_cu_to_module.h */,
+				B88FB0D6116CEC0600407530 /* dwarf_cu_to_module_unittest.cc */,
+				B88FAE201166603300407530 /* dwarf_line_to_module.cc */,
+				B88FAE211166603300407530 /* dwarf_line_to_module.h */,
+				B88FB0D7116CEC0600407530 /* dwarf_line_to_module_unittest.cc */,
+				B88FAE221166603300407530 /* language.cc */,
+				B88FAE231166603300407530 /* language.h */,
+				B88FAE241166603300407530 /* module.cc */,
+				B88FAE251166603300407530 /* module.h */,
+				B88FB0B5116CEA8A00407530 /* module_unittest.cc */,
+				B88FAE331166673E00407530 /* dwarf_cfi_to_module.cc */,
+				B88FAE341166673E00407530 /* dwarf_cfi_to_module.h */,
+				B88FB0D5116CEC0600407530 /* dwarf_cfi_to_module_unittest.cc */,
+				B88FAE3C11666C8900407530 /* stabs_to_module.cc */,
+				B88FAE3D11666C8900407530 /* stabs_to_module.h */,
+				B88FB0D8116CEC0600407530 /* stabs_to_module_unittest.cc */,
+			);
+			name = MODULE;
+			sourceTree = "<group>";
+		};
+		B88FAE3811666A1700407530 /* STABS */ = {
+			isa = PBXGroup;
+			children = (
+				B88FB003116BDE7200407530 /* stabs_reader_unittest.cc */,
+				B88FAE3911666C6F00407530 /* stabs_reader.cc */,
+				B88FAE3A11666C6F00407530 /* stabs_reader.h */,
+			);
+			name = STABS;
+			sourceTree = "<group>";
+		};
+		B89E0E6C1166569700DD08C9 /* MACHO */ = {
+			isa = PBXGroup;
+			children = (
+				B89E0E6D1166571D00DD08C9 /* macho_reader_unittest.cc */,
+				B89E0E6E1166571D00DD08C9 /* macho_reader.cc */,
+				B89E0E6F1166571D00DD08C9 /* macho_reader.h */,
+				557800890BE1F3AB00EC23E0 /* macho_utilities.cc */,
+				5578008A0BE1F3AB00EC23E0 /* macho_utilities.h */,
+				9BE650430B52F6D800611104 /* macho_id.cc */,
+				9BE650440B52F6D800611104 /* macho_id.h */,
+				9BE650450B52F6D800611104 /* macho_walker.cc */,
+				9BE650460B52F6D800611104 /* macho_walker.h */,
+			);
+			name = MACHO;
+			sourceTree = "<group>";
+		};
+		B89E0E9D11665A9500DD08C9 /* TESTING */ = {
+			isa = PBXGroup;
+			children = (
+				B88FAE0911665B5700407530 /* test_assembler.cc */,
+				B88FAE0A11665B5700407530 /* test_assembler.h */,
+				B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */,
+				B89E0EA311665AEA00DD08C9 /* gmock-all.cc */,
+				B89E0E9F11665AC300DD08C9 /* gtest_main.cc */,
+				B89E0EA011665AC300DD08C9 /* gtest-all.cc */,
+			);
+			name = TESTING;
+			sourceTree = "<group>";
+		};
 		F9F5344B0E7C8FFC0012363F /* DWARF */ = {
 			isa = PBXGroup;
 			children = (
-				F9C7ED420E8AD93000E953AD /* functioninfo.cc */,
-				F9F5344D0E7C902C0012363F /* functioninfo.h */,
+				B88FAF34116A595400407530 /* cfi_assembler.cc */,
+				B88FAF35116A595400407530 /* cfi_assembler.h */,
 				F95B422E0E0E22D100DBDE83 /* dwarf2enums.h */,
 				F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */,
 				F95B42300E0E22D100DBDE83 /* dwarf2reader.h */,
+				B88FAF36116A595400407530 /* dwarf2reader_cfi_unittest.cc */,
 				F95B422D0E0E22D100DBDE83 /* bytereader.h */,
 				F95B422B0E0E22D100DBDE83 /* bytereader-inl.h */,
 				F95B422C0E0E22D100DBDE83 /* bytereader.cc */,
+				B88FB0DA116CEC5800407530 /* bytereader_unittest.cc */,
 				F95B42310E0E22D100DBDE83 /* line_state_machine.h */,
+				B88FAE1711665FE400407530 /* dwarf2diehandler.cc */,
+				B88FAE1811665FE400407530 /* dwarf2diehandler.h */,
+				B88FB0DB116CEC5800407530 /* dwarf2diehandler_unittest.cc */,
 			);
 			name = DWARF;
 			sourceTree = "<group>";
 		};
 /* End PBXGroup section */
 
+/* Begin PBXHeadersBuildPhase section */
+		B88FB020116BDFFF00407530 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
 /* Begin PBXNativeTarget section */
+		B84A91F3116CF784006C210E /* stabs_to_module_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B84A9202116CF7F0006C210E /* Build configuration list for PBXNativeTarget "stabs_to_module_unittest" */;
+			buildPhases = (
+				B84A91F1116CF784006C210E /* Sources */,
+				B84A91F2116CF784006C210E /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				B84A91FA116CF796006C210E /* PBXTargetDependency */,
+			);
+			name = stabs_to_module_unittest;
+			productName = stabs_to_module_unittest;
+			productReference = B84A91F4116CF784006C210E /* stabs_to_module_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
+		B88FAF2E116A591D00407530 /* dwarf2reader_cfi_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B88FAF33116A594800407530 /* Build configuration list for PBXNativeTarget "dwarf2reader_cfi_unittest" */;
+			buildPhases = (
+				B88FAF2C116A591D00407530 /* Sources */,
+				B88FAF2D116A591D00407530 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				B88FB03A116BE17E00407530 /* PBXTargetDependency */,
+			);
+			name = dwarf2reader_cfi_unittest;
+			productName = dwarf2reader_cfi_unittest;
+			productReference = B88FAF2F116A591E00407530 /* dwarf2reader_cfi_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
+		B88FB006116BDE8300407530 /* stabs_reader_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B88FB013116BDEC800407530 /* Build configuration list for PBXNativeTarget "stabs_reader_unittest" */;
+			buildPhases = (
+				B88FB004116BDE8300407530 /* Sources */,
+				B88FB005116BDE8300407530 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				B88FB088116CE6D800407530 /* PBXTargetDependency */,
+			);
+			name = stabs_reader_unittest;
+			productName = stabs_reader_unittest;
+			productReference = B88FB007116BDE8300407530 /* stabs_reader_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
+		B88FB023116BDFFF00407530 /* gtestmockall */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B88FB027116BE02900407530 /* Build configuration list for PBXNativeTarget "gtestmockall" */;
+			buildPhases = (
+				B88FB020116BDFFF00407530 /* Headers */,
+				B88FB021116BDFFF00407530 /* Sources */,
+				B88FB022116BDFFF00407530 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = gtestmockall;
+			productName = gtestmockall;
+			productReference = B88FB024116BDFFF00407530 /* libgtestmockall.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+		B88FB0B8116CEABF00407530 /* module_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B88FB0BE116CEAFE00407530 /* Build configuration list for PBXNativeTarget "module_unittest" */;
+			buildPhases = (
+				B88FB0B6116CEABF00407530 /* Sources */,
+				B88FB0B7116CEABF00407530 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				B88FB0C0116CEAFE00407530 /* PBXTargetDependency */,
+			);
+			name = module_unittest;
+			productName = module_unittest;
+			productReference = B88FB0B9116CEABF00407530 /* module_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
+		B88FB0DE116CEEA800407530 /* dwarf2diehandler_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B88FB0E4116CEECE00407530 /* Build configuration list for PBXNativeTarget "dwarf2diehandler_unittest" */;
+			buildPhases = (
+				B88FB0DC116CEEA800407530 /* Sources */,
+				B88FB0DD116CEEA800407530 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				B88FB0E8116CEEDA00407530 /* PBXTargetDependency */,
+			);
+			name = dwarf2diehandler_unittest;
+			productName = dwarf2diehandler_unittest;
+			productReference = B88FB0DF116CEEA800407530 /* dwarf2diehandler_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
+		B88FB0F1116CEF1900407530 /* dwarf_line_to_module_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B88FB0F9116CEF9800407530 /* Build configuration list for PBXNativeTarget "dwarf_line_to_module_unittest" */;
+			buildPhases = (
+				B88FB0EF116CEF1900407530 /* Sources */,
+				B88FB0F0116CEF1900407530 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				B88FB0F8116CEF2E00407530 /* PBXTargetDependency */,
+			);
+			name = dwarf_line_to_module_unittest;
+			productName = dwarf_line_to_module_unittest;
+			productReference = B88FB0F2116CEF1900407530 /* dwarf_line_to_module_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
+		B88FB109116CF07900407530 /* dwarf_cu_to_module_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B88FB111116CF0A800407530 /* Build configuration list for PBXNativeTarget "dwarf_cu_to_module_unittest" */;
+			buildPhases = (
+				B88FB107116CF07900407530 /* Sources */,
+				B88FB108116CF07900407530 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				B88FB110116CF08A00407530 /* PBXTargetDependency */,
+			);
+			name = dwarf_cu_to_module_unittest;
+			productName = dwarf_cu_to_module_unittest;
+			productReference = B88FB10A116CF07900407530 /* dwarf_cu_to_module_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
+		B88FB11E116CF27F00407530 /* dwarf_cfi_to_module_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B88FB128116CF2C800407530 /* Build configuration list for PBXNativeTarget "dwarf_cfi_to_module_unittest" */;
+			buildPhases = (
+				B88FB11C116CF27F00407530 /* Sources */,
+				B88FB11D116CF27F00407530 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				B88FB125116CF29E00407530 /* PBXTargetDependency */,
+			);
+			name = dwarf_cfi_to_module_unittest;
+			productName = dwarf_cfi_to_module_unittest;
+			productReference = B88FB11F116CF27F00407530 /* dwarf_cfi_to_module_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
+		B88FB134116CF30F00407530 /* bytereader_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B88FB13A116CF33400407530 /* Build configuration list for PBXNativeTarget "bytereader_unittest" */;
+			buildPhases = (
+				B88FB132116CF30F00407530 /* Sources */,
+				B88FB133116CF30F00407530 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				B88FB13C116CF35C00407530 /* PBXTargetDependency */,
+			);
+			name = bytereader_unittest;
+			productName = bytereader_unittest;
+			productReference = B88FB135116CF30F00407530 /* bytereader_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
+		B88FB14A116CF4A700407530 /* byte_cursor_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B88FB159116CF4F900407530 /* Build configuration list for PBXNativeTarget "byte_cursor_unittest" */;
+			buildPhases = (
+				B88FB148116CF4A700407530 /* Sources */,
+				B88FB149116CF4A700407530 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				B88FB151116CF4C100407530 /* PBXTargetDependency */,
+			);
+			name = byte_cursor_unittest;
+			productName = byte_cursor_unittest;
+			productReference = B88FB14B116CF4A700407530 /* byte_cursor_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
+		B89E0E731166575200DD08C9 /* macho_dump */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B89E0E7F116657A100DD08C9 /* Build configuration list for PBXNativeTarget "macho_dump" */;
+			buildPhases = (
+				B89E0E711166575200DD08C9 /* Sources */,
+				B89E0E721166575200DD08C9 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = macho_dump;
+			productName = macho_dump;
+			productReference = B89E0E741166575200DD08C9 /* macho_dump */;
+			productType = "com.apple.product-type.tool";
+		};
+		B89E0E9411665A6400DD08C9 /* macho_reader_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = B89E0E9E11665A9600DD08C9 /* Build configuration list for PBXNativeTarget "macho_reader_unittest" */;
+			buildPhases = (
+				B89E0E9211665A6400DD08C9 /* Sources */,
+				B89E0E9311665A6400DD08C9 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				B88FB090116CE71000407530 /* PBXTargetDependency */,
+			);
+			name = macho_reader_unittest;
+			productName = macho_reader_unittest;
+			productReference = B89E0E9511665A6400DD08C9 /* macho_reader_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
 		B8C5B5101166531A00D34F4E /* dump_syms */ = {
 			isa = PBXNativeTarget;
 			buildConfigurationList = B8C5B5151166533900D34F4E /* Build configuration list for PBXNativeTarget "dump_syms" */;
@@ -134,29 +861,202 @@
 			productReference = B8C5B5111166531A00D34F4E /* dump_syms */;
 			productType = "com.apple.product-type.tool";
 		};
+		D21F97D111CBA0F200239E38 /* test_assembler_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = D21F97D611CBA11000239E38 /* Build configuration list for PBXNativeTarget "test_assembler_unittest" */;
+			buildPhases = (
+				D21F97CF11CBA0F200239E38 /* Sources */,
+				D21F97D011CBA0F200239E38 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = test_assembler_unittest;
+			productName = test_assembler_unittest;
+			productReference = D21F97D211CBA0F200239E38 /* test_assembler_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
 /* End PBXNativeTarget section */
 
 /* Begin PBXProject section */
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "dump_syms" */;
-			compatibilityVersion = "Xcode 2.4";
+			compatibilityVersion = "Xcode 3.1";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* dump_syms */;
 			projectDirPath = "";
 			projectRoot = "";
 			targets = (
 				B8C5B5101166531A00D34F4E /* dump_syms */,
+				B89E0E731166575200DD08C9 /* macho_dump */,
+				B88FB023116BDFFF00407530 /* gtestmockall */,
+				B88FB14A116CF4A700407530 /* byte_cursor_unittest */,
+				B89E0E9411665A6400DD08C9 /* macho_reader_unittest */,
+				B88FB006116BDE8300407530 /* stabs_reader_unittest */,
+				B88FB134116CF30F00407530 /* bytereader_unittest */,
+				B88FAF2E116A591D00407530 /* dwarf2reader_cfi_unittest */,
+				B88FB0DE116CEEA800407530 /* dwarf2diehandler_unittest */,
+				B88FB109116CF07900407530 /* dwarf_cu_to_module_unittest */,
+				B88FB0F1116CEF1900407530 /* dwarf_line_to_module_unittest */,
+				B88FB11E116CF27F00407530 /* dwarf_cfi_to_module_unittest */,
+				B84A91F3116CF784006C210E /* stabs_to_module_unittest */,
+				B88FB0B8116CEABF00407530 /* module_unittest */,
+				B88FAFC9116BDCAD00407530 /* all_unittests */,
+				D21F97D111CBA0F200239E38 /* test_assembler_unittest */,
 			);
 		};
 /* End PBXProject section */
 
+/* Begin PBXShellScriptBuildPhase section */
+		B88FB094116CE73E00407530 /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "set -eu\n\ncd $BUILT_PRODUCTS_DIR\npwd\n\n./byte_cursor_unittest\n./macho_reader_unittest\n./stabs_reader_unittest\n./bytereader_unittest\n./dwarf2reader_cfi_unittest\n./dwarf2diehandler_unittest\n./dwarf_cu_to_module_unittest\n./dwarf_line_to_module_unittest\n./dwarf_cfi_to_module_unittest\n./stabs_to_module_unittest\n./module_unittest\n./test_assembler_unittest\n\necho \"Expect two warnings from the following tests:\"\necho \"   Errors.BadFileNumber\"\necho \"   Errors.BadDirectoryNumber\"\necho \"The proper behavior of these tests is to print text that XCode confuses with compiler warnings.\"\n";
+		};
+/* End PBXShellScriptBuildPhase section */
+
 /* Begin PBXSourcesBuildPhase section */
+		B84A91F1116CF784006C210E /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B84A91FB116CF7AF006C210E /* module.cc in Sources */,
+				B84A91FC116CF7AF006C210E /* stabs_to_module.cc in Sources */,
+				B84A91FD116CF7AF006C210E /* stabs_to_module_unittest.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FAF2C116A591D00407530 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FAF38116A595400407530 /* dwarf2reader_cfi_unittest.cc in Sources */,
+				B88FAF3F116A5A2E00407530 /* dwarf2reader.cc in Sources */,
+				B88FAF40116A5A2E00407530 /* bytereader.cc in Sources */,
+				B88FAF37116A595400407530 /* cfi_assembler.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB004116BDE8300407530 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB00F116BDEA700407530 /* stabs_reader_unittest.cc in Sources */,
+				B88FB010116BDEA700407530 /* stabs_reader.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB021116BDFFF00407530 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB028116BE03100407530 /* test_assembler.cc in Sources */,
+				B88FB029116BE03100407530 /* gmock-all.cc in Sources */,
+				B88FB02A116BE03100407530 /* gtest_main.cc in Sources */,
+				B88FB02B116BE03100407530 /* gtest-all.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB0B6116CEABF00407530 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB0BD116CEAE000407530 /* module_unittest.cc in Sources */,
+				B88FB0C4116CEB4100407530 /* module.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB0DC116CEEA800407530 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB0E5116CEED300407530 /* dwarf2diehandler.cc in Sources */,
+				B88FB0E6116CEED300407530 /* dwarf2diehandler_unittest.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB0EF116CEF1900407530 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB0FA116CF00E00407530 /* dwarf_line_to_module.cc in Sources */,
+				B88FB0FE116CF02400407530 /* module.cc in Sources */,
+				B88FB0FB116CF00E00407530 /* dwarf_line_to_module_unittest.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB107116CF07900407530 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB112116CF1F000407530 /* dwarf_cu_to_module.cc in Sources */,
+				B88FB113116CF1F000407530 /* dwarf_cu_to_module_unittest.cc in Sources */,
+				B88FB114116CF1F000407530 /* language.cc in Sources */,
+				B88FB115116CF1F000407530 /* module.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB11C116CF27F00407530 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB129116CF2DD00407530 /* module.cc in Sources */,
+				B88FB12A116CF2DD00407530 /* dwarf_cfi_to_module.cc in Sources */,
+				B88FB12B116CF2DD00407530 /* dwarf_cfi_to_module_unittest.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB132116CF30F00407530 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB13D116CF38300407530 /* cfi_assembler.cc in Sources */,
+				B88FB13E116CF38300407530 /* bytereader.cc in Sources */,
+				B88FB13F116CF38300407530 /* bytereader_unittest.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B88FB148116CF4A700407530 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B88FB152116CF4D300407530 /* byte_cursor_unittest.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B89E0E711166575200DD08C9 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B89E0E781166576C00DD08C9 /* macho_reader.cc in Sources */,
+				B89E0E7A1166576C00DD08C9 /* macho_dump.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		B89E0E9211665A6400DD08C9 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				B89E0E9911665A7200DD08C9 /* macho_reader_unittest.cc in Sources */,
+				B89E0E9A11665A7200DD08C9 /* macho_reader.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		B8C5B50E1166531A00D34F4E /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				B8C5B5161166534700D34F4E /* functioninfo.cc in Sources */,
+				B88FAE2C1166606200407530 /* macho_reader.cc in Sources */,
 				B8C5B5171166534700D34F4E /* dwarf2reader.cc in Sources */,
 				B8C5B5181166534700D34F4E /* bytereader.cc in Sources */,
 				B8C5B5191166534700D34F4E /* macho_utilities.cc in Sources */,
@@ -165,45 +1065,543 @@
 				B8C5B51C1166534700D34F4E /* macho_walker.cc in Sources */,
 				B8C5B51D1166534700D34F4E /* dump_syms.mm in Sources */,
 				B8C5B51E1166534700D34F4E /* dump_syms_tool.mm in Sources */,
+				B88FAE1911665FE400407530 /* dwarf2diehandler.cc in Sources */,
+				B88FAE261166603300407530 /* dwarf_cu_to_module.cc in Sources */,
+				B88FAE271166603300407530 /* dwarf_line_to_module.cc in Sources */,
+				B88FAE281166603300407530 /* language.cc in Sources */,
+				B88FAE291166603300407530 /* module.cc in Sources */,
+				B88FAE351166673E00407530 /* dwarf_cfi_to_module.cc in Sources */,
+				B88FAE3B11666C6F00407530 /* stabs_reader.cc in Sources */,
+				B88FAE3E11666C8900407530 /* stabs_to_module.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D21F97CF11CBA0F200239E38 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D21F97E911CBA1FF00239E38 /* test_assembler.cc in Sources */,
+				D21F97D711CBA12300239E38 /* test_assembler_unittest.cc in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXSourcesBuildPhase section */
 
+/* Begin PBXTargetDependency section */
+		8B31051511F100CF00FCF3E4 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = D21F97D111CBA0F200239E38 /* test_assembler_unittest */;
+			targetProxy = 8B31051411F100CF00FCF3E4 /* PBXContainerItemProxy */;
+		};
+		B84A91FA116CF796006C210E /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB023116BDFFF00407530 /* gtestmockall */;
+			targetProxy = B84A91F9116CF796006C210E /* PBXContainerItemProxy */;
+		};
+		B84A9201116CF7D2006C210E /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B84A91F3116CF784006C210E /* stabs_to_module_unittest */;
+			targetProxy = B84A9200116CF7D2006C210E /* PBXContainerItemProxy */;
+		};
+		B88FAFCF116BDD7000407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B89E0E9411665A6400DD08C9 /* macho_reader_unittest */;
+			targetProxy = B88FAFCE116BDD7000407530 /* PBXContainerItemProxy */;
+		};
+		B88FAFD1116BDD7000407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FAF2E116A591D00407530 /* dwarf2reader_cfi_unittest */;
+			targetProxy = B88FAFD0116BDD7000407530 /* PBXContainerItemProxy */;
+		};
+		B88FB01D116BDF9800407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB006116BDE8300407530 /* stabs_reader_unittest */;
+			targetProxy = B88FB01C116BDF9800407530 /* PBXContainerItemProxy */;
+		};
+		B88FB03A116BE17E00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB023116BDFFF00407530 /* gtestmockall */;
+			targetProxy = B88FB039116BE17E00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB088116CE6D800407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB023116BDFFF00407530 /* gtestmockall */;
+			targetProxy = B88FB087116CE6D800407530 /* PBXContainerItemProxy */;
+		};
+		B88FB090116CE71000407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB023116BDFFF00407530 /* gtestmockall */;
+			targetProxy = B88FB08F116CE71000407530 /* PBXContainerItemProxy */;
+		};
+		B88FB0C0116CEAFE00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB023116BDFFF00407530 /* gtestmockall */;
+			targetProxy = B88FB0BF116CEAFE00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB0C8116CEB4A00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB0B8116CEABF00407530 /* module_unittest */;
+			targetProxy = B88FB0C7116CEB4A00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB0E8116CEEDA00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB023116BDFFF00407530 /* gtestmockall */;
+			targetProxy = B88FB0E7116CEEDA00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB0F8116CEF2E00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB023116BDFFF00407530 /* gtestmockall */;
+			targetProxy = B88FB0F7116CEF2E00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB110116CF08A00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB023116BDFFF00407530 /* gtestmockall */;
+			targetProxy = B88FB10F116CF08A00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB125116CF29E00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB023116BDFFF00407530 /* gtestmockall */;
+			targetProxy = B88FB124116CF29E00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB13C116CF35C00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB023116BDFFF00407530 /* gtestmockall */;
+			targetProxy = B88FB13B116CF35C00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB151116CF4C100407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB023116BDFFF00407530 /* gtestmockall */;
+			targetProxy = B88FB150116CF4C100407530 /* PBXContainerItemProxy */;
+		};
+		B88FB15B116CF53E00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB14A116CF4A700407530 /* byte_cursor_unittest */;
+			targetProxy = B88FB15A116CF53E00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB15D116CF54B00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB11E116CF27F00407530 /* dwarf_cfi_to_module_unittest */;
+			targetProxy = B88FB15C116CF54B00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB15F116CF54B00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB0F1116CEF1900407530 /* dwarf_line_to_module_unittest */;
+			targetProxy = B88FB15E116CF54B00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB161116CF54B00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB109116CF07900407530 /* dwarf_cu_to_module_unittest */;
+			targetProxy = B88FB160116CF54B00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB165116CF54B00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB0DE116CEEA800407530 /* dwarf2diehandler_unittest */;
+			targetProxy = B88FB164116CF54B00407530 /* PBXContainerItemProxy */;
+		};
+		B88FB167116CF54B00407530 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = B88FB134116CF30F00407530 /* bytereader_unittest */;
+			targetProxy = B88FB166116CF54B00407530 /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
 /* Begin XCBuildConfiguration section */
 		1DEB927908733DD40010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 8B3102D411F0D60300FCF3E4 /* BreakpadDebug.xcconfig */;
 			buildSettings = {
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				HEADER_SEARCH_PATHS = "../../../**";
-				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+				HEADER_SEARCH_PATHS = ../../..;
 			};
 			name = Debug;
 		};
 		1DEB927A08733DD40010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 8B3102D511F0D60300FCF3E4 /* BreakpadRelease.xcconfig */;
 			buildSettings = {
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+				HEADER_SEARCH_PATHS = ../../..;
+			};
+			name = Release;
+		};
+		B84A91F6116CF784006C210E /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = stabs_to_module_unittest;
+			};
+			name = Debug;
+		};
+		B84A91F7116CF784006C210E /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = stabs_to_module_unittest;
+			};
+			name = Release;
+		};
+		B88FAF31116A591F00407530 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+				);
+				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
+				PRODUCT_NAME = dwarf2reader_cfi_unittest;
+			};
+			name = Debug;
+		};
+		B88FAF32116A591F00407530 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+				);
+				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
+				PRODUCT_NAME = dwarf2reader_cfi_unittest;
+			};
+			name = Release;
+		};
+		B88FAFCA116BDCAD00407530 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = all_unittests;
+			};
+			name = Debug;
+		};
+		B88FAFCB116BDCAD00407530 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = all_unittests;
+			};
+			name = Release;
+		};
+		B88FB009116BDE8400407530 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = stabs_reader_unittest;
+			};
+			name = Debug;
+		};
+		B88FB00A116BDE8400407530 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = stabs_reader_unittest;
+			};
+			name = Release;
+		};
+		B88FB025116BE00100407530 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = gtestmockall;
+			};
+			name = Debug;
+		};
+		B88FB026116BE00100407530 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = gtestmockall;
+			};
+			name = Release;
+		};
+		B88FB0BB116CEAC000407530 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = module_unittest;
+			};
+			name = Debug;
+		};
+		B88FB0BC116CEAC000407530 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = module_unittest;
+			};
+			name = Release;
+		};
+		B88FB0E1116CEEA800407530 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = dwarf2diehandler_unittest;
+			};
+			name = Debug;
+		};
+		B88FB0E2116CEEA800407530 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = dwarf2diehandler_unittest;
+			};
+			name = Release;
+		};
+		B88FB0F4116CEF1900407530 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = dwarf_line_to_module_unittest;
+			};
+			name = Debug;
+		};
+		B88FB0F5116CEF1900407530 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = dwarf_line_to_module_unittest;
+			};
+			name = Release;
+		};
+		B88FB10C116CF07A00407530 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = dwarf_cu_to_module_unittest;
+			};
+			name = Debug;
+		};
+		B88FB10D116CF07A00407530 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = dwarf_cu_to_module_unittest;
+			};
+			name = Release;
+		};
+		B88FB121116CF28000407530 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = dwarf_cfi_to_module_unittest;
+			};
+			name = Debug;
+		};
+		B88FB122116CF28000407530 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = dwarf_cfi_to_module_unittest;
+			};
+			name = Release;
+		};
+		B88FB137116CF30F00407530 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = bytereader_unittest;
+			};
+			name = Debug;
+		};
+		B88FB138116CF30F00407530 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = bytereader_unittest;
+			};
+			name = Release;
+		};
+		B88FB14D116CF4A800407530 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = byte_cursor_unittest;
+			};
+			name = Debug;
+		};
+		B88FB14E116CF4A800407530 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = byte_cursor_unittest;
+			};
+			name = Release;
+		};
+		B89E0E761166575300DD08C9 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = macho_dump;
+			};
+			name = Debug;
+		};
+		B89E0E771166575300DD08C9 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = macho_dump;
+			};
+			name = Release;
+		};
+		B89E0E9711665A6400DD08C9 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = macho_reader_unittest;
+			};
+			name = Debug;
+		};
+		B89E0E9811665A6400DD08C9 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = macho_reader_unittest;
 			};
 			name = Release;
 		};
 		B8C5B5131166531B00D34F4E /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				INSTALL_PATH = /usr/local/bin;
-				OTHER_LDFLAGS = "";
-				PREBINDING = NO;
+				GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
 				PRODUCT_NAME = dump_syms;
 			};
 			name = Debug;
@@ -211,15 +1609,36 @@
 		B8C5B5141166531B00D34F4E /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_MODEL_TUNING = G5;
-				INSTALL_PATH = /usr/local/bin;
-				PREBINDING = NO;
+				GCC_PREPROCESSOR_DEFINITIONS = HAVE_MACH_O_NLIST_H;
 				PRODUCT_NAME = dump_syms;
-				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		D21F97D411CBA0F200239E38 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = test_assembler_unittest;
+			};
+			name = Debug;
+		};
+		D21F97D511CBA0F200239E38 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					$inherited,
+					../../../testing,
+					../../../testing/include,
+					../../../testing/gtest,
+					../../../testing/gtest/include,
+				);
+				PRODUCT_NAME = test_assembler_unittest;
 			};
 			name = Release;
 		};
@@ -235,6 +1654,132 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
+		B84A9202116CF7F0006C210E /* Build configuration list for PBXNativeTarget "stabs_to_module_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B84A91F6116CF784006C210E /* Debug */,
+				B84A91F7116CF784006C210E /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B88FAF33116A594800407530 /* Build configuration list for PBXNativeTarget "dwarf2reader_cfi_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B88FAF31116A591F00407530 /* Debug */,
+				B88FAF32116A591F00407530 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B88FAFCC116BDCCC00407530 /* Build configuration list for PBXAggregateTarget "all_unittests" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B88FAFCA116BDCAD00407530 /* Debug */,
+				B88FAFCB116BDCAD00407530 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B88FB013116BDEC800407530 /* Build configuration list for PBXNativeTarget "stabs_reader_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B88FB009116BDE8400407530 /* Debug */,
+				B88FB00A116BDE8400407530 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B88FB027116BE02900407530 /* Build configuration list for PBXNativeTarget "gtestmockall" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B88FB025116BE00100407530 /* Debug */,
+				B88FB026116BE00100407530 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B88FB0BE116CEAFE00407530 /* Build configuration list for PBXNativeTarget "module_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B88FB0BB116CEAC000407530 /* Debug */,
+				B88FB0BC116CEAC000407530 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B88FB0E4116CEECE00407530 /* Build configuration list for PBXNativeTarget "dwarf2diehandler_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B88FB0E1116CEEA800407530 /* Debug */,
+				B88FB0E2116CEEA800407530 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B88FB0F9116CEF9800407530 /* Build configuration list for PBXNativeTarget "dwarf_line_to_module_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B88FB0F4116CEF1900407530 /* Debug */,
+				B88FB0F5116CEF1900407530 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B88FB111116CF0A800407530 /* Build configuration list for PBXNativeTarget "dwarf_cu_to_module_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B88FB10C116CF07A00407530 /* Debug */,
+				B88FB10D116CF07A00407530 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B88FB128116CF2C800407530 /* Build configuration list for PBXNativeTarget "dwarf_cfi_to_module_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B88FB121116CF28000407530 /* Debug */,
+				B88FB122116CF28000407530 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B88FB13A116CF33400407530 /* Build configuration list for PBXNativeTarget "bytereader_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B88FB137116CF30F00407530 /* Debug */,
+				B88FB138116CF30F00407530 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B88FB159116CF4F900407530 /* Build configuration list for PBXNativeTarget "byte_cursor_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B88FB14D116CF4A800407530 /* Debug */,
+				B88FB14E116CF4A800407530 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B89E0E7F116657A100DD08C9 /* Build configuration list for PBXNativeTarget "macho_dump" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B89E0E761166575300DD08C9 /* Debug */,
+				B89E0E771166575300DD08C9 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		B89E0E9E11665A9600DD08C9 /* Build configuration list for PBXNativeTarget "macho_reader_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				B89E0E9711665A6400DD08C9 /* Debug */,
+				B89E0E9811665A6400DD08C9 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 		B8C5B5151166533900D34F4E /* Build configuration list for PBXNativeTarget "dump_syms" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
@@ -244,6 +1789,15 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
+		D21F97D611CBA11000239E38 /* Build configuration list for PBXNativeTarget "test_assembler_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D21F97D411CBA0F200239E38 /* Debug */,
+				D21F97D511CBA0F200239E38 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 /* End XCConfigurationList section */
 	};
 	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
diff --git a/src/tools/mac/dump_syms/dump_syms_tool.mm b/src/tools/mac/dump_syms/dump_syms_tool.mm
index 827cea4..0b8c11b 100644
--- a/src/tools/mac/dump_syms/dump_syms_tool.mm
+++ b/src/tools/mac/dump_syms/dump_syms_tool.mm
@@ -1,3 +1,5 @@
+// -*- mode: c++ -*-
+
 // Copyright (c) 2006, Google Inc.
 // All rights reserved.
 //
@@ -27,51 +29,69 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// dump_syms_tool.m: Command line tool that uses the DumpSymbols class.
+// dump_syms_tool.mm: Command line tool that uses the DumpSymbols class.
 // TODO(waylonis): accept stdin
 
-#include <unistd.h>
 #include <mach-o/arch.h>
+#include <unistd.h>
 
-#include "dump_syms.h"
+#include <vector>
+
+#include "common/mac/dump_syms.h"
 #include "common/mac/macho_utilities.h"
 
-typedef struct {
+using google_breakpad::DumpSymbols;
+using std::vector;
+
+struct Options {
+  Options() : srcPath(), arch() { }
   NSString *srcPath;
-  NSString *arch;
-  NSString *uuidStr;
-  BOOL result;
-} Options;
+  const NXArchInfo *arch;
+};
 
 //=============================================================================
-static void Start(Options *options) {
-  DumpSymbols *dump = [[DumpSymbols alloc]
-    initWithContentsOfFile:options->srcPath];
-  
-  if (!dump) {
-    fprintf(stderr, "%s is not a valid Mach-o file\n",
-            [options->srcPath fileSystemRepresentation]);
-    options->result = NO;
-    return;
-  }
+static bool Start(const Options &options) {
+  DumpSymbols dump_symbols;
 
-  if (![dump setArchitecture:options->arch]) {
-    fprintf(stderr, "Architecture: %s not available in %s\n", 
-            [options->arch UTF8String],
-            [options->srcPath fileSystemRepresentation]);
-    options->result = NO;
-    return;
+  if (!dump_symbols.Read(options.srcPath))
+    return false;
+
+  if (options.arch) {
+    if (!dump_symbols.SetArchitecture(options.arch->cputype,
+                                      options.arch->cpusubtype)) {
+      fprintf(stderr, "%s: no architecture '%s' is present in file.\n",
+              [options.srcPath fileSystemRepresentation], options.arch->name);
+      size_t available_size;
+      const struct fat_arch *available =
+        dump_symbols.AvailableArchitectures(&available_size);
+      if (available_size == 1)
+        fprintf(stderr, "the file's architecture is: ");
+      else
+        fprintf(stderr, "architectures present in the file are:\n");
+      for (size_t i = 0; i < available_size; i++) {
+        const struct fat_arch *arch = &available[i];
+        const NXArchInfo *arch_info =
+          NXGetArchInfoFromCpuType(arch->cputype, arch->cpusubtype);
+        if (arch_info)
+          fprintf(stderr, "%s (%s)\n", arch_info->name, arch_info->description);
+        else
+          fprintf(stderr, "unrecognized cpu type 0x%x, subtype 0x%x\n",
+                  arch->cputype, arch->cpusubtype);
+      }
+      return false;
+    }
   }
-  
-  options->result = [dump writeSymbolFile:@"-"];
+      
+  return dump_symbols.WriteSymbolFile(stdout);
 }
 
 //=============================================================================
 static void Usage(int argc, const char *argv[]) {
   fprintf(stderr, "Output a Breakpad symbol file from a Mach-o file.\n");
-  fprintf(stderr, "Usage: %s [-a ppc|i386|x86] <Mach-o file>\n",
+  fprintf(stderr, "Usage: %s [-a ARCHITECTURE] <Mach-o file>\n",
           argv[0]);
-  fprintf(stderr, "\t-a: Architecture type [default: native]\n");
+  fprintf(stderr, "\t-a: Architecture type [default: native, or whatever is\n");
+  fprintf(stderr, "\t    in the file, if it contains only one architecture]\n");
   fprintf(stderr, "\t-h: Usage\n");
   fprintf(stderr, "\t-?: Usage\n");
 }
@@ -79,35 +99,20 @@
 //=============================================================================
 static void SetupOptions(int argc, const char *argv[], Options *options) {
   extern int optind;
-  const NXArchInfo *localArchInfo = NXGetLocalArchInfo();
   signed char ch;
 
-  if (localArchInfo) {
-    if (localArchInfo->cputype & CPU_ARCH_ABI64)
-      options->arch = (localArchInfo->cputype == CPU_TYPE_POWERPC64) ? @"ppc64":
-        @"x86_64";
-    else
-      options->arch = (localArchInfo->cputype == CPU_TYPE_POWERPC) ? @"ppc" :
-        @"x86";
-  }
-
   while ((ch = getopt(argc, (char * const *)argv, "a:h?")) != -1) {
     switch (ch) {
-      case 'a':
-        if (strcmp("ppc", optarg) == 0)
-          options->arch = @"ppc";
-        else if (strcmp("x86", optarg) == 0 || strcmp("i386", optarg) == 0)
-          options->arch = @"x86";
-        else if (strcmp("ppc64", optarg) == 0)
-          options->arch = @"ppc64";
-        else if (strcmp("x86_64", optarg) == 0)
-          options->arch = @"x86_64";
-        else {
+      case 'a': {
+        const NXArchInfo *arch_info = NXGetArchInfoFromName(optarg);
+        if (!arch_info) {
           fprintf(stderr, "%s: Invalid architecture: %s\n", argv[0], optarg);
           Usage(argc, argv);
           exit(1);
         }
-          break;
+        options->arch = arch_info;
+        break;
+      }
       case '?':
       case 'h':
         Usage(argc, argv);
@@ -123,20 +128,20 @@
   }
 
   options->srcPath = [[NSFileManager defaultManager]
-    stringWithFileSystemRepresentation:argv[optind]
-                                length:strlen(argv[optind])];
+                       stringWithFileSystemRepresentation:argv[optind]
+                       length:strlen(argv[optind])];
 }
 
 //=============================================================================
 int main (int argc, const char * argv[]) {
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   Options options;
+  bool result; 
 
-  bzero(&options, sizeof(Options));
   SetupOptions(argc, argv, &options);
-  Start(&options);
+  result = Start(options);
 
   [pool release];
 
-  return !options.result;
+  return !result;
 }
diff --git a/src/tools/mac/dump_syms/macho_dump.cc b/src/tools/mac/dump_syms/macho_dump.cc
new file mode 100644
index 0000000..940df25
--- /dev/null
+++ b/src/tools/mac/dump_syms/macho_dump.cc
@@ -0,0 +1,197 @@
+// Copyright (c) 2010, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Original author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com>
+
+// macho_dump.cc: Dump the contents of a Mach-O file. This is mostly
+// a test program for the Mach_O::FatReader and Mach_O::Reader classes.
+
+#include <errno.h>
+#include <fcntl.h>
+#include <libgen.h>
+#include <mach-o/arch.h>
+#include <sys/mman.h>
+#include <stdint.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include "common/byte_cursor.h"
+#include "common/mac/macho_reader.h"
+
+using google_breakpad::ByteBuffer;
+using std::ostringstream;
+using std::string;
+using std::vector;
+
+namespace {
+namespace mach_o = google_breakpad::mach_o;
+
+string program_name;
+
+int check_syscall(int result, const char *operation, const char *filename) {
+  if (result < 0) {
+    fprintf(stderr, "%s: %s '%s': %s\n",
+            program_name.c_str(), operation,
+            filename, strerror(errno));
+    exit(1);
+  }
+  return result;
+}
+
+class DumpSection: public mach_o::Reader::SectionHandler {
+ public:
+  DumpSection() : index_(0) { }
+  bool HandleSection(const mach_o::Section &section) {
+    printf("        section %d '%s' in segment '%s'\n"
+           "          address: 0x%llx\n"
+           "          alignment: 1 << %d B\n"
+           "          flags: %d\n"
+           "          size: %ld\n",
+           index_++, section.section_name.c_str(), section.segment_name.c_str(),
+           section.address, section.align,
+           mach_o::SectionFlags(section.flags),
+           section.contents.Size());
+    return true;
+  }
+         
+ private:
+  int index_;
+};
+
+class DumpCommand: public mach_o::Reader::LoadCommandHandler {
+ public:
+  DumpCommand(mach_o::Reader *reader) : reader_(reader), index_(0) { }
+  bool UnknownCommand(mach_o::LoadCommandType type,
+                      const ByteBuffer &contents) {
+    printf("      load command %d: %d", index_++, type);
+    return true;
+  }
+  bool SegmentCommand(const mach_o::Segment &segment) {
+    printf("      load command %d: %s-bit segment '%s'\n"
+           "        address: 0x%llx\n"
+           "        memory size: 0x%llx\n"
+           "        maximum protection: 0x%x\n"
+           "        initial protection: 0x%x\n"
+           "        flags: %d\n"
+           "        section_list size: %ld B\n",
+           index_++, (segment.bits_64 ? "64" : "32"), segment.name.c_str(),
+           segment.vmaddr, segment.vmsize, segment.maxprot,
+           segment.initprot, mach_o::SegmentFlags(segment.flags),
+           segment.section_list.Size());
+           
+    DumpSection dump_section;
+    return reader_->WalkSegmentSections(segment, &dump_section);
+  }
+ private:
+  mach_o::Reader *reader_;
+  int index_;
+};
+
+void DumpFile(const char *filename) {
+  int fd = check_syscall(open(filename, O_RDONLY), "opening", filename);
+  struct stat attributes;
+  check_syscall(fstat(fd, &attributes),
+                "getting file attributes for", filename);
+  void *mapping = mmap(NULL, attributes.st_size, PROT_READ,
+                       MAP_PRIVATE, fd, 0);
+  close(fd);
+  check_syscall(mapping == (void *)-1 ? -1 : 0,
+                "mapping contents of", filename);
+
+  mach_o::FatReader::Reporter fat_reporter(filename);
+  mach_o::FatReader fat_reader(&fat_reporter);
+  if (!fat_reader.Read(reinterpret_cast<uint8_t *>(mapping),
+                       attributes.st_size)) {
+    exit(1);
+  }
+  printf("filename: %s\n", filename);
+  size_t object_files_size;
+  const struct fat_arch *object_files 
+    = fat_reader.object_files(&object_files_size);
+  printf("  object file count: %ld\n", object_files_size);
+  for (size_t i = 0; i < object_files_size; i++) {
+    const struct fat_arch &file = object_files[i];
+    const NXArchInfo *fat_arch_info
+      = NXGetArchInfoFromCpuType(file.cputype, file.cpusubtype);
+    printf("\n  object file %ld:\n"
+           "    fat header:\n:"
+           "      CPU type: %s (%s)\n"
+           "      size: %d B\n"
+           "      alignment: 1<<%d B\n",
+           i, fat_arch_info->name, fat_arch_info->description,
+           file.size, file.align);
+
+    ostringstream name;
+    name << filename;
+    if (object_files_size > 1)
+      name << ", object file #" << i;
+    ByteBuffer file_contents(reinterpret_cast<uint8_t *>(mapping)
+                             + file.offset, file.size);
+    mach_o::Reader::Reporter reporter(name.str());
+    mach_o::Reader reader(&reporter);
+    if (!reader.Read(file_contents, file.cputype, file.cpusubtype)) {
+      exit(1);
+    }
+
+    const NXArchInfo *macho_arch_info =
+      NXGetArchInfoFromCpuType(reader.cpu_type(),
+                               reader.cpu_subtype());
+    printf("    Mach-O header:\n"
+           "      word size: %s\n" 
+           "      CPU type: %s (%s)\n"
+           "      File type: %d\n"
+           "      flags: %x\n",
+           (reader.bits_64() ? "64 bits" : "32 bits"),
+           macho_arch_info->name, macho_arch_info->description,
+           reader.file_type(), reader.flags());
+
+    DumpCommand dump_command(&reader);
+    reader.WalkLoadCommands(&dump_command);
+  }
+  munmap(mapping, attributes.st_size);
+}
+
+}  // namespace
+
+int main(int argc, char **argv) {
+  program_name = basename(argv[0]);
+  if (argc == 1) {
+    fprintf(stderr, "Usage: %s FILE ...\n"
+            "Dump the contents of the Mach-O or fat binary files "
+            "'FILE ...'.\n", program_name.c_str());
+  }
+  for (int i = 1; i < argc; i++) {
+    DumpFile(argv[i]);
+  }
+}
diff --git a/src/tools/mac/symupload/minidump_upload.m b/src/tools/mac/symupload/minidump_upload.m
index 4f9d8c7..991a5de 100644
--- a/src/tools/mac/symupload/minidump_upload.m
+++ b/src/tools/mac/symupload/minidump_upload.m
@@ -98,10 +98,10 @@
   while ((ch = getopt(argc, (char * const *)argv, "p:v:h?")) != -1) {
     switch (ch) {
       case 'p':
-        options->product = [NSString stringWithCString:optarg];
+        options->product = [NSString stringWithUTF8String:optarg];
         break;
       case 'v':
-        options->version = [NSString stringWithCString:optarg];
+        options->version = [NSString stringWithUTF8String:optarg];
         break;
 
       default:
@@ -117,8 +117,8 @@
     exit(1);
   }
 
-  options->minidumpPath = [NSString stringWithCString:argv[optind]];
-  options->uploadURLStr = [NSString stringWithCString:argv[optind + 1]];
+  options->minidumpPath = [NSString stringWithUTF8String:argv[optind]];
+  options->uploadURLStr = [NSString stringWithUTF8String:argv[optind + 1]];
 }
 
 //=============================================================================
diff --git a/src/tools/mac/symupload/symupload.m b/src/tools/mac/symupload/symupload.m
index 7830cdc..fe0cb67 100644
--- a/src/tools/mac/symupload/symupload.m
+++ b/src/tools/mac/symupload/symupload.m
@@ -134,7 +134,7 @@
   fprintf(stdout, "Send: %s\n", error ? [[error description] UTF8String] :
           "No Error");
   fprintf(stdout, "Response: %d\n", status);
-  fprintf(stdout, "Result: %d bytes\n%s\n", [data length], [result UTF8String]);
+  fprintf(stdout, "Result: %lu bytes\n%s\n", [data length], [result UTF8String]);
 
   [result release];
   [ul release];
@@ -173,8 +173,8 @@
     exit(1);
   }
 
-  options->symbolsPath = [NSString stringWithCString:argv[optind]];
-  options->uploadURLStr = [NSString stringWithCString:argv[optind + 1]];
+  options->symbolsPath = [NSString stringWithUTF8String:argv[optind]];
+  options->uploadURLStr = [NSString stringWithUTF8String:argv[optind + 1]];
 }
 
 //=============================================================================
diff --git a/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj b/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj
index d2f4a1c..a6a78dc 100644
--- a/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj
+++ b/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj
@@ -3,10 +3,11 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 42;
+	objectVersion = 45;
 	objects = {
 
 /* Begin PBXBuildFile section */
+		8B31022C11F0CEBD00FCF3E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
 		8DD76F9A0486AA7600D96B5E /* symupload.m in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* symupload.m */; settings = {ATTRIBUTES = (); }; };
 		8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
 		9BC1D49E0B37427A00F2A2B4 /* minidump_upload.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BD836000B0544BA0055103E /* minidump_upload.m */; };
@@ -30,7 +31,10 @@
 
 /* Begin PBXFileReference section */
 		08FB7796FE84155DC02AAC07 /* symupload.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = symupload.m; sourceTree = "<group>"; };
-		08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
+		08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		8B31022B11F0CE6900FCF3E4 /* Breakpad.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Breakpad.xcconfig; path = ../../../common/mac/Breakpad.xcconfig; sourceTree = SOURCE_ROOT; };
+		8B3102B611F0D5CE00FCF3E4 /* BreakpadDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadDebug.xcconfig; path = ../../../common/mac/BreakpadDebug.xcconfig; sourceTree = SOURCE_ROOT; };
+		8B3102B711F0D5CE00FCF3E4 /* BreakpadRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadRelease.xcconfig; path = ../../../common/mac/BreakpadRelease.xcconfig; sourceTree = SOURCE_ROOT; };
 		8DD76FA10486AA7600D96B5E /* symupload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = symupload; sourceTree = BUILT_PRODUCTS_DIR; };
 		9BD833680B03E4080055103E /* HTTPMultipartUpload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPMultipartUpload.h; path = ../../../common/mac/HTTPMultipartUpload.h; sourceTree = "<group>"; };
 		9BD833690B03E4080055103E /* HTTPMultipartUpload.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTTPMultipartUpload.m; path = ../../../common/mac/HTTPMultipartUpload.m; sourceTree = "<group>"; };
@@ -51,6 +55,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				8B31022C11F0CEBD00FCF3E4 /* Foundation.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -60,6 +65,9 @@
 		08FB7794FE84155DC02AAC07 /* symupload */ = {
 			isa = PBXGroup;
 			children = (
+				8B31022B11F0CE6900FCF3E4 /* Breakpad.xcconfig */,
+				8B3102B611F0D5CE00FCF3E4 /* BreakpadDebug.xcconfig */,
+				8B3102B711F0D5CE00FCF3E4 /* BreakpadRelease.xcconfig */,
 				08FB7796FE84155DC02AAC07 /* symupload.m */,
 				9BD836000B0544BA0055103E /* minidump_upload.m */,
 				9BD833680B03E4080055103E /* HTTPMultipartUpload.h */,
@@ -130,9 +138,11 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "symupload" */;
+			compatibilityVersion = "Xcode 3.1";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* symupload */;
 			projectDirPath = "";
+			projectRoot = "";
 			targets = (
 				8DD76F960486AA7600D96B5E /* symupload */,
 				9BD835FA0B0544950055103E /* minidump_upload */,
@@ -165,105 +175,46 @@
 		1DEB927508733DD40010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				GCC_C_LANGUAGE_STANDARD = c99;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = NO;
-				GCC_PREFIX_HEADER = "";
-				INSTALL_PATH = "$(HOME)/bin";
+				HEADER_SEARCH_PATHS = ../../..;
 				PRODUCT_NAME = symupload;
-				USER_HEADER_SEARCH_PATHS = "../../../** $(inherited)";
-				ZERO_LINK = NO;
 			};
 			name = Debug;
 		};
 		1DEB927608733DD40010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = (
-					ppc,
-					i386,
-				);
-				GCC_C_LANGUAGE_STANDARD = c99;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = NO;
-				GCC_PREFIX_HEADER = "";
-				INSTALL_PATH = "$(HOME)/bin";
+				HEADER_SEARCH_PATHS = ../../..;
 				PRODUCT_NAME = symupload;
-				USER_HEADER_SEARCH_PATHS = "../../../** $(inherited)";
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
 		1DEB927908733DD40010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 8B3102B611F0D5CE00FCF3E4 /* BreakpadDebug.xcconfig */;
 			buildSettings = {
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
 			};
 			name = Debug;
 		};
 		1DEB927A08733DD40010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 8B3102B711F0D5CE00FCF3E4 /* BreakpadRelease.xcconfig */;
 			buildSettings = {
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
 			};
 			name = Release;
 		};
 		9BD836030B0544BB0055103E /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
-				INSTALL_PATH = "$(HOME)/bin";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Foundation,
-					"-framework",
-					AppKit,
-				);
-				PREBINDING = NO;
+				HEADER_SEARCH_PATHS = ../../..;
 				PRODUCT_NAME = minidump_upload;
-				USER_HEADER_SEARCH_PATHS = "../../../**";
-				ZERO_LINK = NO;
 			};
 			name = Debug;
 		};
 		9BD836040B0544BB0055103E /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				COPY_PHASE_STRIP = YES;
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
-				INSTALL_PATH = "$(HOME)/bin";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Foundation,
-					"-framework",
-					AppKit,
-				);
-				PREBINDING = NO;
+				HEADER_SEARCH_PATHS = ../../..;
 				PRODUCT_NAME = minidump_upload;
-				USER_HEADER_SEARCH_PATHS = "../../../**";
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
diff --git a/src/tools/windows/binaries/dump_syms.exe b/src/tools/windows/binaries/dump_syms.exe
index ef7c22a..7b836a1 100644
--- a/src/tools/windows/binaries/dump_syms.exe
+++ b/src/tools/windows/binaries/dump_syms.exe
Binary files differ
diff --git a/src/tools/windows/binaries/symupload.exe b/src/tools/windows/binaries/symupload.exe
index 3119772..c78299e 100644
--- a/src/tools/windows/binaries/symupload.exe
+++ b/src/tools/windows/binaries/symupload.exe
Binary files differ
diff --git a/src/tools/windows/dump_syms/dump_syms.vcproj b/src/tools/windows/dump_syms/dump_syms.vcproj
index f64236d..650c1b1 100644
--- a/src/tools/windows/dump_syms/dump_syms.vcproj
+++ b/src/tools/windows/dump_syms/dump_syms.vcproj
@@ -60,7 +60,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="&quot;$(VSInstallDir)\DIA SDK\lib\diaguids.lib&quot;"
+				AdditionalDependencies="&quot;$(VSInstallDir)\DIA SDK\lib\diaguids.lib&quot; imagehlp.lib"
 				LinkIncremental="2"
 				GenerateDebugInformation="true"
 				SubSystem="1"
@@ -133,7 +133,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="&quot;$(VSInstallDir)\DIA SDK\lib\diaguids.lib&quot;"
+				AdditionalDependencies="&quot;$(VSInstallDir)\DIA SDK\lib\diaguids.lib&quot; imagehlp.lib"
 				LinkIncremental="2"
 				GenerateDebugInformation="true"
 				SubSystem="1"
diff --git a/src/tools/windows/refresh_binaries.bat b/src/tools/windows/refresh_binaries.bat
new file mode 100644
index 0000000..f10ccba
--- /dev/null
+++ b/src/tools/windows/refresh_binaries.bat
@@ -0,0 +1,26 @@
+REM This batch file is meant to facilitate regenerating prebuilt binaries for 

+REM the Windows tools.

+REM You MUST run it from a Visual Studio xxxx Command Prompt.  To do this,

+REM navigate to:

+REM 

+REM    Start->Programs->Microsoft Visual Studio XXXX->Tools->

+REM                        Visual Studio Command Prompt

+REM

+REM Then run this batch file.  It performs an SVN update, edits the

+REM README.binaries file to contain

+REM the revision number, and builds the tools.  You must run 'svn commit' to

+REM commit the pending edits to the repository.

+

+cd ..\..\

+call svn update --accept postpone

+cd tools\windows

+devenv symupload\symupload.vcproj /rebuild Release

+copy symupload\Release\symupload.exe binaries\

+REM switch back to top level so that 'svn info' displays useful information.

+cd ..\..\

+echo This checkin of the binaries was created by refresh_binaries.bat. > %TEMP%\checkin.txt

+echo Date: %DATE% %TIME% >> %TEMP%\checkin.txt

+echo Repository information (output of 'svn info') follows: >> %TEMP%\checkin.txt

+call svn info >> %TEMP%\checkin.txt

+echo Done!

+echo type 'svn commit -F %%TEMP%%\checkin.txt' to commit.