2010-11-24  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Assume that the max power capacity is expressed in
	  Watts, not milliWatts (DMI type 39). The specification isn't
	  clear about the actual unit, but the only implementation I've
	  seen (HP Proliant G7) clearly uses Watts. Also, using milliWatts
	  would limit the max value that can be stored to 32 W, which
	  doesn't make much sense.
	* dmidecode.c: Fix offset of partition width (DMI type 19).
	* dmidecode.c: Decode BIOS language information flags
	  (DMI type 13).
	* dmidecode.c: Fix CPU flags mask (DMI type 4).
	* dmidecode.c: Reword "PCI Express Gen 2" to just "PCI Express 2"
	  (DMI type 9).
	* dmidecode.c: Decode the slot ID for all PCI Express and PCI
	  Express 2 slots (DMI type 9).

2010-11-24  Jean Delvare  <khali@linux-fr.org>

	Update to support SMBIOS specification version 2.7.0.

	* dmidecode.c: Update all references to the SMBIOS specification
	  to match the new numbering.
	* dmidecode.c: Add UEFI support and virtual machine flags to BIOS
	  characteristics (DMI type 0).
	* dmideocde.c: Add SKU number field to system enclosure or chassis
	  (DMI type 3).
	* dmidecode.c: Add many Intel, AMD and VIA CPU family names
	  (DMI type 4).
	* dmidecode.c: Add many socket formats (DMI type 4).
	* dmidecode.c: Add processor characteristics flags (DMI type 4).
	* util.c, util.h: Add utility function u64_range, which computes
	  the range between two u64 values.
	* dmidecode.c: Add support for memory arrays of 2 TB and more
	  (DMI types 16, 19 and 20).
	* dmidecode.c: Add support for memory devices of 32 GB and more
	  (DMI type 17).
	* dmidecode.c: Add description of cooling device (DMI type 27).
	* dmidecode.c: Add limited support for new DMI type 42 (Management
	  Controller Host Interface).

2010-11-16  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Handle ambiguous processor family value 0x30
	  (DMI type 4).
	* dmidecode.c: Prevent unlikely array overrun when decoding
	  processor family value 0xBE (DMI type 4).
	* dmidecode.c: Handle DMI type 2 record of size 0x0E.

2010-11-11  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Fix decoding of IPMI base address LSB.

2010-11-09  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Drop redundant/obsolete references to
	  CIM_Processor.Family.

2010-10-26  Jean Delvare  <khali@linux-fr.org>

	Update to support Intel AP-485 (CPUID) revision 36 (was 32).

	* dmidecode.c: Update the link to the AP-485 document, the revision
	  and the table number.
	* dmidecode.c: Update two CPU flag descriptions (FXSR and HTT).
	  Drop CPU flag IA64.
	* dmidecode.c: Update the list of processors for which we decode the
	  CPUID flags.

2010-10-11  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: One more SMBIOS version fix-up case.
	* Makefile: Rework BSD make compatibility trick. The previous
	  trick would break GNU make 3.82.

2010-09-29  Anton Arapov  <anton@redhat.com>

	* util.c: makes dmidecode fall back to regular reads if the mmap
	  fails. Patch from Olof Johansson.

2010-09-21  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Fix Xeon 7xxx entries in CPU name lookup table
	  (DMI type 4). Patch from Paul Flo Williams.

2009-08-28  Jarod Wilson  <jarod@redhat.com>

	Update to support SMBIOS specification version 2.6.1.

	* dmidecode.c: Add processor types "Dual-Core Xeon 5200",
	  "Dual-Core Xeon 7200", "Quad-Core Xeon 7300", "QuadCore Xeon 7400",
	  "Multi-Core Xeon 7400", "Core i7", "Dual-Core Celeron",
	  "Multi-Core Xeon", "Dual-Core Xeon 3xxx", "Quad-Core Xeon 3xxx",
	  "Dual-Core Xeon 5xxx", "Quad-Core Xeon 5xxx", "Dual-Core Xeon 7xxx",
	  "Quad-Core Xeon 7xxx" and "Multi-Core Xeon 7xxx" (DMI type 4).
	* dmidecode.c: Add slot types "PCI Express Gen 2 x1",
	  "PCI Express Gen 2 x2", "PCI Express Gen 2 x4",
	  "PCI Express Gen 2 x8" and "PCI Express Gen 2 x16" (DMI type 9).
	* dmidecode.c: Add memory device types "DDR3" and "FB-DIMM"
	  (DMI type 17).
	* dmidecode.c: Add cache associativity types "12-way Set-associative",
	  "24-way Set-associative", "32-way Set-associative",
	  "48-way Set-associative" and "64-way Set-associative" (DMI type 7).

2009-07-27  Jean Delvare  <khali@linux-fr.org>

	* dmioem.c: Recognize "Hewlett-Packard" as a possible DMI vendor
	  string for HP. Orginal patch from Thomas Hiller (HP).
	* dmidecode.c: Add processor upgrade type "Socket LGA1366"
	  (DMI type 4).

2009-06-19  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Fix decoding of memory array capacity. A maximum
	  capacity of 128 GB would erroneously be reported as Unknown,
	  while a unknown capacity would be erroneously reported as 2048
	  GB. Bug reported by Lin Li (HP).

2009-04-30  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Warn if decoding an SMBIOS implementation which is
	  newer than what we support.

2009-04-04  Jean Delvare  <khali@linux-fr.org>

	* Makefile: Clarify license.

2008-11-23  Jean Delvare  <khali@linux-fr.org>

	* biosdecode.c: Stop using the inline keyword. It causes more
	  portability issues than is worth given how little we care about
	  performance in this tool, and recent versions of gcc know when
	  to inline functions anyway.
	* version.h: Set version to 2.10.

2008-11-14  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Handle chassis information records of size 19
	  (DMI type 3).

2008-11-10  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Claim to support revision 32 of Intel AP-485
	  (CPUID). No relevant change since revision 31.
	* dmidecode.c: Update reference to AMD CPUID document.

2008-11-09  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Decode the CPUID of more Intel, VIA and AMD
	  processors (DMI type 4).
	* dmidecode.c: More CPUID exceptions based on the version string
	  (DMI type 4).
	* README: Drop reference to the Linux kernel.
	* README: Drop "model-specific issues" common problem entry, it is
	  no longer relevant.
	* README: Simplify "IA-64" common problem entry, most of the
	  issues are solved by now.

2008-11-08  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Add many processor types taken from the CIM Schema.
	* dmidecode.c: Drop all references to the DMTF Master MIF
	  document. This document hasn't been updated in years, so the
	  additions it may contain are no longer relevant.

2008-11-07  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Handle base board information records of size 9
	  (DMI type 2).
	* dmidecode.c: Don't display access time equivalent of memory
	  device speed (DMI type 17). The access time didn't add much
	  value, and rounding effects made it look bad at times.

2008-11-07  Jean Delvare  <khali@linux-fr.org>

	Update to support SMBIOS specification version 2.6, fourth round.

	* dmidecode.c: Initial support for additional information entries
	  (DMI type 40). Proper support of this new entry type would
	  require redesigning a large part of the code, so I am waiting
	  to see actual implementations of it to decide whether it's worth
	  the effort.
	* dmidecode.c, dmidecode.8: Update reference SMBIOS document.
	* dmiopt.c, dmidecode.8: Include entry type 41 in --type baseboard.

2008-11-05  Jean Delvare  <khali@linux-fr.org>

	Update to support SMBIOS specification version 2.6, third round.

	* dmidecode.c: Decode the group number, bus number and
	  device/function number of system slots (DMI type 9).
	  Based on a preliminary patch by Matt Domsch.
	* dmidecode.c: Decode onboard devices extended information
	  entries (DMI type 41). Based on a preliminary patch by Matt
	  Domsch.
	* dmidecode.c: Add slot types "PCI Express x1", "PCI Express x2",
	  "PCI Express x4", "PCI Express x8" and "PCI Express x16"
	  (DMI type 9).
	* dmidecode.c: Decode the memory device rank (DMI type 17).

2008-11-02  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Use binary search for dmi_processor_family, it's
	  faster than linear search (DMI type 4).
	* dmidecode.c: Decode boot integrity services entry point entries
	  (DMI type 31).

2008-10-31  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: The compiler knows how to reuse strings, it doesn't
	  need our help, and actually it does a better job without it. So,
	  turn out_of_spec into a define.
	* dmidecode.c: Optimize functions dmi_processor_status(),
	  dmi_cache_location(), dmi_system_reset_boot_option() and
	  dmi_ipmi_register_spacing().

2008-10-30  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c, dmiopt.c, dmidecode.8: Option --dump is only a
	  modifier as --quiet is, so it's not actually mutually exclusive
	  with the output format options.
	* dmidecode.c: Make options --dump-bin and --quiet work together.
	* dmidecode.c: Delay string filtering when option --dump is used.
	* dmidecode.c: Refactor dmi_processor_family function to avoid
	  code duplication.
	* dmidecode.c: Fix up invalid SMBIOS version 2.51.

2008-10-29  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Handle special case of processor family code 0xBE,
	  which can be both Core 2 or K7. We use the processor
	  manufacturer string as a hint (DMI type 4).

2008-10-28  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c, dmidecode.h, dmiopt.c, dmiopt.h: Don't use function
	  pointers for special string cases. Each special case is itself
	  special and needs to call a function with its own prototype, so
	  better have dedicated code to handle it all.
	* dmidecode.c, dmidecode.h, dmioem.c, dmioem.h: Mark a few
	  pointers const.
	* dmidecode.c, util.c, util.h: When dumping the DMI table to a
	  binary file, truncate the file first.
	* dmidecode.c: Support Processor Family 2 field also when queried
	  with option --string.

2008-10-27  Jean Delvare  <khali@linux-fr.org>

	Update to support SMBIOS specification version 2.6, second round.

	* dmidecode.c: Add support for Processor Family 2 field
	  (DMI type 4).
	* dmidecode.c: Add processor types "Turion 64 X2", "Core Solo",
	  "Core 2 Duo", "ESA/390 G6", "z/Architectur", "C7-M", "C7-D",
	  "C7" and "Eden" (DMI type 4).
	* dmidecode.c: Fix typo in processor type "AMD29000" (DMI type 4).
	* dmidecode.c: Add processor upgrade types "Socket S1",
	  "Socket AM2" and "Socket F (1207)" (DMI type 4).

2008-10-26  Jean Delvare  <khali@linux-fr.org>

	Update to support SMBIOS specification version 2.6, first round.

	* dmidecode.c: Byte-swap the first 3 fields of the UUID
	  (DMI type 1).
	* dmidecode.c: Add chassis types "Blade" and "Blade Enclosure"
	  (DMI type 3).

2008-10-26  Jean Delvare  <khali@linux-fr.org>

	* dmiopt.c, dmidecode.8: Simplify the handling and documentation
	  of mutually exclusive output format options.
	* dmidecode.8: Document the binary dump file format.
	* dmidecode.c: Don't display the source dump file name in quiet
	  mode.
	* biosdecode.c, dmidecode.c, dmioem.c, dmiopt.c, dmiopt.h,
	  ownership.c, types.h, util.c, vpddecode.c, vpdopt.c, vpdopt.h:
	  Mass coding-style change: add spaces around operators.
	* vpddecode.c: Fix --quiet option.
	* dmidecode.h, dmiopt.h: Pass version information to print
	  callback functions.
	* dmidecode.c: Fix up invalid SMBIOS version.
	* dmidecode.c: Handle base board information records of size 10
	  (DMI type 2).

2008-10-25  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Limit indentation in smbios_decode and
	  legacy_decode.
	* dmidecode.c, dmiopt.c: Write binary dump to a compact file
	  rather than a sparse file.
	* dmidecode.c, dmiopt.c, dmiopt.h: New option --from-dump, read
	  the DMI data from a binary file.
	* dmidecode.8: Update the option --dump-bin, document the new
	  option --from-dump.

2008-08-28  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Add missing colon to temperature probe label.
	  Patch from Alex Iribarren.

2008-02-16  Jean Delvare  <khali@linux-fr.org>

	* util.c, util.h: New helper function write_dump.
	* dmidecode.c, dmiopt.c, dmiopt.h: New option --dump-bin, dump
	  the DMI data to a sparse binary file.
	* dmidecode.8: Document the new option --dump-bin.
	* Makefile, biosdecode.c, dmidecode.c, dmidecode.h, dmioem.c,
	  dmioem.h, dmiopt.c, dmiopt.h, ownership.c, util.c, util.h,
	  vpddecode.c, vpdopt.c, vpdopt.h: Update copyright statements.
	* dmidecode.c: Adjust the error message which is displayed when
	  the table is unreachable.

2007-06-30  Jean Delvare  <khali@linux-fr.org>

	* config.h: Add support for Solaris (x86 only, of course). Based
	  on a patch by Sun's Dan Mick, brought to my knowledge by
	  Attila Nagy.

2007-06-27  Jean Delvare  <khali@linux-fr.org>

	* Makefile: Fix the uninstall-man target.

2007-06-07  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: If the SMBIOS entry point decoding fails (for
	  example due to a bad checksum), still try decoding the
	  encapsulated DMI entry point. Suggested by Luke Suchocki.
	* dmidecode.c: Replace all occurrences of "KB" by the more
	  correct "kB".

2007-03-16  Jean Delvare  <khali@linux-fr.org>

	* vpddecode.c: Stop asking the user to report bad checksums,
	  unaligned records and the like. Such machines exist, too bad,
	  we have to live with it.

2007-02-27  Jean Delvare  <khali@linux-fr.org>

	* biosdecode.c: Fix a compilation error with non-C99 compilers.
	  Patch from Francois Revol.

2007-02-26  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Fix an array overrun while decoding the system
	  event log status (DMI type 15).
	* biosdecode.c: Use printf instead of fwrite.
	* dmidecode.8: Some OEM-specific types can be decoded now.
	* biosdecode.8: List the FJKEYINF entry point type.
	* vpddecode.8: The product name is no longer displayed.
	* version.h: Set version to 2.9.

2007-02-16  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Do not print the BIOS base address and runtime size
	  if the base address is 0. This happens on IA-64 because there's
	  no BIOS.
	* Makefile, README: Do not build biosdecode, ownership and
	  vpddecode on IA-64, as IA-64 systems have no BIOS. This was
	  quite tricky to keep both GNU make and BSD make happy, but it
	  seems that I finally succeeded.

2007-02-13  Jean Delvare  <khali@linux-fr.org>

	Update to support SMBIOS specification version 2.5, second round.

	* dmidecode.c: Decode new processor characteristics (multi-core,
	  multi-thread, 64-bit) (DMI type 4).
	* dmidecode.c: Decode slot ID of AGP 8x and PCI Express slots (DMI
	  type 9).

	* dmidecode.c: Fix the mask of 3 bitfield tests. This will let
	  the memory type of some systems be properly reported as SDRAM.
	* dmidecode.c: Fix the AMD processors signature decoding.
	* README: Minor edits.

2007-02-12  Jens Elkner  <elkner@linofee.org>

	Update to support SMBIOS specification version 2.5, first round.

	* dmidecode.c: Add chassis types "CompactPCI" and "AdvancedTCA"
	  (DMI type 3).
	* dmidecode.c: Add processor types "Turion 64",
	  "Dual-Core Opteron", "Athlon 64 X2", "Celeron D", "Pentium D"
	  and "Pentium EE" (DMI type 4).
	* dmidecode.c: Add processor upgrade types "Socket mPGA604",
	  "Socket LGA771" and "Socket LGA775" (DMI type 4).
	* dmidecode.c: Add connector type "SAS/SATA Plug Receptacle" and
	  port types "SATA" and "SAS" (DMI type 8).
	* dmidecode.c: Add on-board device types "PATA Controller",
	  "SATA Controller" and "SAS Controller" (DMI type 10).
	* dmidecode.c: Add memory device form factor "FB-DIMM" and memory
	  device type "DDR2 FB-DIMM" (DMI type 17).

2007-02-12  Jean Delvare  <khali@linux-fr.org>

	* dmioem.c: Share the code between HP-specific types 209 and 221.
	  Both types are really the same, only the title is different.
	* dmioem.c: Make the HP-specific types 209 and 221 output a bit
	  more verbose.
	* dmidecode.c: Let --type decode OEM-specific entries when
	  possible.
	* dmidecode.c: Include decoded OEM-specific entries in quiet mode
	  output (--quiet).
	* dmidecode.c: Do not complain about truncated entries in quiet
	  mode.
	* dmioem.c: Decode HP-specific type 204 entries in a safer way:
	  check the length before decoding, and don't assume that all
	  strings are provided in the same order as they are used.

	Update to support Intel AP-485 (CPUID) revision 31 (was 28).

	* dmidecode.c: New CPUID flag IA64.
	* dmidecode.c: Fix the decoding of Intel extended family.

2007-02-11  Jean Delvare  <khali@linux-fr.org>

	* dmioem.c, dmioem.h: New.
	* Makefile, dmidecode.c, dmidecode.h, dmioem.c, dmioem.h: Move the
	  decoding of OEM-specific entries to a separate source file.
	* dmidecode.c: DMI type 38 is tested by now.
	* dmioem.c: The PCI function is typically represented as a single
	  digit.
	* Makefile, dmiopt.c, vpdopt.c, util.h: Define an ARRAY_SIZE macro
	  which computes the size of a static array, and use it where
	  relevant.

2007-02-11  John Cagle  <jcagle@kernel.org>

	* dmidecode.c: Add support for 3 HP-specific entries: system/rack
	  locator (type 204), NIC MAC information (type 209) and NIC iSCSI
	  MAC information (type 221).

2007-01-14  Jean Delvare  <khali@linux-fr.org>

	* vpddecode.c: Fix a rare warning.
	* biosdecode.c: Add support for the FJKEYINF entry point, which
	  contains data related to the "application panel" on Fujitsu
	  laptops.

2006-05-23  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Fix a recently introduced compilation error with
	  non-C99 compilers.
	* dmidecode.c: Check for short entries (less than 4 bytes), stop
	  with an error when one is encountered.

2006-05-13  Jean Delvare  <khali@linux-fr.org>

	* vpddecode.c, README: Drop the product name lookup table. It
	  was reported to be unreliable too many times, and was also
	  difficult to maintain.

2006-05-10  Jean Delvare  <khali@linux-fr.org>

	* dmidecode.c: Don't cast from u8* to dmi_header*, else
	  architectures which do not support unaligned memory accesses
	  may break. Instead, copy the members individually. That's a
	  bit slower, but that's also safer and we only need to do it
	  once per DMI entry, so it's not time critical. So far, we
	  were using a trick to later work around the unaligned memory
	  access, but the compiler would                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         